Developer Productivity
Developing computing systems require tools such as editors, compilers, data and test environments before distributing a beta and/or production product.
On my MVS 38J system, I use two user-written editing facilities, RPF (Rob’s Programming Facility by Rob Prince) and RFE (Review Front End by Greg Price), which run under TSO.
Both facilities are installed in the TK3 and TK4- MVS38J public domain operating systems and offer ISPF-like panels, navigation and services such Browse-Edit datasets, List datasets, execute TSO commands, and associated HELP information.
While perusing email on the MVS Yahoo Groups forum, I discovered an ISPF v1.1 announcement from Wally Mclaughlin, owner and author of ISPF, from November 2017. Wow! Having ISPF on my desktop MVS38J OS, a version that simulates the ISPF product, to develop panels, dialog managers using CLISTs or programs (CPs)… I just flashed back to the early 1980’s as a software developer.
I contacted Wally requesting a copy of his ISPF product. Upon receipt, installed ISPF on my system!
ISPF is written specifically for the Hercules MVS 3.8 system and attempts to re-create ISPF functionality of that era according to Wally.
For ISPF option 0, terminal characteristics and PF key assignments (labels and commands) are supported.
For ISPF options 1, 2, and 3 (browse, edit, utilities), the Review Front-end product (RFE from Greg Price) is integrated seamlessly from a users point of view to satisfy the aforementioned options.
ISPF options 4 and 5 (foreground and background processes) are empty and can be viewed as contribution opportunities for the MVS community!
Option 6 is the command processor panel to execute TSO commands or programs.
Option 7 will invoke dialogue management functions for menus, commands or programs in addition to displaying panels with options such as message id.
Option A (ACETEST) is an interactive test facility written by Wally Mclaughlin. ACETEST is similar to TSO TEST and displays/alters storage, performs program debugging via breakpoints, storage inspection and storage modifications to name a few features. More information can be sought from the ISPF product distribution tape.
Option T (Tutorial) is not operational. The ISPTUTOR program is not available in any version of ISPF as of this post per my inspection. However, HELP is available via the .HELP variable to display a help panel when HELP command is invoked or PF1 key depressed.
File tailoring skeleton processing is not supported (SLIB) in ISPF 2.1.
In mid-2018, ISPF v2.0 beta was introduced followed by ISPF v2.1 beta in late 2019. I upgraded to version 2.1 on my system at that time.
Installing ISPF v2.1
Three pre-requisites are necessary as outlined by ISPF v2.1:
- Review 46.6 is required to support ISPF Browse, Edit and Utility Functions.
- ISPF assumes all terminals support VTAM Extended Data Stream commands, and that the MVS 3.8 VTAM enhancement mods ZP60008 and ZP60009 are installed.
- The MVS 3.8 enhancement mod ZP60038, which provides an API for application programs to access CLIST Variables, is required by ISPF to access CLIST variables. If this mod is not installed, CLIST variables will not be available to ISPF and vice-versa.
After verifying and/or applying the above software levels and user modifications, proceed to ISPF software installation. The software load is comprised of a supplied JCL deck (member ISPLOAD) to load the Hercules distribution tape to a set PDS ISPF system libraries (CLIB, LLIB, MLIB, PLIB, SLIB, TLIB).
Next, review of the supplied JCL deck (member ISPPROF) to define ISPF user profile datasets (userid.ISP.PROF).
Next, define ISPF datasets to TSO session. Two approaches are presented in the installation guide –
- Add ISPF DD (member ISPLOGON) statements to your current logon PROC, or
- Invoke a CLIST (member ISPALLOC) to dynamically free/allocate ISPF datasets
Lastly, apply any provided release fixes via the supplied superzap JCL (member ISPMAINT).
After datasets are available to the TSO session, ISPF can be started.
Once ISPF is initiated, the ISPF main menu should display.
You are now ready to use ISPF!
The ISPF v2.1 Install document contains the following detail steps:
Installation
These steps assume that the ISPF files have been allocated and loaded
using the JCL supplied with the distribution tape. If you need to
re-run this step, Member ISPLOAD in the INSTALL dataset can be used.
Step 1 (a) Member ISPLOGON in the INSTALL dataset lists the JCL
statements which must be added to the TSO logon Proc for ISPF.
Step 1 (b) Alternately, Member ISPALLOC in the CLIB dataset can be used
to allocate the ISPF and REVIEW datasets dynamically at logon time.
Step 1 (c) Member ISPF in the CLIB dataset will accomplish the same
thing, and also invoke ISPF.
Step 2 Member ISPPROF in the INSTALL dataset can be used to allocate
an individual's PROFILE dataset.
Step 3 Member ISPMAINT in the INSTALL dataset contains all current
fixes which must be applied. These fixes are in Superzap (IMASPZAP)
format.
ISPF version 2.1 does not require APF-authorization.
ISPF v2.1 Services / Functions
Most ISPF services (from the MVS38J era) are supported or some provide limited support. The following summary tables are from version ISPF v2.1:
ISPF Services This is a description of the ISPF Services which are or will be supported. Note that most, but not all features are supported. Display Services Basic panel display services are supported. +----------+-----------------------------------------------+-----------+ | SERVICE | DESCRIPTION | STATUS | +----------+----------------------------------------------+------------+ | ADDPOP | Start Pop-Up Window Mode | No | | BROWSE | Browse a dataset with REVIEW | Supported 1| | DISPLAY | Display Panels and Messages | Supported 2| | EDIT | Edit a dataset with REVED | Supported 1| | REMPOP | Remove a Pop-Up Window | No | | SELECT | Select a Panel or Function | Supported 3| | SETMSG | Set Next Message | Supported | | TBDISPL | Display Table Information | Supported | | | | | | | 1 - all operands other than DATASET and | | | | VOLSER are ignored. | | | | 2 - COMMAND, RETBUFFR, RETLGTH, and MSGLOC | | | | operands are ignored. | | | | 3 - LANG, LOGO, PASSLIB, NEWPOOL, and | | | | SUSPEND operands are ignored. | | | | | | +----------+----------------------------------------------+------------+ Variable Services All of the variable services are supported in version 1.0. +----------+-----------------------------------------------+-----------+ | SERVICE | DESCRIPTION | STATUS | +----------+----------------------------------------------+------------+ | VCOPY | Create a Copy of a Variable | Supported | | VDEFINE | Define Function Variables | Supported 1| | VDELETE | Remove a Definition of Function Variables | Supported | | VERASE | Remove Variables from a Shared/Profile Pool | Supported | | VGET | Retrieve Variables from a Pool or Profile | Supported | | VPUT | Update Variables in a Shared/Profile Pool | Supported | | VREPLACE | Replace a Variable | Supported | | VRESET | Reset Function Variables | Supported | | | | | | | 1 - The USERDATA operand is ignored. | | | | | | +----------+----------------------------------------------+------------+ Table Services All of the table services are supported in version 2.0. +----------+-----------------------------------------------+-----------+ | SERVICE | DESCRIPTION | STATUS | +----------+----------------------------------------------+------------+ | TBADD | Add a Row to a Table | Supported | | TBBOTTOM | Set the Row Pointer to Bottom | Supported | | TBCLOSE | Close and Save a Table | Supported 1| | TBCREATE | Create a New Table | Supported 1| | TBDELETE | Delete a Row from a Table | Supported | | TBEND | Close a Table without saving | Supported | | TBERASE | Erase a Table from the ISPTLIB file | Supported 1| | TBEXIST | Determine Whether a Row Exists in a Table | Supported | | TBGET | Retrieve a Row from a Table | Supported | | TBMOD | Modify a Row in a Table | Supported | | TBOPEN | Open a Table from the ISPTLIB file | Supported 1| | TBPUT | Update a Row in a Table | Supported | | TBQUERY | Obtain Table Information | Supported | | TBSARG | Define a Search Argument | Supported | | TBSAVE | Save a Table to the ISPTLIB file | Supported 1| | TBSCAN | Search a Table | Supported | | TBSKIP | Set the Row Pointer to a Row | Supported | | TBSORT | Sort a Table | Supported | | TBSTATS | Retrieve Table Statistics | Supported | | TBTOP | Set the Row Pointer to the Top | Supported | | TBVCLEAR | Clear Table Variables | Supported | | | | | +----------+----------------------------------------------+------------+ Miscellaneous Services GDDM and Library Access services will probably never be supported. +----------+-----------------------------------------------+-----------+ | SERVICE | DESCRIPTION | STATUS | +----------+----------------------------------------------+------------+ | | | | | CONTROL | Set Processing Modes | Supported | | GETMSG | Get a Message | Supported 1| | GRERROR | Graphics Error Block Service | No | | GRINIT | Graphics Initialization | No | | GRTERM | Graphics Termination Service | No | | LIBDEF | Define Application Files | Future | | LIST | Write Lines to the List File | Future | | LMxxxxxx | Library Access Services | No | | LOG | Write a Message to the Log File | Future | | PQUERY | Obtain Panel Information | Supported | | | | | | | 1 - ALARM, WINDOW operands are ignored. | | | | | | +----------+----------------------------------------------+------------+ File Tailoring Services Possibly in the future, depending on author and user interest. +----------+-----------------------------------------------+-----------+ | SERVICE | DESCRIPTION | STATUS | +----------+-----------------------------------------------+-----------+ | | | | | FTOPEN | Begin File Tailoring | Future | | FTINCL | Include a Skeleton | Future | | FTCLOSE | End File Tailoring | Future | | FTERASE | Erase File Tailoring Output | Future | | | | | +----------+-----------------------------------------------+-----------+
Some commands (used on ISPF panels command line) and not supported, for example, PRINT or PRINTHI. The following command summary table is from version ISPF v2.1:
ISPF Commands
This is a description of the ISPF Commands which are or will be
supported in the future.
+----------+-----------------------------------------------+-----------+
| COMMAND | DESCRIPTION | STATUS |
+----------+----------------------------------------------+------------+
| ACTIONS | Refer to the ISPF Dialog Developers Guide. | Never |
| CANCEL | | Supported |
| CRETRIEV | | Future |
| CURSOR | | Supported |
| DOWN | | Supported |
| END | | Supported |
| ENVIRON | | Future |
| EXIT | | Supported |
| EXHELP | | Future |
| FKA | | Future |
| HELP | | Supported |
| KEYS | | Supported |
| KEYSHELP | | Future |
| LEFT | | Supported |
| LIST | | Future |
| LOG | | Future |
| PANELID | | Supported |
| PFSHOW | | Future |
| PRINT | | Future |
| PRINTHI | | Future |
| PRINTL | | Future |
| RETRIEVE | | Supported |
| RETURN | | Supported |
| RIGHT | | Supported |
| SPLIT | | Supported*|
| SPLITV | | Future |
| SWAP | | Supported |
| UP | | Supported |
| = (JUMP) | | Supported |
| | | |
| | | |
+----------+-----------------------------------------------+-----------+
(*) The SPLIT command does not support partial screen splitting in this
release. The current screen in control is the only screen displayed,
and occupies the full screen.
Panel support is depicted in the following summary table from version ISPF v2.1:
Panel Definitions
The following Panel Definition statements are supported partially or
completely. All other panel types are ignored without error.
+----------+-----------------------------------------------+-----------+
| VARIABLE | DESCRIPTION | STATUS |
+----------+-----------------------------------------------+-----------+
|)ATTR | Attribute Characters | Supported |
|)BODY | Panel Body | Supported |
|)MODEL | Table Services Model | Supported |
|)INIT | Initialization | Supported |
|)REINIT | Re-Initialization | Supported |
|)PROC | Processing | Supported |
|)END | End | Supported |
| | | |
+----------+-----------------------------------------------+-----------+
ATTR Section
1) The DEFAULT parameter is ignored on the )ATTR statement.
2) The PADC, ATTN, NUMERIC, FORMAT, REP, and OUTLINE parameters are
ignored.
BODY Section
1) The KANA, WINDOW, CMD, SMSG, LMSG, ASIS, DEFAULT, FORMAT, and
OUTLINE paramters are ignored on the )BODY statement.
MODEL Section
The SCAN parameter is ignored in this release.
INIT, REINIT, PROC Sections
ASSIGN Statement - The ADDSOSI, DELSOSI, ONEBYTE, and TWOBYTE
parameters are not supported.
VER Statement - The DBCS, EBCDIC, ENUM, FILEID, AND MIX parameters
are ignored, and always return a valid condition.
PANEXIT Statement - The PANEXIT built-in function is not supported.
END Section
Supported.
ISPF control variables are supported. The following summary table is from version ISPF v2.1:
ISPF Control Variables
This is a description of the ISPF Control Variables which are or will
be supported. All of the control variables can be set or retrieved by
the dialog developer, however only the supported entries are
meaningful.
+----------+-----------------------------------------------+-----------+
| VARIABLE | DESCRIPTION | STATUS |
+----------+-----------------------------------------------+-----------+
|.ALARM | Refer to the ISPF Dialog Developers Guide. | Ignored |
|.ATTR | | Future |
|.ATTRCHAR | | Future |
|.AUTOSEL | | Supported |
|.CSRPOS | | Supported |
|.CSRROW | | Supported |
|.CURSOR | | Supported |
|.HELP | | Supported |
|.KANA | | Never |
|.MSG | | Supported |
|.PFKEY | | Supported |
|.RESP | | Supported |
|.TRAIL | | Supported |
|.TYPE | | Ignored |
|.WINDOW | | Never |
|.ZVARS | | Supported |
| | | |
+----------+-----------------------------------------------+-----------+
Message processing performs variable substitution as expected by the product. Below are support descriptions and limitations from ISPF v2.1:
Messages
Standard ISPF message processing is supported, with noted exceptions.
Messages are kept in PDS members in 'ISPMLIB', is the format 'XXXnn'
where 'XXX' is a 1-3 character message id, and 'nn' is the first 2
digits of the 3 digit message number. For example, message library
member 'ABC12' contains messages 'ABC120X' to 'ABC129X'.
Message Definition
Messages are defined in the standard ISPF format, as follows:
line 1:
'MSGID' ['short message'] [.HELP=panel|*] [.ALARM=yes|no] [NOKANA|KANA]
[.WINDOW=resp|noresp] [.TYPE=notify|warning|action|critical]
line 2:
'long message'
Full literal and variable substitution is supported. Five
non-standard variables are used extensively in these messages, and may
be used by the dialog developer - ZEPANEL, ZEVAR, ZEFUNC, ZEMISC, and
ZERC. They are set to the panel name, variable name, function,
miscellaneous data, and return code associated with the error. They
are all character data 8 bytes in length, with the exception of the
return code, which is 2 bytes in length.
Exceptions
1) While all operands may be coded, the 'NOKANA/KANA' AND 'WINDOWS'
parameters are ignored, and will probably never be supported.
2) The 'ALARM' and 'TYPE' parameters are ignored in this release.
3) Only 1 'long 'message is supported.
Internal Messages
All internal messages begin with the prefix 'ISP', and are in the
standard format of 'ISPnnnX', where 'nnn' is a 3 digit number, and 'X'
defines the message significance, typically a format of 'A' for action,
'E' for error, 'I' for information etc. The messages provided are not
compatible with the original IBM product messages.
Messages ISP000 to ISP049 are internal, as they relate to
initialization, error handling, and message processing itself. All
other ISPF messages are defined in the normal ISPF message format, and
contained in MLIB library. They can be modified for example into a
foreign language.
Like with all software products, some limitations exist. A summary for ISPF v2.1 is depicted below:
Limitations
The product has many limitations relative to the ISPF of today, but
then again the product only attempts to provide the basic functionality
of ISPF as it existed in the days of MVS 3.8.
01) Other members in this dataset such as Panels and Services list
specific parameters and keywords which are not currently supported.
02) While ISPF variables can be up to 64K in length, there are a lot of
functions which only support variables up to 256 bytes in length.
03) The JUMP (=) function only works from the command line.
04) When a TBCREATE is issued to create a table, all the variables
referenced must already be defined to ISPF, otherwise a variable
not found error will occur and the TBCREATE will fail with RC = 20.
05) Once a Table has been saved to the ISPTLIB file, the length of the
variables which comprise the Table cannot be changed.
06) The ROWS(SCAN) parameter on the )MODEL statement is not yet
implemented, which means that while the TBSCAN and TBSARG functions
are fully supported, TBDISPL will always display all the rows in
the Table.
07) The TBSORT function only supports one level of sorting. For example,
specifying 'TBSORT TABLE1 FIELDS(NAME,C,A,SIZE,N,D)' will result in
the table being sorted by 'NAME', the 'SIZE' inner level sort will
be ignored.
08) The TBSORT function only supports sorting in Ascending order, a
request to sort in Descending order will be processed in Ascending
order.
Despite limitations with ISPF v2.1, this productivity product is another tool for the MVS38J community member. ISPF is fantastic and facilitates development of simple panel applications or complex application systems using CLISTS (using ISPEXEC), dialog management panels and programs (using ISPLINK or ISPEXEC) . Thanks to Wally on a great product and look forward to additional releases with upgraded functionality and/or new functionality.
For more information on this ISPF product, please contact Wally Mclaughlin via the MVS Yahoo group email forum.
Have fun!