DCL DD RESOLVE CHAR(34); DCL DD RESOLVE-TYPE CHAR( 2) DEF(RESOLVE) POS( 1); DCL DD RESOLVE-NAME CHAR(30) DEF(RESOLVE) POS( 3); DCL DD RESOLVE-AUTH CHAR( 2) DEF(RESOLVE) POS(33) INIT(X'0000'); DCL SPCPTR .CONTROL INIT(CONTROL); DCL DD CONTROL CHAR(8); DCL DD CTRL-OPCODE CHAR(1) DEF(CONTROL) POS(1); DCL DD CTRL-CMD-KEY ZND(2,0) DEF(CONTROL) POS(2); DCL DD CTRL-CURSOR-POSITION CHAR(5) DEF(CONTROL) POS(4); DCL DD CTRL-CURSOR-ROW ZND(2,0) DEF(CTRL-CURSOR-POSITION) POS(1); DCL DD CTRL-CURSOR-COL ZND(3,0) DEF(CTRL-CURSOR-POSITION) POS(3); DCL SPCPTR .SCREEN INIT(SCREEN); DCL DD SCREEN CHAR(10) INIT("T010310010"); DCL DD * CHAR(10) INIT("Testscreen"); DCL DD * CHAR(10) INIT("L010420000"); DCL DD * CHAR(10) INIT("L030010028"); DCL DD S-DATE-TIME CHAR(28) INIT(" "); DCL DD * CHAR(10) INIT("L030400016"); DCL DD S-TIMESTAMP CHAR(16) INIT(" "); DCL DD * CHAR(10) INIT("L030600001"); DCL DD S-AUTO-REFRESH CHAR(1) INIT("N"); DCL DD * CHAR(10) INIT("I030700003"); DCL DD S-DELAY CHAR(3) INIT(" 3"); DCL DD * CHAR(10) INIT("O060081000"); DCL DD S-TEXT CHAR(1000) INIT(" "); DCL DD * CHAR(10) INIT("U230010079"); DCL DD PF CHAR(79) INIT("F3=Exit F10=Auto refresh F12=Cancel"); DCL DD * CHAR(10) INIT(".000000000"); /* END OF SCREEN */ DCL OL MISCRNIO(.CONTROL, .SCREEN); DCL SYSPTR .MISCRNIO; DCL SPCPTR .INVPARM INIT(INVPARM); DCL DD INVPARM CHAR(3); DCL DD INVITED-DELAY BIN(2) DEF(INVPARM) POS(1); DCL DD INVITED-PFKEY CHAR(1) DEF(INVPARM) POS(3); DCL OL MIINVDSP(.INVPARM) ARG; DCL SYSPTR .MIINVDSP; /*******************************************************************/ ENTRY * EXT; CPYBLA RESOLVE-TYPE, X'0201'; CPYBLAP RESOLVE-NAME, "MISCRNIO", " "; RSLVSP .MISCRNIO, RESOLVE, *, *; CPYBLA CTRL-OPCODE, "OPEN"; CALLX .MISCRNIO, MISCRNIO, *; CPYBLA CTRL-CURSOR-POSITION, "01001"; CPYBLA S-AUTO-REFRESH, "N"; CPYBLAP RESOLVE-NAME, "MIINVDSP", " "; RSLVSP .MIINVDSP, RESOLVE, *, *; DIALOG-LOOP: CALLI PUT-THE-SCREEN, *, .PUT-THE-SCREEN; CMPBLA(B) S-AUTO-REFRESH, "Y"/NEQ(GET-THE-SCREEN); WAIT-FOR-INVITED: CALLX .MIINVDSP, MIINVDSP, *; CMPBLA(B) INVITED-PFKEY, X'00'/EQ(DIALOG-LOOP); CPYBLA S-AUTO-REFRESH, "N"; CALLI PUT-THE-SCREEN, *, .PUT-THE-SCREEN; GET-THE-SCREEN: CPYBLA CTRL-OPCODE, "READ"; CALLX .MISCRNIO, MISCRNIO, *; CHECK-PASSIVE-KEYS: CMPNV(B) CTRL-CMD-KEY, 03/EQ(EXIT); CMPNV(B) CTRL-CMD-KEY, 10/EQ(AUTOMATIC); CMPNV(B) CTRL-CMD-KEY, 12/EQ(CANCEL); CHECK-ACTIVE-KEYS: B DIALOG-LOOP; AUTOMATIC: CPYBLA S-AUTO-REFRESH, "Y"; CVTEFN INVITED-DELAY, S-DELAY, *; B DIALOG-LOOP; EXIT: CANCEL: CPYBLA CTRL-OPCODE, "CLOSE"; CALLX .MISCRNIO, MISCRNIO, *; RTX *; /*******************************************************************/ DCL INSPTR .PUT-THE-SCREEN; ENTRY PUT-THE-SCREEN INT; CALLI GET-DATE-TIME, *, .GET-DATE-TIME; CPYBRAP S-DATE-TIME, YMDHMS, " "; CVTHC S-TIMESTAMP, MCH-TIMESTAMP; CMPBLA(B) S-AUTO-REFRESH, "Y"/NEQ(=+2); CPYBLA S-TEXT, "Press a function key to stop refresh";: CMPBLA(B) S-AUTO-REFRESH, "N"/NEQ(=+2); CPYBREP S-TEXT, " ";: CPYBLA CTRL-CURSOR-POSITION, "01001"; CPYBLA CTRL-OPCODE, "WRITE"; CALLX .MISCRNIO, MISCRNIO, *; B .PUT-THE-SCREEN; DCL SPCPTR .MCH-ATTR INIT(MCH-ATTR); DCL DD MCH-ATTR CHAR(16); DCL DD MCH-BYTES-PROVIDED BIN(4) DEF(MCH-ATTR) POS(1) INIT(16); DCL DD MCH-TIMESTAMP CHAR(8) DEF(MCH-ATTR) POS(9); DCL DD MCH-TIME-HI BIN(4) UNSGND DEF(MCH-TIMESTAMP) POS(1); DCL DD MCH-TIME-LO BIN(4) UNSGND DEF(MCH-TIMESTAMP) POS(5); DCL INSPTR .GET-DATE-TIME; ENTRY GET-DATE-TIME INT; 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 YMDHMS CHAR(21); DCL DD YEAR ZND(4,0) DEF(YMDHMS) POS( 1); DCL DD DSEP1 CHAR( 1) DEF(YMDHMS) POS( 5) INIT("/"); DCL DD MONTH ZND(2,0) DEF(YMDHMS) POS( 6); DCL DD DSEP2 CHAR( 1) DEF(YMDHMS) POS( 8) INIT("/"); DCL DD DAY ZND(2,0) DEF(YMDHMS) POS( 9); DCL DD * CHAR( 2) DEF(YMDHMS) POS(11) INIT(" "); DCL DD HOUR ZND(2,0) DEF(YMDHMS) POS(13); DCL DD TSEP1 CHAR( 1) DEF(YMDHMS) POS(15) INIT(":"); DCL DD MIN ZND(2,0) DEF(YMDHMS) POS(16); DCL DD TSEP2 CHAR( 1) DEF(YMDHMS) POS(18) INIT(":"); DCL DD SEC ZND(2,0) DEF(YMDHMS) POS(19); DCL DD * CHAR( 1) DEF(YMDHMS) POS(21) INIT(" "); MATMATR .MCH-ATTR, X'0100'; /* MACHINE CLOCK */ CPYNV TIMESTAMP-LO, MCH-TIME-LO; CPYNV TIMESTAMP-HI, MCH-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; B .GET-DATE-TIME;