//DSPSCIX0 JOB MSGLEVEL=(1,1),MSGCLASS=H,CLASS=A,NOTIFY=&SYSUID, 00010000 // REGION=0M 00011000 //ASMIT PROC MBR=TEMPNAME 00020000 //* IMS V11 DSPSCIX0 (IMSPLEX=) exit for PROD images. 00030002 //ASM EXEC PGM=ASMA90,PARM='NODECK,OBJECT,LIST,XREF(SHORT)' 00040000 //SYSPRINT DD SYSOUT=* 00041000 //SYSLIN DD UNIT=3390,DISP=(,PASS,DELETE),SPACE=(CYL,(1,1)), 00042000 // DCB=(RECFM=F,LRECL=80,BLKSIZE=80) 00043000 //SYSLIB DD DISP=SHR,DSN=MVSBUILD.IMS111.SDFSMAC 00044001 // DD DISP=SHR,DSN=SYS1.MACLIB 00045000 //SYSUT1 DD UNIT=3390,DISP=(,DELETE,DELETE),SPACE=(CYL,(1,1)) 00046000 //* 00047000 //LKED EXEC PGM=IEWL,COND=(0,LT,ASM), 00048000 // REGION=1024K, 00049000 // PARM='RENT,LIST,MAP,XREF,AMODE(31),RMODE(ANY)' 00049100 //SYSPRINT DD SYSOUT=* 00049200 //SYSLIN DD DISP=(OLD,DELETE,DELETE), 00049300 // DSN=*.ASM.SYSLIN,VOL=REF=*.ASM.SYSLIN 00049400 //SYSLMOD DD DISP=SHR,DSN=IMS1110.PET.DYNALLOC(&MBR) 00049501 //SYSUT1 DD UNIT=(3390,SEP=(SYSLMOD,SYSLIN)), 00049700 // DISP=(,DELETE,DELETE),SPACE=(CYL,(1,1)) 00049800 // PEND 00049900 //DSPSCIX0 EXEC PROC=ASMIT,MBR=DSPSCIX0 00050000 //ASM.SYSIN DD * 00051000 SCIX TITLE 'DSPSCIX0 -- DBRC SCI registration exit' 00052000 DSPSCIX0 CSECT , 00053000 */***START OF SPECIFICATIONS******************************************/ 00054000 */* */ 00055000 */*01* MODULE-NAME: */ 00056000 */* DSPSCIX0 */ 00057000 */* */ 00058000 */*01* DESCRIPTIVE-NAME: */ 00059000 */* DBRC SCI registration exit */ 00060000 */* */ 00070000 */*01* COPYRIGHT: */ 00080000 */* */ 00090000 */************************************************************@SCPYRT*/ 00100000 */* */ 00110000 */* Licensed Materials - Property of IBM */ 00120000 */* */ 00130000 */* 5635-A01 */ 00140000 */* */ 00150000 */* (C) Copyright IBM Corp. 1974,2007 All Rights Reserved. */ 00160000 */* */ 00170000 */* US Government Users Restricted Rights - Use, duplication or */ 00180000 */* disclosure restricted by GSA ADP Schedule Contract with */ 00190000 */* IBM Corp. */ 00200000 */************************************************************@ECPYRT*/ 00210000 */* */ 00220000 */* */ 00230000 */*01* STATUS: */ 00240000 */* IMS/VS 8.1 */ 00250000 */*01* FUNCTION: */ 00260000 */* Provide IMSplex name which DBRC will use */ 00270000 */* for SCI registration. This should be the */ 00280000 */* same IMSplex used by all other DBRCs that */ 00290000 */* share the same RECON data sets. */ 00300000 */* */ 00310000 */*01* OPERATION: */ 00320000 */* */ 00330000 */* DSPSCIX0 is given the data set name of */ 00340000 */* one of the RECONs and, if specified, the */ 00350000 */* value of the IMSPLEX parameter on the */ 00360000 */* job step EXEC statement. If the IMSPLEX */ 00370000 */* parameter exists, its value is returned */ 00380000 */* as the IMSplex name to be used. */ 00390000 */* */ 00400000 */* Otherwise, DSPSCIX0 searches table */ 00410000 */* PLEXTABL for an entry with a matching */ 00420000 */* data set name. The IMSplex name and */ 00430000 */* return code from that entry are returned */ 00440000 */* to DBRC. */ 00450000 */* */ 00460000 */* If the exit is called with a version 2 parameter */ 00470000 */* list, a DBRCGRP value is also passed if it */ 00480000 */* was specified as an EXEC parameter. If it does */ 00490000 */* exist, that value is returned. Otherwise the */ 00500000 */* PLEXTABL is searched and the DBRCGRP from that */ 00510000 */* entry is returned. */ 00520000 */* */ 00530000 */* The shipped version of DSPSCIX0 returns */ 00540000 */* RC04, indicating that no SCI registration */ 00550000 */* is to be done. */ 00560000 */* */ 00570000 */* DSPSCIX0 can be modified to return */ 00580000 */* IMSplex names associated with RECON data */ 00590000 */* set names, to force RECON access where */ 00600000 */* it would otherwise be denied, and to */ 00610000 */* deny RECON access under user determined */ 00620000 */* circumstances. */ 00630000 */* */ 00640000 */*02* RESTRICTIONS: */ 00650000 */* Standard linkage conventions must be */ 00660000 */* followed. */ 00670000 */* */ 00680000 */* The data set name in the last entry of */ 00690000 */* table PLEXTABL must be '*'. This */ 00700000 */* value is used to guarantee termination */ 00710000 */* of the table search. The IMSplex name */ 00720000 */* and return code in this last entry are */ 00730000 */* thus the default response when no */ 00740000 */* specific match is found. */ 00750000 */* */ 00760000 */*01* MODULE-TYPE: */ 00770000 */* CSECT. */ 00780000 */* */ 00790000 */*02* PROCESSOR: */ 00800000 */* ASSEMBLER H */ 00810000 */*02* ATTRIBUTES: */ 00820000 */* LOCATION: JPA */ 00830000 */* STATE: PROBLEM */ 00840000 */* AMODE: 31 */ 00850000 */* RMODE: ANY */ 00860000 */* KEY: CALLER */ 00870000 */* PROCESS MODE: TASK */ 00880000 */* X-MEM MODE: PRIMARY=SECONDARY=HOME */ 00890000 */* ASC MODE: PRIMARY */ 00900000 */* TYPE: REENTRANT */ 00910000 */* */ 00920000 */*01* ENTRY-POINT: */ 00930000 */* DSPSCIX0 */ 00940000 */* */ 00950000 */*02* LINKAGE: */ 00960000 */* BALR 14,15 */ 00970000 */* */ 00980000 */*03* ENTRY-REGISTERS: */ 00990000 */* R1 A(PARM LIST) */ 01000000 */* R13 A(72 BYTE MVS STANDARD SAVEAREA, */ 01010000 */* NOT AN IMS CHAINED SAVERAREA). */ 01020000 */* R14 RETURN ADDRESS */ 01030000 */* R15 ENTRY POINT ADDRESS */ 01040000 */* */ 01050000 */*01* INPUT: */ 01060000 */* PARM LIST: */ 01070000 */* WORD CONTENT */ 01080000 */* R1-> 1 ... address of 44 byte area containing */ 01090000 */* the name of one of the RECONs in */ 01100000 */* use, left justified and padded */ 01110000 */* with blanks */ 01120000 */* 2 ... address of a 5 byte area where */ 01130000 */* the IMSplex name is returned */ 01140000 */* 3 ... if the job step EXEC statement */ 01150000 */* specified a value for the parameter */ 01160000 */* IMSPLEX, this will be the address */ 01170000 */* of a 5 byte area containing that */ 01180000 */* value, left justified and padded */ 01190000 */* with blanks. Otherwise, this will */ 01200000 */* contain zeroes. */ 01210000 */* 4 ... Parmeter List version @KA00009*/ 01220000 */* 5 ... address of a 3 byte area where @KA00009*/ 01230000 */* the DBRC Group ID is returned @KA00009*/ 01240000 */* 6 ... if the job step EXEC statement @KA00009*/ 01250000 */* specified a value for the parameter@KA00009*/ 01260000 */* DBRCGRP, this will be the address @KA00009*/ 01270000 */* of a 3 byte area containing that @KA00009*/ 01280000 */* value, left justified and padded @KA00009*/ 01290000 */* with blanks. Otherwise, this will @KA00009*/ 01300000 */* contain zeroes. @KA00009*/ 01310000 */* */ 01320000 */*01* OUTPUT: */ 01330000 */* Either parameter 2 is set to an IMSplex name */ 01340000 */* or a non-zero return code is returned in */ 01350000 */* register 15. */ 01360000 */* */ 01370000 */*01* EXIT-NORMAL: */ 01380000 */* BR 14 TO CALLER. */ 01390000 */* */ 01400000 */*02* CONDITIONS: */ 01410000 */* */ 01420000 */*03* EXIT-REGISTERS: */ 01430000 */* ALL REGISTERS RESTORED */ 01440000 */* */ 01450000 */*02* RETURN-CODES: */ 01460000 */* CODE IN REGISTER 15 - EFFECT */ 01470000 */* */ 01480000 */* 0 - DBRC expects a valid IMSplex name to be */ 01490000 */* returned in the parameter list. */ 01500000 */* 4 - RECON Loss Notification is not active */ 01510000 */* and RECON access is attempted without */ 01520000 */* SCI registration. If the RECON */ 01530000 */* indicates that RECON Loss Notification */ 01540000 */* is active, DSP1136I is issued and RECON */ 01550000 */* access fails. */ 01560000 */* 8 - RECON Loss Notification is not active */ 01570000 */* and RECON access is forced without */ 01580000 */* regard to RECON content. DSP1143I is */ 01590000 */* issued. */ 01600000 */* 12 - RECON access is denied message DSP1139I */ 01610000 */* is issued. */ 01620000 */* */ 01630000 */*01* EXIT-ERROR: */ 01640000 */* NONE */ 01650000 */* */ 01660000 */* */ 01670000 */*01* CHANGE-ACTIVITY: */ 01680000 */* KA00009 021105 Add support for DBRCGRP parameter @KA00009*/ 01690000 */* KA30457 021906 Support version 1 type parm list caller @KA30457*/ 01700000 */* PK45662 052207 Fix group ID sample comment @PK45662*/ 01710000 */* */ 01720000 */* */ 01730000 */***END OF SPECIFICATIONS********************************************/ 01740000 EJECT , 01750000 DSPSCIX0 AMODE 31 01760000 DSPSCIX0 RMODE ANY 01770000 SAVE (14,12) 01780000 USING DSPSCIX0,R12 01790000 LR R12,R15 ADDRESSABILITY 01800000 B CHGID SKIP MAINTENENCE IDS 01810000 DC C'DBRC SCI REGISTRATION EXIT' 01820000 DC C' ' 01830000 DC C'DSPSCIX0' MODNAME 01840000 DC C'-' 01850000 DC C'PK45662' LATEST MAINTENENCE @PK45662 01860000 DC C'-' 01870000 DC C'1' ID 1 = KA30457 (BASE) @KA30457 01880000 DC C'A' ID A = PK45662 @PK45662 01890000 DC C' ' 01900000 CHGID DS 0H 01910000 *--------------------------------------------------------------------- 01920000 * pick up parameter addresses 01930000 *--------------------------------------------------------------------- 01940000 L R2,0(,R1) R2 = A(RECON DSN) 01950000 L R3,4(,R1) R3 = A(IMSPLEX NAME RETURN AREA) 01960000 L R4,8(,R1) R4 = A(IMSPLEX VALUE FROM EXEC CARD) 01970000 L R7,12(,R1) R7 = A(VERSION NUMNBER) @KA30457 01980000 L R7,0(,R7) GET VERSION NUMBER @KA30457 01990000 CL R7,=A(PVERS2) VERSION 2 PARAMETER LIST? @KA30457 02000000 BNL PARMLVL2 YES, GET DBRCGRP PARMS @KA30457 02010000 SR R7,R7 NO, MAKE SURE NO RETURN AREA@KA30457 02020000 SR R8,R8 NO, MAKE SURE NO DBRCGRP @KA30457 02030000 B NOGRPARM @KA30457 02040000 PARMLVL2 DS 0H @KA30457 02050000 L R7,16(,R1) R7 = A(DBRCGRP RETURN AREA) @KA00009 02060000 L R8,20(,R1) R8 = A(DBRCGRP EXEC VALUE) @KA00009 02070000 NOGRPARM DS 0H @KA30457 02080000 *--------------------------------------------------------------------- 02090000 * if IMSPLEX= specified on EXEC card, return that value @KA00009 02100000 *--------------------------------------------------------------------- 02110000 LTR R4,R4 IMSPLEX= ON EXEC STATEMENT? 02120000 BZ GRPCHK IF NOT SPECIFIED, BRANCH @KA00009 02130000 MVC 0(PNL,R3),0(R4) ELSE COPY VALUE TO RETURN AREA 02140000 GRPCHK DS 0H @KA00009 02150000 *--------------------------------------------------------------@KA00009 02160000 * if DBRCGRP= specified on EXEC card, return that value @KA00009 02170000 *--------------------------------------------------------------@KA00009 02180000 LTR R8,R8 DBRCGRP= ON EXEC STATEMENT? @KA00009 02190000 BZ NEXECPRM IF NOT SPECIFIED, BRANCH @KA00009 02200000 MVC 0(GIL,R7),0(R8) ELSE COPY TO RETURN AREA @KA00009 02210000 LTR R4,R4 RE-CHECK if IMSPLEX FOUND @KA00009 02220000 BZ NEXECPRM NO, USE TABLE TO SET @KA00009 02230000 SR R15,R15 SET RC00 - BOTH EXEC PARMS @KA00009 02240000 B EXIT AND RETURN TO DBRC 02250000 *--------------------------------------------------------------------- 02260000 * IMSPLEX= and /or DBRCGRP not found on EXEC card. Scan RECON @KA00009 02270000 * name table for DSN match to obtain values. @KA00009 02280000 *--------------------------------------------------------------------- 02290000 NEXECPRM DS 0H 02300000 LA R5,PLEXTABL R5 = A(TABLE ENTRY) 02310000 USING PTENT,R5 02320000 PTBLLOOP DS 0H 02330000 *--------------------------------------------------------------------- 02340000 * Compare RECON and table entry data set names character by character 02350000 *--------------------------------------------------------------------- 02360000 SR R6,R6 R6 = CHARACTER INDEX 02370000 LA R14,DSNL R14 = UPPER LIMIT TO INDEX 02380000 CHARLOOP DS 0H 02390000 LA R1,DSN(R6) A(CHAR IN TABLE DSN) 02400000 CLI 0(R1),C'*' WILDCARD? 02410000 BE DSNMATCH IF SO, MATCH TO HERE GOOD ENOUGH 02420000 LA R15,0(R6,R2) A(CHAR IN RECON DSN) 02430000 CLC 0(1,R1),0(R15) DSNS MATCH AT THIS CHARACTER? 02440000 BNE NEXTENT IF NOT, NEXT ENTRY 02450000 LA R6,1(,R6) ELSE ADVANCE TO NEXT CHARACTER 02460000 CR R6,R14 DONE YET? 02470000 BL CHARLOOP IF NOT, TEST NEXT CHARACTER 02480000 B DSNMATCH ELSE DSNS MATCH 02490000 *--------------------------------------------------------------------- 02500000 * Advance to next entry in PLEXTABL 02510000 *--------------------------------------------------------------------- 02520000 NEXTENT DS 0H 02530000 LA R5,EL(,R5) GO TO NEXT ENTRY 02540000 B PTBLLOOP GO SEE IF NEXT ENTRY IS A MATCH 02550000 *--------------------------------------------------------------------- 02560000 * Matching entry found. Set IMSPLEX name and return code from entry. 02570000 * @KA00009 02580000 * if DBRCGRP EXEC parm was not specified, get value from table.@KA00009 02590000 * If IMSPLEX EXEC parm was specified, RC=0 regardless of the@KA00009 02600000 * table entry's RC @KA00009 02610000 * if IMSPLEX EXEC parm was not specified, get value from table.@KA00009 02620000 * Use the RC value in the table in this case. @KA00009 02630000 *--------------------------------------------------------------------- 02640000 DSNMATCH DS 0H 02650000 LTR R8,R8 WAS DBRCGRP PARM SPECIFIED @KA00009 02660000 BNZ SETPLEXN YES, SET IMSPLEX PARM @KA00009 02670000 LTR R7,R7 DBRCGRP RETURN AREA EXIST? @KA30457 02680000 BZ CHKPLEXN NO, DON'T PASS BACK @KA30457 02690000 MVC 0(GIL,R7),GI COPY ID TO RETURN AREA @KA00009 02700000 CHKPLEXN DS 0H @KA00009 02710000 LTR R4,R4 WAS IMSPLEX PARM SPECIFIED @KA00009 02720000 BZ SETPLEXN NO, THEN COPY FROM TABLE @KA00009 02730000 SR R15,R15 YES, Set RC=0 @KA00009 02740000 B EXIT @KA00009 02750000 SETPLEXN DS 0H @KA00009 02760000 MVC 0(PNL,R3),PN TABLE IMSPLEX NAME TO RETURN AREA 02770000 ICM R15,15,RC TABLE RETURN CODE TO R15 02780000 *--------------------------------------------------------------------- 02790000 * Return to DBRC 02800000 *--------------------------------------------------------------------- 02810000 EXIT DS 0H 02820000 RETURN (14,12),T,RC=(15) 02830000 EJECT , 02840000 *--------------------------------------------------------------------- 02850000 * RECON-name-to-IMSplex-name table 02860000 * Table is searched from top down until a match is found. 02870000 *--------------------------------------------------------------------- 02880000 PTBLEYEC DS 0H TABLE EYECATCHER 02890000 DC C'PLEXTABL' 02900000 PLEXTABL DS 0H 02910000 * 02920000 * Updated 2/11/2008 BAF 02921000 * 02923000 * sample entries for a specific set of RECONs 02930000 * 02940000 DC CL(DSNL)'RECON1.PROD' RECON name 02950000 DC CL(PNL)'PROD ' IMSplex name 02960000 DC CL(GIL)'001' Sharing Group ID @PK45662 02970000 DC XL(RCL)'00000000' RC00 = use the IMSplex name 02980000 DC CL(DSNL)'RECON2.PROD' RECON name 02990000 DC CL(PNL)'PROD ' IMSplex name 03000000 DC CL(GIL)'001' Sharing Group ID @PK45662 03010000 DC XL(RCL)'00000000' RC00 = use the IMSplex name 03020000 DC CL(DSNL)'RECON3.PROD' RECON name 03030000 DC CL(PNL)'PROD ' IMSplex name 03040000 DC CL(GIL)'001' Sharing Group ID @PK45662 03050000 DC XL(RCL)'00000000' RC00 = use the IMSplex name 03060000 * 03070000 * sample entry using wildcard - returns IMSplex name of PLEXB 03080000 * for any RECON that has a data set name that begins 03090000 * with 'TEST.RECON'. Note: no characters have significance 03100000 * after the asterisk, so 'TEST.*.SITE3' = 'TEST.*' 03110000 * 03120000 * DC CL(DSNL)'TEST.RECON*' RECON name 03130000 * DC CL(PNL)'PLEXB' IMSplex name 03140000 * DC CL(GIL)'GP2' Sharing Group ID @PK45662 03150000 * DC XL(RCL)'00000000' RC00 = use the IMSplex name 03160000 * 03170000 * end of table - default exit response is not to use SCI 03180000 * for unknown RECONs. Do not change the last entry 03190000 * data set name value of '*' without making corresponding 03200000 * changes to the table search algorithm. 03210000 * 03220000 LASTNTRY EQU * 03230000 DC CL(DSNL)'*' RECON name 03240000 DC CL(PNL)' ' IMSplex name ignored with RC04 03250000 DC CL(GIL)'001' DBRCGRP ID default @KA00009 03260000 DC XL(RCL)'00000004' RC04 = no SCI registration 03270000 EJECT , 03280000 *--------------------------------------------------------------------- 03290000 * variables/constants/DSECTs 03300000 *--------------------------------------------------------------------- 03310000 PVERS1 EQU 1 Parmeter List version = 1 @KA30457 03320000 PVERS2 EQU 2 Parmeter List version = 2 @KA30457 03330000 DSNL EQU 44 data set name length 03340000 PNL EQU 5 IMSplex name length 03350000 GIL EQU 3 DBRCGRP name length @KA00009 03360000 RCL EQU 4 return code length 03370000 * 03380000 PTENT DSECT PLEXTABL entry DSECT 03390000 DSN DS CL(DSNL) data set name 03400000 PN DS CL(PNL) associated IMSplex name 03410000 GI DS CL(GIL) associated DBRC Group ID @KA00009 03420000 RC DS CL(RCL) associated return code 03430000 EL EQU *-PTENT PLEXTABL entry length 03440000 * 03450000 REQUATE register equates 03460000 END , 03470000