*PROCESS MACRO;
/*Module/File Name: IBMDT2 */
/****************************************************/
/* */
/* Function: CEESECS - convert timestamp to seconds */
/* : CEEDATM - convert seconds to timestamp */
/* */
/* CEESECS is used to convert a timestamp to */
/* seconds. 24 hours in seconds is subtracted from */
/* the number of seconds in the original timestamp. */
/* CEEDATM is then used to build a new timestamp */
/* representing the new date and time. */
/* */
/****************************************************/
PLIDS: PROC OPTIONS(MAIN);
%INCLUDE CEEIBMAW;
%INCLUDE CEEIBMCT;
DCL TIMESTAMP CHAR(255) VARYING
INIT('01/26/67 20:00');
DCL NEW_TIMESTAMP CHAR(80);
DCL PICSTR CHAR(255) VARYING
INIT ( 'MM/DD/YY HH:MI' );
DCL START_SECS REAL FLOAT DECIMAL(16);
DCL NEW_TIME REAL FLOAT DECIMAL(16);
DCL DISPLACEMENT REAL FIXED BINARY(31,0) INIT(24);
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 is invoked to obtain the Lilian */
/* seconds tally corresponding to the timestamp */
/* 01/26/67 20:00. The Lilian seconds tally is */
/* returned in double-precision variable */
/* START_SECS. */
/*************************************************/
CALL CEESECS ( TIMESTAMP, PICSTR, START_SECS, FC );
IF FBCHECK( FC, CEE000) THEN DO;
/**********************************************/
/* The Lilian seconds tally in START_SECS is */
/* decremented by 24 hour DISPLACEMENT */
/* variable times 3600 seconds. */
/******************************************** */
NEW_TIME = START_SECS - DISPLACEMENT * 3600;
/**********************************************/
/* CEEDATM is invoked to obtain a new */
/* TimeStamp based on the new Lilian seconds. */
/**********************************************/
CALL CEEDATM ( NEW_TIME, PICSTR, NEW_TIMESTAMP, FC );
IF FBCHECK( FC, CEE000) THEN DO;
PUT SKIP LIST ( 'The time ' || DISPLACEMENT
|| ' hours before ' || TIMESTAMP
|| ' is ' || NEW_TIMESTAMP );
END;
ELSE DO;
PUT SKIP LIST('ERROR CONVERTING SECONDS TO TIMESTAMP');
PUT SKIP LIST( 'CEEDATM failed with msg '|| FC.MsgNo );
END;
END;
ELSE DO;
PUT SKIP LIST('ERROR CONVERTING TIMESTAMP TO SECONDS' );
PUT SKIP LIST( 'CEESECS failed with msg '|| FC.MsgNo );
END;
END PLIDS;