Public MVS Software - THE PDS PROGRAM - Part Three Sam Golob MVS Systems Programmer (845) 362-2287 This series of several installments deals with a tremendously useful productivity aid, the PDS Program Product, Version 8.0, which can be found on the CBT mods tape for MVS. This product introduces new extensions to IBM's ISPF/PDF, and has very great capabilities of partitioned dataset member manipulation. It is (literally) one hundred utilities, or more, cleverly woven into one framework. PDS Version 8.0 also has a unique beauty in its construction that makes it an ideal system programmer tool, dear to all those familiar with it. In this article of the series, I hope to convey some of the elegance of PDS to the reader. The many ways of doing things in PDS, and the possibility of interweaving combinations of different operations, make for the opportunity to creatively accomplish things you've never done before. Our format in this series is to guide the reader through the many PDS options, or SUBCOMMANDS. For the sake of clarity, we have grouped the PDS subcommands into FIVE SECTIONS, according to type (see Figure 1). The first installment of this series dealt with the dataset currently being handled by the PDS program. In PDS terms, this is called the CURRENT DATASET. PDS has formidable capability of displaying and changing the current dataset's characteristics and vitals. The PDS subcommands which deal with the current dataset as a whole are grouped into SECTION ONE of our option list. Part one of these articles dealt with the PDS subcommands in SECTION ONE. In our last article, we introduced the reader to PDS's time-saving ISPF INTERFACE and to PDS's great ability to operate ON GROUPS OF PDS MEMBERS AT ONE TIME. The fact that one can BROWSE, EDIT, RENAME, DELETE, or PRINT a pds member from THE SAME MEMBER LIST, without having to switch to a different ISPF option, is nothing short of amazing to the ISPF user. This, combined with the fact that there can be a PARTIAL MEMBER LIST at the convenience of the viewer, makes for some very considerable power. The concept of a partial subset of members extends to the user's ability to OPERATE ON ALL THE GROUP MEMBERS IN ONE SHOT. For example, one can select all members (or even load modules) containing a given search string, and delete or copy them all together. The subcommands controlling these phases of PDS use were covered in the last installment. Those subcommands are roughly in SECTIONS TWO AND THREE of our subcommand list. This month's installment will concentrate on SECTIONS FOUR AND FIVE of the subcommand list, dealing with individual member manipulation and special options. We'll show how someone who uses PDS can be like an ordinary ISPF user, and yet have five or ten times more power. He can do all of the same things; none of ISPF is lost when PDS is hooked in. However, he has many more tools at his immediate disposal, and the whole force of PDS capability can be marshalled in one unified session. We begin our discussion with the most common member manipulation subcommands, EDIT, BROWSE, RENAME, and DELETE (or SCRATCH). To put the discussion in perspective, let's see how these functions are handled in ordinary ISPF, as shipped by IBM. In normal ISPF, the usual way to edit a pds member is to get into the "EDIT" ISPF option by typing "2" at the top of the main ISPF menu. This gets the user into the "EDIT" main menu. Once there, the dataset name is entered, and the user is presented with an alphabetical list of members. One positions to the desired member by using the "LOCATE" or "L" command on the command line, and the desired member is then selected, by putting the letter "S" next to its name. When the machine responds, the member to be edited appears on the screen. If one would now like to "BROWSE" or "RENAME" the member, one cannot do so in "EDIT". Ordinary ISPF as shipped by IBM requires that you get out of "EDIT" and go into the "BROWSE" screen "=1" to browse, or to the "UTILITY" screen "=3.1" to rename or delete the member. One must also retype the member name, or reposition the selection list to the appropriate name, because that information is not preserved when you change ISPF "modes" in ordinary ISPF. This is much simpler using PDS in ISPMODE. First, one gets into the PDS main screen from the initial ISPF menu (an option must be set up for this with the PDS install). There, a CURRENT DATASET is selected as with ordinary "EDIT" or "BROWSE" modes. Then, once you're into the PDS view mode screen for the dataset, a member list can be generated by the use of the "MEMLIST" or "ML" commands. Here is where the PDS advantage starts. First, one need not select a complete member list. An option "6" from the ISPMODE View Mode screen will indeed create a full member list, but the ML command may be used with a "range" such as "ML AB:C" or a pattern such as "ML XYZ/" to select a partial list. This sets up the CURRENT MEMBER GROUP as well as initially creating a partial member list. We discussed more particulars of this process in our last article. Once a member list is obtained, the user merely enters "E" or "S" (for SPFEDIT) next to the member name to EDIT, "B" to BROWSE, "REN" to RENAME, "SC" or "DEL" to DELETE. Simple. That is the way it ought to be. The last command executed on a given member name in the list is displayed in the data area to the right of the command. This is illustrated in Screen #1. Please refer to Screen #2. The list of options available from the MEMLIST member list is not limited to these four, but it includes almost every PDS option which affects an individual member. At this point we shall divide the discussion into subcommands affecting source-type members (Program Source, JCL, printout, TSO CLISTS, any RECFM=FB or VB libraries), and load-type libraries (load libraries, SYS1.IMAGELIB, any RECFM=U library). PDS has many special features tailored to each type of library member. Options available from the MEMLIST screen for source-type members include: REVIEW, LIST, ATTRIB, ALIAS, COPY, COMPARE, FIND, REPLACE, SUBMIT, PRINTOFF, VERIFY, COPY, REPRO, OUTCOPY and DIRENTRY, besides the four others already mentioned. For load-type libraries: MAP, ATTRIB, HISTORY, VERIFY, and DIRENTRY are especially valuable utilities and investigative tools. If full-screen ZAP from CBT tape file 300 is installed and available, it can be accessed for the CURRENT DATASET by placing "Z" on the ISPMODE command line. ALIAS, BROWSE, COPY, REPRO, FIND, REPLACE, and OUTCOPY are also extremely valuable for load libraries. RESTORE is a particularly useful tool for both types of dataset. In keeping with our systematic approach in covering the features of the PDS product, we shall consider the more source-oriented subcommands first, and we follow with the load library manipulations afterwards. This will cover Section Four. Then we'll conclude with the miscellaneous features of Section Five, and with some mention of customization. To clarify and crystallize the discussion which follows, we will talk about all these subcommands from a MEMLIST framework. The commands will be illustrated by examples using the MEMLIST screens. It should be clear, however, that these commands can all be done from the ISPMODE command line or the "Enter Options" prompt also. In fact, it is necessary to enter a subcommand from the command line if its operands have more than eight characters. Our discussion will center around the MEMLIST screen to show the versatility of the member list and its clear advantage over ordinary ISPF. We begin the source-oriented commands with REVIEW, LIST, SUBMIT, PRINTOFF, and REPRO. "REVIEW" or "REV" is a full screen browse-like command that is really a separate TSO utility, completely independent of ISPF. It is accessible from the MEMLIST screen by placing the letters "REV" next to the member name to be "browsed". This REVIEW command has its own internal "help" facility, accessible through pfkeys. The command is extremely handy at times, for example, if ISPF is not available. The REVIEW program from file 296 of the CBT tape has to be installed for this option to work under PDS. The "LIST" subcommand of the PDS product is not the same as the TSO "list" command. (The latter is obtainable through the "TSOLIST" or "TSOL" subcommand.) The "PDS" LIST subcommand will place an image of the target member into the ISPMODE VIEW LOG for scrolling. This image can be written out to a SYSOUT file or another dataset by means of the "log outputting" facility, option "7" of the MEMLIST screen. To "LIST" a member from the MEMLIST screen, type an "L" next to the member name in the command space. The SUBMIT or "SUB" subcommand can be executed from MEMLIST by placing "SUB" next to a member name containing JCL. This command is different from "submit from ISPF edit" in that a temporary copy of the submitted JCL is not created during the submission. There is a nice technique of submitting JCL when full screen TSO is not available. LIST is used to view the jobstream. Tailoring of the JCL may be done, avoiding ISPF edit, by using the FIND/REPLACE commands. One can use REPLACE to do minor alterations of the existing job via update in-place. Using this technique, I edit and submit jobs from a SYSTEM CONSOLE, running PDS under TSSO Release 4.3 (file 401 of the CBT tape). It is applicable under any circumstance where one wishes to avoid ISPF edit, or where the user does not have full screen capability. The PRINTOFF utility (distributed with IPO, or obtainable from several places on the CBT tape) prints a dataset or a pds member. It can be called from PDS if the command is installed. "PR" is the abbreviation you can enter from the MEMLIST screen, but "O.PR" will provide the user with an extremely convenient panel from which to enter the print options. Output can be routed to any class or normal destination. The "O.PR" screen prompts the available options. The version of the PRINTOFF utility from file 325 of the CBT tape (from Wells Fargo Bank) is an exceptionally good version of the program. This version allows VM-type destinations for output, for example: DEST(RSCS.VMPRINTR) or DEST(RSCS.VMUSER). The print can then go to a VM-controlled destination without manual intervention from VM itself. The "REPRO" subcommand of PDS is used to make a copy of a member in the same pds. It can be used for either source or load-type members. It is quite handy. REPRO is the subcommand to use if you want to duplicate a pds member within the same pds. It requires answering a prompt of "YES". This prompt can be turned off globally in your session by entering "CONTROL NOPROMPT" from the command line. It is probably better for most sessions to retain the prompt, because other more critical commands (such as FIXPDS RESET, which clears a pds of its members) require the prompt also. The "ALIAS" subcommand does not make a copy of the member, but makes an additional directory entry pointing to it. The "alias" entry provides an alternate name for accessing a pds member. The ALIAS subcommand of PDS works for source or load modules. For source, I find it useful for naming TSO help members with alternate names. These are usually the alias names of the TSO command which the "help" is for. With load modules, the ALIAS subcommand does even more. Non-trivial entry points of a load module, that have the same name as the new "alias" entry, are respected by the ALIAS subcommand, and the new alias will have its own entry point, not the one of the original member name. If the new alias name doesn't have an entry point in the load module corresponding to that name, the main member's entry point is assigned as the alias member's entry point. The ALIAS subcommand can be entered next to a member name in a MEMLIST by entering "AL" in the command space, and the new name in the data area. Speaking of pds directory entries, the odds are that you've never seen a utility that displays and formats one. Well you have that utility now. The DIRENTRY subcommand, accessible from the MEMLIST screen by putting "DIR" next to the member name, displays a hex dump of the directory entry for that member. It also formats every field in the entry, and explains its meaning to you in English. Wow is the word for this little tool. For source-type members, we basically have FIND, REPLACE, VERIFY, and COMPARE left to discuss. To use the FIND subcommand for a single member on the MEMLIST screen, enter "FIND" in the command space to the left of the member name, and the string (up to six characters) between delimiters, in the "data" space to the right of the member name. See Screen #1. Of course, the data area of the MEMLIST screen has only eight characters in the space. The same command entered from the command line at the top of the screen can have a much longer operand, because the command line has much more room. On the MEMLIST line, you don't have to type the member name over. You have the choice, whichever way to do it is most convenient. REPLACE is very much like FIND. It is usually impractical to execute a REPLACE subcommand from a MEMLIST screen, but for very short search strings, it is possible, and I have illustrated it in Screen #1. The format of the REPLACE command for a string in a single member is: REPL member /scanstring/replstring/ |WRITE| . For a member group the REPLACE format is: REPL memgroup /scanstring/replstring/ |WRITE| . The keyword "WRITE", if present, makes the string replace permanent, via update in-place. Without the keyword "WRITE", the command is a dry run, to display what WOULD BE found and replaced. VERIFY, for a single member, counts the number of logical records and physical blocks. It displays the size of the largest physical block in the member, and it also shows the average size of the blocks in that member. If the member has any irregularities, for instance, if it is marked as an alias, but no main member exists for it, this will be shown. VERIFY is useful for spotting troublesome members or load modules quickly. To execute VERIFY from a MEMLIST screen, simply type "VER" in the command area next to the member name. COMPARE does a line-by line matchup between two source-type fixed blocked members of a pds, and reports the differences. It is designed for 80-byte LRECL files. It uses the COMPARE utility which is found on CBT tape file 296. This quick check is extremely useful in many common circumstances, for instance, when updating JCL or program source listings, to keep track of the changes against the original member. COMPARE requires the two member names as operands. It can be executed from a MEMLIST screen by typing "COMP" in the command area to the left of the first member's name, and typing the second member's name in the data area to the right side of that name. The compare report showing the differences will appear on the TSO screen. It should be apparent by now, that ISPMODE operation of PDS can combine the advantages and tools of normal ISPF with the enormous power of the PDS subcommands. The normal ISPF "locate" or "L" command can be used to position a MEMLIST member list in the same way as with any other ISPF member list. In addition, there is a "find" or "F" command which will position the MEMLIST downward to find any scan string, such as a member's userid. This extra command is an added convenience. We must now talk about the special capabilities that PDS has with load module libraries and their members. For many users, these load module utility features fully justify their use of the PDS product. The utter power of PDS on load modules makes the user feel like Superman. The big gun subcommands for load modules are: ATTRIB, MAP, HISTORY, IF, FIND, VERIFY, CONTROL, and COPY. "ATTRIB" or "AT", the "attribute" PDS subcommand, is big gun number one. Its function is to show, and also to CHANGE, load module attributes, either for a single load module, or for a member group of load modules. (For source modules, ATTRIB plays with ISPF statistics.) Almost every load module attribute can be CHANGED ON THE FLY with the ATTRIB subcommand. If you forgot to linkedit a load module as reentrant, all you have to do is say: "AT modname RENT". Zappo, it's now marked reentrant. If it was linkedited as reentrant by mistake, you just have to say: "AT modname NORENT NOREUS". Voila. The reentrant attribute is gone. "AT modname AUTH" and "AT modname NOAUTH" make a module authorized or non-authorized with a few flicks of a keyboard. One can put an SSI on a module. Simply enter: "AT modname SSI(ssinumbr)", and it's there. This can also be done to a group of modules just as easily. "AT memgroup SSI(ssinumbr)" does the trick just as easily as for one member. That applies for all the other ATTRIB capabilities. They work for groups as well. If you think that's power, consider "MAP" and "HISTORY" as well. "MAP" does a load module map of csects and entry points, similar to the "map" option of the linkage editor. "MAP" has some nice non-default options, but the real winger-dinger is "MAP modname RELINK", which can be done from a MEMLIST member entry, as well as from the command line. The output of this gem, is no less than THE COMPLETE RE-LINKEDIT JCL for the load module. This is written to the ISPMODE View Log if you're in ISPMODE. Using the ISPMODE "outputting" option "7", the generated JCL can be written to a dataset and rerun, perhaps with a few changes or different linkedit control cards. The linkedit attributes in the generated job are all correct, according to the current structure of the load module. Bet you've never seen anything like THAT before. Here's the beauty of PDS. The "HISTORY" subcommand shows the complete linkedit history of all csects in a load module, showing csect replacement IDR records and zap IDR records sorted by date, with the most current changes listed first. It is a good way of looking at a load module to see which PTFs were applied. This subcommand is inherited from the original version of PDS from long ago, but like everything else in the product, it has been jazzed up significantly. If the "CONTROL TRANSLATOR" option is in effect (which can be accomplished by entering "CONTROL TRANS" on the command line), then the assembly or compile history of the csects is included as well. The information, of course, is obtained from the IDR records of the load module; PDS's ability to report such information in formatted form to the user is thorough, and covers the ground well. Are we finished yet? Not quite. We have to look at IF, FIND, REPLACE, and COPY for load modules, then a word about undocumented commands, miscellaneous commands, and customization. The "IF" subcommand (complete with THEN and ELSE operands) provides an exquisite, sophisticated, and extremely handy means of selecting subgroups of members, and performing operations on the whole group. Load modules can be selected to be in the group by date created or changed, or by practically any attribute. One can select all reentrant load modules in a library, or modules linkedited before or after the last month, for example. The combinations and possibilities for such selections are practically endless. Once a SUBLIST has been selected, (for example, using "IF : LAST(38) THEN(SUBLIST)", which will select all modules linkedited in the last 38 days), then a subsequent operation can be performed on the entire selected group at once. The number of "IF" options provided by PDS for both source and load modules is too vast to discuss here. A good treatment can be found in the TSO HELP member which comes with the PDS product. We mentioned in our last article that the "FIND" subcommand finds occurrences of character strings in all members of a member subgroup. "FIND" also has THEN-ELSE logic connected with it, just as "IF" does. For example, we may want to know which module of a package produces a certain operator message. The operator message we want to know about is $HASP249. The product is JES2, which resides on SYS1.LINKLIB and SYS1.LPALIB. All the JES2 modules begin with the letters "HAS". After setting the CURRENT DATASET to SYS1.LINKLIB with the command "Change SYS1.LINKLIB", we can enter: "FIND HAS: /HASP249/ THEN(SUBLIST)". PDS will look at all members whose names begin with "HAS" in SYS1.LINKLIB and which also contain the string "HASP249". Then a SUBLIST or member group will be created, such that each member fulfills these conditions. This subgroup can be referred to later by the asterisk "*" designation. For example, you may want to restrict a subsequent "FIND" operation to this current group. The command "FIND * /HASP249/" will display all the actual occurrences of and locations of the string at the TSO tube, or in the ISPMODE view log. It's a pity that I had to leave the "COPY" and "COMPRESS" subcommands for last. "COPY" is so useful, that it deserves a more prominent place in our discussion. "COPY" can create NEW COPIES of a dataset as well as copy a selection of members from one dataset to another. "COPY" can optionally pull all the aliases into the copy automatically, together with the original member names. The only drawback in COPY is setting it up, because the IEBCOPY program from IBM must be authorized in order to run, and the ISPF environment (as well as PDS in general, usually) is not an authorized environment. Having the vendor copy product PDSFAST (from SEA) is one solution; PDSFAST doesn't run authorized. There are several ways of setting up the COPY command to run, as described in the PDS install literature which comes with the product. All I need say here is that it is well worth setting up. The same remarks apply to the "COMPRESS" subcommand, which does on-line compresses to the current dataset. I promised to talk about "undocumented" options, specialized subcommands and customization. There is a member in the PDS install library which describes unpublicized commands and some tricks and hints. For instance, the "K" or "KLEAR" command can be used to clear the screen. The "TIME" command formats a nice time and date message. The "SCRATCH" command and the "DELETE" command mean the same thing. The "EDIT" and "SPFEDIT" subcommands mean the same thing, and so on. Also, PDS has a "UTILITY" connection in ISPMODE that can be customized to accept new commands within the PDS environment. So much for that. The literature is available on the PDS install dataset if you want to delve deeper. Invocations to several vendor commands are supported by PDS which I relegated to Section Five, because not every shop has these commands. These are "DSPRINT", "VPSPRINT", and "FSE". "TSOEDIT", which invokes the old TSO EDIT command, is seldom used by most people, but it is available in the PDS environment. "TSOLIST", or the actual TSO "LIST" command, is also available. Enough said. A last word about customization, and that's it. When PDS is installed, there is a copy member with a large number of assembler globals that control the default operation of how PDS will work. There are maybe 70 to 100 things that can be set in there. Some of the defaults most likely will not be appropriate or best for your environment. Others will result in commands being not as easy to use as they could have been if the options had been set otherwise. As always, it pays to investigate. Well, I can't tell you that now you know everything about PDS. I can assure you that with this background, you're in a position to be a far more productive system programmer. Learning to get new results and techniques from the PDS product is a continuous process. Growing is part of this territory. But then, growing is what our job is all about. * * * * * * * * * * * * * SCREEN #1 ----------------- MEMLIST Source Member List 1 ----------- ROW 1 OF 273 COMMAND ===> SCROLL ===> CSR Enter an ISPF command, a PDS subcommand or a special control code: 8 View log 1 Suspend ISPF 6 MEMLIST all F Find R Recall LA Lista 4 Sublist = 7 Output table L Locate SO Sort LV Listv 5 Check aliases 9 Swap panels O Options X Above/Below/All - DSN=TST2SSG.SMP.CNTL,VOL=SER=TSO001 MEM=(ACCEPCHK ----------------------- CMD NAME DATA VER.MOD CREATED LAST MODIFIED SIZE INIT ID REN ACCEPCHK ACCEPCK 01.03 85/03/21 85/11/18 18:45 15 17 TST2SSG ACCEPCK2 *EDIT* 01.00 86/09/02 86/09/02 15:46 21 21 TST2SSG ACCEPT *BROWSE* 01.02 85/03/25 87/09/14 23:42 15 15 TST2SSG ACCEPTD *PRINTOF 01.01 85/03/26 85/03/26 10:18 15 15 TST2SSG ACCEPTU *FIND* 01.01 85/11/26 85/11/27 10:49 18 23 TST2SSG ACCEPT3 *INVALID 01.00 85/05/13 85/05/13 15:55 16 16 TST2SSG REPL ACCPTFN /SMP/SMQ/ 01.02 84/12/19 86/07/21 15:24 15 15 TST2SSG ACK1 *ATTRIB* 01.05 85/05/06 86/07/07 7:21 18 15 TST2SSG ACPCK0 *NEWNAME 01.00 87/04/28 87/04/28 14:22 28 28 TST2SSG ACPCK1 *ALIAS* 01.00 87/04/28 87/04/28 14:22 28 28 TST2SSG ACPCK2 *REPRO* 01.01 87/04/28 87/04/28 18:30 38 38 TST2SSG ACPCK3 *NEWNAME 01.01 87/04/28 87/04/28 18:30 38 38 TST2SSG ACPTCHD *DIRENTR 01.00 85/03/23 85/03/23 22:33 15 15 TST2SSG ACPTTSO3 *REVIEW* 01.01 87/02/19 87/02/19 13:41 48 48 TST2SSG ACPTUSR1 01.01 85/11/18 85/11/19 10:06 16 16 TST2SSG ALLCOVER *SUBMIT* 01.01 85/01/24 85/01/24 16:19 48 32 TST2SSG APARGENR 01.00 86/05/06 86/05/06 10:27 15 15 TST2SSG APCKUCC1 01.00 87/12/03 87/12/03 17:43 19 19 TST2SSG SCREEN #2 ------------------------- PDS o line command selection ---------------------- OPTION ===> Choose one of the following for member ACCEPTU A - Attrib LOG - Log line AL - Alias OUT - Outcopy B - Browse PR - Printoff COM - Compare REN - Rename COPY - Copy REP - Replace DEL - Delete REPR - Repro DIR - Direntry REV - Review DSP - Dsprint SUB - Submit E - Edit TSOE - Tsoedit F - Find TSOL - Tsolist FSE - Fse V - Verify H - History VPS - Vpsprint L - List Enter UTIL if your choice is on the associated utility panel * * * * * * * * * * * * * Figure 1. PDS SUBCOMMANDS - Organized by Type - (for PDS version 8.0) SECTION ONE. General Commands concerning the CURRENT DATASET. OPTIONS - Display the list of subcommands HELP - HELP for PDS subcommands END - STOP THE PROGRAM DSNAME - Display allocation of the "CURRENT DATASET" USAGE - "CURRENT DATASET" STATISTICS (very comprehensive) CHANGE - Change the "CURRENT DATASET" RECALL - Display a PREVIOUS SUBCOMMAND DISPLAY - Display MEMBER NAMES of the "CURRENT PDS" by RANGE PATTERN - Display MEMBER NAMES matching a PATTERN TSO - Invoke a TSO COMMAND from within PDS COMPRESS - Compress the "CURRENT DATASET" in place VERIFY - VALIDITY CHECK the "CURRENT DATASET" FIXPDS - Modify DATA SET ATTRIBUTES (very very powerful) CONTROL - Set PROGRAM CONTROLS for general PDS execution SECTION TWO. ISPMODE Commands. ISPMODE - Put this PDS session into ISPMODE VIEW - View the ISPMODE log MEMLIST - ISPF DISPLAY TABLE of members (very versatile) LISTA - Display DATASET ALLOCATIONS for this TSO session LISTV - Display statistics for MOUNTED DISK VOLUMES (Each of these has options and subcommands of its own) SECTION THREE. MEMBER GROUP Manipulation Commands. MEMBERS - DISPLAY/DEFINE a MEMBER GROUP SUBLIST - Define a MEMBER LIST SUBGROUP MEMLIST - ISPF DISPLAY TABLE of "MEMLIST SUBSET" of members IF - Conditionally Execute a PDS SUBCOMMAND (powerful) FIND - LIST occurrences of a STRING for members in a GROUP REPLACE - CHANGE occurrences of a STRING for members in a GROUP ATTRIB - LIST/CHANGE ATTRIBUTES of all members in a GROUP VERIFY - VALIDITY CHECK a MEMBER GROUP COPY - COPY MEMBER GROUP to another Data Set OUTCOPY - Generate IEBCOPY MEMBER SELECT STATEMENTS for a GROUP SECTION FOUR. Individual MEMBER Manipulation Commands. EDIT - EDIT a member using ISPF EDIT BROWSE - BROWSE a member with ISPF BROWSE REVIEW - BROWSE a member using REVIEW (doesn't need ISPF) LIST - DISPLAY a member RENAME - RENAME a member DELETE - DELETE a member ATTRIB - LIST/CHANGE ATTRIBUTES of a member (Source or Load) ALIAS - ASSIGN AN ALIAS to a member (Source or Load) HISTORY - LIST HISTORY of a LOAD MODULE CSECTS and ZAPS MAP - MAP A LOAD MODULE COPY - COPY a member to another Data Set CONTROL - Set PROGRAM CONTROLS for display of MEMBERS COMPARE - COMPARE TWO MEMBERS from the Data Set FIND - LIST LINES containing a STRING REPLACE - CHANGE LINES containing A STRING REPRO - RECOPY A MEMBER in this Data Set RESTORE - RESURRECT a PREVIOUSLY DELETED member PRINTOFF - PRINT A HARDCOPY of a member SUBMIT - SUBMIT JCL VERIFY - VALIDITY CHECK a dataset member DIRENTRY - DUMP a DIRECTORY ENTRY of a member and DISPLAY FIELDS SECTION FIVE. Other Commands. "UNDOCUMENTED" OPTIONS - See member $$$UNDOC in install pds EXEC - Execute PDS subcommands from a CLIST ISPF - Invoke ISPF Primary Panel from PDS TSOEDIT - EDIT using TSO EDIT TSOLIST - LIST DATA with TSO LIST FSE - EDIT using FSE (vendor product or free product) DSPRINT - Print a HARDCOPY with DSPRINT (vendor product) VPSPRINT - Print a HARDCOPY with VPSPRINT (vendor product) "There is more. You have to explore."