DCL SPCPTR .PARM1 PARM; DCL DD PARM-TIMESTAMP CHAR(16) BAS(.PARM1); /* REQUIRED */ DCL OL PARAMETERS(.PARM1) EXT PARM MIN(1); DCL SYSPTR .SEPT(6440) BAS(PCO-POINTER); DCL SPC PROCESS-COMMUNICATION-AREA BASPCO; DCL SPCPTR PCO-POINTER DIR; 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 * CHAR(8) DEF(MACHINE-ATTR) POS(17); 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); /*******************************************************************/ ENTRY * (PARAMETERS) EXT; CVTCH MAT-TIMESTAMP, PARM-TIMESTAMP; 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/NNAN(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; CPYBLAP MSG-TEXT, YYYYMMDDHHMMSS, " "; CALLI SHOW-MESSAGE, *, .SHOW-MESSAGE; REVERSE-CONVERSION: SUBN NBR-YEARS, YEAR, 1925; DIVREM NBR-PERIODS, NBR-YEARS, 4, ADD-YEARS; MULT NBR-DAYS, NBR-PERIODS, 1461; MULT D, ADD-YEARS, 365; ADDN(S) NBR-DAYS, D; CPYNV M, MONTH; ADDN(S) NBR-DAYS, DAYS-ACCUM(M); ADDN(S) NBR-DAYS, DAY; CMPNV(B) ADD-YEARS, 3/NEQ(A); CMPNV(B) MONTH, 2/HI(C); A: SUBN(S) NBR-DAYS, 1; C: MULT NBR-SECONDS, NBR-DAYS, 86400; MULT S, HOUR, 60; ADDN(S) S, MIN; MULT(S) S, 60; ADDN(S) S, SEC; ADDN(S) NBR-SECONDS, S; SUBN(S) NBR-SECONDS, 114955386; /* AUG 23, 1928, 12:03:06 */ MULT TIMESTAMP, NBR-SECONDS, 4096000000; DIVREM MAT-TIME-HI, TIMESTAMP, TWO**32, MAT-TIME-LO; CVTHC PARM-TIMESTAMP, MAT-TIMESTAMP; BRK "1"; CPYBLAP MSG-TEXT, PARM-TIMESTAMP, " "; CALLI SHOW-MESSAGE, *, .SHOW-MESSAGE; RTX *; /* SHOW A MESSAGE */ DCL SPCPTR .MSG-ID INIT(MSG-ID); DCL DD MSG-ID CHAR (7) INIT(" "); DCL SPCPTR .MSG-FILE INIT(MSG-FILE); DCL DD MSG-FILE CHAR(20) INIT(" "); DCL SPCPTR .MSG-TEXT INIT(MSG-TEXT); DCL DD MSG-TEXT CHAR(40); DCL SPCPTR .MSG-SIZE INIT(MSG-SIZE); DCL DD MSG-SIZE BIN( 4) INIT(40); DCL SPCPTR .MSG-TYPE INIT(MSG-TYPE); DCL DD MSG-TYPE CHAR(10) INIT("*INFO "); DCL SPCPTR .MSG-QS INIT(MSG-QS); DCL DD MSG-QS CHAR(20) INIT("*REQUESTER "); DCL SPCPTR .MSG-QSN INIT(MSG-QSN); DCL DD MSG-QSN BIN( 4) INIT(1); DCL SPCPTR .REPLY-Q INIT(REPLY-Q); DCL DD REPLY-Q CHAR(20) INIT(" "); DCL SPCPTR .MSG-KEY INIT(MSG-KEY); DCL DD MSG-KEY CHAR( 4); DCL SPCPTR .ERR-CODE INIT(ERR-CODE); DCL DD ERR-CODE BIN( 4) INIT(0); DCL OL QMHSNDM (.MSG-ID, .MSG-FILE, .MSG-TEXT, .MSG-SIZE, .MSG-TYPE, .MSG-QS, .MSG-QSN, .REPLY-Q, .MSG-KEY, .ERR-CODE) ARG; DCL INSPTR .SHOW-MESSAGE; ENTRY SHOW-MESSAGE INT; CALLX .SEPT(4268), QMHSNDM, *; /* SEND MSG TO MSGQ */ B .SHOW-MESSAGE; PEND;