*DECK DLCND 
USETEXT DLFPDEF 
USETEXT DLNOD 
USETEXT OUTCDA
PROC DLCND(COM$DATE,SEC$VALUE);# COMPUTE NO OF DAYS DIFFERENCE IN 
                                 SECONDS                               #
*IF DEF,IMS 
 #
*1DC  DLCND 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        DLCND               P.C.TAM             78/01/14 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        COMPUTE NUMBER OF DAYS DIFFERENCE IN SECONDS 
* 
*     3. METHOD USED
*        IF COM$DATE IS EQUAL TO START DATE, RETURN ZERO. 
*        IF COM$DATE IS LS START DATE, SET INIT$DATE TO 
*        COM$DATE, OFF$DATE TO START DATE, NEGATIVE TO
*        TRUE, OTHERWISE SET OFF$DATE TO COM$DATE, START
*        DATE TO INT$DATE, NEGATIVE TO FALSE. 
*        COMPUTE DIFFERENCE BETW OFF$DATE AND INIT$DATE IN
*        SECONDS. 
*        IF NEGATIVE IS TRUE, RETURN MINUS DIFFERENCE,
*        OTHERWISE, RETURN DIFFERENCE.
* 
*     4. ENTRY PARAMETERS 
*        COM$DATE            DATE TO BE COMPARED
*                            IN YYMMDD FORMAT 
*        SDTYYMMDD           START DATE 
*                            IN BYY/MM/DD FORMAT
* 
*     5. EXIT PARAMETERS
*        SEC$VALUE           RESULT IN MILLISECONDS,
*                            CAN BE NEGATIVE. 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        DLFPDEF   DLNOD     OUTCDA 
* 
*     7. ROUTINES CALLED
*        NONE 
* 
*     8. DAYFILE MESSAGES 
*        NONE 
* 
 #
*ENDIF
  
      ITEM
      COM$DATE     U,        # COMPARE DATE FROM CALLING PROG          #
      SEC$VALUE    I,        # DIFFERENCE IN SECS                      #
      NEGATIVE     B,        # RESULT PLUS/MINUS FLAG                  #
      SUM          I,        # TEMPORARY SUM VARIABLE                  #
      INIDD,                 # START POINT DAY                         #
      INIMM,                 # START POINT MONTH                       #
      INIYY,                 # START POINT YEAR                        #
      FINDD,                 # END POINT DAY                           #
      FINMM,                 # END POINT MONTH                         #
      FINYY,                 # END POINT YEAR                          #
      JLIMIT,                # J LOOP LIMIT                            #
      EDLIMIT,               # DAY IN MONTH LIMIT                      #
      I,                     # LOOP VARIABLE                           #
      J,                     # LOOP VARIABLE                           #
      TEMP1;                 # TEMPORARY VARIABLE                      #
  
# ******************************************************************** #
      BEGIN 
      INIYY = (C<1,1> SDTYYMMDD - O"33") * 10 
               + C<2,1> SDTYYMMDD - O"33";
      FINYY = (C<0,1> COM$DATE - O"33") * 10
               + C<1,1> COM$DATE - O"33"; 
      INIMM = (C<4,1> SDTYYMMDD - O"33") * 10 
               + C<5,1> SDTYYMMDD - O"33";
      FINMM = (C<2,1> COM$DATE - O"33") * 10
               + C<3,1> COM$DATE - O"33"; 
      INIDD = (C<7,1>SDTYYMMDD - O"33") * 10
               + C<8,1> SDTYYMMDD - O"33";
      FINDD = (C<4,1> COM$DATE - O"33") * 10
               + C<5,1> COM$DATE  - O"33";
      IF INIYY LS 70 THEN INIYY = INIYY + 100;  # ADJUST FOR CENTURY   #
      IF FINYY LS 70 THEN FINYY = FINYY + 100;  # ADJUST FOR CENTURY   #
      IF FINYY*10000+FINMM*100+FINDD EQ INIYY*10000+INIMM*100+INIDD 
      THEN
        SEC$VALUE = 0;
      ELSE
        BEGIN 
        IF FINYY*10000+FINMM*100+FINDD LS INIYY*10000+INIMM*100+INIDD 
        THEN
          BEGIN 
          NEGATIVE = TRUE;
          TEMP1 = FINYY;
          FINYY = INIYY;
          INIYY = TEMP1;
          TEMP1 = FINMM;
          FINMM = INIMM;
          INIMM = TEMP1;
          TEMP1 = FINDD;
          FINDD = INIDD;
          INIDD = TEMP1;
          END 
        ELSE
          BEGIN 
          NEGATIVE = FALSE; 
          END 
        SUM = 0;
  
        JLIMIT = 12;
# 
        LOOP TO CALCULATE EACH ELAPSED YEAR 
# 
        FOR I = INIYY STEP 1 UNTIL FINYY
        DO
          BEGIN 
          IF I - I/4*4 EQ 0 
          THEN
            NOD[2] = 29;
          ELSE
            NOD[2] = 28;
          IF I EQ FINYY 
          THEN
            JLIMIT = FINMM; 
# 
          LOOP TO CALCULATE ELAPSED DAYS IN EACH MONTH
# 
          FOR J = INIMM STEP 1 UNTIL JLIMIT 
          DO
            BEGIN 
            IF I EQ FINYY AND J EQ FINMM
            THEN
              EDLIMIT = FINDD - 1;
            ELSE
              EDLIMIT = NOD[J]; 
            SUM = SUM + (EDLIMIT - INIDD + 1);
            INIDD = 1;
            END 
          INIMM = 1;
          END 
# 
        RETURN RESULT 
# 
        SUM = SUM * 86400000; 
        IF NEGATIVE 
        THEN
          SEC$VALUE = - SUM;
        ELSE
          SEC$VALUE = SUM;
        END 
      END 
TERM
