REPORT
REPORT
.PROC,REPORT*I,\
XC      ' RECOMPILE REPORT            (NO/YES) '=(*N=NO,NO,YES,*K=YES), 
OUTPUT  ' FILE NAME TO CONTAIN REPORT          '=(*N=OUTPUT,*F),
*CALL COMLIST 
*CALL COMPROC 
. 
.HELP 
 IF THE XC KEYWORD IS SPECIFIED OR *REP* IS NOT A PERMANENT FILE THEN 
 THE REPORT PROGRAM IS RECOMPILED AND THE BINARY IS STORED AS A 
 DIRECT ACCESS FILE *REP*.  FTN5 REQUIRED FOR COMPILATION.
  
 THE BINARY PROGRAM 'REP' PROCESSES THE FILE 'JOBSTAT' AND
 WRITES THE REPORT TO FILE 'OUTPUT'.
.ENDHELP
  
*CALL     PSRLEV
* REPORT - GENERATE STATISTICAL BUILD REPORT. 
* 
BEGIN(ATTGLOB,INSTALL)
ATTACH(REP/NA)
IFE(.NOT.FILE(REP,AS).OR.$XC$.EQ.$YES$,L00001)
  PURGE(REPTEMP/NA) 
  RETURN(REP,REPTEMP) 
  DEFINE(REP=REPTEMP) 
  FTN5(I,OPT=1,L=LIST,STATIC,EL)
  LOAD(LGO) 
  NOGO(REP) 
  PURGE(REP/NA) 
  CHANGE(REP=REPTEMP) 
  NOTE.+ REPORT WAS RECOMPILED AS PART OF THIS RUN. 
ENDIF(L00001) 
ATTACH(JOBSTAT/WB)
PACK(JOBSTAT,STATUS)
RETURN(JOBSTAT) 
REP(STATUS,OUTPUT)
UNLOAD(JOBSTAT,STATUS)
REVERT.  REPORT.
EXIT. 
REVERT(ABORT)  REPORT.
.DATA COMPILE 
      PROGRAM REPORT (TAPE1  ,  TAPE2)
C 
C     REPORT IS ONLY SUPPORTED FOR USE DURING THE INSTALLATION PROCESS. 
C 
C     CALLING SEQUENCE IS AS FOLLOWS
C 
C             REP(A,B)
C     WHERE   A = THE LOGFILE PRODUCED BY GENJOB, 
C             B = THE OUTPUT FILE OF THE REPORT,
C 
      REAL         MTT       , MST
      INTEGER      TREP02(100)         , TREP03(100, 02)
      CHARACTER    INFO*80
      INTEGER      RREP01    , CREP01  , LREP01 
      INTEGER      STATUS    , CARD    , DAYFILE
      INTEGER      FH        , FM      , IN      , OUT     , PAGE 
      INTEGER      CHR       , CMN     , CLK
      INTEGER      PR        , ST      , CT      , CL      , CP 
      INTEGER      MS        , MT      , PF      , AD      , SR 
      DIMENSION    TREP01(100, 08)     , TREP04(008)
      DATA         PAGE      / 55      /
      DATA         LINE      / 00      /
      DATA         IN        / 01      /
      DATA         INFO      /'    LEVEL 871 INSTALLATION' /
      DATA         OUT       / 02      /
      DATA         RREP01    / 200     /
      DATA         CREP01    / 08      /
      DATA         LREP01    / 00      /
      DATA         DAYFILE   / "DAYFILE"         /
      DATA         TREP01    / 800*0.0 /
      DATA         TREP04    / 8*0.0   /
      DATA         TREP03    / 200*" " /
      DATA         PR        / 01      /
      DATA         ST        / 02      /
      DATA         CT        / 01      /
      DATA         CL        / 02      /
      DATA         CP        / 03      /
      DATA         MS        / 04      /
      DATA         MT        / 05      /
      DATA         PF        / 06      /
      DATA         AD        / 07      /
      DATA         SR        / 08      /
C 
C *** FUNCTIONS FOR COMPUTING WALL CLOCK
C 
      CHR(I)                 = I/60 
      CMN(I)                 = I - ((I/60)*60)
      CLK(I, J, K, L)        = (K*60 + L) - (I*60 + J)
C 
C *** START OF "REP"
C 
      REWIND 1
   10 CONTINUE
C 
C *** READ IN ALL PARAMETERS
C 
      READ(IN, 1000, END = 50) JOBNAME
      READ(IN, 1000) STATUS 
      READ(IN, 1002) CPT, MST, MTT, PFT, ADT, SRT 
      IF (LREP01 .EQ. 0) GO TO 25 
C 
C *** SEARCH JOBNAME TABLE, IF NEW ADD IT TO THE TABLE
C 
      DO 20 IDX              = 1, LREP01
      IF (JOBNAME .EQ. TREP02(IDX)) GO TO 30
   20 CONTINUE
   25 CONTINUE
      IDX                    = LREP01 + 1 
      LREP01                 = IDX
      TREP02(IDX)            = JOBNAME
      IF(LREP01 .GT. RREP01) STOP ' TOO MANY PRODUCTS. '
   30 CONTINUE
C 
C *** ADD THIS NEW INFORMATION TO EXISTING INFORMATION ON THE PRODUCT 
C 
      TREP03(IDX, PR)        = JOBNAME
      TREP03(IDX, ST)        = STATUS 
      TREP01(IDX, CT)        = TREP01(IDX, CT) + 1
      TREP01(IDX, CP)        = TREP01(IDX, CP) + CPT
      TREP01(IDX, MS)        = TREP01(IDX, MS) + MST
      TREP01(IDX, MT)        = TREP01(IDX, MT) + MTT
      TREP01(IDX, PF)        = TREP01(IDX, PF) + PFT
      TREP01(IDX, AD)        = TREP01(IDX, AD) + ADT
      TREP01(IDX, SR)        = TREP01(IDX, SR) + SRT
   40 CONTINUE
C 
C *** COMPUTE WALL CLOCK TIME 
C 
      READ(IN, 1001) ITEMP, CARD
      IF(CARD .EQ. 8HSTART UP .OR. CARD .EQ. 8HEND   UP)
     .DECODE (6,1003,ITEMP) IHOUR, IMINUTE
      IF(CARD .EQ. 8HSTART UP) IH = IHOUR 
      IF(CARD .EQ. 8HSTART UP) IM = IMINUTE 
      IF(CARD .EQ. 8HEND   UP) FH = IHOUR 
      IF(CARD .EQ. 8HEND   UP) FM = IMINUTE 
      IF(ITEMP.NE. 8HEND TEXT) GOTO 40
      IF(IH .GT. FH) FH = FH + 24 
      TREP01(IDX, CL)        = TREP01(IDX, CL) + CLK(IH, IM, FH, FM)
C 
C *** PRINT THE TRANSACTION LINE
C 
      MIN                    = CLK(IH, IM, FH, FM)
      IHR                    = CHR(MIN) 
      IMN                    = CMN(MIN) 
      IF(LINE .EQ. 0) WRITE(OUT,1004) 
      LINE                   = MOD(LINE + 1, PAGE)
      WRITE(OUT, 1005) JOBNAME, STATUS, IHR, IMN
     .         ,       CPT, MST, MTT, PFT, ADT, SRT 
      GO TO 10
   50 CONTINUE
C 
C *** PRINT THE SUMMARY LINE
C 
      WRITE (OUT, 1007) 
      DO 70 I                = 1, LREP01
      MIN                    = TREP01(I, CL)
      IHR                    = CHR(MIN) 
      IMN                    = CMN(MIN) 
      ICT                    = TREP01(I, CT)
      WRITE(OUT, 1008) TREP03(I, PR), TREP03(I, ST), ICT, IHR, IMN
     .               ,      (TREP01(I, J), J = 3, CREP01) 
C 
C *** CALCULATE THE TOTALS
C 
      DO 60 J                = 1, CREP01
      TREP04(J)              = TREP04(J) + TREP01(I, J) 
   60 CONTINUE
   70 CONTINUE
      MIN                    = TREP04(CL) 
      IHR                    = CHR(MIN) 
      IMN                    = CMN(MIN) 
      ICT                    = TREP04(CT) 
      WRITE(OUT, 1009)ICT, IHR, IMN, (TREP04(I), I = 3, CREP01) 
      WRITE(OUT, 1011) INFO 
      STOP ' REPORT COMPLETED. '
C 
C *** END OF "REP"
C 
 1000 FORMAT(A10) 
 1001 FORMAT(1X, A8, 2X, A8)
 1002 FORMAT(//////, 5(20X, F10.3, /),/,1(20X, F10.3))
 1003 FORMAT (I2, 1X, I2) 
 1004 FORMAT(//, "1", T22,
     . "T R A N S A C T I O N S   R E P O R T", //
     ., T5, "PRODUCT   CLOCK       CPU  MS STORG  MAG TAPE  PF" 
     .,T62, "ADDER     SRU", /
     ., T15, "HR MN      TIME", 5(2X, "ACTIVITY")/) 
 1005 FORMAT(1X, A7, "-", A4, 1X, I2, ":", I2, 4(2X, F8.3)
     ., 2X, F6.3, 2X, F10.3)
 1007 FORMAT(//, "1", T22,
     . "S U M M A R Y   R E P O R T", //
     ., T5, "PRODUCT   CLOCK      CPU  MS STORG  MAG TAPE  PF"
     .,T61, "ADDER     SRU", /
     .,T15, "HR MN     TIME", 5(2X, "ACTIVITY")/) 
 1008 FORMAT(1X, A7, "-", A1, I2, 1X, I2, ":", I2, 4(2X, F8.2)
     ., 2X, F6.2, 2X, F10.2)
 1009 FORMAT(//, T35, "T O T A L S ", //
     .,T09, I3, 1X, I3, ":", I2, 4(2X, F8.2), 2X, F6.2, 2X, F10.2)
 1010 FORMAT(8A10)
 1011 FORMAT(//, 1X, A) 
      CALL STLERR 
      CALL STLICO 
      CALL STLOCO 
      CALL STLREW 
      CALL STLOPE 
      END 
*WEOR 
