.ENABLE SUBSTITUTION ; ; Generate a monthly report of System use by users ; .; Current rates are: .; CPU-TIME $1.00/min (.0002777*ticks) .; CONNECT-TIME $4.00/hour (.001111*secs) .; DIRECTIVES $0.01/thousand (.00001*number) .; QIOS $0.05/thousand (.00005*number) .; .PARSE "--" DAY MON YR .SETS YEAR "19"+YR .ASK CURR Do you want a display of the System from the current file .IFF CURR .GOTO 10 .GOSUB DAT .SETS INFILE "ACNTRN.SYS" .GOTO 50 .DAT: .; Convert a three letter MON to the full name MONTH .; .SETS MONTH "?????" .IF MON = "JAN" .SETS MONTH "January" .IF MON = "FEB" .SETS MONTH "February" .IF MON = "MAR" .SETS MONTH "March" .IF MON = "APR" .SETS MONTH "April" .IF MON = "MAY" .SETS MONTH "May" .IF MON = "JUN" .SETS MONTH "June" .IF MON = "JUL" .SETS MONTH "July" .IF MON = "AUG" .SETS MONTH "August" .IF MON = "SEP" .SETS MONTH "September" .IF MON = "OCT" .SETS MONTH "October" .IF MON = "NOV" .SETS MONTH "November" .IF MON = "DEC" .SETS MONTH "December" .RETURN .10: .DISABLE LOWERCASE .PARSE "--" DAY MON YR .SETS DEF MON+YR .ASKS [::DEF] FIL Enter the .SYS filename to report from .ENABLE LOWERCASE .PARSE FIL ".;" NAM EXT VER .IF EXT = "" .SETS EXT "SYS" .SETS INFILE NAM+"."+EXT .IF VER NE "" .SETS INFILE INFILE+";"+VER .21: .DISABLE LOWERCASE .PARSE INFILE "." NAME REST .SETS MON NAME[1:3] .TEST NAME .SETN J .SETN I J-1 .SETS YR NAME[I:J] .SETS DEF MON+","+YR .ASKS [6:6:DEF] CMD Enter the month, year to report on .ENABLE LOWERCASE .PARSE CMD "," MON YR .SETS YEAR "19"+YR .GOSUB DAT .50: .ASK US Use existing ACCOUNT.DOM indexed file for processing .ASK KP Keep the files for later processing .OPEN 'MON''YR'.BAT .DATA $JOB/TIME:(5:0) MONTH .DATA $SET DEFAULT [1,6] .IFF US .DATA $SHOW ACCOUNT/DATATRIEVE:'INFILE' ACCOUNT.SEQ .IFF US .DATA $DEF @ACCOUNT.DEF .IFF US .DATA $IFL ACCOUNT.DOM=ACCOUNT.SEQ .DATA $DTR @'MON''YR'USR.CMD .DATA $DTR @'MON''YR'SYS.CMD .IFF KP .DATA $DELETE 'MON''YR'%%%.CMD;*,ACCOUNT.DOM;*,ACCOUNT.SEQ;* .DATA $R MONRED .DATA $EOJ .CLOSE .OPEN 'MON''YR'USR.CMD .DATA SET DICTIONARY SY:QUERY.DIC .DATA DEFINE DOMAIN RESOURCE-info USING RESOURCE-INFO-REC ON ACCOUNT.DOM; .DATA DEFINE RECORD RESOURCE-INFO-REC USING .DATA .DATA 02 ACCOUNTING-TRANSACTION-REC. .DATA 10 CODE PIC IS 99 .DATA USAGE IS COMP. .DATA 10 REMAINDER PIC IS X(118). .DATA .DATA ! .DATA ! P R I N T R E C O R D .DATA ! .DATA .DATA 10 PRT REDEFINES REMAINDER. .DATA .DATA 15 PRTUID PIC IS X(10). .DATA 15 PRTTID PIC IS X(6). .DATA 15 PRTACC PIC IS 9(4) .DATA USAGE IS COMP. .DATA 15 PRTDAT USAGE IS DATE .DATA EDIT-STRING IS DD-MMM-YY. .DATA 15 PRTHUR PIC IS 9(2) .DATA USAGE IS COMP. .DATA 15 PRTMIN PIC IS 9(2) .DATA USAGE IS COMP. .DATA 15 PRTSEC PIC IS 9(2) .DATA USAGE IS COMP. .DATA 15 PRTJOB PIC IS X(10). .DATA 15 PRTPGS PIC IS 9(4)V .DATA USAGE IS COMP .DATA EDIT-STRING IS Z(3)9.. .DATA 15 PRTFLS PIC IS 9(4)V .DATA USAGE IS COMP .DATA EDIT-STRING IS Z(3)9.. .DATA 15 PRTDEV PIC IS X(6). .DATA 15 PRTFMS PIC IS 9(3)V .DATA USAGE IS COMP .DATA EDIT-STRING IS Z(2)9.. .DATA 15 PRTPRI PIC IS 9(3)V .DATA USAGE IS COMP .DATA EDIT-STRING IS Z(2)9.. .DATA ; .DATA DEFINE DOMAIN PAGES .DATA USING PAGE-REC ON PAGES.DAT; .DATA DEFINE RECORD PAGE-REC .DATA USING .DATA 01 PAGE-REC. .DATA 05 GROUP PIC 9999 USAGE IS COMP. .DATA 05 TPAGES PIC 9999V USAGE IS COMP .DATA EDIT-STRING IS ZZZ9.. .DATA ; .DATA DEFINE FILE FOR PAGES; .DATA READY PAGES WRITE .DATA READY RESOURCE-INFO .DATA FIND RESOURCE-INFO WITH CODE=16 AND PRTDAT CONTAINING "'MON'" SORTED BY PRTACC .DATA DECLARE A PIC 9999V USAGE IS COMP EDIT-STRING IS ZZZ9.. .DATA DECLARE OLDACC PIC 9999 USAGE IS COMP. .DATA SELECT 1 .DATA OLDACC=PRTACC .DATA A=0 .DATA FOR CURRENT BEGIN .DATA IF PRTACC = OLDACC THEN A=A + PRTPGS .DATA IF PRTACC NE OLDACC THEN BEGIN .DATA STORE PAGES USING BEGIN .DATA GROUP=OLDACC .DATA TPAGES=A END .DATA A=PRTPGS .DATA OLDACC=PRTACC .DATA END .DATA END .DATA ! finish off the last record .DATA STORE PAGES USING BEGIN .DATA GROUP=OLDACC .DATA TPAGES=A END .DATA FINISH RESOURCE-INFO; .DATA DELETE RESOURCE-INFO; .DATA DELETE RESOURCE-INFO-REC; .DATA DEFINE DOMAIN ACC .DATA USING ACC-REC ON ACC.DAT; .DATA DEFINE RECORD ACC-REC .DATA USING .DATA 01 ACC-REC. .DATA 05 ACCOUNT-REC. .DATA 10 CODE PIC IS 99 USAGE IS COMP. .DATA 10 FILLER PIC X(10). .DATA 10 DEV PIC IS X(6). .DATA 10 ACN PIC IS 9(4) USAGE IS COMP. .DATA 10 UIC PIC IS X(10). .DATA 10 UIC-PARTS REDEFINES UIC. .DATA 15 BRACKET PIC X. .DATA 15 GROUP PIC 999. .DATA 15 COMMA PIC X. .DATA 15 MEMBER PIC 999. .DATA 15 END-BRACKET PIC XX. .DATA 10 LID USAGE IS DATE. .DATA 10 LIH PIC 99 USAGE IS COMP. .DATA 10 LIM PIC 99 USAGE IS COMP. .DATA 10 LIS PIC 99 USAGE IS COMP. .DATA 10 LOD USAGE IS DATE. .DATA 10 LOH PIC 99 USAGE IS COMP. .DATA 10 LOM PIC 99 USAGE IS COMP. .DATA 10 LOS PIC 99 USAGE IS COMP. .DATA 10 BID USAGE IS DATE. .DATA 10 BIH PIC 99 USAGE IS COMP. .DATA 10 BIM PIC 99 USAGE IS COMP. .DATA 10 BIS PIC 99 USAGE IS COMP. .DATA 10 CT PIC 9(12) COMPUTED BY (0.0000001*LOD)-(0.0000001*LID). .DATA 10 CPU PIC 9(9) USAGE IS COMP. .DATA 10 TAC PIC 999 USAGE IS COMP. .DATA 10 TRN PIC 9(9) USAGE IS COMP. .DATA 10 DIR PIC 9(9) USAGE IS COMP. .DATA 10 QIO PIC 9(9) USAGE IS COMP. .DATA 10 FILLER PIC X(30). .DATA 10 CHARGES PIC 99999V99 COMPUTED BY (CPU*0.0002777)+ .DATA (DIR*0.00001)+(QIO*0.00005)+(CT*0.0011111). .DATA 05 PGS PIC 9999 USAGE IS COMP. .DATA ; .DATA DEFINE FILE FOR ACC; .DATA READY ACC WRITE .DATA READY CHARGE .DATA FOR CHARGE WITH CODE=2 AND LID CONTAINING "'MON'" AND UIC NE "[000,000]" .DATA STORE ACC USING BEGIN .DATA ACCOUNT-REC=CHARGE-REC .DATA IF CHARGE-REC.LOH=0 AND CHARGE-REC.LOM=0 AND CHARGE-REC.LOS=0 THEN BEGIN .DATA LOD=CHARGE-REC.BID .DATA LOH=CHARGE-REC.BIH .DATA LOM=CHARGE-REC.BIM .DATA LOS=CHARGE-REC.BIS .DATA END .DATA PGS=0 END .DATA FOR PAGES .DATA FOR ACC WITH GROUP EQ PAGE-REC.GROUP MODIFY USING BEGIN .DATA PGS=TPAGES END .DATA FINISH PAGES; .DATA FINISH CHARGE; .DATA FIND ACC SORTED BY GROUP,MEMBER,LID .DATA REPORT CURRENT ON MONTHLY.LST .DATA SET COLUMNS-PAGE=132 .DATA SET REPORT-NAME="User Account Information for 'MONTH', 'YEAR'" .DATA AT TOP OF GROUP PRINT NEW-SECTION .DATA AT TOP OF PAGE PRINT REPORT-HEADER,COL 26, .DATA UIC VIA ACCOUNT-NAMES-TABLE(-) USING X(50), .DATA SKIP 2,COL 31,"LOGIN-TIME",COL 45,"CONNECT-TIME", .DATA COL 60,"CPU-TIME",COL 75,"DIRECTIVES",COL 92,"QIOS",COLUMN-HEADER .DATA PRINT COL 1,UIC, .DATA COL 12,DEV("DEV"), .DATA COL 20,LID("LOGIN-DATE"), .DATA COL 32,LIH("HH"),COL 34,":",COL 35,LIM("MM"),COL 37,":", .DATA COL 38,LIS("SS"), .DATA COL 45,CT/3600("(hours)") USING ZZZZZ9.99, .DATA COL 60,CPU/3600("(minutes)") USING ZZZZZ9.99, .DATA COL 75,DIR/1000("(X1000)") USING ZZZZZ9.99, .DATA COL 90,QIO/1000("(X1000)") USING ZZZZZ9.99, .DATA COL 105,CHARGES("CHARGES") USING $$$$$9.99 .DATA AT TOP OF MEMBER NEW-SECTION .DATA AT BOTTOM OF GROUP PRINT SKIP 2, .DATA COL 1,"System totals : ", .DATA COL 1,"Total number of logins =", .DATA COL 40,COUNT USING ZZZZZ9.00, .DATA SKIP, .DATA COL 1,"Total connect time =", .DATA COL 40,TOTAL(CT)/3600 USING ZZZZZ9.99, .DATA COL 50," (hours) @ $4.00/hour", .DATA SKIP, .DATA COL 1,"Total CPU time used =", .DATA COL 40,TOTAL(CPU)/3600 USING ZZZZZ9.99, .DATA COL 50," (minutes) @ $1.00/min", .DATA SKIP, .DATA COL 1,"Total directives =", .DATA COL 40,TOTAL(DIR)/1000 USING ZZZZZ9.99, .DATA COL 50," (X 1000) @ $0.01/thousand", .DATA SKIP, .DATA COL 1,"Total QIO requests =", .DATA COL 40,TOTAL(QIO)/1000 USING ZZZZZ9.99, .DATA COL 50," (X 1000) @ $0.05/thousand", .DATA SKIP, .DATA COL 1,"Total pages printed =", .DATA COL 40,PGS USING ZZZZZ9.00, .DATA COL 50," (pages) @ $0.05/page", .DATA SKIP, .DATA COL 1,"Total system charges =", .DATA COL 40,TOTAL(CHARGES)+PGS*1/20 USING $$$$$9.99 .DATA END-REPORT .CLOSE .OPEN 'MON''YR'SYS.CMD .DATA SET DICTIONARY SY:QUERY.DIC .DATA READY PAGES .DATA FIND PAGES .DATA DECLARE TOTPGS PIC 9(6). .DATA TOTPGS=TOTAL(TPAGES) .DATA DELETE PAGES; .DATA DELETE PAGE-REC; .DATA READY ACC .DATA FIND ACC WITH LID CONTAINING "'MON'" SORTED BY UIC .DATA REPORT CURRENT ON 'MON''YR'SYS.RPT .DATA SET COLUMNS-PAGE=98 .DATA SET REPORT-NAME="System Account Information for 'MONTH', 'YEAR'" .DATA AT BOTTOM OF UIC PRINT COL 1,UIC("UIC"), .DATA COL 12,COUNT("LOGINS") USING ZZZZZZ, .DATA COL 20,TOTAL(CT)/3600("CON-HRS") USING ZZZZZZ9.99, .DATA COL 32,TOTAL(CPU)/3600("CPU-MIN") USING ZZZZZZ9.99, .DATA COL 44,TOTAL(DIR)/1000("DIR-X1000") USING ZZZZZZ9.99, .DATA COL 56,TOTAL(QIO)/1000("QIO-X1000") USING ZZZZZZ9.99, .DATA COL 70,PGS("PAGES") USING ZZZZZZ9.99, .DATA COL 80,TOTAL(CHARGES)+PGS/20("CHARGES") USING $$$$$$$9.99 .DATA AT BOTTOM OF REPORT PRINT SKIP 3, .DATA COL 1,"System wide totals for 'MONTH', 'YEAR'", SKIP 2, .DATA COL 1,"Grand total number of logins =", .DATA COL 40,COUNT USING ZZZZZZ9.00, .DATA SKIP, .DATA COL 1,"Grand total connect time =", .DATA COL 40,TOTAL(CT)/3600 USING ZZZZZZ9.99, .DATA COL 50," (hours)", .DATA SKIP, .DATA COL 1,"Grand total CPU time used =", .DATA COL 40,TOTAL(CPU)/3600 USING ZZZZZZ9.99, .DATA COL 50," (minutes)", .DATA SKIP, .DATA COL 1,"Grand total Directives used =", .DATA COL 40,TOTAL(DIR)/1000 USING ZZZZZZ9.99, .DATA COL 50," (X 1000)", .DATA SKIP, .DATA COL 1,"Grand total QIO requests =", .DATA COL 40,TOTAL(QIO)/1000 USING ZZZZZZ9.99, .DATA COL 50," (X 1000)", .DATA SKIP, .DATA COL 1,"Grand total pages =", .DATA COL 40,TOTPGS USING ZZZZZZ9.99, .DATA SKIP, .DATA COL 1,"Grand total charges =", .DATA COL 40,TOTAL(CHARGES)+TOTPGS/20 USING $$$$$$9.99 .DATA END-REPORT .DATA DELETE ACC; .DATA DELETE ACC-REC; .DATA FINISH .DATA DEFINE DOMAIN SYSTEM-INFO .DATA USING SYSTEM-INFO-REC ON ACCOUNT.DOM; .DATA DEFINE RECORD SYSTEM-INFO-REC .DATA USING .DATA 03 ACCOUNTING-TRANSACTION-REC. .DATA 10 CODE PIC IS 99 .DATA USAGE IS COMP. .DATA 10 REMAINDER PIC IS X(118). .DATA 10 INV REDEFINES REMAINDER. .DATA 15 INVDEV PIC IS X(6). .DATA 15 INVDAT USAGE IS DATE .DATA EDIT-STRING IS DD-MMM-YY. .DATA 15 INVHUR PIC IS 9(2) .DATA USAGE IS COMP. .DATA 15 INVMIN PIC IS 9(2) .DATA USAGE IS COMP. .DATA 15 INVSEC PIC IS 9(2) .DATA USAGE IS COMP. .DATA 15 INVTXT PIC IS X(14). .DATA 15 INVUIC PIC IS X(10). .DATA ; .DATA ! .DATA ! .DATA READY SYSTEM-INFO .DATA ! .DATA FIND SYSTEM-INFO WITH CODE=10 AND INVDAT CONTAINING "'MON'" .DATA SORT BY INVDEV,INVDAT,INVHUR,INVMIN,INVSEC .DATA REPORT CURRENT ON INVALID.LST .DATA .DATA SET REPORT-NAME="I N V A L I D L O G I N T R A N S A C T I O N" .DATA AT TOP OF PAGE PRINT REPORT-HEADER,COL 22, "TIME",COLUMN-HEADER .DATA PRINT INVDEV("DEV"),COL 10, .DATA INVDAT("DATE"),COL 20,INVHUR("HH"),COL 22,":",COL 23,INVMIN("MM"), .DATA COL 25,":",COL 26,INVSEC("SS"),INVTXT("NAME"),INVUIC("UIC") .DATA AT BOTTOM OF INVDEV PRINT SKIP .DATA AT BOTTOM OF PAGE PRINT SKIP,COL 1,"TRANSACTION CODE =",COL 20,CODE(-) .DATA END-REPORT .DATA DELETE SYSTEM-INFO; .DATA DELETE SYSTEM-INFO-REC; .CLOSE .70: SET DEFAULT [1,1] .IFF KP SUBMIT/NOLOG [1,6]'MON''YR'.BAT/DELETE .IFT KP SUBMIT/NOLOG [1,6]'MON''YR'.BAT SET DEFAULT [1,6] ;DEL PAGES.DAT;*,ACC.DAT;*,ACC.CMD;* ;P MONTHLY.LST ;DEL MONTHLY.LST;*