DCL DD MACHINE-CLOCK CHAR(2) INIT(X'0100'); DCL SPCPTR .MACHINE-ATTR INIT(MACHINE-ATTR); DCL DD MACHINE-ATTR CHAR(24) BDRY(16); DCL DD MAT-MAX-SIZE BIN(4) DEF(MACHINE-ATTR) POS( 1) INIT(16); DCL DD MAT-ACT-SIZE BIN(4) DEF(MACHINE-ATTR) POS( 5); DCL DD MAT-TIMESTAMP CHAR(8) DEF(MACHINE-ATTR) POS( 9); DCL DD MAT-TIME-HI BIN(4) UNSGND DEF(MAT-TIMESTAMP) POS(1); DCL DD MAT-TIME-LO BIN(4) UNSGND DEF(MAT-TIMESTAMP) POS(5); DCL DD TIMESTAMP PKD(21,0); /* CAN HOLD 64-BIT UNSIGNED */ DCL DD TIMESTAMP-HI PKD(11,0); DCL DD TIMESTAMP-LO PKD(11,0); DCL DD TWO**32 PKD(11,0) INIT(P'4294967296'); DCL DD NBR-SECONDS PKD(15,0); DCL DD NBR-DAYS BIN(4); DCL DD NBR-YEARS BIN(4); DCL DD ADD-YEARS BIN(4); DCL DD NBR-PERIODS BIN(4); DCL DD DAY-MONTH BIN(4); DCL DD D BIN(4); DCL DD S BIN(4); DCL DD M BIN(4); /* DAY BASE FOR: JanFebMarAprMayJunJulAugSepOctNovDec*/ DCL DD DAYS CHAR(36) INIT("000031059090120151181212243273304334"); DCL DD DAYS-ACCUM(12) ZND(3,0) DEF(DAYS) POS(1); DCL DD YYYYMMDDHHMMSS CHAR(14); DCL DD YEAR ZND(4,0) DEF(YYYYMMDDHHMMSS) POS( 1); DCL DD MONTH ZND(2,0) DEF(YYYYMMDDHHMMSS) POS( 5); DCL DD DAY ZND(2,0) DEF(YYYYMMDDHHMMSS) POS( 7); DCL DD HOUR ZND(2,0) DEF(YYYYMMDDHHMMSS) POS( 9); DCL DD MIN ZND(2,0) DEF(YYYYMMDDHHMMSS) POS(11); DCL DD SEC ZND(2,0) DEF(YYYYMMDDHHMMSS) POS(13); /*******************************************************************/ MATMATR .MACHINE-ATTR, MACHINE-CLOCK; CPYNV TIMESTAMP-LO, MAT-TIME-LO; CPYNV TIMESTAMP-HI, MAT-TIME-HI; MULT TIMESTAMP, TIMESTAMP-HI, TWO**32; ADDN(S) TIMESTAMP, TIMESTAMP-LO; DIV(SR) TIMESTAMP, 4096000000; /* NOW SECONDS */ ADDN(S) TIMESTAMP, 43386; /* 12:03:06 PM */ DIVREM NBR-DAYS, TIMESTAMP, 86400, NBR-SECONDS; SUBN(S) NBR-DAYS, 131; /* WAS: AUG 23,1928, NOW: JAN 01,1929 */ DIVREM NBR-PERIODS, NBR-DAYS, 1461, NBR-DAYS; /* 4 YEARS */ MULT NBR-YEARS, NBR-PERIODS, 4; ADDN(S) NBR-YEARS, 1929; DIVREM ADD-YEARS, NBR-DAYS, 365, NBR-DAYS; ADDN YEAR, NBR-YEARS, ADD-YEARS; CPYNV M, 13; CMPNV(B) ADD-YEARS, 3/LO(FIND-MONTH); LEAP-YEAR: CMPNV(B) NBR-DAYS, 59/LO(FIND-MONTH),EQ(FEB-29TH); SUBN(S) NBR-DAYS, 1; FIND-MONTH: SUBN(S) M, 1; SUBN(B) DAY-MONTH, NBR-DAYS, DAYS-ACCUM(M)/NEG(FIND-MONTH); ADDN DAY, DAY-MONTH, 1; CPYNV(B) MONTH, M/POS(COMPUTE-TIME); FEB-29TH: CPYNV MONTH, 2; CPYNV DAY, 29; COMPUTE-TIME: DIVREM HOUR, NBR-SECONDS, 3600, NBR-SECONDS; DIVREM MIN, NBR-SECONDS, 60, SEC; SHOW-DATE-TIME: CPYBLAP MSG-TEXT, YYYYMMDDHHMMSS, " "; CALLI SHOW-MESSAGE, *, .SHOW-MESSAGE; RTX *; %INCLUDE SHOWMSG