//jobname JOB (ACCT#),CLASS=x,MSGCLASS=x,NOTIFY=user-id <- CHECK //* ----------------------------------------------------------------- //* @os Install ... <- CHECK //* //* Step1: //* File Transfer to MVS . //* Step2: //* Enter Flow Line //* => X ALL;F '<- CHECK' ALL (Enter) //* Step3: <- CHECK //* Update Non-Exclusive Line . <- CHECK //* e.g. => C serial VOL001 ALL NX (Enter) <- CHECK //* Step4: <- CHECK //* Submit This JCL. <- CHECK //* Step5: <- CHECK //* Copy @enq Clist <- CHECK //* enqc.txt -> your.clist(@ENQ) <- CHECK //* Step6: <- CHECK //* Enter Flow Line on ISPF Command Line . <- CHECK //* => TSO @ENQ ( Enter ) <- CHECK //* <- CHECK //* ----------------------------------------------------------------- //A EXEC PGM=IEV90,PARM=OBJECT,REGION=2000K //SYSIN DD * START * MACRO &NAME @WRITE &MES Write to Result *## TPUT &MES,L'&MES TSO Terminal PUT SYSPRINT,&MES SYSPRINT DD Statment MVC MESSAGE(79),&MES System Console LA R01,WTOAREA SVC 35 * WTO Message MEND * * ----------------------------------------------------------------- DC C'<< @ENQ_v2r0 : Resource Information Block Search >> ' ENQV DC CL6'v2r0m0' DC C' ) _ Kimu // Compiled Date : &SYSDATE _ &SYSTIME ' * ----------------------------------------------------------------- PRINT NOGEN @ENQ CSECT SAVE (14,12),T,* BALR R03,0 USING *,R03 Base Reg. R03 ST R13,SAVEAREA+4 Store Old S.A. LR R12,R13 LA R13,SAVEAREA Load New S.A. ST R13,8(R12) Store New S.A. to Old S.A. * L R01,0(R01) Get Parm Area Address LH R12,0(R01) R12 <- Parm Length LA R11,2(R01) R11 <- Parm Address * ----------------------------------------- * Initial Process ... * * FLAG = 'xxxxxxx0' * 1 Final Scan Request * 1 Waitting Resource Found * 1 Reserved Unit Search * 1 Target Resource Found * * 1 Waitting Resource Search * 1 Reserved Unit Search * 1 Specify R-Name Search * XC FLAG,FLAG Flag Clear OPEN (SYSPRINT,(OUTPUT)) Open SYSPRINT DD * ----------------------------------------- * Parmeter Editting ... LTR R12,R12 If Parm is Nothing BZ P_NOTHG goto P_NOTHG CL R12,=F'1' If Parameter Length is 1 BNE P_RESS and CLI 0(R11),C'R' Parameter is 'R' BNE P_RESS goto P_RESS P_RESV EQU * OI FLAG,X'04' Reserved Unit Search @WRITE #RESHDR3 XC LRNAME,LRNAME R-Name Length <- 0 B WAIT_SRH P_RESS EQU * OI FLAG,X'02' Specify R-Name Search ST R12,LRNAME R-Name Length <- L'Parm BCTR R12,0 STC R12,*+5 MVC RNAME(0),0(R11) Copy Parameter Work Area STC R12,*+5 MVC #RESHDR1+22(0),0(R11) Copy Header-1 @WRITE #RESHDR1 B RES_SRH * Waitting Resource Search ... P_NOTHG EQU * OI FLAG,X'08' Waitting Resource Search @WRITE #RESHDR2 B WAIT_SRH * ----------------------------------------- * Waitting Resource Search ... WAIT_SRH EQU * TM FLAG,X'80' Check End of RIB BO TERM00 goto TERM00 GQSCAN MF=(E,GQSCANL) CL R15,=F'4' Target Request Not-Found BE TERM00 CL R15,=F'8' Target Request Over-Flow BE RIBEDIT OI FLAG,X'80' Final Request Flag Set B RIBEDIT * ----------------------------------------- * Specify R-Name Scan Request and Reserved Unit Request ... RES_SRH EQU * TM FLAG,X'80' Check End of RIB BO TERM00 goto TERM00 L R12,LRNAME Load Length of R-Name GQSCAN MF=(E,GQSCANL),RESNAME=(QNAME,RNAME,(R12),GENERIC,0) CL R15,=F'4' Target Request Not-Found BE NOTFND CL R15,=F'8' Target Request Over-Flow BE RIBEDIT OI FLAG,X'80' Final Request Flag Set B RIBEDIT * ----------------------------------------- * Resource Information Block (RIB) Edit ... RIBEDIT EQU * LR R12,R01 *R12 <- Number of RIB LR R11,R00 *R11 <- Length of RIB,RIBE LA R04,QAREA *R04 <- QAREA Address USING RIB,R04 RIB Dsect NEXTRIB EQU * NI FLAG,X'9F' Clear Waitting Res Flag LR R01,R11 SRL R01,16 R01 <- Length of RIB LA R05,0(R04,R01) *R05 <- RIB Var Address USING RIBVAR,R05 RIB Var Dsect LH R09,RIBSCOPE R09 <- Length of RIBV N R09,=X'000000FF' (RIBRNMLN) LA R01,03(R09,R01) R01 <- Offset RIBE SRL R01,2 Clear Final Bit SLL R01,2 LA R06,0(R04,R01) *R06 <- RIBE Address USING RIBE,R06 RIBE Dsect * - Reserved Unit Find - TM FLAG,X'04' If Not Reserved Unit Search BNO RESV_X goto RESV_X LR R02,R06 R02 <- RIBE Address USING RIBE,R02 RIBE Dsect L R01,RIBNRIBE R01 <- Number of RIBE RES_RIBE EQU * TM RIBERFLG,RIBERESV If Reserved Flag is True BO RESV_ON goto RESV_ON LR R15,R11 N R15,=X'0000FFFF' R15 <- Length of RIBE LA R02,0(R02,R15) R02 <- Next RIB BCT R01,RESV_X Loop out RESV_X B RES_RIBE goto RES_RIBE DROP R02 RESV_ON EQU * OI FLAG,X'20' Reserved Unit Found RESV_X EQU * * * - Waitting Task Find - L R01,RIBNTWE R01 <- Exclusive Wait Number LTR R01,R01 if Wait Number is Not 0 BNZ WAIT_ON goto WAIT_ON L R01,RIBNTWS R01 <- Shared Wait Number LTR R01,R01 if Wait Number is Not 0 BNZ WAIT_ON goto WAIT_ON B WAIT_X WAIT_ON EQU * OI FLAG,X'40' Waitting Tasks Found WAIT_X EQU * * - Q-Name - MVC #RESNAME+5(8),RIBQNAME Copy Q-Name CALL @OS#6HC2,(#RESNAME+5,#RESHEX1+5,#RESHEX2+5,8) * - R-Name - MVI #RESNAME+17,C' ' Clear R-Name Area MVC #RESNAME+18(L'#RESNAME-18),#RESNAME+17 MVI #RESHEX1+17,C' ' MVC #RESHEX1+18(L'#RESHEX1-18),#RESHEX1+17 MVI #RESHEX2+17,C' ' MVC #RESHEX2+18(L'#RESHEX2-18),#RESHEX2+17 * CL R09,=F'61' if R-Name Length > 61 Byte BNH RNAME_S goto RNAME_S LA R09,61 R-Name LEngth <- 61 * RNAME_S EQU * BCTR R09,0 STC R09,*+5 MVC #RESNAME+17(0),RIBRNAME Copy R-Name LA R09,1(R09) CALL @OS#6HC2,(#RESNAME+17,#RESHEX1+17,#RESHEX2+17,(R09)) * - Status ( SYS,SYSS,STEP,GLOBAL) - MVC #RESOWNR+22(4),=CL4' ' TM RIBSCOPE,RIBSYS if Scope is System BNO SCOPE_S MVC #RESOWNR+22(4),=CL4'SYS ' SCOPE_S EQU * TM RIBSCOPE,RIBSYSS if Scope is Systems BNO SCOPE_SS MVC #RESOWNR+22(4),=CL4'SYSS' SCOPE_SS EQU * TM RIBSCOPE,RIBSTEP if Scope is Step BNO SCOPE_ST MVC #RESOWNR+22(4),=CL4'STEP' SCOPE_ST EQU * MVI #RESOWNR+27,C'_' TM RIBSCOPE,RIBGLBL if Global ENQ BNO SCOPE_GL MVI #RESOWNR+27,C'G' SCOPE_GL EQU * * - Number of Task - L R02,RIBNTO Copy Number of Task CVD R02,PACKW MVC #RESOWNR+59(4),PATT ED #RESOWNR+59(4),PACKWT * - Number of Waitting Exclusive Task - L R02,RIBNTWE Copy Number of Exclusive Wait CVD R02,PACKW MVC #RESOWNR+66(4),PATT ED #RESOWNR+66(4),PACKWT * - Number of Waitting Shared Task - L R02,RIBNTWS Copy Number of Shared Wait CVD R02,PACKW MVC #RESOWNR+73(4),PATT ED #RESOWNR+73(4),PACKWT * - Write to Q-Name and R-Name - TM FLAG,X'08' If Waitting Resource Not Srh BNO W_NAME1 goto W_NAME1 TM FLAG,X'40' If Waitting Not Found BNO W_NAME_X goto W_NAMEX W_NAME1 EQU * TM FLAG,X'04' If Reserved Unit Not Search BNO W_NAME2 goto W_NAME2 TM FLAG,X'20' If Reserved Unit Not Found BNO W_NAME_X goto W_NAMEX W_NAME2 EQU * @WRITE #RESNAME Write @WRITE #RESHEX1 @WRITE #RESHEX2 W_NAME_X EQU * * - Load Number of RIBE - L R07,RIBNRIBE * - RIBE Loop - NEXTRIBE EQU * * - Job-Name - MVC #RESOWNR+04(8),RIBEJBNM * - SID - MVC #RESOWNR+15(4),RIBESYSN * - Owner ( OWN or WAIT ) - MVC #RESOWNR+37(4),=CL4'OWNS' TM RIBESFLG,RIBESTAT BO RE_STAT MVC #RESOWNR+37(4),=CL4'WAIT' RE_STAT EQU * * - Type ( Share or Exclusive ) - MVC #RESOWNR+31(3),=CL3'SHR' TM RIBERFLG,RIBETYPE BO RE_TYPE MVC #RESOWNR+31(3),=CL3'EXC' RE_TYPE EQU * * - Reserved ( Reserved or _ ) - MVI #RESOWNR+44,C'_' MVC #RESOWNR+47(4),=CL4'____' TM RIBERFLG,RIBERESV BNO RE_RESV MVI #RESOWNR+44,C'R' USING UCBOB,R10 R12 <- UCB Base Reg. * MVS V5 * L R10,RIBEUCB CL R10,=X'01000000' BNH SKIPXA LA R01,SKIPXA O R01,XABIT BSM 0,R01 SKIPXA EQU * * MVS V5 * LH R02,UCBCHAN CL R10,=X'01000000' BNH SKIP370 * MVS V5 * LA R01,SKIP370 BSM 0,R01 SKIP370 EQU * * MVS V5 * STH R02,WK_H Copy Unit Address (Bin) DROP R10 CALL @OS#6HC,(WK_H,#RESOWNR+47,2) RE_RESV EQU * * - Write to JobName and other - TM FLAG,X'08' BNO W_OWNR1 TM FLAG,X'40' BNO W_OWNR_X W_OWNR1 EQU * TM FLAG,X'04' BNO W_OWNR2 TM FLAG,X'20' BNO W_OWNR_X W_OWNR2 EQU * OI FLAG,X'10' @WRITE #RESOWNR W_OWNR_X EQU * BCT R07,NEXT_E LR R01,R11 N R01,=X'0000FFFF' R01 <- Length of RIBE LA R04,0(R06,R01) BCT R12,NEXTRIB * TM FLAG,X'02' BO RES_SRH B WAIT_SRH Next Scan Blanch NEXT_E EQU * * - RIBE Loop - LR R01,R11 N R01,=X'0000FFFF' R01 <- Length of RIBE LA R06,0(R06,R01) B NEXTRIBE TERM00 EQU * TM FLAG,X'10' BO TERMINAT TM FLAG,X'08' BNO WAIT_MES @WRITE #MES001E B TERMINAT WAIT_MES EQU * TM FLAG,X'04' BNO RESV_MES @WRITE #MES002E B TERMINAT RESV_MES EQU * @WRITE #MES004I TERMINAT EQU * @WRITE #RESTERM CLOSE (SYSPRINT) FILE CLOSE L R13,SAVEAREA+4 RETURN (14,12),RC=0 NOTFND EQU * @WRITE #MES003E B TERMINAT SYSPRINT DCB DSORG=PS,MACRF=(PM),DDNAME=SYSPRINT,RECFM=F,LRECL=79, * BLKSIZE=79 * GQSCANL GQSCAN AREA=(QAREA,LQAREA),SCOPE=ALL,QUIT=NO,TOKEN=TOKEN, * MF=L * DS 0F SAVEAREA DS 18F XABIT DC 0F'0',X'80000000' FLAG DS XL1 LRNAME DC F'0' QNAME DC CL8'SYSDSN ' RNAME DC CL100' ' DS 0D TOKEN DC 296X'00' PACKW DS 0D DS F DS H PACKWT DS H PATT DC XL4'40202020' * ------------------------------------------------------------------- WK_H DS H Parmeter Work Area * - MESSAGES -------------------------------------------------------- * 0....+....1....+....2....+....3....+....4....+....5 * 5....+....6....+....7....+....8 #RESHDR1 DC CL79'@ ENQ-Search R-Name : -----------------------------* ----------------------------' #RESHDR2 DC CL79'@ ENQ-Waitting Resource Search --------------------* ----------------------------' #RESHDR3 DC CL79'@ ENQ-Reserved Resource Search --------------------* ----------------------------' #RESTERM DC CL79'@ -------------------------------------------------* ----------------------------' #RESNAME DC CL79'# QN:________ RN:' #RESHEX1 DC CL79'. :________ :' #RESHEX2 DC CL79'. :________ :' * Q-Name R-Name #RESOWNR DC CL79'> J:________ S:____ S:____-_ T:___ S:____ R:_ (____* ) G:_ O:____ X:____ S:____' * JobName Asid Stat-G Typ Resv Glbl * Adr #MES001E DC CL79'@ENQ001E ENQ-Waitting Resource Nothing .' #MES002E DC CL79'@ENQ002E ENQ-Reserved Unit Nothing .' #MES003E DC CL79'@ENQ003E ENQ-Target Resource Information Nothing .' #MES004I DC CL79'@ENQ003I End of Search Resource .' * 0....+....1....+....2....+....3....+....4....+....5 * 5....+....6....+....7....+....8 * --- WTO --- WTOAREA DS 0F DC AL2(WTOLEN) DC B'0000000000000000' MESSAGE DC CL80'### ENTER -> ' WTOLEN EQU *-WTOAREA LTORG DS 0D QAREA DS 1024X LQAREA EQU *-QAREA PRINT NOGEN EJECT DSECT ISGRIB * --- UCB --------------------------------------------------------- * PRINT GEN DSECT IEFUCBOB LIST=YES R00 EQU 00 R01 EQU 01 R02 EQU 02 R03 EQU 03 R04 EQU 04 R05 EQU 05 R06 EQU 06 R07 EQU 07 R08 EQU 08 R09 EQU 09 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 END @ENQ /* //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR // DD DSN=SYS1.AMODGEN,DISP=SHR //* DD DSN=SYS1.MODGEN,DISP=SHR //SYSUT1 DD UNIT=(SYSDA,SEP=SYSLIB),SPACE=(CYL,(10,5)),DSN=&SYSUT1 //SYSPUNCH DD DUMMY //*YSPUNCH DD SYSOUT=*,DCB=(BLKSIZE=800),SPACE=(CYL,(5,5,0)) //SYSPRINT DD SYSOUT=*,DCB=(BLKSIZE=3509), // UNIT=(,SEP=(SYSUT1,SYSPUNCH)) //SYSLIN DD DISP=(,PASS),UNIT=SYSDA,SPACE=(CYL,(5,5,0)), // DCB=(BLKSIZE=400),DSN=&&LOADSET //L EXEC PGM=IEWL,PARM='MAP,LET,LIST', // REGION=1M,COND=(8,LT,A) //SYSLIB DD DSN=your.objlib,DISP=SHR //SYSLIN DD DSN=&&LOADSET,DISP=(OLD,DELETE) // DD DDNAME=SYSIN //SYSLMOD DD DISP=SHR,UNIT=SYSDA, // DSN=your.loadlib(@ENQ#003) //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(3,2)),DSN=&SYSUT1 //SYSPRINT DD SYSOUT=*,DCB=(RECFM=FB,BLKSIZE=3509) //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(3,2)),DSN=&SYSUT1 //G EXEC PGM=*.L.SYSLMOD,COND=((8,LT,A),(4,LT,L)), // PARM='userid' //SNAPDD DD SYSOUT=* //SYSPRINT DD SYSOUT=* //