DCL DD FIRST-TIME-FLAG BIN(4) INIT(0); DCL DD SYSPTRS CHAR(48) BDRY(16); DCL SYSPTR .OWN-LIB DEF(SYSPTRS) POS( 1); DCL SYSPTR .TVSFMMCB DEF(SYSPTRS) POS(17); DCL SYSPTR .QVTRMSTG DEF(SYSPTRS) POS(33); DCL DD PCO CHAR(256) BASPCO; DCL SPCPTR @QTEMP DEF(PCO) POS(65); DCL DD PCO-POINTER CHAR(16) BDRY(16); DCL SPCPTR .PCO DEF(PCO-POINTER) POS( 1); DCL DD RECEIVER CHAR(136) BDRY(16); DCL DD RECEIVER-RETURNED BIN(4) DEF(RECEIVER) POS(1); DCL DD RECEIVER-AVAILABLE BIN(4) DEF(RECEIVER) POS(5); DCL DD RECEIVER-DATA CHAR(128) DEF(RECEIVER) POS(9); DCL DD DATA CHAR(128) DEF(RECEIVER-DATA) POS(1); DCL DD SPACE-SIZE BIN(4) DEF(DATA) POS(21); DCL DD SPACE-ADDR CHAR(8) DEF(DATA) POS(25); DCL DD WCB-ENTRY CHAR(104) DEF(DATA) POS(1); DCL DD WCB-DEVICE CHAR(10) DEF(WCB-ENTRY) POS( 1); DCL DD WCB-USER CHAR(10) DEF(WCB-ENTRY) POS(11); DCL DD WCB-NUMBER CHAR( 6) DEF(WCB-ENTRY) POS(21); DCL DD WCB-JOB-ADDR CHAR( 8) DEF(WCB-ENTRY) POS(41); DCL DD WCB-TYPE CHAR( 1) DEF(WCB-ENTRY) POS(97); DCL DD WCB-STATUS CHAR( 1) DEF(WCB-ENTRY) POS(98); DCL DD WCBTBL-SIZE BIN(4); DCL DD WCBTBL-SIZE-OFFSET CHAR(3) DEF(WCBTBL-SIZE) POS(2); DCL DD OFFSET-TO-DCB BIN(4); DCL DD DCB-POINTER CHAR(16) DEF(RECEIVER-DATA) POS(1); DCL DD DCB-DEVICE CHAR(10) DEF(RECEIVER-DATA) POS( 1); DCL DD DCB-HANDLE CHAR(16) DEF(RECEIVER-DATA) POS(97); DCL EXCM * EXCID(H'2201') BP(RETURN) CV("MCH") IMD; DCL SPCPTR .PARM1 PARM; DCL DD PARM-HANDLE CHAR(16) BAS(.PARM1); DCL DD PARM-HANDLE-TIME CHAR(8) DEF(PARM-HANDLE) POS( 1); DCL DD PARM-HANDLE-?1? BIN(2) DEF(PARM-HANDLE) POS( 9); DCL DD PARM-HANDLE-NBR BIN(2) DEF(PARM-HANDLE) POS(11); DCL DD PARM-HANDLE-?2? BIN(4) DEF(PARM-HANDLE) POS(13); DCL SPCPTR .PARM2 PARM; DCL DD PARM-JOB CHAR(26) BAS(.PARM2); DCL DD PARM-JOB-DEVICE CHAR(10) DEF(PARM-JOB) POS( 1); DCL DD PARM-JOB-USER CHAR(10) DEF(PARM-JOB) POS(11); DCL DD PARM-JOB-NBR CHAR( 6) DEF(PARM-JOB) POS(21); DCL OL PARAMETERS(.PARM1, .PARM2) EXT PARM MIN(2); /*******************************************************************/ ENTRY * (PARAMETERS) EXT; CPYBREP PARM-JOB, " "; CMPNV(B) FIRST-TIME-FLAG, 0/HI(GET-DEVICE-CONTROL-BLOCK); CPYNV FIRST-TIME-FLAG, 1; RESOLVE-PGMS: CALLI GET-OWN-LIB, *, .GET-OWN-LIB; CPYBLA RESOLVE-TYPE, X'0201'; CPYBLAP RESOLVE-NAME, "QVTRMSTG" , " "; RSLVSP .QVTRMSTG, RESOLVE, .OWN-LIB, *; RESOLVE-VTMCB: CPYBLA RESOLVE-TYPE, X'1900'; CPYBLAP RESOLVE-NAME, "TVSFMMCB" , " "; RSLVSP .TVSFMMCB, RESOLVE, @QTEMP, *; GET-DEVICE-CONTROL-BLOCK: CPYBWP MPTR-POINTER, .TVSFMMCB; MULT OFFSET-TO-DCB, PARM-HANDLE-NBR, 16; ADDN(S) OFFSET-TO-DCB, H'0110'; CPYBREP MPTR-OFFSET, X'00'; ADDN(S) MPTR-ADDRESS, OFFSET-TO-DCB; CPYNV LENGTH, 16; CALLI ACCESS, *, .ACCESS; CMPBLAP(B) DCB-POINTER, X'00', X'00'/EQ(RETURN); GET-DCB-ASSOCIATED-SPACE: CPYBLA MPTR-POINTER, DCB-POINTER; CPYBLA MPTR-OFFSET, X'000010'; /* ASSOCIATED SPACE */ CPYNV LENGTH, 16; CALLI ACCESS, *, .ACCESS; GET-DEVICE-NAME: CPYBLA MPTR-POINTER, DCB-POINTER; CPYNV LENGTH, 128; CALLI ACCESS, *, .ACCESS; CPYBLA PARM-JOB-DEVICE, DCB-DEVICE; CHECK-IF-CORRECT-HANDLE: CMPBLA(B) PARM-HANDLE, DCB-HANDLE/NEQ(RETURN); GET-HOME-PCO: SETSPP .PCO, PCO; CPYBLA MPTR-POINTER, PCO-POINTER; FIND-WCBTBL: ADDN(S) MPTR-ADDRESS, H'10'; CALLI ACCESS, *, .ACCESS; HAVE-WCBTBL: CPYBLA MPTR-POINTER, DATA(1:16); CPYBREP MPTR-OFFSET, X'00'; CPYNV LENGTH, 32; CALLI ACCESS, *, .ACCESS; FIND-ASSOCIATED-SPACE: CPYBLA MPTR-LO, SPACE-ADDR; CALLI ACCESS, *, .ACCESS; CPYNV WCBTBL-SIZE, SPACE-SIZE; ADDN(S) MPTR-ADDRESS, H'0300'; GET-WCBTBL-ENTRY: CPYNV LENGTH, 16; CALLI ACCESS, *, .ACCESS; CMPBLA(B) PARM-JOB-DEVICE, WCB-DEVICE/NEQ(NEXT-WCBTBL-ENTRY); HAVE-DEVICE-MATCH: CPYNV LENGTH, 104; CALLI ACCESS, *, .ACCESS; CMPBLA(B) WCB-STATUS, X'20'/NEQ(NEXT-WCBTBL-ENTRY); CMPBLA(B) WCB-TYPE , "I" /NEQ(NEXT-WCBTBL-ENTRY); HAVE-ACTIVE-ENTRY: CPYBLA PARM-JOB-USER, WCB-USER; CPYBLA PARM-JOB-NBR, WCB-NUMBER; B RETURN; NEXT-WCBTBL-ENTRY: ADDN(S) MPTR-ADDRESS, H'0400'; CMPBLA(B) MPTR-OFFSET, WCBTBL-SIZE-OFFSET/LO(GET-WCBTBL-ENTRY); RETURN: RTX *; /************************ GET OWN LIBRARY ***************************/ DCL DD RESOLVE CHAR(34); DCL DD RESOLVE-TYPE CHAR( 2) DEF(RESOLVE) POS( 1) INIT(X'0000'); 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 .PROGRAM INIT(PROGRAM); DCL DD PROGRAM CHAR(77) BDRY(16); DCL DD PGM-BYTES-PRV BIN(4) DEF(PROGRAM) POS( 1) INIT(77); DCL DD PGM-LIB-TYPE CHAR(02) DEF(PROGRAM) POS(10); DCL DD PGM-LIB-NAME CHAR(30) DEF(PROGRAM) POS(12); DCL SPCPTR .THE-STACK; DCL DD THE-STACK CHAR(8) AUTO BDRY(16); DCL DD STK-BYTES-PRV BIN(4) DEF(THE-STACK) POS( 1); DCL DD STK-BYTES-AVL BIN(4) DEF(THE-STACK) POS( 5); DCL DD STK-NBR-OF-ENTRIES BIN(4) DEF(THE-STACK) POS( 9); DCL DD STK-ENTRY(1) CHAR(128) DEF(THE-STACK) POS(17); DCL DD THE-STACK-ENTRY CHAR(128) BDRY(16); DCL SYSPTR .STK-ENTRY-PGM DEF(THE-STACK-ENTRY) POS(33); DCL INSPTR .GET-OWN-LIB; ENTRY GET-OWN-LIB INT; CPYNV STK-BYTES-PRV, 8; /* MINIMUM */ SETSPP .THE-STACK, THE-STACK; MATINVS .THE-STACK, *; MODASA .THE-STACK, STK-BYTES-AVL; CPYNV STK-BYTES-PRV, STK-BYTES-AVL; SETSPP .THE-STACK, THE-STACK; MATINVS .THE-STACK, *; OVRPGATR 1, 2; /* DO NOT CONSTRAIN ARRAY REFS */ CPYBWP THE-STACK-ENTRY, STK-ENTRY(STK-NBR-OF-ENTRIES); MATPTR .PROGRAM, .STK-ENTRY-PGM; /* MYSELF */ CPYBLA RESOLVE-TYPE, PGM-LIB-TYPE; CPYBLA RESOLVE-NAME, PGM-LIB-NAME; RSLVSP .OWN-LIB, RESOLVE, *, *; B .GET-OWN-LIB; /************************* ACCESS STORAGE ***************************/ DCL SPCPTR .LENGTH INIT(LENGTH); DCL DD LENGTH BIN(4); DCL SPCPTR .MPTR INIT(MPTR); DCL DD MPTR CHAR(16) BDRY(16); DCL DD MPTR-POINTER CHAR(16) DEF(MPTR) POS( 1); DCL DD MPTR-ADDRESS BIN(4) DEF(MPTR) POS(13); DCL DD MPTR-OFFSET CHAR(3) DEF(MPTR) POS(14); DCL DD MPTR-LO CHAR(8) DEF(MPTR) POS( 9); DCL SPCPTR .RECEIVER INIT(RECEIVER); DCL SPCPTR .RECEIVER-LENGTH INIT(RECEIVER-LENGTH); DCL DD RECEIVER-LENGTH BIN(4); DCL SPCPTR .FORMAT-NAME INIT(FORMAT-NAME); DCL DD FORMAT-NAME CHAR(8) INIT("STGI0100"); DCL SPCPTR .MAIN-STORAGE-ADDRESS INIT(MAIN-STORAGE-ADDRESS); DCL DD MAIN-STORAGE-ADDRESS CHAR(16); DCL SPCPTR .MAIN-STORAGE-IMAGE INIT(MAIN-STORAGE-IMAGE); DCL DD MAIN-STORAGE-IMAGE CHAR(10) INIT("*MSTOR"); DCL SPCPTR .ERROR-CODE INIT(ERROR-CODE); DCL DD ERROR-CODE BIN(4) INIT(0); DCL OL QVTRMSTG ( .RECEIVER , .RECEIVER-LENGTH , .FORMAT-NAME , .MAIN-STORAGE-ADDRESS , .MAIN-STORAGE-IMAGE , .ERROR-CODE) ARG; DCL INSPTR .ACCESS; ENTRY ACCESS INT; CPYNV RECEIVER-LENGTH, LENGTH; CVTHC MAIN-STORAGE-ADDRESS, MPTR-LO; CALLX .QVTRMSTG, QVTRMSTG, *; B .ACCESS; PEND;