ISPF 2.x, MVS38J, TSO

Using ISPF v2.2 with MVS 3.8J

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 REVUNIX 
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
The 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+------------%TUTORIAL
Rendering 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.

Tagged , ,

Leave a Reply

Your email address will not be published. Required fields are marked *


CAPTCHA Image
Reload Image

This site uses Akismet to reduce spam. Learn how your comment data is processed.