/*REXX*/ /* INTERPRET TOD TIME STAMP SUCH AS FOUND IN LISTCAT FOR VSAM */ /* DAVID MCRITCHIE, "THE REXX MACROS TOOLBOX", 1993/09/28 WITH J.KENNEDY */ /* *********************************************************** ****/ /* 9852F19918A85000 */ /* 9854F19918A85000 GMT STAMP: 1984.336 04:28:49.321 */ /* A827D9A2A9082B12 GMT STAMP: 1993.271 17:22:16.110 */ /* A827D9A2A9100000 1993.271 17:22:16.110 */ /* A827D9A2A9000000 1993.271 17:22:16.110 */ /* A827D9A2A8900000 1993.271 17:22:16.108 */ /* AF00000000000000 GMT STAMP: 1997.204 07:42:37.77280 */ /******************************************************************/ "CLS"; D=' ----- ' NUMERIC DIGITS 35 ARG TOD SAY "TOD -- TRANSLATE THE GMT TIMESTAMP AS FOUND IN OUTPUT FROM" SAY " IDCAMS OR LISTCAT FOR CLUSTERS. IN BATCH USE PROC=AMSCLUST" SAY " INSTEAD OF PROC=AMS." TOD = TRANSLATE(TOD) I=VERIFY(TOD,'0123456789ABCDEF') IF I /= 0 THEN DO SAY 'INCORRENT VALUE ===> TOD' TOD SAY 'WILL BE TREATED AS NO VALUE SUPPLIED' TOD='' END IF TOD = '' THEN DO X2 = SUBSTR('U',1,2) /* GUESS WHETHER DAYLIGHT SAVINGS TIME OR STATNDARD TIME */ IF X2 < 04 | X2 > '10' THEN GMTADJ = 5 ELSE GMTADJ = 6 SS = SUBSTR(TIME('L'),9) + TIME('S') + 0.18 /*ADD .18 SEC*/ A = (((DATE('C') - 1 ) * 24 + GMTADJ)* 60 * 60 + SS) * 4096E6 TOD = D2X(A) /* PREV TESTED WITH 'A827D9A2A9082B12'*/ SAY 'NO ARGUMENT SUPPLIED -- CREATED A VALUE FROM LOCAL TIME' SAY ' AS IF ENTERED AS COMMAND ===> TSO TOD' TOD END ELSE SAY D"TOD (TIME OF DAY) CALCULATION BASED ON YOUR ENTRY"D L = LENGTH(TOD) IF L /= 16 THEN DO SAY 'YOU SUPPLIED' L 'DIGITS, 16 ARE REQUIRED -- CORRECTED ENTRY' TOD=SUBSTR(TOD||'00000000000000000',1,16) END WORK_SEC = X2D(TOD) / 4096E6; /* THE REMAINDER OF CODE IS SAME AS IN IS02.UTILITY.PLI(GMT) */ /* WHICH WAS ALSO USED IN PGM=IZ2048 USED IN PROC=AMSCLUST */ WORK_MIN = WORK_SEC % 60 /* TRUNC(WORK_SEC / 60) */ SEC = WORK_SEC - 60 * WORK_MIN WORK_HR = WORK_MIN % 60 MIN = TRUNC(WORK_MIN - 60 * WORK_HR) WORK_DAY = WORK_HR % 24 HR = TRUNC(WORK_HR - 24 * WORK_DAY) WORK_DAY = WORK_DAY + 1 /* AS IF 1900 WERE A LEAP YEAR*/ Y4 = WORK_DAY % 1461 /* 4YEARS = 3*365 + 366 */ D4 = WORK_DAY - 1461 * Y4 Y1 = MAX(D4 -1,0)%365 YEAR = TRUNC(4*Y4 + Y1) DAY = D4 - 365 * Y1 - SIGN(Y1) + 1 DAY = RIGHT(DAY,3,'0') HR = RIGHT(HR,2,'0') MIN = RIGHT(MIN,2,'0') SEC = RIGHT(TRUNC(SEC,5),8,'0') /* MAKE LOOK GOOD */ YEAR = YEAR + 1900 SAY 'GMT STAMP:' YEAR'.'DAY HR':'MIN':'SEC', FROM TIMESTAMP:' TOD SAY ' ' SAY '---- COMPARE THE ABOVE TO THE CURRENT INFORMATION BELOW ---' SAY '---- FIRST LINE HAS GMT, SECOND LINE HAS LOCAL TIME ---' ADDRESS TSO "TIMES"