Return to Mainframe Utilities Page
Module
PROC 0 MEM(NUL) DSN() /* ALLOWS BROWSING OF A COPY BOOK WHILE EDITING AND OPTIONALLY */ /* ENTERING THE DATA SET TO LOOK FOR THE MEMBER IN */ /********************************************************************** /* MODIFICATION 4/12/91 - DAVE LEIGH * /* ADDED CAPABILITY TO DISTINQUISH BETWEEN GSS AND SLSS SEARCHES, * /* ADDED THE CICS COPY LIBRARY TO THE SEARCH, INPROVED THE PARSING * /* PROCESSING TO FIND THE MEMBER NAME, ADDED EDIT AS WELL AS BROWSE * /* CAPABILITY (MADE "EDIT" THE DEFAULT), ADDED A "HELP" SECTION, * /* ADDED DEBUG CAPABILITY, AND ADDED DOCUMENTATION. * /* MODIFICATION 10/23/92 - D SLEEMAN * /* CHANGED TO BE USED AS AN EDIT MACRO OR A TSO COMMAND * /* MODIFICATION 12/07/94 - D LEIGH * /* UPDATED SLSS COPYLIB CONCATENATION * /* ADDED UNISTAR LIBRARIES * /* ADDED EXEC SQL INCLUDE CAPABILITY * /********************************************************************** CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ERROR DO SET &MODE=CLIST RETURN END ISREDIT MACRO (TEMPDSN) ERROR OFF /*** CHECK THE DEBUG SWITCH ***/ ISPEXEC VGET DBGSWTCH PROFILE IF &DBGSWTCH = ON THEN + CONTROL MSG LIST CONLIST SYMLIST NOFLUSH NOPROMPT ELSE + CONTROL NOMSG NOLIST NOFLUSH NOPROMPT IF &MODE = CLIST THEN + DO SET TEMPDSN = &DSN SET MEMBER = &MEM END ISPEXEC CONTROL ERRORS RETURN IF &STR(&TEMPDSN) = HELP THEN GOTO HELPSEC /********************************************************************** /* SAVE THE USER'S CURRENT LOCATION. * /********************************************************************** IF &MODE ¬= CLIST THEN + ISREDIT (SLN,SCL) = CURSOR /********************************************************************** /* ATTEMPT TO DETERMINE IF THIS IS A GSS OR SLSS SEARCH * /********************************************************************** IF &MODE ¬= CLIST THEN + DO ISREDIT (DATASET) = &TEMPDSN ISREDIT (MEMBER) = MEMBER END IF &SUBSTR(1:2,&STR(&SYSUID)) = &STR(P@) THEN SET SEARCH = SLSS IF &SUBSTR(1:2,&STR(&SYSUID)) = &STR(P#) THEN SET SEARCH = GSS IF &SYSINDEX(&STR(SLSS.),&STR(&DATASET)) > 0 THEN SET SEARCH = SLSS IF &SYSINDEX(&STR(GSS.),&STR(&DATASET)) > 0 THEN SET SEARCH = GSS IF &SYSINDEX(&STR(SLS),&STR(&DATASET)) = 1 THEN SET SEARCH = SLSS IF &SYSINDEX(&STR(GSS),&STR(&DATASET)) = 1 THEN SET SEARCH = GSS IF &SEARCH = THEN SET SEARCH = SLSS /********************************************************************** /* WHAT EDIT PROFILE NUMBERING SCHEME IS BEING USED? * /********************************************************************** IF &MODE = CLIST THEN + GOTO SKIPFIND ISREDIT (X,Y) = NUMBER IF &X = ON AND &SYSINDEX(&STR( COBOL),&STR(&Y)) > 0 THEN + DO SET COL1 = 1 SET COL2 = 66 END ELSE + DO SET COL1 = 7 SET COL2 = 72 END /********************************************************************** /* GET OUT IF THIS IS A COMMENT LINE. * /********************************************************************** ISREDIT FIND FIRST '*' &COL1 .ZCSR .ZCSR IF &LASTCC = 0 THEN + DO SET ZEDSMSG = &STR(COMMENT LINE) SET ZEDLMSG = &STR(*** THIS IS A COMMENT LINE *** + NO PROCESSING PERFORMED ***) ISPEXEC SETMSG MSG(UTLZ001) GOTO FINISH END /********************************************************************** /* FIND THE MEMBER NAME ON THE LINE. * /********************************************************************** SET MEMBER = ISREDIT FIND FIRST ' COPY ' &COL1 &EVAL(&COL1 + 55 + 3) .ZCSR .ZCSR IF &LASTCC ¬= 0 THEN + DO ISREDIT FIND FIRST ' CICSCOPY ' + &COL1 &EVAL(&COL1 + 51 + 3) .ZCSR .ZCSR IF &LASTCC ¬= 0 THEN + DO ISREDIT FIND FIRST ' INCLUDE ' + &COL1 &EVAL(&COL1 + 52 + 3) .ZCSR .ZCSR IF &LASTCC ¬= 0 THEN + DO SET ZEDSMSG = &STR(NO COPY VERB) SET ZEDLMSG = &STR(*** COULD NOT FIND + "COPY", "CICSCOPY", OR + "INCLUDE" + VERB ON THIS + LINE ***) ISPEXEC SETMSG MSG(UTLZ001) GOTO FINISH END END END ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR ISREDIT FIND NEXT ' ' .ZCSR .ZCSR ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR ISREDIT (LN,CL1) = CURSOR ISREDIT CURSOR = &LN &EVAL(&CL1 + 8) ISREDIT FIND PREV '.' .ZCSR .ZCSR ISREDIT FIND PREV P'¬' .ZCSR .ZCSR ISREDIT (NULL,CL2) = CURSOR ISREDIT (MEMBER) = LINE .ZCSR IF &CL2 < &CL1 OR &CL2 > &LENGTH(&STR(&MEMBER)) THEN + SET MEMBER = ELSE + SET MEMBER = &SUBSTR(&CL1:&CL2,&STR(&MEMBER)) IF &STR(&MEMBER) = THEN + DO SET ZEDSMSG = &STR(NO COPYBOOK) SET ZEDLMSG = &STR(*** COULD NOT FIND THE COPYBOOK NAME ON + THIS LINE ***) ISPEXEC SETMSG MSG(UTLZ001) GOTO FINISH END GOTO SKPCLIST SKIPFIND: + SET MEMBER = &MEM /********************************************************************** /* FIND FIRST OCCURANCE OF THE COPYBOOK MEMBER IN THE LIBRARIES * /********************************************************************** SKPCLIST: + SELECT WHEN (&SYSDSN('&TEMPDSN(&MEMBER)')=OK) + SET DSN = &STR(&TEMPDSN(&MEMBER)) WHEN (&SYSDSN('&SYSUID..&SEARCH..COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(&SYSUID..&SEARCH..COPYLIB(&MEMBER)) WHEN (&SYSDSN('&SYSUID..STR.COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(&SYSUID..STR.COPYLIB(&MEMBER)) WHEN (&SYSDSN('QDEVL.STR.COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(QDEVL.STR.COPYLIB(&MEMBER)) WHEN (&SYSDSN('PDBA.USSTRD00.DCLGEN(&MEMBER)')=OK) + SET DSN = &STR(PDBA.USSTRD00.DCLGEN(&MEMBER)) WHEN (&SYSDSN('QQUAL.STR.COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(QQUAL.STR.COPYLIB(&MEMBER)) WHEN (&SYSDSN('PDBA.USSTRQ00.DCLGEN(&MEMBER)')=OK) + SET DSN = &STR(PDBA.USSTRQ00.DCLGEN(&MEMBER)) WHEN (&SYSDSN('&SEARCH..RFP.COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(&SEARCH..RFP.COPYLIB(&MEMBER)) WHEN (&SYSDSN('MMODO.STR.COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(MMODO.STR.COPYLIB(&MEMBER)) WHEN (&SYSDSN('PDBA.USSTRM00.DCLGEN(&MEMBER)')=OK) + SET DSN = &STR(PDBA.USSTRM00.DCLGEN(&MEMBER)) WHEN (&SYSDSN('&SEARCH..PRD.COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(&SEARCH..PRD.COPYLIB(&MEMBER)) WHEN (&SYSDSN('PEMER.STR.COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(PEMER.STR.COPYLIB(&MEMBER)) WHEN (&SYSDSN('PPROD.STR.COPYLIB(&MEMBER)')=OK) + SET DSN = &STR(PPROD.STR.COPYLIB(&MEMBER)) WHEN (&SYSDSN('PDBA.USSTRP00.DCLGEN(&MEMBER)')=OK) + SET DSN = &STR(PDBA.USSTRP00.DCLGEN(&MEMBER)) WHEN (&SYSDSN('SYS4.CICS.COBLIB(&MEMBER)')=OK) + SET DSN = &STR(SYS4.CICS.COBLIB(&MEMBER)) WHEN (&SYSDSN('SYS3.CACOMMON.PROD.CAIMAC(&MEMBER)')=OK) + SET DSN = &STR(SYS3.CACOMMON.PROD.CAIMAC(&MEMBER)) WHEN (&SYSDSN('SYS3.ACF2CICS.PROD.ACFMAC(&MEMBER)')=OK) + SET DSN = &STR(SYS3.ACF2CICS.PROD.ACFMAC(&MEMBER)) WHEN (&SYSDSN('CRS.V2R1M0.SELACOPY(&MEMBER)')=OK) + SET DSN = &STR(CRS.V2R1M0.SELACOPY(&MEMBER)) OTHERWISE DO SET ZEDSMSG = &STR("&MEMBER" NOT FOUND) SET ZEDLMSG = &STR("&MEMBER" NOT FOUND IN ANY COPY LIBRARY) ISPEXEC SETMSG MSG(UTLZ001) GOTO FINISH END END /********************************************************************** /* PERFORM THE EDIT/BROWSE * /********************************************************************** ISPEXEC EDIT DATASET('&DSN') SELECT (&LASTCC) WHEN (0 ¦ 4) DO SET ZEDSMSG = &STR("&MEMBER" EDITED) SET ZEDLMSG = &STR("&DSN" WAS EDITED) ISPEXEC SETMSG MSG(UTLZ000) SET BROWSE = NO END WHEN (14) DO SET ZEDSMSG = &STR("&MEMBER" IN USE) SET ZEDLMSG = &STR(UNABLE TO EDIT "&MEMBER" *** + IN USE BY ANOTHER USER/TASK) ISPEXEC SETMSG MSG(UTLZ000) SET BROWSE = YES END WHEN (16) DO SET ZEDSMSG = &STR("&MEMBER" NOT FOUND) SET ZEDLMSG = &STR("&MEMBER" DOES NOT EXIT) ISPEXEC SETMSG MSG(UTLZ001) SET BROWSE = NO END WHEN (20) DO SET ZEDSMSG = &STR("&MEMBER" EDIT ERROR) SET ZEDLMSG = &STR(SEVERE ERROR "20" TRYING TO EDIT + "&MEMBER") ISPEXEC SETMSG MSG(UTLZ001) SET BROWSE = YES END OTHERWISE DO SET ZEDSMSG = &STR("&MEMBER" EDIT ERROR) SET ZEDLMSG = &STR(ERROR CC "&LASTCC" TRYING TO EDIT + "&MEMBER") ISPEXEC SETMSG MSG(UTLZ001) SET BROWSE = YES END END IF &BROWSE = NO THEN GOTO FINISH ISPEXEC BROWSE DATASET('&DSN') SELECT (&LASTCC) WHEN (0) DO SET ZEDSMSG = &STR("&MEMBER" BROWSED) SET ZEDLMSG = &STR("&DSN" WAS BROWSED) ISPEXEC SETMSG MSG(UTLZ000) END WHEN (12) DO SET ZEDSMSG = &STR("&MEMBER" IS EMPTY) SET ZEDLMSG = &STR("&DSN" HAS NO LINES *** UNABLE TO BROWSE) ISPEXEC SETMSG MSG(UTLZ001) END WHEN (14 ¦ 16) DO SET ZEDSMSG = &STR("&MEMBER" NOT FOUND) SET ZEDLMSG = &STR("&DSN" WAS NOT FOUND) ISPEXEC SETMSG MSG(UTLZ001) END WHEN (20) DO SET ZEDSMSG = &STR("&MEMBER" BROWSE ERROR) SET ZEDLMSG = &STR(SEVERE ERROR "20" TRYING TO BROWSE + "&MEMBER") ISPEXEC SETMSG MSG(UTLZ001) END OTHERWISE DO SET ZEDSMSG = &STR("&MEMBER" BROWSE ERROR) SET ZEDLMSG = &STR(ERROR CC "&LASTCC" TRYING TO BROWSE + "&MEMBER") ISPEXEC SETMSG MSG(UTLZ001) END END /********************************************************************** /* RETURN TO THE SAME CURSOR POSITION AND GET OUT * /********************************************************************** FINISH: + IF &MODE ¬= CLIST THEN + ISREDIT CURSOR = &SLN &SCL EXIT HELPSEC: + 02480000 ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL) 02490000 SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR CPY UTILITY + 02490000 *** NO PROCESSING PERFORMED ***) 02490000 ISPEXEC SETMSG MSG(UTLZ000) 02490000 EXIT
Documentation
The CPY edit macro allows the user to place their cursor on a line in a COBOL/COBOL2 program which contains a "COPY xxxxxxxx" statement. CPY then parses the line to determine the name of the COBOL COPYBOOK. It searches through the standard copy libraries to find the first occurance of this member. If it finds this member, it attempts to edit it, if it cannot edit it, it attempts to browse it. The user can also use this command as a TSO command. To use type: TSO CPY MEM(xxxxxxxx) statement. It will then function the same as it does with the edit macro. You can override the standard concatenation by typing TSO CPY MEM(xxxxxxxx) DSN(uuunn.xxxx.copylib) and the search will start with your Library. To overide the standard concatenation using the edit macro the command is CPY uuunn.xxxx.copylib.