Google
 

Trailing-Edge - PDP-10 Archives - BB-4172H-BM - 4-1-sources/usag20.cbl
There are 17 other files named usag20.cbl in the archive. Click here to see a list.
IDENTIFICATION DIVISION.

PROGRAM-ID. USAG20.	V3(4).
AUTHOR. BAHUIZENGA
DATE-WRITTEN. JULY, 1977.
REMARKS.

	EDIT HISTORY:

	EDIT 4 - 1-DEC-77/BAH ROUNDING WAS NOT BEING DONE WHEN NEEDED.
		TCO #1886

	EDIT 3 - 7-NOV-77/BAH DISK USAGE REPORT WAS NOT COMPLETE DUE TO
		AN EDITING ERROR. TCO #1884

	EDIT 2 - 31-OCT-77 /BAH DISK USAGE REPORT IS CONFUSING. ADD ANOTHER
		COLUMN GIVING THE AVERAGE NUMBER OF FILES ACCOUNTED FOR.
		AVERAGE NO. OF FILES = SUM OF FILES / NO. OF RECORDS READ
		TCO #1882

	COPYRIGHT (C) 1978, 1979 BY
	DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.


	THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
	ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
	INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
	COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
	OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
	TRANSFERRED.


	THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
	AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
	CORPORATION.

	DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
	SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.



	INPUT:	USAGE.OUT (DEFAULT)
	OUTPUT:	USAGE.RPT (DEFAULT)
	ASSEMBLY:  USES LIBRARY FILE USAG20.LIB.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
	'NAME' IS NAME-DETAIL;
	'ACCOUNT' IS ACCOUNT-DETAIL
	'DNAME' IS DISK-NAME-DETAIL
	'DACCOUNT' IS DISK-ACCOUNT-DETAIL.

INPUT-OUTPUT SECTION.
FILE-CONTROL.
	SELECT IN-FILE
		ASSIGN  TO DSK
		RECORDING MODE IS ASCII.
	SELECT OUT-FILE
		ASSIGN TO DSK
		RECORDING MODE IS ASCII.
	SELECT SORT-USAGE
		ASSIGN TO DSK, DSK, DSK.
	SELECT CHARGE-FILE
		ASSIGN TO DSK
		RECORDING MODE IS ASCII.
DATA DIVISION.
FILE SECTION.

FD IN-FILE VALUE OF ID IS IN-FILE-NAME-EXT
	DATA RECORDS ARE IN-RECORD, ENTRY-HEADER-RECORD, TOPS20-USER-ID-RECORD,
		RESTART-RECORD, SESSION-RECORD-1, DATE-TIME-CHANGE-RECORD,
		USAGE-FILE-HEADER-RECORD, INPUT-SPOOLER-RECORD, OUTPUT-SPOOLER-RECORD,
		DISK-DIRECTORY-RECORD, DISK-ACCOUNT-RECORD.
01 IN-RECORD COPY USAG20.

FD OUT-FILE VALUE OF ID IS OUT-FILE-NAME-EXT
	REPORTS ARE NAMES, ACCOUNTS, DNAMES, DACCOUNTS.
01 OUT-RECORD DISPLAY-7 PIC X(137).

FD CHARGE-FILE VALUE OF ID IS 'USAG20CHG'.
01 CHARGE-RECORD PIC X(80).

SD SORT-USAGE
	DATA RECORDS ARE SYSTEM-SORT-RECORD, DISK-SORT-RECORD.
01 SYSTEM-SORT-RECORD.
	02 NAME-SORT			PIC X(39).
	02 REMARK-SORT			PIC X(39).
	02 ACCOUNT-SORT			PIC X(39).
	02 CONNECT-SORT			PIC 9(6)V99.
	02 RUNTIME-SORT			PIC 9(7)V9.
	02 SPOOLER-INPUT-SORT		PIC 9(7).
	02 SPOOLER-OUTPUT-SORT		PIC 9(7).
	02 CHARGE-SORT			PIC 9(9)V99.

01 DISK-SORT-RECORD.
	02 DIRECTORY-SORT		PIC X(39).
	02 STRUCTURE-SORT		PIC X(39).
	02 FILLER			PIC X(39).
	02 DISK-PAGE-SORT		PIC 9(8).
	02 FILE-SORT			PIC 9(5).
	02 FILLER			PIC X(28).
WORKING-STORAGE SECTION.

01 LETTER-MONTH-RECORD USAGE IS DISPLAY-7
		VALUE 'JanFebMarAprMayJunJulAugSepOctNovDec'.
	02 LETTER-MONTH PIC X(3) OCCURS 12 TIMES.

01 IN-FILE-NAME-EXT.
	02 IN-FILE-NAME		PIC X(6).
	02 IN-FILE-EXT		PIC X(3).

01 OUT-FILE-NAME-EXT.
	02 OUT-FILE-NAME	PIC X(6).
	02 OUT-FILE-EXT		PIC X(3).

01 THIS-DATE.
	02 TD-YEAR		PIC 99.
	02 TD-MONTH		PIC 99.
	02 TD-DAY		PIC 99.
	02 TD-HOUR		PIC 99.
	02 TD-MIN		PIC 99.
	02 FILLER		PIC 99.
77 TD-MMM USAGE IS DISPLAY-7	PIC X(3).

01 WS-END-DATE-TIME.
	02 WS-END-YY1			PIC 99.
	02 WS-EDT.
		03 WS-END-YY			PIC 99.
		03 WS-END-MON			PIC 99.
		03 WS-END-DD			PIC 99.
		03 WS-END-HH			PIC 99.
		03 WS-END-MIN			PIC 99.
		03 FILLER			PIC XX.
77 WS-END-MMM USAGE IS DISPLAY-7		PIC X(3).

01 WS-START-DATE-TIME.
	02 WS-START-YY1			PIC XX.
	02 WS-SDT.
		03 WS-START-YY			PIC 99.
		03 WS-START-MON			PIC 99.
		03 WS-START-DD			PIC 99.
		03 WS-START-HH			PIC 99.
		03 WS-START-MIN			PIC 99.
		03 FILLER			PIC XX.
77 WS-START-MMM USAGE IS DISPLAY-7		PIC X(3).

01 DEFINED-ENTRIES			PIC 9(4).
	88 KNOWN-ENTRIES	VALUES ARE 0001 THRU 0004, 0007 THRU 0009.

01 WS-CHARGE-1.
	02 WS-C1-DOLLAR		PIC 999.
	02 WS-C1-CENTS		PIC 99.
01 X REDEFINES WS-CHARGE-1.
	02 WS-CHARGE		PIC 999V99.

77 WS-COMMAND		PIC X(15).
77 WS-REPORT		PIC X(8).
77 WS-SYSTEM-NAME		PIC X(39).
77 WS-SORT			PIC X.
77 WS-CHARGE-CODE		PIC X(6).
77 WS-DOLLAR			PIC XXX.
77 WS-CENTS			PIC XX.
77 WS-COMMENT			PIC X(66).

77 WS-AVGPAGE			PIC 9(7)V9.
77 WS-RECORDS-READ		PIC 9(3).
77 WS-PAGE-NUMBER		PIC 9(9).
77 WS-STRUCTURE			PIC X(39).
77 WS-DIRECTORY			PIC X(39).
77 WS-ACCOUNT			PIC X(39).

01 WS-ALL-CHARGES.
	02 WS-SESSION-CONNECT		PIC 9(3)V99.
	02 WS-SESSION-RUNTIME		PIC 9(3)V99.
	02 WS-CARDS			PIC 9(3)V99.
	02 WS-CARD-RUNTIME		PIC 9(3)V99.
	02 WS-PAGES			PIC 9(3)V99.
	02 WS-PAGE-RUNTIME		PIC 9(3)V99.
	02 WS-DISK-PAGES		PIC 9(3)V99.
REPORT SECTION.

RD NAMES
	CODE NAME-DETAIL
	CONTROLS ARE FINAL, NAME-SORT, ACCOUNT-SORT, REMARK-SORT
	PAGE LIMIT IS 120,
		LAST DETAIL 58.

01 TYPE PH; LINE 1, NEXT GROUP PLUS 1 USAGE IS DISPLAY-7.
	02	COLUMN 1	PIC X(9) VALUE 'Run Date:'.
	02	COLUMN 12	PIC Z9 SOURCE TD-DAY.
	02	COLUMN 14	PIC X VALUE '-'.
	02	COLUMN 15	PIC X(3) SOURCE TD-MMM.
	02	COLUMN 18	PIC X VALUE '-'.
	02	COLUMN 19	PIC 99 SOURCE TD-YEAR.
	02	COLUMN 22	PIC 99 SOURCE TD-HOUR.
	02	COLUMN 24	PIC X VALUE ':'.
	02	COLUMN 25	PIC 99 SOURCE TD-MIN.
	02	COLUMN 47	PIC X(39) SOURCE WS-SYSTEM-NAME.
	02 LINE PLUS 1
		COLUMN 1	PIC X(4) VALUE 'User'.
	02	COLUMN 6	PIC X(39) SOURCE NAME-SORT.
	02	COLUMN 53	PIC X(27) VALUE 'TOPS-20 System USAGE Report'.
	02 LINE PLUS 1
		COLUMN 39	PIC X(19) VALUE 'USAGE Entries From:'.
	02	COLUMN 59	PIC 99 SOURCE WS-START-DD.
	02	COLUMN 61	PIC X VALUE '-'.
	02	COLUMN 62	PIC X(3) SOURCE WS-START-MMM.
	02	COLUMN 65	PIC X VALUE '-'.
	02	COLUMN 66	PIC 99 SOURCE WS-START-YY.
	02	COLUMN 69	PIC 99 SOURCE WS-START-HH.
	02	COLUMN 71	PIC X VALUE ':'.
	02	COLUMN 72	PIC 99 SOURCE WS-START-MIN.
	02	COLUMN 75	PIC X(3) VALUE 'to:'.
	02	COLUMN 79	PIC 99 SOURCE WS-END-DD.
	02	COLUMN 81	PIC X VALUE '-'.
	02	COLUMN 82	PIC X(3) SOURCE WS-END-MMM.
	02	COLUMN 85	PIC X VALUE'-'.
	02	COLUMN 86	PIC 99 SOURCE WS-END-YY.
	02	COLUMN 89	PIC 99 SOURCE WS-END-HH.
	02	COLUMN 91	PIC X VALUE ':'.
	02	COLUMN 92	PIC 99 SOURCE WS-END-MIN.
	02 LINE PLUS 2
		COLUMN 53	PIC X(7) VALUE 'Connect'.
	02	COLUMN 73	PIC X(5) VALUE 'Input'.
	02	COLUMN 81	PIC X(6) VALUE 'Output'.
	02 LINE PLUS 1
		COLUMN 43	PIC X(5) VALUE 'Total'.
	02	COLUMN 54	PIC X(4) VALUE 'Time'.
	02	COLUMN 63	PIC X(7) VALUE 'Runtime'.
	02	COLUMN 72	PIC X(7) VALUE 'Spooler'.
	02	COLUMN 80	PIC X(7) VALUE 'Spooler'.
	02 LINE PLUS 1
		COLUMN 15	PIC X(7) VALUE 'Account'.
	02	COLUMN 42	PIC X(6) VALUE 'Charge'.
	02	COLUMN 53	PIC X(7) VALUE '(Hours)'.
	02	COLUMN 64	PIC X(6) VALUE '(Sec.)'.
	02	COLUMN 73	PIC X(5) VALUE 'Cards'.
	02	COLUMN 81	PIC X(5) VALUE 'Pages'.
	02	COLUMN 88	PIC X(6) VALUE 'Remark'.
	02 LINE PLUS 1
		COLUMN 15	PIC X(7) VALUE '-------'.
	02	COLUMN 40	PIC X(11) VALUE '-----------'.
	02	COLUMN 52	PIC X(9) VALUE '---------'.
	02	COLUMN 62	PIC X(9) VALUE '---------'.
	02	COLUMN 72	PIC X(7) VALUE '-------'.
	02	COLUMN 80	PIC X(7) VALUE '-------'.
	02	COLUMN 88	PIC X(6) VALUE '------'.



01 TYPE DETAIL.
	02			PIC Z(7)9.99 SOURCE CHARGE-SORT.
	02			PIC Z(6).ZZ SOURCE CONNECT-SORT BLANK WHEN ZERO.
	02			PIC Z(7).Z SOURCE RUNTIME-SORT BLANK WHEN ZERO.
	02			PIC Z(10) SOURCE SPOOLER-INPUT-SORT.
	02			PIC Z(7) SOURCE SPOOLER-OUTPUT-SORT.



01 TYPE CF REMARK-SORT; LINE PLUS 1; USAGE IS DISPLAY-7.
	02	COLUMN 1	PIC X(39) SOURCE ACCOUNT-SORT.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(6).ZZ SUM CONNECT-SORT BLANK WHEN ZERO.
	02	COLUMN 62	PIC Z(7).Z SUM RUNTIME-SORT BLANK WHEN ZERO.
	02	COLUMN 72	PIC Z(7) SUM SPOOLER-INPUT-SORT.
	02	COLUMN 80	PIC Z(7) SUM SPOOLER-OUTPUT-SORT.
	02	COLUMN 88	PIC X(39) SOURCE REMARK-SORT.


01 TYPE CF ACCOUNT-SORT; LINE PLUS 1; NEXT GROUP IS PLUS 2; USAGE IS DISPLAY-7.
	02	COLUMN 40	PIC X(11) VALUE '-----------'.
	02	COLUMN 52	PIC X(9) VALUE '---------'.
	02	COLUMN 62	PIC X(9) VALUE '---------'.
	02	COLUMN 72	PIC X(7) VALUE '-------'.
	02	COLUMN 80	PIC X(7) VALUE '-------'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(28) VALUE
					'* * * Account Subtotal * * *'.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(6).ZZ SUM CONNECT-SORT BLANK WHEN ZERO.
	02	COLUMN 62	PIC Z(7).Z SUM RUNTIME-SORT BLANK WHEN ZERO.
	02	COLUMN 72	PIC Z(7) SUM SPOOLER-INPUT-SORT.
	02	COLUMN 80	PIC Z(7) SUM SPOOLER-OUTPUT-SORT.
01 TYPE CF NAME-SORT LINE PLUS 1; NEXT GROUP NEXT PAGE USAGE IS DISPLAY-7.
	02	COLUMN 40	PIC X(11) VALUE '==========='.
	02	COLUMN 52	PIC X(9) VALUE '========='.
	02	COLUMN 62	PIC X(9) VALUE '========='.
	02	COLUMN 72	PIC X(7) VALUE '======='.
	02	COLUMN 80	PIC X(7) VALUE'======='.
	02 LINE PLUS 1
		COLUMN 1	PIC X(18) VALUE '* * * Totals * * *'.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(6).ZZ SUM CONNECT-SORT BLANK WHEN ZERO.
	02	COLUMN 62	PIC Z(7).Z SUM RUNTIME-SORT BLANK WHEN ZERO.
	02	COLUMN 72	PIC Z(7) SUM SPOOLER-INPUT-SORT.
	02	COLUMN 80	PIC Z(7) SUM SPOOLER-OUTPUT-SORT.
	02 LINE PLUS 2
		COLUMN 1	PIC X(30) VALUE '******************************'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(24) VALUE '* End of Report for User'.
	02	COLUMN 26	PIC X(39) SOURCE NAME-SORT.
	02 LINE PLUS 1
		COLUMN 1	PIC X(30) VALUE '******************************'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(6) VALUE 'Rates:'.
	02 LINE PLUS 1
		COLUMN 5	PIC X(22) VALUE 'Session Connect Time ='.
	02	COLUMN 28	PIC $ZZZ.99 SOURCE WS-SESSION-CONNECT.
	02	COLUMN 35	PIC X(6) VALUE '/Hour,'.
	02	COLUMN 43	PIC X(24) VALUE 'Session Runtime        ='.
	02	COLUMN 68	PIC $ZZZ.99 SOURCE WS-SESSION-RUNTIME.
	02	COLUMN 75	PIC X(7) VALUE '/Second'.
	02 LINE PLUS 1
		COLUMN 5	PIC X(22) VALUE 'Input Spooler Unit   ='.
	02	COLUMN 28	PIC $ZZZ.99 SOURCE WS-CARDS.
	02	COLUMN 35	PIC X(6) VALUE '/Card,'.
	02	COLUMN 43	PIC X(24) VALUE 'Input Spooler Runtime  ='.
	02	COLUMN 68	PIC $ZZZ.99 SOURCE WS-CARD-RUNTIME.
	02	COLUMN 75	PIC X(7) VALUE '/Second'.
	02 LINE PLUS 1
		COLUMN 5	PIC X(22) VALUE 'Output Spooler Unit  ='.
	02	COLUMN 28	PIC $ZZZ.99 SOURCE WS-PAGES.
	02	COLUMN 35	PIC X(6) VALUE '/Page,'.
	02	COLUMN 43	PIC X(24) VALUE 'Output Spooler Runtime ='.
	02	COLUMN 68	PIC $ZZZ.99 SOURCE WS-PAGE-RUNTIME.
	02	COLUMN 75	PIC X(7) VALUE '/Second'.
RD ACCOUNTS
	CODE ACCOUNT-DETAIL
	CONTROLS ARE FINAL, ACCOUNT-SORT, NAME-SORT, REMARK-SORT
	PAGE LIMIT IS 120,
		LAST DETAIL 58.

01 TYPE PH; LINE 1, NEXT GROUP PLUS 1 USAGE IS DISPLAY-7.
	02	COLUMN 1	PIC X(9) VALUE 'Run Date:'.
	02	COLUMN 12	PIC Z9 SOURCE TD-DAY.
	02	COLUMN 14	PIC X VALUE '-'.
	02	COLUMN 15	PIC X(3) SOURCE TD-MMM.
	02	COLUMN 18	PIC X VALUE '-'.
	02	COLUMN 19	PIC 99 SOURCE TD-YEAR.
	02	COLUMN 22	PIC 99 SOURCE TD-HOUR.
	02	COLUMN 24	PIC X VALUE ':'.
	02	COLUMN 25	PIC 99 SOURCE TD-MIN.
	02	COLUMN 47	PIC X(39) SOURCE WS-SYSTEM-NAME.
	02 LINE PLUS 1
		COLUMN 1	PIC X(7) VALUE 'Account'.
	02	COLUMN 9	PIC X(39) SOURCE ACCOUNT-SORT.
	02	COLUMN 56	PIC X(20) VALUE 'TOPS-20 USAGE Report'.
	02 LINE PLUS 1
		COLUMN 39	PIC X(19) VALUE 'USAGE Entries From:'.
	02	COLUMN 59	PIC 99 SOURCE WS-START-DD.
	02	COLUMN 61	PIC X VALUE '-'.
	02	COLUMN 62	PIC X(3) SOURCE WS-START-MMM.
	02	COLUMN 65	PIC X VALUE '-'.
	02	COLUMN 66	PIC 99 SOURCE WS-START-YY.
	02	COLUMN 69	PIC 99 SOURCE WS-START-HH.
	02	COLUMN 71	PIC X VALUE ':'.
	02	COLUMN 72	PIC 99 SOURCE WS-START-MIN.
	02	COLUMN 75	PIC X(3) VALUE 'to:'.
	02	COLUMN 79	PIC 99 SOURCE WS-END-DD.
	02	COLUMN 81	PIC X VALUE '-'.
	02	COLUMN 82	PIC X(3) SOURCE WS-END-MMM.
	02	COLUMN 85	PIC X VALUE'-'.
	02	COLUMN 86	PIC 99 SOURCE WS-END-YY.
	02	COLUMN 89	PIC 99 SOURCE WS-END-HH.
	02	COLUMN 91	PIC X VALUE ':'.
	02	COLUMN 92	PIC 99 SOURCE WS-END-MIN.
	02 LINE PLUS 2
		COLUMN 53	PIC X(7) VALUE 'Connect'.
	02	COLUMN 73	PIC X(5) VALUE 'Input'.
	02	COLUMN 81	PIC X(6) VALUE 'Output'.
	02 LINE PLUS 1
		COLUMN 43	PIC X(5) VALUE 'Total'.
	02	COLUMN 54	PIC X(4) VALUE 'Time'.
	02	COLUMN 63	PIC X(7) VALUE 'Runtime'.
	02	COLUMN 72	PIC X(7) VALUE 'Spooler'.
	02	COLUMN 80	PIC X(7) VALUE 'Spooler'.
	02 LINE PLUS 1
		COLUMN 17	PIC X(4) VALUE 'Name'.
	02	COLUMN 42	PIC X(6) VALUE 'Charge'.
	02	COLUMN 53	PIC X(7) VALUE '(Hours)'.
	02	COLUMN 64	PIC X(6) VALUE '(Sec.)'.
	02	COLUMN 73	PIC X(5) VALUE 'Units'.
	02	COLUMN 81	PIC X(5) VALUE 'Units'.
	02	COLUMN 88	PIC X(6) VALUE 'Remark'.
	02 LINE PLUS 1
		COLUMN 17	PIC X(4) VALUE '----'.
	02	COLUMN 40	PIC X(11) VALUE '-----------'.
	02	COLUMN 52	PIC X(9) VALUE '---------'.
	02	COLUMN 62	PIC X(9) VALUE '---------'.
	02	COLUMN 72	PIC X(7) VALUE '-------'.
	02	COLUMN 80	PIC X(7) VALUE '-------'.
	02	COLUMN 88	PIC X(6) VALUE '------'.



01 TYPE DETAIL.
	02			PIC Z(7)9.99 SOURCE CHARGE-SORT.
	02			PIC Z(6).ZZ SOURCE CONNECT-SORT BLANK WHEN ZERO.
	02			PIC Z(7).Z SOURCE RUNTIME-SORT BLANK WHEN ZERO.
	02			PIC Z(10) SOURCE SPOOLER-INPUT-SORT.
	02			PIC Z(7) SOURCE SPOOLER-OUTPUT-SORT.



01 TYPE CF REMARK-SORT; LINE PLUS 1.
	02	COLUMN 1	PIC X(39) SOURCE NAME-SORT.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(6).ZZ SUM CONNECT-SORT BLANK WHEN ZERO.
	02	COLUMN 62	PIC Z(7).Z SUM RUNTIME-SORT BLANK WHEN ZERO.
	02	COLUMN 72	PIC Z(7) SUM SPOOLER-INPUT-SORT.
	02	COLUMN 80	PIC Z(7) SUM SPOOLER-OUTPUT-SORT.
	02	COLUMN 88	PIC X(39) SOURCE REMARK-SORT.


01 TYPE CF NAME-SORT; LINE PLUS 1; NEXT GROUP IS PLUS 2; USAGE IS DISPLAY-7.
	02	COLUMN 40	PIC X(11) VALUE '-----------'.
	02	COLUMN 52	PIC X(9) VALUE '---------'.
	02	COLUMN 62	PIC X(9) VALUE '---------'.
	02	COLUMN 72	PIC X(7) VALUE '-------'.
	02	COLUMN 80	PIC X(7) VALUE '-------'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(25) VALUE
					'* * * User Subtotal * * *'.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(6).ZZ SUM CONNECT-SORT BLANK WHEN ZERO.
	02	COLUMN 62	PIC Z(7).Z SUM RUNTIME-SORT BLANK WHEN ZERO.
	02	COLUMN 72	PIC Z(7) SUM SPOOLER-INPUT-SORT.
	02	COLUMN 80	PIC Z(7) SUM SPOOLER-OUTPUT-SORT.
01 TYPE CF ACCOUNT-SORT LINE PLUS 1; NEXT GROUP NEXT PAGE USAGE IS DISPLAY-7.
	02	COLUMN 40	PIC X(11) VALUE '==========='.
	02	COLUMN 52	PIC X(9) VALUE '========='.
	02	COLUMN 62	PIC X(9) VALUE '========='.
	02	COLUMN 72	PIC X(7) VALUE '======='.
	02	COLUMN 80	PIC X(7) VALUE'======='.
	02 LINE PLUS 1
		COLUMN 1	PIC X(18) VALUE '* * * Totals * * *'.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(6).ZZ SUM CONNECT-SORT BLANK WHEN ZERO.
	02	COLUMN 62	PIC Z(7).Z SUM RUNTIME-SORT BLANK WHEN ZERO.
	02	COLUMN 72	PIC Z(7) SUM SPOOLER-INPUT-SORT.
	02	COLUMN 80	PIC Z(7) SUM SPOOLER-OUTPUT-SORT.
	02 LINE PLUS 2
		COLUMN 1	PIC X(30) VALUE '******************************'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(27) VALUE '* End of Report for Account'.
	02	COLUMN 29	PIC X(39) SOURCE ACCOUNT-SORT.
	02 LINE PLUS 1
		COLUMN 1	PIC X(30) VALUE '******************************'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(6) VALUE 'Rates:'.
	02 LINE PLUS 1
		COLUMN 5	PIC X(22) VALUE 'Session Connect Time ='.
	02	COLUMN 28	PIC $ZZZ.99 SOURCE WS-SESSION-CONNECT.
	02	COLUMN 35	PIC X(6) VALUE '/Hour,'.
	02	COLUMN 43	PIC X(24) VALUE 'Session Runtime        ='.
	02	COLUMN 68	PIC $ZZZ.99 SOURCE WS-SESSION-RUNTIME.
	02	COLUMN 75	PIC X(7) VALUE '/Second'.
	02 LINE PLUS 1
		COLUMN 5	PIC X(22) VALUE 'Input Spooler Unit   ='.
	02	COLUMN 28	PIC $ZZZ.99 SOURCE WS-CARDS.
	02	COLUMN 35	PIC X(6) VALUE '/Card,'.
	02	COLUMN 43	PIC X(24) VALUE 'Input Spooler Runtime  ='.
	02	COLUMN 68	PIC $ZZZ.99 SOURCE WS-CARD-RUNTIME.
	02	COLUMN 75	PIC X(7) VALUE '/Second'.
	02 LINE PLUS 1
		COLUMN 5	PIC X(22) VALUE 'Output Spooler Unit  ='.
	02	COLUMN 28	PIC $ZZZ.99 SOURCE WS-PAGES.
	02	COLUMN 35	PIC X(6) VALUE '/Page,'.
	02	COLUMN 43	PIC X(24) VALUE 'Output Spooler Runtime ='.
	02	COLUMN 68	PIC $ZZZ.99 SOURCE WS-PAGE-RUNTIME.
	02	COLUMN 75	PIC X(7) VALUE '/Second'.
RD DNAMES
	CODE DISK-NAME-DETAIL
	CONTROLS ARE FINAL, DIRECTORY-SORT, ACCOUNT-SORT, STRUCTURE-SORT
	PAGE LIMIT IS 120,
		LAST DETAIL 58.

01 TYPE PH; LINE 1, NEXT GROUP PLUS 1 USAGE IS DISPLAY-7.
	02	COLUMN 1	PIC X(9) VALUE 'Run Date:'.
	02	COLUMN 12	PIC Z9 SOURCE TD-DAY.
	02	COLUMN 14	PIC X VALUE '-'.
	02	COLUMN 15	PIC X(3) SOURCE TD-MMM.
	02	COLUMN 18	PIC X VALUE '-'.
	02	COLUMN 19	PIC 99 SOURCE TD-YEAR.
	02	COLUMN 22	PIC 99 SOURCE TD-HOUR.
	02	COLUMN 24	PIC X VALUE ':'.
	02	COLUMN 25	PIC 99 SOURCE TD-MIN.
	02	COLUMN 47	PIC X(39) SOURCE WS-SYSTEM-NAME.
	02 LINE PLUS 1
		COLUMN 1	PIC X(9) VALUE 'Directory'.
	02	COLUMN 11	PIC X(39) SOURCE DIRECTORY-SORT.
	02	COLUMN 54	PIC X(30) VALUE 'TOPS-20 Directory USAGE Report'.
	02 LINE PLUS 1
		COLUMN 48	PIC X(16) VALUE 'USAGE Entries on'.
	02	COLUMN 66	PIC 99 SOURCE WS-START-DD.
	02	COLUMN 68	PIC X VALUE '-'.
	02	COLUMN 69	PIC X(3) SOURCE WS-START-MMM.
	02	COLUMN 72	PIC X VALUE '-'.
	02	COLUMN 73	PIC 99 SOURCE WS-START-YY.
	02	COLUMN 76	PIC 99 SOURCE WS-START-HH.
	02	COLUMN 78	PIC X VALUE ':'.
	02	COLUMN 79	PIC 99 SOURCE WS-START-MIN.
	02 LINE PLUS 2
		COLUMN 43	PIC X(5) VALUE 'Total'.
	02	COLUMN 54	PIC X(4) VALUE 'Disk'.
	02	COLUMN 63	PIC X(6) VALUE 'Number'.
	02	COLUMN 72	PIC X(8) VALUE 'Avg. No.'.
	02	COLUMN 82	PIC X(9) VALUE 'Structure'.
	02 LINE PLUS 1
		COLUMN 15	PIC X(7) VALUE 'Account'.
	02	COLUMN 42	PIC X(6) VALUE 'Charge'.
	02	COLUMN 54	PIC X(5) VALUE 'Pages'.
	02	COLUMN 62	PIC X(8) VALUE 'of Files'.
	02	COLUMN 72	PIC X(8) VALUE 'of Pages'.
	02	COLUMN 84	PIC X(4) VALUE 'Name'.
	02 LINE PLUS 1
		COLUMN 15	PIC X(7) VALUE '-------'.
	02	COLUMN 40	PIC X(11) VALUE '-----------'.
	02	COLUMN 52	PIC X(9) VALUE '---------'.
	02	COLUMN 62	PIC X(9) VALUE '---------'.
	02	COLUMN 72	PIC X(9) VALUE '---------'.
	02	COLUMN 82	PIC X(9) VALUE '---------'.
01 TYPE DETAIL.
	02			PIC $Z(7)9.99 SOURCE CHARGE-SORT.
	02			PIC Z(9) SOURCE DISK-PAGE-SORT.
	02			PIC Z(9) SOURCE FILE-SORT.


01 TYPE CF STRUCTURE-SORT; LINE PLUS 1.
	02	COLUMN 1	PIC X(39) SOURCE ACCOUNT-SORT.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(9) SUM DISK-PAGE-SORT.
	02	COLUMN 62	PIC Z(9) SUM FILE-SORT.
	02	COLUMN 72	PIC Z(7).Z SOURCE WS-AVGPAGE BLANK WHEN ZERO.
	02	COLUMN 82	PIC X(7) SOURCE STRUCTURE-SORT.

01 TYPE CF ACCOUNT-SORT; LINE PLUS 1; NEXT GROUP IS PLUS 2; USAGE IS DISPLAY-7.
	02	COLUMN 40	PIC X(11) VALUE '-----------'.
	02	COLUMN 52	PIC X(9) VALUE '---------'.
	02	COLUMN 62	PIC X(9) VALUE '---------'.
	02	COLUMN 72	PIC X(9) VALUE '---------'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(28) VALUE
					'* * * Account Subtotal * * *'.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(9) SUM DISK-PAGE-SORT.
	02	COLUMN 62	PIC Z(9) SUM FILE-SORT.
	02	COLUMN 72	PIC Z(7).Z SUM WS-AVGPAGE BLANK WHEN ZERO.
01 TYPE CF DIRECTORY-SORT LINE PLUS 1; NEXT GROUP NEXT PAGE USAGE IS DISPLAY-7.
	02	COLUMN 40	PIC X(11) VALUE '==========='.
	02	COLUMN 52	PIC X(9) VALUE '========='.
	02	COLUMN 62	PIC X(9) VALUE '========='.
	02	COLUMN 72	PIC X(9) VALUE '========='.
	02 LINE PLUS 1
		COLUMN 1	PIC X(18) VALUE '* * * Totals * * *'.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(9) SUM DISK-PAGE-SORT.
	02	COLUMN 62	PIC Z(9) SUM FILE-SORT.
	02	COLUMN 72	PIC Z(7).Z SUM WS-AVGPAGE BLANK WHEN ZERO.
	02 LINE PLUS 2
		COLUMN 1	PIC X(30) VALUE '******************************'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(29) VALUE '* End of Report for Directory'.
	02	COLUMN 31	PIC X(39) SOURCE DIRECTORY-SORT.
	02 LINE PLUS 1
		COLUMN 1	PIC X(30) VALUE '******************************'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(6) VALUE 'Rates:'.
	02 LINE PLUS 1
		COLUMN 5	PIC X(12) VALUE 'Disk Usage ='.
	02	COLUMN 18	PIC $$$.99 SOURCE WS-DISK-PAGES.
	02	COLUMN 24	PIC X(5) VALUE '/Page'.
RD DACCOUNTS
	CODE DISK-ACCOUNT-DETAIL
	CONTROLS ARE FINAL, ACCOUNT-SORT, DIRECTORY-SORT, STRUCTURE-SORT
	PAGE LIMIT IS 120,
		LAST DETAIL 58.

01 TYPE PH; LINE 1, NEXT GROUP PLUS 1 USAGE IS DISPLAY-7.
	02	COLUMN 1	PIC X(9) VALUE 'Run Date:'.
	02	COLUMN 12	PIC Z9 SOURCE TD-DAY.
	02	COLUMN 14	PIC X VALUE '-'.
	02	COLUMN 15	PIC X(3) SOURCE TD-MMM.
	02	COLUMN 18	PIC X VALUE '-'.
	02	COLUMN 19	PIC 99 SOURCE TD-YEAR.
	02	COLUMN 22	PIC 99 SOURCE TD-HOUR.
	02	COLUMN 24	PIC X VALUE ':'.
	02	COLUMN 25	PIC 99 SOURCE TD-MIN.
	02	COLUMN 47	PIC X(39) SOURCE WS-SYSTEM-NAME.
	02 LINE PLUS 1
		COLUMN 1	PIC X(7) VALUE 'Account'.
	02	COLUMN 9	PIC X(39) SOURCE ACCOUNT-SORT.
	02	COLUMN 54	PIC X(30) VALUE 'TOPS-20 Directory USAGE Report'.
	02 LINE PLUS 1
		COLUMN 48	PIC X(16) VALUE 'USAGE Entries on'.
	02	COLUMN 66	PIC 99 SOURCE WS-START-DD.
	02	COLUMN 68	PIC X VALUE '-'.
	02	COLUMN 69	PIC X(3) SOURCE WS-START-MMM.
	02	COLUMN 72	PIC X VALUE '-'.
	02	COLUMN 73	PIC 99 SOURCE WS-START-YY.
	02	COLUMN 76	PIC 99 SOURCE WS-START-HH.
	02	COLUMN 78	PIC X VALUE ':'.
	02	COLUMN 79	PIC 99 SOURCE WS-START-MIN.
	02 LINE PLUS 2
		COLUMN 43	PIC X(5) VALUE 'Total'.
	02	COLUMN 54	PIC X(4) VALUE 'Disk'.
	02	COLUMN 63	PIC X(6) VALUE 'Number'.
	02	COLUMN 72	PIC X(8) VALUE 'Avg. No.'.
	02	COLUMN 82	PIC X(9) VALUE 'Structure'.
	02 LINE PLUS 1
		COLUMN 12	PIC X(9) VALUE 'Directory'.
	02	COLUMN 42	PIC X(6) VALUE 'Charge'.
	02	COLUMN 54	PIC X(5) VALUE 'Pages'.
	02	COLUMN 62	PIC X(8) VALUE 'of Files'.
	02	COLUMN 72	PIC X(8) VALUE 'of Pages'.
	02	COLUMN 84	PIC X(4) VALUE 'Name'.
	02 LINE PLUS 1
		COLUMN 12	PIC X(9) VALUE '---------'.
	02	COLUMN 40	PIC X(11) VALUE '-----------'.
	02	COLUMN 52	PIC X(9) VALUE '---------'.
	02	COLUMN 62	PIC X(9) VALUE '---------'.
	02	COLUMN 72	PIC X(9) VALUE '---------'.
	02	COLUMN 82	PIC X(9) VALUE '---------'.



01 TYPE DETAIL.
	02			PIC $Z(7)9.99 SOURCE CHARGE-SORT.
	02			PIC Z(9) SOURCE DISK-PAGE-SORT.
	02			PIC Z(9) SOURCE FILE-SORT.


01 TYPE CF STRUCTURE-SORT; LINE PLUS 1.
	02	COLUMN 1	PIC X(39) SOURCE DIRECTORY-SORT.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(9) SUM DISK-PAGE-SORT.
	02	COLUMN 62	PIC Z(9) SUM FILE-SORT.
	02	column 72	pic z(7).z source ws-avgPAGE blank when zero.
	02	COLUMN 82	PIC X(7) SOURCE STRUCTURE-SORT.

01 TYPE CF DIRECTORY-SORT; LINE PLUS 1; NEXT GROUP IS PLUS 2; USAGE IS DISPLAY-7.
	02	COLUMN 40	PIC X(11) VALUE '-----------'.
	02	COLUMN 52	PIC X(9) VALUE '---------'.
	02	COLUMN 62	PIC X(9) VALUE '---------'.
	02	COLUMN 72	PIC X(9) VALUE '---------'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(30) VALUE
					'* * * Directory Subtotal * * *'.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(9) SUM DISK-PAGE-SORT.
	02	COLUMN 62	PIC Z(9) SUM FILE-SORT.
	02	column 72	pic z(7).z sum ws-avgPAGE blank when zero.
01 TYPE CF ACCOUNT-SORT LINE PLUS 1; NEXT GROUP NEXT PAGE USAGE IS DISPLAY-7.
	02	COLUMN 40	PIC X(11) VALUE '==========='.
	02	COLUMN 52	PIC X(9) VALUE '========='.
	02	COLUMN 62	PIC X(9) VALUE '========='.
	02	COLUMN 72	PIC X(9) VALUE '========='.
	02 LINE PLUS 1
		COLUMN 1	PIC X(18) VALUE '* * * Totals * * *'.
	02	COLUMN 39	PIC $Z(7)9.99 SUM CHARGE-SORT.
	02	COLUMN 52	PIC Z(9) SUM DISK-PAGE-SORT.
	02	COLUMN 62	PIC Z(9) SUM FILE-SORT.
	02	column 72	pic z(7).z sum ws-avgPAGE blank when zero.
	02 LINE PLUS 2
		COLUMN 1	PIC X(30) VALUE '******************************'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(27) VALUE '* End of Report for Account'.
	02	COLUMN 31	PIC X(39) SOURCE ACCOUNT-SORT.
	02 LINE PLUS 1
		COLUMN 1	PIC X(30) VALUE '******************************'.
	02 LINE PLUS 1
		COLUMN 1	PIC X(6) VALUE 'Rates:'.
	02 LINE PLUS 1
		COLUMN 5	PIC X(12) VALUE 'Disk Usage ='.
	02	COLUMN 18	PIC $$$.99 SOURCE WS-DISK-PAGES.
	02	COLUMN 24	PIC X(5) VALUE '/Page'.
PROCEDURE DIVISION.

	DISPLAY 'TOPS20 ACCOUNTING SYSTEM'.
	PERFORM GET-CHARGES THRU GET-CHARGES-EXIT.
MAIN-LOOP.
	MOVE 19 TO WS-END-YY1, WS-START-YY1.
	MOVE TODAY TO THIS-DATE, WS-SDT.
	MOVE ZEROES TO WS-EDT.
	MOVE LETTER-MONTH (TD-MONTH) TO TD-MMM.
	PERFORM ASK-FOR-INPUT-FILE.
	PERFORM ASK-FOR-REPORT.
	PERFORM ASK-FOR-SORT.
	PERFORM ASK-FOR-OUTPUT-FILE.
	PERFORM PROCESS-REPORT.
	GO TO MAIN-LOOP.


************

GET-CHARGES.
	OPEN INPUT CHARGE-FILE.
	MOVE ZEROES TO WS-ALL-CHARGES.
GET-CHARGES-1.
	READ CHARGE-FILE AT END CLOSE CHARGE-FILE
				GO TO GET-CHARGES-EXIT.
	UNSTRING CHARGE-RECORD DELIMITED BY SPACE OR '.' OR '/' OR ALL SPACES
		INTO WS-CHARGE-CODE, WS-DOLLAR, WS-CENTS, WS-COMMENT.
	MOVE WS-DOLLAR TO WS-C1-DOLLAR.
	MOVE WS-CENTS TO WS-C1-CENTS.
	IF WS-CHARGE-CODE = 'SESCON'
		MOVE WS-CHARGE TO WS-SESSION-CONNECT
	    ELSE IF WS-CHARGE-CODE = 'SESRUN'
		MOVE WS-CHARGE TO WS-SESSION-RUNTIME
	    ELSE IF WS-CHARGE-CODE = 'PAGRUN'
		MOVE WS-CHARGE TO WS-PAGE-RUNTIME
	    ELSE IF WS-CHARGE-CODE = 'PAGPAG'
		MOVE WS-CHARGE TO WS-PAGES
	    ELSE IF WS-CHARGE-CODE = 'CRDCRD'
		MOVE WS-CHARGE TO WS-CARDS
	    ELSE IF WS-CHARGE-CODE = 'CRDRUN'
		MOVE WS-CHARGE TO WS-CARD-RUNTIME
	    ELSE IF WS-CHARGE-CODE = 'DSKPAG'
		MOVE WS-CHARGE TO WS-DISK-PAGES.
	GO TO GET-CHARGES-1.

GET-CHARGES-EXIT.
	EXIT.
ASK-FOR-INPUT-FILE.
	DISPLAY 'Read USAGE file: ' WITH NO ADVANCING.
	ACCEPT WS-COMMAND.
	IF WS-COMMAND = '?' PERFORM DISPLAY-HELP-INPUT
		GO TO ASK-FOR-INPUT-FILE
	    ELSE IF WS-COMMAND = 'EXIT' STOP RUN
	   ELSE IF WS-COMMAND = SPACES MOVE 'USAGE OUT' TO IN-FILE-NAME-EXT
	   ELSE UNSTRING WS-COMMAND DELIMITED BY '.' OR ALL ' ' INTO IN-FILE-NAME,
		IN-FILE-EXT ON OVERFLOW DISPLAY ' Input file error: ', WS-COMMAND
		GO TO ASK-FOR-INPUT-FILE.
	DISPLAY ' Input file name: ' IN-FILE-NAME, '.', IN-FILE-EXT.

ASK-FOR-REPORT.
	DISPLAY 'Report by [System usage (S) or Disk usage (D)]: ' WITH NO ADVANCING.
	ACCEPT WS-COMMAND.
	IF WS-COMMAND = '?' PERFORM DISPLAY-HELP-REPORT
		GO TO ASK-FOR-REPORT
	   ELSE IF WS-COMMAND = SPACES MOVE 'S' TO WS-REPORT
	   ELSE IF WS-COMMAND = 'EXIT' STOP RUN
	    ELSE MOVE WS-COMMAND TO WS-REPORT.

ASK-FOR-SORT.
	DISPLAY 'Sort by [Name (N) or Account (A)]: ' WITH NO ADVANCING.
	ACCEPT WS-COMMAND.
	IF WS-COMMAND = '?' PERFORM DISPLAY-HELP-SORT
		GO TO ASK-FOR-SORT
	    ELSE IF WS-COMMAND = SPACES MOVE 'N' TO WS-SORT
	    ELSE IF WS-COMMAND = 'EXIT' STOP RUN
	    ELSE MOVE WS-COMMAND TO WS-SORT.

ASK-FOR-OUTPUT-FILE.
	DISPLAY 'Write to file: ' WITH NO ADVANCING.
	ACCEPT WS-COMMAND.
	IF WS-COMMAND = '?' PERFORM DISPLAY-HELP-OUTPUT
		GO TO ASK-FOR-OUTPUT-FILE
	   ELSE IF WS-COMMAND = SPACES MOVE 'USAGE RPT' TO OUT-FILE-NAME-EXT
	   ELSE IF WS-COMMAND = 'EXIT' STOP RUN
	   ELSE UNSTRING WS-COMMAND DELIMITED BY '.' OR ALL ' ' INTO OUT-FILE-NAME,
		OUT-FILE-EXT ON OVERFLOW DISPLAY 'Output file error: ', WS-COMMAND
		GO TO ASK-FOR-OUTPUT-FILE.
	DISPLAY ' Output file name: ', OUT-FILE-NAME, '.', OUT-FILE-EXT.

PROCESS-REPORT.
	IF WS-REPORT = 'S' AND WS-SORT = 'N' PERFORM REPORT-BY-SYSTEM-USAGE-NAME
	    ELSE IF WS-REPORT = 'S' AND WS-SORT = 'A'
		PERFORM REPORT-BY-SYSTEM-USAGE-ACCOUNT
	    ELSE IF WS-REPORT = 'D' AND WS-SORT = 'N'
		PERFORM REPORT-BY-DISK-NAME
	    ELSE IF WS-REPORT = 'D' AND WS-SORT = 'A'
		PERFORM REPORT-BY-DISK-ACCOUNT.
**********************************************************************
*	REPORT BY SYSTEM USAGE SORTED ON NAME SUBROUTINE SECTION                             
**********************************************************************


REPORT-BY-SYSTEM-USAGE-NAME.
	SORT SORT-USAGE
		ASCENDING KEY NAME-SORT, ACCOUNT-SORT, REMARK-SORT
		INPUT PROCEDURE IS REPORT-BY-SYSTEM-NAME-IN THRU REPORT-BY-SYSTEM-NAME-IN-EXIT
		OUTPUT PROCEDURE IS REPORT-BY-SYSTEM-NAME-OUT THRU REPORT-BY-SYSTEM-NAME-OUT-EXIT.

***********

REPORT-BY-SYSTEM-NAME-IN.
	OPEN INPUT IN-FILE.

RBNI-1.
	READ IN-FILE AT END CLOSE IN-FILE GO TO REPORT-BY-SYSTEM-NAME-IN-EXIT.
	MOVE ENTRY-TYPE TO DEFINED-ENTRIES.
	IF KNOWN-ENTRIES
		PERFORM MAKE-SYSTEM-SORT-RECORD.
	GO TO RBNI-1.

REPORT-BY-SYSTEM-NAME-IN-EXIT.
	EXIT.

**********


REPORT-BY-SYSTEM-NAME-OUT.
	OPEN OUTPUT OUT-FILE.
	INITIATE NAMES.
	MOVE LETTER-MONTH (WS-START-MON) TO WS-START-MMM.
	MOVE LETTER-MONTH (WS-END-MON) TO WS-END-MMM.
RBNO-1.
	RETURN SORT-USAGE AT END TERMINATE NAMES
		CLOSE OUT-FILE
		GO TO REPORT-BY-SYSTEM-NAME-OUT-EXIT.
	GENERATE NAMES.
	GO TO RBNO-1.

REPORT-BY-SYSTEM-NAME-OUT-EXIT.
	EXIT.

**********************************************************************
*	END OF REPORT BY SYSTEM USAGE SORTED ON NAME SUBROUTINE SECTION
**********************************************************************
**********************************************************************
*	REPORT BY SYSTEM USAGE SORTED ON ACCOUNT SUBROUTINE SECTION
**********************************************************************

REPORT-BY-SYSTEM-USAGE-ACCOUNT.
	SORT SORT-USAGE
		ASCENDING KEY ACCOUNT-SORT, NAME-SORT, REMARK-SORT
		INPUT PROCEDURE IS REPORT-BY-SACCOUNT-IN THRU
			REPORT-BY-SACCOUNT-IN-EXIT
		OUTPUT PROCEDURE IS REPORT-BY-SACCOUNT-OUT THRU
			REPORT-BY-SACCOUNT-OUT-EXIT.

***********

REPORT-BY-SACCOUNT-IN.
	OPEN INPUT IN-FILE.

RBAI-1.
	READ IN-FILE AT END CLOSE IN-FILE GO TO REPORT-BY-SACCOUNT-IN-EXIT.
	MOVE ENTRY-TYPE TO DEFINED-ENTRIES.
	IF KNOWN-ENTRIES PERFORM MAKE-SYSTEM-SORT-RECORD.
	GO TO RBAI-1.

REPORT-BY-SACCOUNT-IN-EXIT.
	EXIT.

************

REPORT-BY-SACCOUNT-OUT.
	OPEN OUTPUT OUT-FILE.
	INITIATE ACCOUNTS.
	MOVE LETTER-MONTH (WS-START-MON) TO WS-START-MMM.
	MOVE LETTER-MONTH (WS-END-MON) TO WS-END-MMM.
RBAO-1.
	RETURN SORT-USAGE AT END TERMINATE ACCOUNTS
		CLOSE OUT-FILE
		GO TO REPORT-BY-SACCOUNT-OUT-EXIT.
	GENERATE ACCOUNTS.
	GO TO RBAO-1.

REPORT-BY-SACCOUNT-OUT-EXIT.
	EXIT.

**********************************************************************
*	END OF REPORT BY SYSTEM USAGE SORTED ON ACCOUNT SUBROUTINE SECTION
**********************************************************************
**********************************************************************
*	COMMON SUBROUTINES USED BY REPORTS OF SYSTEM USAGE
**********************************************************************

MAKE-SYSTEM-SORT-RECORD.
	MOVE SPACES TO SYSTEM-SORT-RECORD.
	IF ENTRY-TYPE = '0002' OR '0003' PERFORM PROCESS-SESSION-ENTRY
			THRU PROCESS-SESSION-ENTRY-EXIT
	    ELSE IF ENTRY-TYPE = '0008' PERFORM PROCESS-OUTPUT-SPOOLER
		THRU PROCESS-OUTPUT-SPOOLER-EXIT
	    ELSE IF ENTRY-TYPE = '0007' PERFORM PROCESS-INPUT-SPOOLER
		THRU PROCESS-INPUT-SPOOLER-EXIT
	    ELSE IF ENTRY-TYPE = '0004' OR '0001' PERFORM PROCESS-HEADER-ENTRY
			THRU PROCESS-HEADER-ENTRY-EXIT.

************

PROCESS-SESSION-ENTRY.
	IF REC-SEQUENCE-NUMBER = '1' AND ENTRY-TYPE = '0002' OR '0003'
			PERFORM CHECK-RANGE-DATE-TIME
			READ IN-FILE
			AT END CLOSE IN-FILE GO TO PROCESS-SESSION-ENTRY-EXIT.
	IF REC-SEQUENCE-NUMBER = '2' AND ENTRY-TYPE = '0002' OR '0003'
		MOVE SR1-ACCOUNT-STRING TO ACCOUNT-SORT
		MOVE SR1-SESSION-REMARK TO REMARK-SORT
		COMPUTE RUNTIME-SORT ROUNDED = SR1-RUNTIME / 1000
		COMPUTE CONNECT-SORT ROUNDED = SR1-CONSOLE-CONNECT-TIME /3600
		PERFORM COMPUTE-SESSION-CHARGES
		READ IN-FILE AT END CLOSE IN-FILE GO TO PROCESS-SESSION-ENTRY-EXIT.
	IF REC-SEQUENCE-NUMBER = '3' AND ENTRY-TYPE = '0002' OR '0003'
		MOVE T20-USER-NAME TO NAME-SORT
	    ELSE DISPLAY 'Incomplete Session entry'.
	IF ACCOUNT-SORT = SPACES
		MOVE ' Unspecified Account' TO ACCOUNT-SORT.
	RELEASE SYSTEM-SORT-RECORD.

PROCESS-SESSION-ENTRY-EXIT.
	EXIT.


CHECK-RANGE-DATE-TIME.
	IF WS-END-DATE-TIME < EHR-DATE-TIME
		MOVE EHR-DATE-TIME TO WS-END-DATE-TIME.
	IF WS-START-DATE-TIME > EHR-DATE-TIME
		MOVE EHR-DATE-TIME TO WS-START-DATE-TIME.


COMPUTE-SESSION-CHARGES.
	COMPUTE CHARGE-SORT ROUNDED = CHARGE-SORT + RUNTIME-SORT * WS-SESSION-RUNTIME.
	COMPUTE CHARGE-SORT ROUNDED = CHARGE-SORT + CONNECT-SORT * WS-SESSION-CONNECT.

***********
***********
PROCESS-HEADER-ENTRY.
	IF REC-SEQUENCE-NUMBER = '1' AND ENTRY-TYPE = '0004' OR '0001'
			PERFORM CHECK-RANGE-DATE-TIME
			READ IN-FILE AT END
			CLOSE IN-FILE GO TO PROCESS-HEADER-ENTRY-EXIT.
	IF REC-SEQUENCE-NUMBER = '2' AND ENTRY-TYPE = '0004' OR '0001'
			MOVE RR-SYSTEM-NAME TO WS-SYSTEM-NAME.

PROCESS-HEADER-ENTRY-EXIT.
	EXIT.

************

PROCESS-OUTPUT-SPOOLER.
	IF REC-SEQUENCE-NUMBER = '1' AND ENTRY-TYPE = '0008'
		PERFORM CHECK-RANGE-DATE-TIME
		READ IN-FILE
			AT END CLOSE IN-FILE GO TO PROCESS-OUTPUT-SPOOLER-EXIT.
	IF REC-SEQUENCE-NUMBER = '2' AND ENTRY-TYPE = '0008'
		MOVE OSR-ACCOUNT-STRING TO ACCOUNT-SORT
		COMPUTE RUNTIME-SORT ROUNDED = OSR-RUNTIME / 1000
		MOVE OSR-OUTPUT-UNITS TO SPOOLER-OUTPUT-SORT
		PERFORM COMPUTE-OUTPUT-SPOOLER-CHARGES
		MOVE 'Output Spooler Charges' TO REMARK-SORT
		READ IN-FILE AT END CLOSE IN-FILE GO TO PROCESS-OUTPUT-SPOOLER-EXIT.
	IF REC-SEQUENCE-NUMBER = '3' AND ENTRY-TYPE = '0008'
		MOVE T20-USER-NAME TO NAME-SORT
	    ELSE DISPLAY 'Incomplete output spooler entry'.
	IF ACCOUNT-SORT = SPACES
		MOVE ' Unspecified Account' TO ACCOUNT-SORT.
	RELEASE SYSTEM-SORT-RECORD.

PROCESS-OUTPUT-SPOOLER-EXIT.
	EXIT.

COMPUTE-OUTPUT-SPOOLER-CHARGES.
	COMPUTE CHARGE-SORT = CHARGE-SORT + SPOOLER-OUTPUT-SORT * WS-PAGES.
	COMPUTE CHARGE-SORT ROUNDED = CHARGE-SORT + RUNTIME-SORT * WS-PAGE-RUNTIME.

************
************

PROCESS-INPUT-SPOOLER.
	IF REC-SEQUENCE-NUMBER = '1' AND ENTRY-TYPE = '0007'
		PERFORM CHECK-RANGE-DATE-TIME
		READ IN-FILE
			AT END CLOSE IN-FILE GO TO PROCESS-INPUT-SPOOLER-EXIT.
	IF REC-SEQUENCE-NUMBER = '2' AND ENTRY-TYPE = '0007'
		MOVE ISR-ACCOUNT-STRING TO ACCOUNT-SORT
		COMPUTE RUNTIME-SORT ROUNDED = ISR-RUNTIME / 1000
		MOVE ISR-CARDS-READ TO SPOOLER-INPUT-SORT
		MOVE 'Input Spooler Charges' TO REMARK-SORT
		PERFORM COMPUTE-INPUT-SPOOLER-CHARGES
		READ IN-FILE AT END CLOSE IN-FILE GO TO PROCESS-INPUT-SPOOLER-EXIT.
	IF REC-SEQUENCE-NUMBER = '3' AND ENTRY-TYPE = '0007'
		MOVE T20-USER-NAME TO NAME-SORT
	    ELSE DISPLAY 'Incomplete input spooler entry'.
	IF ACCOUNT-SORT = SPACES
		MOVE ' Unspecified Account' TO ACCOUNT-SORT.
	RELEASE SYSTEM-SORT-RECORD.

PROCESS-INPUT-SPOOLER-EXIT.
	EXIT.

COMPUTE-INPUT-SPOOLER-CHARGES.
	COMPUTE CHARGE-SORT = CHARGE-SORT + SPOOLER-INPUT-SORT * WS-CARDS.
	COMPUTE CHARGE-SORT ROUNDED = CHARGE-SORT + RUNTIME-SORT * WS-CARD-RUNTIME.

**********************************************************************
*	END OF COMMON SUBROUTINES USED BY REPORTS OF SYSTEM USAGE
**********************************************************************
**********************************************************************
*	REPORT BY DISK USAGE SORTED ON DIRECTORY SUBROUTINE SECTION
**********************************************************************

REPORT-BY-DISK-NAME.
	SORT SORT-USAGE
		ASCENDING KEY DIRECTORY-SORT, ACCOUNT-SORT, STRUCTURE-SORT
		INPUT PROCEDURE IS REPORT-BY-DISK-NAME-IN THRU
			REPORT-BY-DISK-NAME-IN-EXIT
		OUTPUT PROCEDURE IS REPORT-BY-DISK-NAME-OUT THRU
			REPORT-BY-DISK-NAME-OUT-EXIT.

*************

REPORT-BY-DISK-NAME-IN.
	OPEN INPUT IN-FILE.

RBDNI-1.
	READ IN-FILE AT END CLOSE IN-FILE
		GO TO REPORT-BY-DISK-NAME-IN-EXIT.
	IF ENTRY-TYPE = '0009'
		PERFORM MAKE-DISK-SORT-RECORD
	    ELSE IF ENTRY-TYPE = '0001' OR '0004'
		PERFORM PROCESS-HEADER-ENTRY THRU PROCESS-HEADER-ENTRY-EXIT.
	GO TO RBDNI-1.

REPORT-BY-DISK-NAME-IN-EXIT.
	EXIT.

************

REPORT-BY-DISK-NAME-OUT.
	OPEN OUTPUT OUT-FILE.
	INITIATE DNAMES.
	MOVE LETTER-MONTH (WS-START-MON) TO WS-START-MMM.
	MOVE SPACES TO WS-STRUCTURE, WS-DIRECTORY, WS-ACCOUNT.
	MOVE ZEROES TO WS-AVGPAGE, WS-PAGE-NUMBER, WS-RECORDS-READ.

RBDNO-1.
	RETURN SORT-USAGE AT END TERMINATE DNAMES
		CLOSE OUT-FILE
		GO TO REPORT-BY-DISK-NAME-OUT-EXIT.
	PERFORM GET-FILE-AVERAGE.
	GENERATE DNAMES.
	GO TO RBDNO-1.

REPORT-BY-DISK-NAME-OUT-EXIT.
	EXIT.

**********************************************************************
*	END OF REPORT BY DISK USAGE SORTED ON NAME SUBROUTINE SECTION
**********************************************************************
********************************************************************
*	REPORT BY DISK USAGE SORTED ON ACCOUNT SUBROUTINE SECTION
**********************************************************************

REPORT-BY-DISK-ACCOUNT.
	SORT SORT-USAGE
		ASCENDING KEY ACCOUNT-SORT, DIRECTORY-SORT, STRUCTURE-SORT
		INPUT PROCEDURE IS REPORT-BY-DACCOUNT-IN THRU
			REPORT-BY-DACCOUNT-IN-EXIT
		OUTPUT PROCEDURE IS REPORT-BY-DACCOUNT-OUT THRU
			REPORT-BY-DACCOUNT-OUT-EXIT.

*************

REPORT-BY-DACCOUNT-IN.
	OPEN INPUT IN-FILE.

RBDAI-1.
	READ IN-FILE AT END CLOSE IN-FILE
		GO TO REPORT-BY-DACCOUNT-IN-EXIT.
	IF ENTRY-TYPE = '0009'
		PERFORM MAKE-DISK-SORT-RECORD
	    ELSE IF ENTRY-TYPE = '0001' OR '0004'
		PERFORM PROCESS-HEADER-ENTRY THRU PROCESS-HEADER-ENTRY-EXIT.
	GO TO RBDAI-1.

REPORT-BY-DACCOUNT-IN-EXIT.
	EXIT.

************

REPORT-BY-DACCOUNT-OUT.
	OPEN OUTPUT OUT-FILE.
	INITIATE DACCOUNTS.
	MOVE LETTER-MONTH (WS-START-MON) TO WS-START-MMM.
	MOVE SPACES TO WS-STRUCTURE, WS-DIRECTORY, WS-ACCOUNT.
	MOVE ZEROES TO WS-AVGPAGE, WS-PAGE-NUMBER, WS-RECORDS-READ.

RBDAO-1.
	RETURN SORT-USAGE AT END TERMINATE DACCOUNTS
		CLOSE OUT-FILE
		GO TO REPORT-BY-DACCOUNT-OUT-EXIT.
	PERFORM GET-FILE-AVERAGE.
	GENERATE DACCOUNTS.
	GO TO RBDAO-1.

REPORT-BY-DACCOUNT-OUT-EXIT.
	EXIT.

**********************************************************************
*	END OF REPORT BY DISK USAGE SORTED ON ACCOUNT SUBROUTINE SECTION
**********************************************************************
**********************************************************************
*	COMMON SUBROUTINES USED BY REPORTS OF DISK USAGE
**********************************************************************

MAKE-DISK-SORT-RECORD.
	MOVE SPACES TO DISK-SORT-RECORD.
	IF REC-SEQUENCE-NUMBER = '1' AND ENTRY-TYPE = '0009'
		PERFORM CHECK-DISK-DATE-TIME
		READ IN-FILE AT END CLOSE IN-FILE
	    ELSE IF REC-SEQUENCE-NUMBER = '2' AND ENTRY-TYPE = '0009'
		READ IN-FILE AT END CLOSE IN-FILE
	    ELSE IF REC-SEQUENCE-NUMBER = '3' AND ENTRY-TYPE = '0009'
		MOVE DAR-ACCOUNT-STRING TO ACCOUNT-SORT
		MOVE DAR-PPN-DIRECTORY TO DIRECTORY-SORT
		MOVE DAR-ACTUAL-DISK TO DISK-PAGE-SORT
		MOVE DAR-FILE-NUMBER TO FILE-SORT
		MOVE DAR-STRUCTURE-NAME TO STRUCTURE-SORT
		PERFORM COMPUTE-DISK-CHARGES
		PERFORM CHECK-FOR-SPACES
		RELEASE DISK-SORT-RECORD.

************

CHECK-FOR-SPACES.
	IF ACCOUNT-SORT = SPACES
		MOVE ' UNSPECIFIED ACCOUNT' TO ACCOUNT-SORT.

CHECK-DISK-DATE-TIME.
	IF WS-START-DATE-TIME > EHR-DATE-TIME
		MOVE EHR-DATE-TIME TO WS-START-DATE-TIME.

COMPUTE-DISK-CHARGES.
	COMPUTE CHARGE-SORT = CHARGE-SORT + DISK-PAGE-SORT * WS-DISK-PAGES.

GET-FILE-AVERAGE.
	IF WS-STRUCTURE NOT = STRUCTURE-SORT
			OR WS-DIRECTORY NOT = DIRECTORY-SORT
			OR WS-ACCOUNT NOT = ACCOUNT-SORT
		MOVE STRUCTURE-SORT TO WS-STRUCTURE
		MOVE DIRECTORY-SORT TO WS-DIRECTORY
		MOVE ACCOUNT-SORT TO WS-ACCOUNT
		COMPUTE WS-AVGPAGE ROUNDED = WS-PAGE-NUMBER / WS-RECORDS-READ
		MOVE 1 TO WS-RECORDS-READ
		MOVE DISK-PAGE-SORT TO WS-PAGE-NUMBER
	    ELSE ADD 1 TO WS-RECORDS-READ
		ADD DISK-PAGE-SORT TO WS-PAGE-NUMBER.

**********************************************************************
*	END OF COMMON SUBROUTINES USED BY REPORTS OF DISK USAGE
**********************************************************************
************************************************************************
*	HELP SUBROUTINES
************************************************************************

DISPLAY-HELP-INPUT.
	DISPLAY 'Type file name  of  input  file  containing  USAGE  entries.'.
	DISPLAY 'Default is USAGE.OUT.'.
	PERFORM DISPLAY-EXIT-HELP.

DISPLAY-HELP-OUTPUT.
	DISPLAY 'Type file name of new output file.  Default is USAGE.RPT.'.
	PERFORM DISPLAY-EXIT-HELP.

DISPLAY-HELP-REPORT.
	DISPLAY 'Type S for system usage  report.   Type  D  for  disk  usage'.
	DISPLAY 'report.  Default is S.'.
	PERFORM DISPLAY-EXIT-HELP.


DISPLAY-HELP-SORT.
	DISPLAY 'Type N if reports are  broken  down  by  name.   Type  A  if'.
	DISPLAY 'reports are broken down by account.  Default is N.'.
	PERFORM DISPLAY-EXIT-HELP.


DISPLAY-EXIT-HELP.
	DISPLAY 'Type EXIT to return to monitor mode.  Type ?   to  get  this'.
	DISPLAY 'help message.'.