PGM PARM(&OBJ &LIB &OBJTYPE &MBRNAME &JOB &USER &JOBNBR) DCL VAR(&OBJ) TYPE(*CHAR) LEN(10) DCL VAR(&LIB) TYPE(*CHAR) LEN(10) DCL VAR(&OBJTYPE) TYPE(*CHAR) LEN(10) DCL VAR(&MBRNAME) TYPE(*CHAR) LEN(10) DCL VAR(&JOB) TYPE(*CHAR) LEN(10) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&JOBNBR) TYPE(*CHAR) LEN( 6) DCL VAR(&USRSPC) TYPE(*CHAR) LEN(20) DCL VAR(&EXTATR) TYPE(*CHAR) LEN(10) DCL VAR(&INITSIZE) TYPE(*CHAR) LEN( 4) DCL VAR(&INITVALUE) TYPE(*CHAR) LEN( 1) DCL VAR(&PUBAUTH) TYPE(*CHAR) LEN(10) DCL VAR(&TEXT) TYPE(*CHAR) LEN(50) DCL VAR(&ERRCODE) TYPE(*CHAR) LEN( 8) DCL VAR(&QUALOBJ) TYPE(*CHAR) LEN(20) DCL VAR(&POS) TYPE(*CHAR) LEN( 4) DCL VAR(&LEN) TYPE(*CHAR) LEN( 4) DCL VAR(&TEMP) TYPE(*CHAR) LEN( 4) DCL VAR(&OFFSET) TYPE(*DEC) LEN(10 0) DCL VAR(&ENTCOUNT) TYPE(*DEC) LEN(10 0) DCL VAR(&ENTSIZE) TYPE(*DEC) LEN(10 0) DCL VAR(&ENTRY) TYPE(*CHAR) LEN(64) DCL VAR(&LOCKSTATE) TYPE(*CHAR) LEN(10) DCL VAR(&LOCKSTATUS) TYPE(*DEC) LEN(10 0) DCL VAR(&LOCKTYPE) TYPE(*DEC) LEN(10 0) DCL VAR(&SHARE) TYPE(*CHAR) LEN(1) DCL VAR(&SCOPE) TYPE(*CHAR) LEN(1) DCL VAR(&THREAD) TYPE(*CHAR) LEN(8) /********************************************************** + * CREATE A USER SPACE TO STORE THE LIST OF JOBS THAT ARE + * LOCKING AN OBJECT. + ************************************************************/ CHGVAR VAR(%BIN(&INITSIZE)) VALUE(65536) CHGVAR VAR(&INITVALUE) VALUE(X'00') CHGVAR VAR(&USRSPC) VALUE('OBJLOCKS QTEMP') CHGVAR VAR(&EXTATR) VALUE('MYPGM') CHGVAR VAR(&PUBAUTH) VALUE('*EXCLUDE') CHGVAR VAR(&TEXT) VALUE('USER SPACE TO CONTAIN OUTPUT FROM QWCLOBJL API') CHGVAR VAR(%BIN(&ERRCODE 1 4)) VALUE(0) CALL PGM(QUSCRTUS) PARM(&USRSPC + &EXTATR + &INITSIZE + &INITVALUE + &PUBAUTH + &TEXT + '*YES' + &ERRCODE ) /********************************************************** + * TELL THE QWCLOBJL API TO PUT A LIST OF LOCKS FOR THE + * GIVEN OBJECTS INTO THE USER SPACE + ************************************************************/ CHGVAR VAR(&QUALOBJ) VALUE(&OBJ *CAT &LIB) CHGVAR VAR(%BIN(&ERRCODE 1 4)) VALUE(0) CALL PGM(QWCLOBJL) PARM(&USRSPC + 'OBJL0100' + &QUALOBJ + &OBJTYPE + &MBRNAME + &ERRCODE ) /********************************************************** + * RETRIEVE INFORMATION ABOUT WHERE THE LIST ENTRIES ARE + * LOCATED IN THE USER SPACE + * + * POSITION 125-128 = OFFSET TO THE LIST DATA + * 133-136 = NUMBER OF ENTRIES IN LIST + * 137-140 = SIZE OF EACH LIST ENTRY + ************************************************************/ CHGVAR VAR(%BIN(&POS)) VALUE(125) CHGVAR VAR(%BIN(&LEN)) VALUE(4) CALL PGM(QUSRTVUS) PARM(&USRSPC &POS &LEN &TEMP) CHGVAR VAR(&OFFSET) VALUE(%BIN(&TEMP)) CHGVAR VAR(%BIN(&POS)) VALUE(133) CALL PGM(QUSRTVUS) PARM(&USRSPC &POS &LEN &TEMP) CHGVAR VAR(&ENTCOUNT) VALUE(%BIN(&TEMP)) CHGVAR VAR(%BIN(&POS)) VALUE(137) CALL PGM(QUSRTVUS) PARM(&USRSPC &POS &LEN &TEMP) CHGVAR VAR(&ENTSIZE) VALUE(%BIN(&TEMP)) /********************************************************** + * READ THE LIST OF ENTRIES FROM THE USER SPACE + ************************************************************/ CHGVAR VAR(%BIN(&POS)) VALUE(1 + &OFFSET) CHGVAR VAR(%BIN(&LEN)) VALUE(64) /* SIZE OF &ENTRY VAR */ LOOP: IF (&ENTCOUNT *GT 0) DO /* READ A SINGLE ENTRY FROM THE USER SPACE */ CALL PGM(QUSRTVUS) PARM(&USRSPC &POS &LEN &ENTRY) CHGVAR VAR(&JOB) VALUE(%SST(&ENTRY 1 10)) CHGVAR VAR(&USER) VALUE(%SST(&ENTRY 11 10)) CHGVAR VAR(&JOBNBR) VALUE(%SST(&ENTRY 21 6)) CHGVAR VAR(&LOCKSTATE) VALUE(%SST(&ENTRY 27 10)) CHGVAR VAR(&LOCKSTATUS) VALUE(%BIN(&ENTRY 37 4)) CHGVAR VAR(&LOCKTYPE) VALUE(%BIN(&ENTRY 41 4)) CHGVAR VAR(&MBRNAME) VALUE(%SST(&ENTRY 45 10)) CHGVAR VAR(&SHARE) VALUE(%SST(&ENTRY 55 1)) CHGVAR VAR(&SCOPE) VALUE(%SST(&ENTRY 56 1)) CHGVAR VAR(&THREAD) VALUE(%SST(&ENTRY 57 8)) /* AT THIS POINT, THE FIELDS ABOVE SHOULD BE CORRECT + FOR ONE OF THE JOBS IN THE LIST. YOU CAN NOW + ISSUE A SNDMSG, SNDBRKMSG OR ENDJOB AS NEEDED */ /* FOR EXAMPLE: */ GOTO END SNDMSG MSG('YOU HAVE 5 SECONDS TO GET OUT OF THAT + PROGRAM, BUDDY.') TOUSR(&USER) ENDJOB JOB(&JOBNBR/&USER/&JOB) OPTION(*CNTRLD) DELAY(5) MONMSG MSGID(CPF1362 CPF1363) /* ADVANCE TO NEXT ENTRY IN LIST */ CHGVAR VAR(%BIN(&POS)) VALUE(%BIN(&POS) + &ENTSIZE) CHGVAR VAR(&ENTCOUNT) VALUE(&ENTCOUNT - 1) GOTO LOOP ENDDO END: /* DELETE THE USER SPACE, WE'RE DONE! */ CALL PGM(QUSDLTUS) PARM(&USRSPC &ERRCODE) ENDPGM