*DECK DB$CREV 
USETEXT RVRSCTX 
USETEXT JLDEFTX 
      FUNC DB$CREV B; 
      BEGIN 
 #
* *   DB$CREV - CHECK FOR BEGIN/END CRITERIA     PAGE  1
* *             EVENTS. 
* *   J E ESLER                                  DATE  06/28/76 
* 
* DC  PURPOSE 
* 
*     CHECK ALL CRITERIA ENTRY END TIMES AND BEGIN/END RECOVERY POINTS. 
*     DELETE EXPIRED ENTRIES. REPORT THE DELETION OF THE THE LAST 
*     CRITERIA TABLE ENTRY TO TERMINATE THE RUN.
* 
* DC  ENTRY CONDITIONS
* 
*     CRITERIA TABLE CHAIN IN DB$RCOM IS BUILT. 
*     ARRAY LOGREC IN DB$RCOM CONTAINS CURRENT LOG RECORD.
* 
* DC  EXIT CONDITIONS 
* 
*     TRUE = ALL CRITERIA END TIMES HAVE BEEN FOUND.
*     FALSE= LAST END TIME NOT YET REACHED. 
* 
* DC  CALLING ROUTINES
* 
*     DB$RSEL -RECOVERY/RESTORE SELECTION ROUTINE 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$CRDL;           #DELETE A CRITERIA TABLE ENTRY#
      XREF PROC DB$JLST;           #LIST A LOG RECORD#
# 
* DC  NON-LOCAL VARIABLES 
* 
*     RECOVERY/RESTORE COMMON 
 #
# 
*     LOCAL VARIABLES 
# 
      ITEM NXTCRIT;                #LOOP INDEX# 
      CONTROL EJECT;
 #
* 
* DC  DESCRIPTION 
* 
*     CHECK ALL CRITERIA TABLE END POINTS. DELETE THE ONES
*     THAT HAVE EXPIRED. TERMINATE THE SCAN OF THE LOG FILE WHEN THE
*     LAST ENTRY IS DELETED.
 #
        IF FIRSTCRIT EQ 0  THEN 
          BEGIN 
          DB$CREV = FALSE;             #NOT END OF SCAN#
          RETURN;                  #NO END TIMES TO CHECK#
  
          END 
        P<CRITERIA> = LOC(FIRSTCRIT); 
        FOR NXTCRIT = CRNEXT[0] WHILE NXTCRIT NQ 0 DO 
          BEGIN 
          P<CRITERIA> = NXTCRIT;
          NXTCRIT = CRNEXT[0];
          IF CREDATE[0] LS JLHDDATE[0]
            OR(CREDATE[0] EQ JLHDDATE[0] AND CRETIME[0] LS JLHDTIME[0]) 
            THEN                       #DELETE EXPIRED ENTRY# 
            BEGIN 
            DB$CRDL;                   #DELETE ENTRY# 
            END 
          END 
# 
*     FOR RECOVERY POINT RECORDS, CHECK ALL CRITERIA TABLE ENTRIES FOR
*     BEGIN/END EVENTS ON THIS RECOVERY POINT. DELETE EXPIRED ENTRIES.
# 
        IF JLHDTYPE[0] EQ DFJLRQRP THEN 
          BEGIN 
          P<CRITERIA> = LOC(FIRSTCRIT); 
          FOR NXTCRIT = CRNEXT[0] WHILE NXTCRIT NQ 0 DO 
            BEGIN 
            P<CRITERIA> = NXTCRIT;
            NXTCRIT = CRNEXT[0];
            IF CRBRP[0] EQ JLRPNUMB[0]
              AND ((CRBDATEI[0] EQ 0 AND CRBTIME[0] EQ DFZEROTIME)
                OR (CRBDATE[0] EQ JLHDDATE[0] 
                  AND CRBTIME[0] EQ JLHDTIME[0])) 
              THEN                     #FOUND BEGIN RECOV POINT#
              BEGIN 
              CRBRPI[0] = 0;           #SET TO ZERO CLEARS BEGIN RP#
              IF NOT SUPOUTPUT THEN 
                DB$JLST;
              END 
            IF CRERP[0] EQ JLRPNUMB[0]
              AND ((CREDATE[0] EQ DFBIGDATE AND CRETIME[0] EQ DFBIGTIME)
                OR (CREDATE[0] EQ JLHDDATE[0] 
                  AND CRETIME[0] EQ JLHDTIME[0])) 
              THEN                     #FOUND END RECOV POINT#
              BEGIN 
              CRERPI[0] = 0;       #CLEAR RECOVERY PT - SHOWS WE FOUND #
              IF NOT SUPOUTPUT THEN 
                DB$JLST;
              DB$CRDL;
              END 
            END 
          END 
      IF FIRSTCRIT EQ 0 THEN       #ALL ENTRIES DELETED#
        DB$CREV = TRUE; 
      ELSE
        DB$CREV = FALSE;           #NOT END OF SCAN#
      RETURN; 
      END 
      TERM
