MVS TOOLS AND TRICKS OF THE TRADE Extra Issue 1989 - A Sam Golob MVS Systems Programmer FURTHER NOTES ON ISPF COMMAND TABLE ADDITIONS This small note is being presented as restitution for our readers. Our sample ISPF command table was missing from my March article. Much of the usefulness of that article was tied to the sample table, whose purpose was to make your ISPF session into a better workbench. By the use of RECURSIVE INVOCATIONS OF ISPF FUNCTIONS ON THE SAME SCREEN (a feature which is practical with ISPF Version 2), you need not disturb an ongoing edit in order to allocate a file you need. If a command (for example, DATaset) has been included in the active command table for your session, all that has to be done is to invoke the "DAT" command from your command line, and press ENTER. This calls the ISPF 3.2 (dataset allocation, rename, and delete) panel ON TOP OF YOUR EDIT PANEL. When the allocation is done, ending that panel gets you back into the edit, where you were. The same is true for other ISPF functions that are INVOKED BY COMMANDS IN THE ISPF COMMAND TABLE. Recursive invocations of ANY ISPF FUNCTIONS can be set up by entries in the ISPF command tables. Our March article showed how these entries are created. If you follow our sample table and expand on it, you will add much power to your ISPF session. It is possible to RUN MANY ISPF FUNCTIONS AT THE SAME TIME by taking advantage of the recursive ISPF invocations. COMMANDS CAN DUPLICATE ANY FUNCTION WHICH IS SELECTABLE FROM A PANEL. Our technique is TO MAKE COMMANDS to invoke frequently used PANELS directly, on top of the current screen. This has the advantage that upon END from the invoked panel, you're still in the screen that was being used before. How do we do this? A command table is a PDS member allocated to the ddname ISPTLIB or the ddname ISPTABL. ISPTLIB is used for output, and ISPTABL is used for input, so if you plan to update a table, it must be in a library allocated to ISPTABL. Command table names adhere to the convention "applid"+CMDS. In other words, the name of the command table member is the name of the applid suffixed by the string "CMDS". ISPF option 3.9 is used for editing command tables. It assumes that your desired table is in a PDS allocated to ddname ISPTABL, and that it IS NOT CURRENTLY BEING USED by any session. Therefore, you must update a COPY of the real table, and not one that is in use. The ISPF 3.9 entry panel asks for the name of the command table member, minus the "CMDS" suffix. The normal default ISPF command table members are called ISPCMDS and ISRCMDS, which we cannot edit directly, so let's assume we have made copies of them in an ISPTABL library, called XSPCMDS and XSRCMDS. To edit XSPCMDS, we enter XSP on the ISPF 3.9 entry panel screen, and we proceed to add or change entries to the table. After the table is saved by using the END key, we can replace the ISPCMDS member by the XSPCMDS member, get out of ISPF entirely, and then back into ISPF. The new entries should now be effective on our ISPF session. A lot of people know about ISPF command tables, so why are we writing about them here? The suggestion is as follows: Take ALL THE ISPF 3.x UTILITY FUNCTIONS and make COMMANDS to execute them ON TOP OF WHAT WE'RE DOING NOW. Then you can do a dataset allocation or a dataset list or a SUPERC, or even a command table edit, and not lose your current screen which contains the work you're doing. Here are more hints on how to make the table entries. Use the SELECT statements in the PROC section of your ISRUTIL (ISPF 3) panel, to determine the correct statements to put into the command table for the 3.x functions. Panels are allocated to the ddname ISPPLIB in your session. This info should be of help in locating your current panel whose name is ISRUTIL. Just write the word SELECT, and copy the select statements exactly, without the quotes, just as they appear in the ISRUTIL panel. You can alternatively copy the entries from my sample table additions (which are for ISPF v2.3). Please be aware that the utility invocations for ISPF v2.2 may be slightly different from mine. Here's another hint in the process of exploring for commands: The name of the panel currently being used can be displayed by entering the command PANELID on the command line. The actual name of the panel will be displayed in the upper left corner of the screen. PANELID OFF turns the panel name display off. COMMANDS CAN BE MADE TO SELECT ANY SCREEN. I've included our sample of some command table additions I've made. Anyone can get very creative with this, and really ease the burdens in his everyday work. Further assistance can be obtained from the IBM ISPF manuals. One should create a TSO HELP member called "CMDTABLE", which keeps the names of the extra commands handy in case you forget them. To get really fancy, the help can be in the form of a new panel that is selected by a new command in the command table. Good luck with your own command table additions, and we hope you can make use of our sample table. The included sample has extra hints and tips embedded right within it. Please examine it carefully. * * * * * * * * * * * * * * * * * * * * * * FIGURE 1. SAMPLE EXTENSIONS TO THE ISPF COMMAND TABLE COMMAND TABLE - XSRCMDS -------------------------------------- ROW 1 OF 52 COMMAND ===> SCROLL ===> CSR INSERT, DELETE, AND CHANGE COMMAND ENTRIES. UNDERSCORES NEED NOT BE BLANKED. ENTER END COMMAND TO SAVE CHANGES OR CANCEL TO END WITHOUT SAVING. (Author's note. T stands for command truncation, number of chars valid) 0 means that the command cannot be shortened. VERB T ACTION DESCRIPTION '''' ISPPREP 0 SELECT PGM(ISPPREP) NEWAPPL INVOKING PREPROCESSED PANEL UTILITY IN INTERACTIVE '''' PDF 0 SELECT PANEL(ISR@PRIM) NEW PRIMARY LAYER OF ISPF '''' LIBRARY 3 SELECT PGM(ISRUDA) PARM(ISRUDA1) ISPF 3.1 LIBRARY UTILITY '''' DATASET 3 SELECT PGM(ISRUDA) PARM(ISRUDA2) ISPF 3.2 DATASET UTILITY '''' CPYLIBS 3 SELECT PGM(ISRUMC) ISPF 3.3 COPY UTILITY '''' DSLIST 3 SELECT PGM(ISRUDL) PARM(ISRUDLP) ISPF 3.4 DATASET LIST UTILITY '''' SPFSTATS 4 SELECT PGM(ISRURS) ISPF 3.5 ISPF STATS PANEL '''' HRDCOPY 3 SELECT PGM(ISRUHC) ISPF 3.6 HARDCOPY OUTPUT PANEL '''' OUTLIST 4 SELECT PGM(ISRUOLP) ISPF 3.8 OUTPUT LIST PANEL '''' CMEDIT 3 SELECT PANEL(ISPUCMA) ISPF 3.9 COMMAND TABLE EDIT FACILITY '''' CNVERT 3 SELECT PGM(ISRQCM) PARM(ISRQCMP) ISPF 3.10 CONVERT OLD FORMAT MENUS AND PANELS '''' FRMATDEF 3 SELECT PGM(ISRFMT) ISPF 3.11 FORMAT DEFN FOR FORMATTED DATA ED/BRWSE '''' SUPERC 4 SELECT PGM(ISRSSM) ISPF 3.12 SUPERC COMPARE UTILITY '''' SUPDETAL 4 SELECT PGM(ISRSEPRM) NOCHECK ISPF 3.13 DETAILED SUPERC COMPARE '''' SRCHFOR 4 SELECT PGM(ISRSFM) ISPF 3.14 SEARCH FOR - ISPF UTILITY '''' TSOP 0 SELECT PGM(ISRPTC) ISPF 6 INVOKE TSO OPTION 6 PANEL RECURSIVELY '''' CN 0 SELECT CMD(CN) INVOKE CONSOLE SIMULATOR FROM FILE 25 - CBT TAPE '''' PDSD 0 SELECT PGM(PDS83) PARM(PDS83 &ZPARM ISPMODE) INVOKE PDS VERSION 8.3 RECURSIVELY - CBT FILE 182 '''' SECURE 3 SELECT PGM(SECURE) TSO COMMAND TO PREVENT ACCESS TO THIS TERMINAL '''' Z1 0 SELECT PGM(ZAP) FULL SCREEN ZAP PROGRAM FROM FILE 300 - CBT TAPE '''' TMSINQ 3 SELECT CMD(%TMSALOC) NEWAPPL(U01) TMS (CA-1) TAPE MGMT SYSTEM - ISPF INQUIRY/UPDATE '''' ASIDSE2 3 SELECT PGM(ASIDSE2) DISPLAY ADDRESS SPACE DATA FOR ACTIVE ADDR SPACES '''' COMPAR 0 SELECT PANEL(COMPR#P) COMPARE WITH YALE COMPARE PGM - EXTENDED '''' SYNCSORT 4 SELECT PANEL(OLSPOLS) NEWAPPL(OLSD) SYNCSORT RELEASE 3.2 ONLINE INTERFACE '''' PANVALET 3 SELECT PGM(PLF3) PANVALET ISPF FULL-SCREEN INTERFACE - CBT FILE 353