C**************************************************************** C C PROGRAM SRP C C S Y S T E M R E P O R T I N G P R O G R A M C C THIS PROGRAM READS THE "KERN??.ACL" FILE AND PRODUCES C A ONE PAGE SUMMARY DETAILING SYSTEM USAGE ON A 1/2 C HOUR BASIS. C C ?? = MONTH CODE 1 THROUGH 12. C C 3 MODES OF OPERATION ARE AVAILABLE..... C C A) >SRP 5 [ALL OR UP] C -THIS WILL PRODUCE A SUMMARY PAGE FOR EACH DAY C IN MONTH "5"(MAY). ON DAYS THE SYSTEM WASN'T C UP THERE WILL BE NO REPORT. C -IF "ALL" WAS SELECTED, A SINGLE PAGE WILL C PRINTED SHOWING THE MONTH AVERAGE CALCULATED C BY DIVIDING THE SUM OF ALL ACTIVITY FOR EACH C 1/2 HOUR PERIOD BY THE NUMBER OF DAYS FROM THE C FIRST 'KERN' ENTRY TO THE LAST IN THE MONTH C -IF "UP" WAS SPECIFIED, THE SAME SUMMING AS C "ALL" IS PERFORMED EXCEPT 'DOWN' PERIODS ARE C NOT INCLUDED IN THE DIVISION. C C B) >SRP 3 15 C -THIS WILL PRODUCE A SUMMARY FOR DAY "15" IN C MONTH "3". C C C) >SRP 10 15 31 [ALL OR UP] C -THIS IS SIMILAR TO TYPE A) EXCEPT THE RANGE OF C DAYS TO BE EXAMINED IS LIMITED FROM DAY "15" C THROUGH DAY "31". C C******************************************************************* C LOGICAL*1 NAM(80),KFILE(16),IDOWN(50),ALL,IEND,RNG, * UP,FIRST C INTEGER*2 DURATN(50),RANGE(2),KB(16),HHMM,SSTT,FLAG C INTEGER*4 KTICKS,ITICKS,ETICKS,LOSTRQ C REAL KTEMP(50),PTEMP(50),KAVG(50),PAVG(50) C REAL*8 KRCRD(4) C EQUIVALENCE (KB,KRCRD,MMDD),(KB(2),HHMM),(KB(3),SSTT), * (KB(4),FLAG),(KB(5),KTICKS),(KB(7),ITICKS), * (KB(9),ETICKS),(KB(11),LOSTRQ) C DATA KAVG,PAVG/100*0.0/, DURATN/50*0/ DATA IEND/.FALSE./, ALL/.FALSE./, RNG/.FALSE./, * UP /.FALSE./, FIRST/.TRUE. / C C GET THE CALL LINE & DETERMINE MODE..... C CALL GETMCR (NAM,IDS) IF (IDS.LT.5) GO TO 1000 NV=3 NAM(IDS+1)=1H/ CALL FREAD (NAM,PTEMP,NV) IF (NV.LT.1) GO TO 1000 MNTH=PTEMP(1) IF (MNTH.LT.1.OR.MNTH.GT.12) GO TO 1100 C C IS IT AN "ALL" REQUEST ????? C IF (NAM(IDS-2).EQ.1HA.AND.NAM(IDS-1).EQ.1HL.AND. * NAM(IDS).EQ.1HL) ALL=.TRUE. IF (NAM(IDS-1).EQ.1HU.AND.NAM(IDS).EQ.1HP) UP=.TRUE. IF (NV.GT.1) GO TO 100 RANGE(1)=1 RANGE(2)=31 GO TO 2000 C C CHECK FIRST DAY IN RANGE..... C 100 RANGE(1)=PTEMP(2) IF (RANGE(1).GT.31) GO TO 1200 RANGE(2)=RANGE(1) IF (NV.GT.2) GO TO 200 IF (ALL.OR.UP) GO TO 1300 GO TO 2000 C C CHECK SECOND DAY IN RANGE..... C 200 RANGE(2)=PTEMP(3) RNG=.TRUE. IF (RANGE(2).LE.RANGE(1)) GO TO 1400 IF (NV.GT.3) GO TO 1500 GO TO 2000 C---------------------------------------------- 1000 STOP '-- NO PARAMETERS' 1100 STOP '-- ILLEGAL MONTH' 1200 STOP '-- ILLEGAL DAY' 1300 STOP '-- ILLEGAL USE OF "ALL OR UP"' 1400 STOP '-- ILLEGAL DAY RANGE' 1500 STOP '-- INCORRECT NUMBER OF PARAMETERS' C----------------------------------------------- C C OPEN THE FILE..... C 2000 ENCODE (15,9000,KFILE) MNTH 9000 FORMAT ('[1,6]KERN',I2,'.ACL') IF (KFILE(10).EQ.1H ) KFILE(10)=1H0 KFILE(16)=0 OPEN (UNIT=1,NAME=KFILE,TYPE='OLD',ACCESS='SEQUENTIAL', * FORM='UNFORMATTED') C C READ THE FIRST RECORD IN THE FILE..... C 2100 READ (1,END=4000) KRCRD IMTH=MMDD/100 NDAY=MOD(MMDD,100) IF (IMTH.LT.MNTH) GO TO 2100 IF (IMTH.GT.MNTH) GO TO 4000 IF (NDAY.LT.RANGE(1)) GO TO 2100 IF (NDAY.GT.RANGE(2)) GO TO 4000 C C------------------------------------------------------------------ C F I R S T R E C O R D H A S B E E N R E A D C C CLEAR ARRAYS..... C 2200 DO 2300 I=1,50 IDOWN(I)=0 KTEMP(I)=0.0 PTEMP(I)=0.0 2300 CONTINUE BACKSPACE 1 C C READ NEXT RECORD..... C 2500 READ (1,END=2700) KRCRD IMTH=MMDD/100 IDAY=MOD(MMDD,100) IF (IMTH.NE.MNTH) GO TO 2700 IF (IDAY.EQ.NDAY) GO TO 2600 IF (IDAY.GT.RANGE(2)) GO TO 2700 GO TO 2800 C C SAVE TIMES..... C 2600 IF (FIRST) NDAYS=NDAY FIRST=.FALSE. NDAYE=NDAY IT=HHMM/100 IT=IT*60 + MOD(HHMM,100) NT=IT/30+1 IF (NT.GT.48) NT=48 IDOWN(NT)=1 DURATN(NT)=DURATN(NT)+1 KTEMP(NT)=FLOAT(KTICKS)/ETICKS KAVG(NT)=KAVG(NT)+KTEMP(NT) PTEMP(NT)=FLOAT(ETICKS-ITICKS)/ETICKS PAVG(NT)=PAVG(NT)+PTEMP(NT) GO TO 2500 C 2700 IEND=.TRUE. C C PRINT A "DAY" SUMMARY REPORT ????? C 2800 IF (ALL.OR.UP) GO TO 2850 CALL KREPT (1,MNTH,NDAY,KTEMP,PTEMP,IDOWN) 2850 IF (IEND) GO TO 2900 NDAY=IDAY GO TO 2200 C C PRINT AVERAGED SUMMARY ????? C 2900 IF (UP) GO TO 2950 IF (.NOT.ALL) STOP Z=NDAYE-NDAYS+1 C 2950 DO 3000 I=1,50 IDOWN(I)=1 IF (DURATN(I).EQ.0) GO TO 3000 IF (UP) Z=DURATN(I) KAVG(I)=KAVG(I)/Z PAVG(I)=PAVG(I)/Z 3000 CONTINUE C IF (RNG) GO TO 3100 CALL KREPT (2,MNTH,IDAY,KAVG,PAVG,IDOWN) STOP C 3100 CALL KREPT (3,MNTH,RANGE,KAVG,PAVG,IDOWN) STOP C--------------------------------------------------------------- C 4000 STOP '-- DAY/MONTH NOT IN FILE' END