Calls to CEESECS in PL/I

*PROCESS MACRO;
 /*Module/File Name: IBMDT1                          */
 /****************************************************/
 /*                                                  */
 /* Function: CEESECS - convert timestamp to seconds */
 /*                                                  */
 /* This example calls the CEESECS callable          */
 /* service to compute the number of hours between   */
 /* the timestamps 11/02/92 05:22 and 11/02/92 17:22.*/
 /* The program responds that 36 hours has elapsed.  */
 /*                                                  */
 /****************************************************/
 CE78DAT : PROC OPTIONS(MAIN);

    %INCLUDE  CEEIBMAW;
    %INCLUDE  CEEIBMCT;
    DCL START_TIME    CHAR(255) VARYING
                      INIT ( '11/02/92 05:22' );
    DCL END_TIME      CHAR(255) VARYING
                      INIT ( '11/03/92 17:22' );
    DCL PICSTR        CHAR(255) VARYING
                      INIT ( 'MM/DD/YY HH:MI' );
    DCL START_SECS    REAL FLOAT DECIMAL(16);
    DCL END_SECS      REAL FLOAT DECIMAL(16);
    DCL ELAPSED_TIME  FIXED DEC (9,4);
    DCL 01 FC,                     /* Feedback token */
           03 MsgSev    REAL FIXED BINARY(15,0),
           03 MsgNo     REAL FIXED BINARY(15,0),
           03 Flags,
              05 Case      BIT(2),
              05 Severity  BIT(3),
              05 Control   BIT(3),
           03 FacID     CHAR(3),      /* Facility ID */
           03 ISI   /* Instance-Specific Information */
                        REAL FIXED BINARY(31,0);
    /*************************************************/
    /* CEESECS takes the timestamp START_TIME and    */
    /* returns a double-precision Lilian seconds     */
    /* tally in START_SECS.                          */
    /*************************************************/
    CALL CEESECS ( START_TIME, PICSTR, START_SECS, FC );
    IF  FBCHECK( FC, CEE000)  THEN  DO;
       /**********************************************/
       /* CEESECS takes the timestamp END_TIME and   */
       /* returns a double-precision Lilian seconds  */
       /* tally in END_SECS.                         */
       /**********************************************/
       CALL CEESECS ( END_TIME, PICSTR, END_SECS, FC );
       IF  FBCHECK( FC, CEE000)  THEN  DO;
         ELAPSED_TIME = (END_SECS - START_SECS) / 3600;
         PUT SKIP EDIT( ELAPSED_TIME,
                ' hours have elapsed between ',
                START_TIME, ' and ', END_TIME)
             ( F(7,2), (4) A );
         END;
       ELSE  DO;
         PUT SKIP LIST( 'ERROR ' || FC.MsgNo ||
         ' CONVERTING ENDING TIMESTAMP TO SECONDS' );
         STOP;
         END;
       END;
    ELSE DO;
       PUT SKIP LIST( 'ERROR ' || FC.MsgNo
          || ' CONVERTING STARTING TIMESTAMP TO SECONDS' );
       STOP;
       END;

 END CE78DAT ;