*DECK DLREP 
USETEXT DLFPDEF 
USETEXT DIERR 
USETEXT DIRTBL
USETEXT DIRTBLH 
USETEXT DIRTBLM 
USETEXT DIRTBLS 
USETEXT ERRMSG
USETEXT MISRES
USETEXT OFETB 
USETEXT OUTCDA
USETEXT ZCIOBB
USETEXT ZFETB 
USETEXT ZHRCD 
PROC DLREP;                  # REPORT GENERATING PROGRAM               #
*IF DEF,IMS 
 #
*1DC  DLREP 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        DLREP               P.C.TAM             78/12/12 
* 
*     2. FUNCTIONAL DESCRIPTION.
*        REPORT GENERATING ROUTINE
* 
*     3. METHOD USED. 
*        INITIALIZE COUNTER OF NUMBER OF ENTRIES WRITTEN TO OUTPUT
*          AND CLEAR COMPLETE FLAG. 
*        READ DEBUG LOG FILE INFORMATION. 
*        DETERMINE IF AIP OR NIP DEBUG LOG FILE.
*        CALL DLRT TO COMPUTE MIDNIGHT OFFSET.
*        ADD INITIAL RT VALUE TO COMPUTE RT VALUE.
*        IF BD PARAMETER EXISTS IN PARAMETER TABLE, CALL DLCND TO 
*          COMPUTE NUMBER (IN SECONDS) OF FULL 24 HOUR PERIODS FROM 
*          DATE IN HEADER TO BD DATE (NUMBER = 0 IF BD DATE @ HEADER
*          + 1). NUMBER IS ADDED TO MIDNIGHT RT VALUE TO GET BD RT
*          VALUE. 
*        IF BT PARAMETER EXISTS IN PARAMETER TABLE, CALL DLRT TO
*          CONVERT IT TO A RT VALUE AND ADD SRTMILS (START TIME)
*          AND ADD BEGIN DATE OFFSET TO COMPUTE BT RT VALUE.
*        IF BT PARAMETER DOES NOT EXIST AND BD PARAMETER DOES 
*          THEN BT RT VALUE IS SET TO START TIME. IF BT PARAMETER 
*          DOES NOT EXIST AND BD PARAMETER DOES NOT EXIST, THEN 
*          PARAMETER TABLE BT VALUE IS LEFT AT ZERO.
*        ZERO BD PARAMETER IN PARAMETER TABLE.
*        IF ED PARAMETER EXISTS IN PARAMETER TABLE, CALL DLCND TO 
*          COMPUTE NUMBER OF FULL 24 HOUR PERIODS IN SECONDS FROM 
*          DATE IN HEADER TO ED DATE (NUMBER = - MIDNIGHT RT VALUE
*          IF ED DATE @ HEADER DATE). NUMBER IS ADDED TO MIDNIGHT RT
*          VALUE TO GET ED RT VALUE.
*        IF ET PARAMETER EXISTS IN PARAMETER TABLE, CALL DLRT TO
*          CONVERT IT TO A RT VALUE AND ADD TO SRTMILS (START 
*          TIME) AND TO END DATE OFFSET TO COMPUTE ET RT VALUE. 
*        ZERO ED PARAMETER IN PARAMETER TABLE.
*        IF AIP LOG FILE, ZERO DN AND SN ENTRIES IN PARAMETER TABLE.
*        IF NIP LOG FILE, ZERO T, U, AND B ENTRIES IN PARAMETER TABLE,
*          AND INITIALIZE THE CONNECTION TABLE. 
*        COPY FIRST 6 ENTRIES OF PARAMETER TABLE, IF NONZERO, 
*          TO MESSAGE PROCESSING TABLE. 
*        COPY NEXT 11 ENTRIES OF PARAMETER TABLE, IF NONZERO, 
*          TO ABH/NBH PROCESSING TABLE (INCLUDING CN) 
*        COPY LAST 5 ENTRIES OF PARAMETER TABLE, IF NONZERO,
*          TO SUPMSG PROCESSING TABLE (INCLUDING CN)
*        IF LE PARAMETER EXISTS IN PARAMETER TABLE, STORE IN LENGTH.
*          OTHERWISE, SET LENGTH TO TLWMAX (410 WORDS). 
*        SET SM TO SM PARAMETER IN PARAMETER TABLE. THIS WILL SET 
*          SM TO ZERO IF THE SM PARAMETER DOES NOT EXIST. 
*        CALL DLSCAN TO PROCESS DEBUG LOG FILE
*        IF END OF FILE IS ENCOUNTERED SET COMPLETE FLAG TO 
*        FALSE TO PROCESS THE NEXT FILE (MAY HAVE MULTI-FILE FILES).
*        CALL DLFLUSH TO WRITE EOR TO OUTPUT FILE 
*        IF NIP DEBUG LOG FILE AND MESSAGES HAVE BEEN OUTPUT, 
*          THEN CALL DLREST TO WRITE AVERAGE RESPONSE TIME TO 
*          OUTPUT FILE. 
* 
*     4. ENTRY PARAMETERS.
*        NONE.
* 
*     5. EXIT PARAMETERS. 
*        NONE.
* 
*        ARGTBL NCIOBB NFETB
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        DIERR     DIRTBL    DIRTBLH   DIRTBLM
*        DIRTBLS   MISRES    OFETB     OUTCDA 
*        SYSDATEX  ZCIOBB    ZFETB     ZHRCD
*        ERRMSG 
* 
*     7. ROUTINES CALLED. 
*        DLABEND             ABORT PROGRAM
*        DLCND               CALCULATE DATE OFFSET IN SECONDS 
*        DLDFM               DAYFILE MESSAGE PROCESSOR
*        DLFLUSH             WRITE EOR ON OUTPUT FILE 
*        DLINT               INITIALIZE READ FOR ANOTHER EOR
*        DLRECL              RECALL ON COMPLETION BIT 
*        DLREST              NIP RESPONSE TIME AVERAGES 
*        DLRT                COMPUTES REAL TIME FROM CLOCK TIME 
*        DLSCAN              SCAN DEBUG LOG FILE
*        DLRDW               RECORD A SPECIFIED NO OF WORDS FROM FILE 
*        DLUPTM              CALCULATE THE CLOCK TIME FROM OFFSET 
* 
*     8. DAYFILE MESSAGES.
*        *BAD FILE CONTENT* 
* 
 #
*ENDIF
  
# 
      EXTERNAL VARIABLES
# 
      XREF
        BEGIN 
        PROC DLABEND;        # ABORT MAIN PROGRAM                      #
        PROC DLCND;          # CALCULATE OFFSET DATE IN SECONDS        #
        PROC DLDFM;          # DAYFILE MESSAGE PROCESSOR               #
        PROC DLFLUSH;        # WRITE EOR ON OUTPUT FILE                #
        PROC DLINT;          # INITIALIZE READ                         #
        PROC DLRECL;         # RECALL ON COMPLETION BIT                #
        PROC DLREST;         # NIP RESPONSE TIME AVERAGES              #
        PROC DLRT;           # COMPUTES REAL TIME FROM CLOCK TIME      #
        PROC DLSCAN;         # SCAN DEBUG LOG FILE                     #
        PROC DLRDW;          # READ RECORD FROM CIO BUFFER             #
        PROC DLUPTM;         # CALCULATE CLOCK TIME                    #
        PROC DLWRT;          # DIRECT WRITE TO CIO BUFFER              #
        END 
# 
      COMMON VARIABLES
# 
      CONTROL NOLIST;        # SEE DLFP FOR LISTING OF ARGTBL          #
*CALL ARGTBL
      CONTROL LIST; 
      CONTROL NOLIST;        # SEE DLFP FOR LISTING OF NCIOBB          #
*CALL NCIOBB
      CONTROL LIST; 
      CONTROL NOLIST; 
*CALL NFETB 
      CONTROL LIST; 
*CALL SYSDATEX
# 
      LOCAL VARIABLES 
# 
  
  
      ITEM
      BRTIME,                # BEGIN REAL TIME                         #
      ERTIME,                # END REAL TIME                           #
      RSIZE        I,        # READ IN DATA SIZE                       #
      OFF$DATE,              # DATE OFFSET IN SECONDS                  #
      J,                     # TEMPORARY VARIABLE                      #
      I            I;        # TEMPORARY VARIABLE                      #
  
      BASED ARRAY DUMMY; ;
  
# ******************************************************************** #
  
  
      BEGIN 
  
# 
      INITIALIZE LOCAL VARIABLES
# 
      PAGE$COUNT = 0; 
      MSG$COUNT = 0;
      OUMSGNO = 0;
      COMPLETE = FALSE; 
      FOR I = I WHILE NOT COMPLETE
      DO
        BEGIN 
        LINE$COUNT = MAXNO; 
        DLRDW(ZFET, ZHSIZE, TEMPB1, RSIZE);# READ IN HEADR             #
        IF RSIZE EQ 0 OR
           RSIZE LS 0 
        THEN
          BEGIN              # EOF, EOI OR EMPTY RECORDS ENCOUNTERED   #
          COMPLETE = TRUE;
          TEST I; 
          END 
  
        IF RSIZE NQ ZHSIZE
        THEN
          BEGIN              # BAD DEBUG LOG FILE CONTENT              #
          DLDFM(BAD$ZFILE); 
          DLABEND;
          END 
        L1NAME[0] = ZHNAME[0]; # PRESET HEADER INFORMATION             #
        FOR I = 0 STEP 1 UNTIL 7 DO 
          BEGIN              # CONVERT ZERO BYTES TO BLANK             #
          IF C<I>L1NAME[0] EQ 0 
          THEN
            C<I>L1NAME[0] = " ";
          END 
  
        L1DATE[0] = SYSDATE[0]; 
        L2DATE[0] = ZHYMD[0]; 
        SRTSEC = ZHSEC[0];
        SRTMILS = ZHMILS[0];
        SCLHHMMSS = ZHWD2[0]; 
        SDTYYMMDD = ZHWD3[0]; 
        IF C<0,3>ZHNAME[0] EQ "NIP" 
        THEN                 # CHANGE THE PRESET VALUE                 #
          NIP = TRUE; 
  
        DLRT("240000",BRTIME);
        MIDNITE = SRTMILS + BRTIME; 
# 
        WRITE NEW DEBUG LOG FILE IF NECESSARY 
# 
        IF ARGFLAG[NFILE] 
        THEN
          BEGIN              # HEADER FOR NEW DEBUG LOG FILE           #
          DLWRT(NFET, TEMPB1, RSIZE); 
          NMSGCNT = 0;
          END 
  
# 
        BEGIN TIME PROCESSING 
# 
        IF DIRID[ID$BD] NQ 0
        THEN
          BEGIN              # BEGIN DATE SPECIFIED                    #
          DLCND(DIRWD0[ID$BD],OFF$DATE); # COMPUTE BEGIN DATE OFFSET   #
          IF DIRID[ID$BT] NQ 0
          THEN
            BEGIN            # BEGIN TIME SPECIFIED                    #
            DLRT(DIRWD0[ID$BT],BRTIME); # COMPUTE BEGIN TIME OFFSET    #
            BRTIME = SRTMILS + OFF$DATE + BRTIME; 
            END 
          ELSE
            BRTIME = MIDNITE + OFF$DATE - 86400000; 
          IF BRTIME LS SRTMILS
          THEN
            BRTIME = SRTMILS; 
          END 
        ELSE
          BEGIN              # BEGIN DATE NOT SPECIFIED                #
          IF DIRID[ID$BT] NQ 0
          THEN
            BEGIN            # BEGIN TIME SPECIFIED                    #
            DLRT(DIRWD0[ID$BT],BRTIME); # COMPUTE BEGIN TIME OFFSET    #
            IF BRTIME LS 0
            THEN
              BRTIME = 0; 
            BRTIME = SRTMILS + BRTIME;
            END 
          ELSE
            BRTIME = 0; 
          END 
# 
        END TIME PROCESSING 
# 
        IF DIRID[ID$ED] NQ 0
        THEN
          BEGIN              # END DATE SPECIFIED                      #
          DLCND(DIRWD0[ID$ED],OFF$DATE);# COMPUTE DATE OFFSET          #
          IF DIRID[ID$ET] NQ 0
          THEN
            BEGIN            # END TIME SPECIFIED                      #
            DLRT(DIRWD0[ID$ET],ERTIME); # COMPUTE TIME OFFSET          #
            ERTIME = SRTMILS + OFF$DATE + ERTIME; 
            END 
          ELSE
            ERTIME = MIDNITE + OFF$DATE - 86400000; 
          IF ERTIME LS SRTMILS
          THEN
            ERTIME = SRTMILS; 
          END 
        ELSE
          BEGIN              # END DATE NOT SPECIFIED                  #
          IF DIRID[ID$ET] NQ 0
          THEN
            BEGIN            # END TIME SPECIFIED                      #
            DLRT(DIRWD0[ID$ET],ERTIME); # COMPUTE TIME OFFSET          #
            IF ERTIME LS 0
            THEN
              ERTIME = SRTMILS ;  # END TIME BEFORE NETON TIME         #
            ELSE
              ERTIME = SRTMILS + ERTIME ; 
            END 
          ELSE
            ERTIME = 0; 
          END 
  
        IF NOT NIP
        THEN                 # AIP LOG FILE, ZERO DN, SN               #
          BEGIN 
          DIRWD0[ID$DN] = 0;
          DIRWD0[ID$SN] = 0;
          END 
        ELSE
          BEGIN              # NIP LOG FILE, ZERO T,U,B                #
          DIRWD0[ID$T] = 0; 
          DIRWD0[ID$U] = 0; 
          DIRWD0[ID$B] = 0; 
          FOR I = 0 STEP 1 UNTIL MAXCN
          DO
            BEGIN            # ZERO RESPONSE TIME AVERAGE TABLE        #
            CNWD0[I] = 0; 
            CNWD1[I] = 0; 
            END 
          END 
  
# 
        SET MESSAGE PROCESSING TABLE
# 
        J = 0;
        IF DIRID[ID$NM] NQ 0
        THEN
          BEGIN              # NM= DIRECTIVE                           #
          J = J + 1;
          DIRMID[J] = ID$NM;
          DIRMVAL[J] = DIRVALU[ID$NM];
          END 
        IF ERTIME NQ 0
        THEN
          BEGIN              # SET ET= VALUE                           #
          J = J + 1;
          DIRMID[J] = ID$ET;
          DIRMVAL[J] = ERTIME;
          END 
        IF DIRID[ID$N] NQ 0 
        THEN
          BEGIN              # N DIRECTIVE                             #
          J = J + 1;
          DIRMID[J] = ID$N; 
          END 
        IF BRTIME NQ 0
        THEN
          BEGIN              # SET BT= VALUE                           #
          J = J + 1;
          DIRMID[J] = ID$BT;
          DIRMVAL[J] = BRTIME;
          END 
        DIRNUMM = J;
  
# 
        SET ABH/NBH PROCESSING TABLE
# 
        J = 0;
        FOR I = ID$B STEP 1 UNTIL ID$CN 
        DO
          IF DIRID[I] NQ 0
          THEN
            BEGIN 
            J = J + 1;
            DIRHID[J] = DIRID[I]; 
            DIRHVAL[J] = DIRVALU[I];
            END 
        DIRNUMH = J;
# 
        SET SUPERVISORY PROCESSING TABLE
# 
        J = 0;
        FOR I = ID$CN STEP 1 UNTIL ID$PS
        DO
          IF DIRID[I] NQ 0
          THEN
            BEGIN 
            J = J + 1;
            DIRSID[J] = DIRID[I]; 
            DIRSVAL[J] = DIRVALU[I];
            END 
        DIRNUMS = J;
        IF DIRWD0[ID$LE] NQ 0 
        THEN                 # MAXIMUM LENGTH OF MESSAGE TO BE OUTPUT  #
          LENGTH = DIRVALU[ID$LE];
        ELSE
          LENGTH = TLWMAX;
  
#     START MESSAGE AFTER THIS MESSAGE NUMBER                        #
        SM = DIRVALU[ID$SM];
  
# 
        PROCESS LOG FILE
# 
        DLSCAN; 
        IF EOFFLAG
        THEN
          BEGIN              # (EOF) ENCOUNTERED                       #
          COMPLETE = FALSE;  # PROCESS NEXT FILE                       #
          EOFFLAG = FALSE;
          PAGE$COUNT = 0 ;
          NMSGCNT = 0 ; 
          OUMSGNO = 0 ; 
          END 
  
        IF NTOFF
        THEN
          BEGIN              # NETOFF ENCNTERED, CHK EOR               #
          DLRDW(ZFET, ZHSIZE, TEMPB1, RSIZE); 
          IF RSIZE EQ 0 
          THEN
            BEGIN 
              DLINT(ZFET, READNR); # INTIALIZE READ AFTER EOR          #
            IF ARGFLAG[NFILE] 
            THEN
              BEGIN 
              DLFLUSH(NFET);
              DLRECL(NFET); 
              END 
            COMPLETE = FALSE; 
            END 
          END 
        END 
  
        IF NOT ARGFLAG[NFILE] 
        THEN
          BEGIN              # N= OPTION NOT SELECTED                  #
          IF MSG$COUNT EQ 0 
          THEN
            BEGIN 
            P<DUMMY> = LOC(D$EM0[D$NMF]);# NO MESSAGES FOUND           #
            DLWRT(OFET,DUMMY,5);
            END 
          ELSE
            IF NIP
            THEN             # NIP TRACE FILE                          #
              DLREST;        # WRITE NIP RESP TIME AVG                 #
          DLFLUSH(OFET);     # WRITER ON FILE                          #
          END 
  
      END                    # DLREP                                   #
TERM
