Overview
The current ISPF-like product from Wally Mclaughlin enhances the MVS 3.8J / TSO landscape on your personal mainframe!
Like with any other hobbyist / enthusiasts designing, developing, testing and distributing developer tools / utilities, one must finalize on what features and/or functions to offer end users for a particular release. The focus may center on previously used tools behavior and/or functions per personal experience!
ISPF is a feature rich product, in fact, a flagship product from IBM! However, all products have some limitations creating opportunity for future product updates (releases).
As per Wally’s ISPF v 2.2 documentation, “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.”.
ISPF 2.2 offers basic DISPLAY services, TABLE services, VARIABLE services and other miscellaneous dialogue management services. I published a post highlighting ISPF v2.1 in 2018.
Consult the most current documentation for more information on product features available from the ISPF v2.2 distribution tape (HET).
In this post, I list some of my work-arounds to make applications compatible with ISPF v2.2 to continue using ISPF with MVS 3.8J.
Panel Design
ISPF v2.2 does not support action bars, point-n-shoot, or any other ‘fancy current’ ISPF feature sets.
You need to dial back expectations per Wally’s documented notes. Additionally, HELP (PF1) does not provide an ISPTUTOR function.
ISPF v2.2 assumes the first three lines of a panel with the following format:
1 10 20 30 40 50 60 70 80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
-------------------------------- Panel Title ----------------------------------
OPTION ===> _
Line 1 represents the panel title. The entire line can be defined as the title.
Line 2 represents the command line used by ISPF.
Line 3 reserved for messages.
1 10 20 30 40 50 60 70 80 +---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ -------------------------------- Panel Title ---------------------------------- OPTION ===> _ SCROLL ===> HALF
A portion of line 2 should be made available if the panel provides scrolling such as a table display panel. This scrolling field is 4 bytes in length.
1 10 20 30 40 50 60 70 80 +---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ -------------------------------- Panel Title ----------short msg (24 bytes).... OPTION ===> _
When a message is displayed by ISPF or the application dialogue, the short message text, if declared, is overlaid on line 1, last 24 bytes as shown above.
1 10 20 30 40 50 60 70 80 +---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ -------------------------------- Panel Title ---------------------------------- OPTION ===> _ long msg (entire line)
If the end user presses PF1 again to see the long message text, if declared, the short message is removed and the long message is overlaid on line 3 as shown above.
The panel definition does not need declaration for short and long message variables. Below is a sample of the above 3 line sample panel:
1 10 20 30 40 50 60 70 80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
)ATTR DEFAULT(%+_)
% TYPE(TEXT) INTENS(HIGH) COLOR(WHITE) SKIP(ON)
¢ TYPE(TEXT) INTENS(HIGH) COLOR(YELLOW)
+ TYPE(TEXT) INTENS(LOW) COLOR(TURQ) SKIP(ON)
_ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) COLOR(RED)
^ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) COLOR(RED) PAD(_)
¦ TYPE(INPUT) INTENS(HIGH) CAPS(OFF)
)BODY EXPAND(\\)
%-------------------------------- Panel Title ----------------------------------
%OPTION ===>_ZCMD +
+
+
)INIT
)PROC
)END
Same example but includes the scrolling title and field on line 2.
1 10 20 30 40 50 60 70 80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
)ATTR DEFAULT(%+_)
% TYPE(TEXT) INTENS(HIGH) COLOR(WHITE) SKIP(ON)
¢ TYPE(TEXT) INTENS(HIGH) COLOR(YELLOW)
+ TYPE(TEXT) INTENS(LOW) COLOR(TURQ) SKIP(ON)
_ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) COLOR(RED)
^ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) COLOR(RED) PAD(_)
¦ TYPE(INPUT) INTENS(HIGH) CAPS(OFF)
)BODY EXPAND(\\)
%-------------------------------- Panel Title ----------------------------------
%OPTION ===>_ZCMD %SCROLL ===>_SCRL
+
+
)INIT
)PROC
)END
Panel Rendering
I chose this panel because most of the MVS 3.8J community has REVIEW installed as a editor/browser and have access to the actual source. assuming you used the supplied unload JCL to unload the panels, the review panels reside on REVIEW.R48M3.PNLS
Referring to the simple tutorial panel REVHUDT, the panel definition is as follows:
1 10 20 30 40 50 60 70 80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
)ATTR DEFAULT(%+_)
% TYPE(TEXT) INTENS(HIGH) COLOR(WHITE) SKIP(ON)
¢ TYPE(TEXT) INTENS(HIGH) COLOR(YELLOW)
+ TYPE(TEXT) INTENS(LOW) COLOR(TURQ) SKIP(ON)
_ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) COLOR(RED)
^ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) COLOR(RED) PAD(_)
¦ TYPE(INPUT) INTENS(HIGH) CAPS(OFF)
)BODY EXPAND(\\)
%TUTORIAL+-\-\-¢REVIEW Directory Display Information+-\-\-%TUTORIAL
%OPTION ===>_ZCMD +
Detailed information for the Unix directory display is contained
in the TSO HELP member¢REVUNIX.+ This member resides in the SYSHELP
concatenation. Enter one of the following commands to view the HELP
member in 3270 full screen mode.
%TSO FSHELP REVUNIX+
%TSO HEL REVUNIX+
)INIT
)PROC
)END
When rendering REVHUDT on a 3270 model-2 (24×80), the terminal displays:
TUTORIAL ------------------ REVIEW Directory Display Information ----- TUTORIAL OPTION ===> Detailed information for the Unix directory display is contained in the TSO HELP member REVUNIX. This member resides in the SYSHELP concatenation. Enter one of the following commands to view the HELP member in 3270 full screen mode. TSO FSHELP REVUNIX TSO HEL REVUNIXThe panel renders correctly per panel definition except for the title line which is not centered across the 80 column line using the two EXPAND symbol sets as shown below:
%TUTORIAL+-\-\-¢REVIEW Directory Display Information+-\-\-%TUTORIAL
ISPF v2.2 appears to execute the first EXPAND symbol set without considering the second EXPAND symbol set.
As possible corrective actions, two options are defined below the original syntax for comparison purposes.See below syntax followed by respective rendering:
%TUTORIAL+-\-\-¢REVIEW Directory Display Information+-\-\-%TUTORIAL %TUTORIAL+-----------¢REVIEW Directory Display Information+-\-\-%TUTORIAL %TUTORIAL+-----------¢REVIEW Directory Display Information+------------%TUTORIALRendering of the above panel definition syntax:
TUTORIAL ------------------ REVIEW Directory Display Information ----- TUTORIAL TUTORIAL ----------- REVIEW Directory Display Information ------------ TUTORIAL TUTORIAL ----------- REVIEW Directory Display Information ------------ TUTORIAL
The first option, is the original panel definition.
The second option uses a single EXPAND symbol set, but the content left of the center point must be manually centered.
The third option uses no EXPAND symbol sets, thus, manually declaring the entire line content.
The final corrective action is personal. I elected to use no EXPAND symbol sets and declare the entire line content!
Rendering of the original REVHUDT panel definition on a 3270 model-5 (27×132) produces very different results. Use the scroll-bar to see content beyond the right margin.
TUTORIAL ---------------------------------------------------------------------- REVIEW Directory Display Information --- 3-REVHUDT OPTION ===> Detailed information for the Unix directory display is contained in the TSO HELP member REVUNIX. This member resides in the SYSHELP concatenation. Enter one of the following commands to view the HELP member in 3270 full screen mode. TSO FSHELP REV UNIX TSO HEL REVUNIX
As mentioned above, the title line is not properly centered.
ISPF v2.2 appears to apply attributes correctly but wraps content across display lines without regards to panel defined line content placement. For example, defined line 5 content is displayed on line 3.
At this point, in my opinion, the basis for a corrective solution using ISPF v2.2 is two fold:
1) Design screens for any terminal model, but base it on a 24 x 80 real-estate, and
2) Place attributes on EACH line in the BODY section of a panel definition for proper line rendering.
For REVHDUT, the + attribute is the last one declared after the ZCMD field. That attribute is repeated in column 1 of each of the following lines.
Note the terminating attribute in the TSO FSHEL VEVUNIX line is an +. Therefore, continue to apply the attribute + in column 1 for the remaining lines.
After applying the above attribute modifications to REVHUDT, the revised panel definition reflects as follows (see yellow highlights) including previously discussed heading modification:
1 10 20 30 40 50 60 70 80 +---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ ****** ****Zap****Autosave********** Top of Data ************************************** 000001 )ATTR DEFAULT(%+_) 000002 % TYPE(TEXT) INTENS(HIGH) COLOR(WHITE) SKIP(ON) 000003 ¢ TYPE(TEXT) INTENS(HIGH) COLOR(YELLOW) 000004 + TYPE(TEXT) INTENS(LOW) COLOR(TURQ) SKIP(ON) 000005 _ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) COLOR(RED) 000006 ^ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) COLOR(RED) PAD(_) 000007 ¦ TYPE(INPUT) INTENS(HIGH) CAPS(OFF) 000008 )BODY EXPAND(\\) 000009 %TUTORIAL+-----------¢REVIEW Directory Display Information+------------%TUTORIAL 000010 %OPTION ===>_ZCMD + 000011 + 000012 + 000013 + Detailed information for the Unix directory display is contained 000014 + in the TSO HELP member¢REVUNIX.+ This member resides in the SYSHELP 000015 + concatenation. Enter one of the following commands to view the HELP 000016 + member in 3270 full screen mode. 000017 + 000018 + %TSO FSHELP REVUNIX+ 000019 + %TSO HEL REVUNIX+ 000020 + 000021 )INIT 000022 )PROC 000023 )END
With the applied highlights from above, ISPF v2.2 renders REVHUDT correctly on a 3270 model-5 (27×132) terminal.
TUTORIAL ----------- REVIEW Directory Display Information ------------ TUTORIAL OPTION ===> Detailed information for the Unix directory display is contained in the TSO HELP member REVUNIX. This member resides in the SYSHELP concatenation. Enter one of the following commands to view the HELP member in 3270 full screen mode. TSO FSHELP REVUNIX TSO HEL REVUNIX
Panel not found Message
While using the ISPF v2.x product, some HELP (PF1) requests result in a ‘panel not found’ message being displayed in the upper right side of the screen.
After pressing PF1 from the ISPF main menu, the not found message is displayed as shown in the below snippet.
------------------------- ISPF PRIMARY OPTION MENU PANEL NOT FOUND OPTION ===> USERID - LARRY02 0 ISPF PARMS - Specify terminal and user parms TIME - 14:19:09
The distribution of ISPF v2.2 and prior do not contain help information panels for ISPF functions.
To mediate this condition, I created shell panels that display content stating that the request help content is not available on my ISPF system. Below is a sample:
----------------------------- ISPF --------------------------------- Command ===> LARRY02 ISPF with REVIEW ISP07000 ISP07000 acts as an intercept to prevent a 'panel not found' message condition as it is not available in this base product, ISPF v2.2.
Perhaps, in the near future, relevant help content can be gathered and published to close the gap on a help screen.
Using Skeletons in ISPF
ISPF 2.2 does not support skeleton processing!
From a high-level view, skeleton processing provides conditional statement assembly with variable substitution in a ISPF dialog.
I accomplish this features by using the ISPF controlled CLIST to fulfill ‘skeletal’ processing.
Conditional processing under CLIST control may include logically determining if an additional JCL STEP needs to be inserted a JCL stream under creation.
This is best explained with examples in the following two topics.
Assume a function requires a job submission step with variable substitution.
Submit JCL to MVS from CLIST (TSO / ISPF)
The public domain version of MVS 3.8J offers the SUBMIT command for submitting JCL to MVS for batch processing which can be used from a CLIST. One can submit one sequential data set representing a JCL deck or submit multiple sequential data sets to be concatenated as one JCL stream.
I personally submit one JCL stream as one sequential data set.
More detailed information on SUBMIT command available from manual,
GC28-0646-4 OS/VS2 TSO Command Language Reference.
However, the MVS 3.8J version of SUBMIT does not offer an instream mode as used by the TSO/E SUBMIT version:
PROC 0 SUBMIT END($$) //HERC01A JOB (SYS),'sample', . more JCL statements . $$
An alternative solution for the above is a TSO CP, INSTREAM, originally authored by Bill Godfrey. This gem can be obtained from https://www.cbttape.org/cbtdowns.htm in FILE #300 or downloaded in a MVS 3.8J install-ready format from Jay Moseley’s site: http://www.jaymoseley.com/hercules/cbt_ware/instream.htm.
Creating JCL in a CLIST (TSO / ISPF)
When developing an automated solution using CLISTs, sometimes it may be necessary to create JCL for online submission for MVS batch processing.
Several solutions exist to accomplish this task.
I personally use the following three methods:
1) TSO commands using a SYSIN-type data set,
2) INSTREAM TSO CP (CBT 300), or
3) PUTCARD CP (https://www.shareabitofit.net/putcard-in-mvs38j/).
Below is a snippet showing a mocked PROC using option 1:
This example writes JCL to a PS data set using TSO commands
and submits content to MVS.
PROC 0
ATTRIB CARDSA LRECL(80)
ALLOC FI(CARDS) DA('your.jcl.ps.dataset') MOD REUSE USING(CARDSA)
OPENFILE CARDS OUTPUT
SET CARDS = &STR(//HERC01A JOB (SYS),'sample',)
PUTFILE CARDS
. more JCL statements
.
SET CARDS = &STR(//STEP0001 EXEC PGM=IDCAMS)
PUTFILE CARDS
. more JCL statements
.
SET CARDS = &STR(/*)
PUTFILE CARDS
SET CARDS = &STR(//)
PUTFILE CARDS
CLOSFILE CARDS
SUBMIT 'your.jcl.ps.dataset'
FREE FI(CARDS) or FREE FI(CARDS) DELETE
FREE ATTR(CARDSA)
Below is a snippet showing a mocked PROC using option 2:
This example writes in-stream JCL to a PS data set using INSTREAM
and submits content to MVS.
PROC 0 SUBDD(myDD) SUBDSN(my.jcl.dsn) COL01(my.dsn)
SET CMNT = &STR(//*)
INSTREAM FILE(&SUBDD) END(##) REUSE
DATA
//&SYSUID.A JOB (),'BATCH PDS COMPRESS',CLASS=A,MSGCLASS=X,
// MSGLEVEL=(1,1),COND=(0,NE),NOTIFY=&SYSUID
//*
//* PDS COMPRESS with BACKUP
//* ========================
&CMNT PDS : &COL01
//*****************************************
//STEP0000 EXEC PGM=xxxxx
//SYSPRINT DD SYSOUT=*
. more JCL statements
.
//SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(5,2))
//SYSIN DD *
COPY INDD=DD1,OUTDD=DD2
//*
//
ENDDATA
##
SET CMNT = &STR(//*)
SUBMIT '&SUBDSN'
FREE FI(&SUBDD)
Below is a snippet showing a mocked PROC using option 3:
This example writes JCL to a PS data set using PUTCARD
and submits content to MVS.
PROC 0 OPT3()
ATTRIB CARDSA LRECL(80)
ALLOC FI(CARDS) DA('your.jcl.ps.dataset') MOD REUSE USING(CARDSA)
PUTCARD '//&SYSUID.A JOB (SYS),'sample','
. more JCL statements
.
PUTCARD '//STEP0001 EXEC PGM=IDCAMS'
. more JCL statements
.
IF &OPT3 = Y THEN -
DO
/* Include a STEP to validate .... */
PUTCARD '//STEP0022 EXEC PGM=xxxxx'
. more JCL statements for this condition
END
PUTCARD '/*'
PUTCARD '//'
SUBMIT 'your.jcl.ps.dataset'
FREE FI(CARDS) or FREE FI(CARDS) DELETE
FREE ATTR(CARDSA)
Panel ID
Displaying the panel ID is a handy function for tracing a screen flow or merely identifying a panel by name!
Use the ISPF command PANELID on any ISPF panel to toggle the PANELID display on line 1 of a ISPF screen panel as shown in the following snippet:
----------------------------- ISPF -----------------------1-ISP07000 Command ===> PANELID LARRY02
Note: Panel ID includes screen level and panel name (1-ISP07000).
The ISPF commands are:
– PANELID or PANELID ON to turn on panel id display
– PANELID OFF to turn off panel id display
Closing
This post represent my own experiences with ISPF v2.x that I share for informational purposes.
I will frequently update this post with my solutions (hopefully, helpful to others) as I encounter hurdles in my ISPF v2.2 development tasks.
Please use the comment box below or the contact us link on the menu bar to communicate any suggestions, improvements, corrections or issues regarding this post.
Thank You.