ISPF 2.x, MVS38J

Planning for ISPF in MVS38J

Overview

After unloading ISPF 2.2 from the distribution tape, Wally Mclaughlin’s version of the ISPF-like product for MVS 3.8J running under the Hercules emulator, some basic ISPF library hierarchy (concatenation) pre-planning is a must to provide ISPF dialogue development while maintaining a stable ISPF environment for the MVS 3.8J hobbyist!

This post focuses and shares my experience to implement ISPF (after the unload of ISPF 2.2 to base PDSs) on my MVS 3.8J system (single user with no security system) which is comprised of Volker Bandke’s MVS CD – MVS38J TK3 with Hercules 3.13 hosted on a Windows 10 Pro machine. Most of the usermods installed on my system include those in TK3 UPD and/or TK4- version 8 including current ZP6nnnn usermods from Greg Price.

ISPF integrates seamlessly with RFE/REVIEW for browse, edit and utility services. RFE/REVIEW version 46.6, at minimum, is required according to ISPF documentation. I suggest using a current release due to incremental changes and/or improvements/enhancements. The most current version of RFE/REVIEW can be downloaded from Greg Price’s website:
https://www.prycroft6.com.au/REVIEW/index.html.

I hope you find this post informational and useful for your ISPF 2.2 planning and implementation experience.

Feel free to provide any comments and/or feedback by leaving a reply below.

Setting the Stage

A quick review and notation of some system information is necessary.

First and important item is Wally Mclaughlin’s ISPF product including supplied documentation on your host system and/or installed on your legacy MVS system.

Identify the PDS that contains RFE/REVIEW LOAD components. Most likely, RFE/REVIEW LOAD members are contained within SYS2.CMDLIB. Otherwise, make note of PDS.

Identify the PDS that contains RFE/REVIEW CLIST components. Most likely, RFE/REVIEW CLIST components are contained within SYS2.CMDPROC. Otherwise, make note of PDS.

Identify the PDS that contains RFE/REVIEW PANEL components. Most likely, this is NOT on your system and will require a download from Greg Price’s website (see link later in this post). But, make note of PDS should it be present.

Identify the system LINKLIST datasets for reference purposes. This is contained in SYS1.PARMLIB(LNKLST00). Below is a representative snippet.


SYS1.PARMLIB(LNKLST00)
Command ===>
1       10        20
+---+----+----+----+----
SYS1.LINKLIB,
SYS1.CMDLIB,
SYS2.LINKLIB,
SYS2.CMDLIB,
SYS1.PL1LIB

My Implementation Approach

Seeking a library hierarchy (using file concatenation for component isolation and resolution), similar to SYS1 and SYS2 system library usage, is paramount.

I elected to use a 3-level library concatenation approach with a top to bottom search order as listed below:
– USER level to contain user content (CLISTS, PANELS, etc.)
– COMMON level to contain common content (CLISTS, PANELS, etc.) for access by all users
– PRODUCT level to contain Wally’s product content (CLISTS, PANELS, etc.) as distributed for access by all users.

With a defined library concatenation approach, what libarary naming convention should be used?

This may be the easiest task of all! I decided to …

o use ISPxxxx as the last node for the USER and COMMON dataset names,
o use SYSCOM as the second node for COMMON dataset names.

Below are assigned USER library names:

&SYSUID.ISPCLIB          ISPF User CLISTs
&SYSUID.ISPLLIB          ISPF User Members
&SYSUID.ISPMLIB          ISPF User Messages
&SYSUID.ISPPLIB          ISPF User Panel Definitions
&SYSUID.ISPSLIB          ISPF User Skeleton Definitions
&SYSUID.ISPTLIB          ISPF User Tables
Below are assigned COMMON library names:

ISP.SYSCOM.ISPCLIB       ISPF Common CLISTs
ISP.SYSCOM.ISPLLIB       ISPF Common Members
ISP.SYSCOM.ISPMLIB       ISPF Common Messages
ISP.SYSCOM.ISPPLIB       ISPF Common Panel Definitions
ISP.SYSCOM.ISPSLIB       ISPF Common Skeleton Definitions
ISP.SYSCOM.ISPTLIB       ISPF Common Tables
Below are assigned PRODUCT library names:

ISP.V2R2M0.CLIB       ISPF System CLISTs
ISP.V2R2M0.LLIB       ISPF System Load Members
ISP.V2R2M0.MLIB       ISPF System Messages
ISP.V2R2M0.PLIB       ISPF System Panel Definitions
ISP.V2R2M0.SLIB       ISPF System Skeleton Definitions
ISP.V2R2M0.TLIB       ISPF System Tables

This approach may appear to be complicated or ‘over engineered’, but allows execution flexibility, source promotion and development isolation while maintaining stable use of the ISPF base product across all other users.

For example, the developer can create and test ISPF components (CLISTS, PANELS, etc.) using &SYSUID.libname PDS libraries (see allocation statements below) in an isolated fashion without impacting other ISPF users. When the ISPF user components satisfy testing and acceptance criteria, those components can be promoted to the COMMON (mid level) and available to all ISPF users.

The below snippet demonstrates the dataset allocation for ISPCLIB (ISPF CLISTs). Notice the concatenation definition in the ALLOC statement – a CLIST will be resolved for execution by searching PDSs (in this order) &SYSUID.ISPCLIB, ISP.SYSCOM.ISPCLIB, ISP.V2R0M00.CLIB, and finally REVIEW.RnVn.CLIST. This search order is the key to developer isolation!


/**********************************************************************/
/* ISPF CLISTS                                                        */
/* Search Order: User, Common, Product and Review PDSs   <<--         */
/**********************************************************************/
FREE  F(ISPCLIB)
ALLOC F(ISPCLIB)                           -
      DA('&SYSUID..ISPCLIB'                -
         'ISP.SYSCOM.ISPCLIB'              -
         'ISP.&I0..CLIB'                   -
         'REVIEW.&R0..CLIST'               -
                                ) SHR

RFE/REVIEW and ISPF

Since RFE/REVIEW is closely integrated with ISPF for browsing, editing and utility services, ISPF must be aware of some REVIEW components, specifically, CLISTS, LOADs, and PANELS, via library concatenation! Refer to the sample ISPF logon (ISPLOGON) procedure on the ISPF installation tape for the evidence!!

Include REVIEW.LOAD in the LLIB concatenation, unless RFE/REVIEW is installed in a common library listed in the LINKLIST member mentioned in the opening of this post.

Include REVIEW.CLIST in the CLIB concatenation, unless RFE/REVIEW CLISTS are installed in a common library defined to DD SYSPROC. CLISTS may have to be downloaded from Greg Price’s website
https://www.prycroft6.com.au/REVIEW/index.html (see TSO CLISTs)

Include REVIEW.PANEL in the PLIB concatenation. ISPF REF/REVIEW panels may have to be downloaded from Greg Price’s website
https://www.prycroft6.com.au/REVIEW/index.html (see Z/OS panels)

Note: On my system, RFE/REVIEW is installed in its own set of PDS libraries.

In the trenches…

Many options are available on how to dig a trench… Many tools are available to dig a trench…

In other words, many options exist for implementing ISPF onto MVS 3.8J depending on existing or projected use of ISPF applications as one criteria. Therefore, I will only highlight and provide some transparency to my ISPF implementation…

Current TSO logon procedure on MVS 3.8J TK3 and TK4-update8 use TSOLOGON and USRLOGON to start TSO before handing control to the TSO user after sign on.

As reference, the user ID IBMUSER uses procedure IKJACCNT to logon on the TSO. Very simple… allow TSO access with limited DD declarations. Basic TSO access only.

 SYS1.PROCLIB(IKJACCNT) --------------------------------------------------------
 Command ===>                                                                   
1       10        20        30        40        50        60        70        80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
//IKJACCNT PROC                                                                 
//IKJACCNT EXEC PGM=IKJEFT01                                                    
//DD1      DD  DYNAM                                                            
//DD2      DD  DYNAM                                                            
//DD3      DD  DYNAM                                                            
//DD4      DD  DYNAM                                                            
//DD5      DD  DYNAM                                                            
//DD6      DD  DYNAM                                                            
//DD7      DD  DYNAM                                                            
//DD8      DD  DYNAM                                                            
//DD9      DD  DYNAM                                                            
//DDA      DD  DYNAM                                                            
//DDB      DD  DYNAM                                                            
//DDC      DD  DYNAM                                                            
//DDD      DD  DYNAM                                                            
//DDE      DD  DYNAM                                                            
//DDF      DD  DYNAM                                                            

As reference, user IDs HERC01-04 use utilize TSOLOGON and USRLOGON procedures to gain TSO access including RFE/REVIEW and TSO commands in DD SYSPROC.

Note: The content of both procedures may vary per your installation requirements. Therefore, the following may not match your procedure content.

For example, when user HERC01 signs on, the below TSOLOGON procedure hard-sets STEPLIB and SYSPROC (and other DDs, see below) and subsequently gives control to USRLOGON procedure.

SYS1.PROCLIB(TSOLOGON) - 80.45 -------------------------------------------------
Command ===>
1       10        20        30        40        50        60        70        80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
//TSOLOGON PROC                                                                 
//IKJACCNT EXEC PGM=IKJEFT01,PARM=USRLOGON,DYNAMNBR=64,TIME=1440                
//*                                                                             
//STEPLIB  DD   DISP=SHR,DSN=REVIEW.RrrMm.LOAD          REVIEW/RFE              
//*                                                                             
//SYSPROC  DD  DISP=SHR,DSN=SYS1.CMDPROC                                        
//         DD  DISP=SHR,DSN=SYS2.CMDPROC                                        
//DD1      DD  DYNAM   
//DD2      DD  DYNAM   
//DD3      DD  DYNAM   
//DD4      DD  DYNAM   
//DD5      DD  DYNAM   
//DD6      DD  DYNAM   
//DD7      DD  DYNAM   
//DD8      DD  DYNAM   
//DD9      DD  DYNAM   
//DDA      DD  DYNAM   
//DDB      DD  DYNAM   
//DDC      DD  DYNAM   
//DDD      DD  DYNAM   
//DDE      DD  DYNAM   
//DDF      DD  DYNAM   
//SYSUDUMP DD  SYSOUT=A
//SYSABEND DD  SYSOUT=A
//SYSDBOUT DD  SYSOUT=A

The below USRLOGON procedure facilitates SYSHELP and SYSPROC DD allocations, various initialization and first-time CLIST execution including REF/REVIEW initialization until user HERC01 receives control upon display of the TSO Ready prompt.

 SYS1.CMDPROC(USRLOGON) - 80.35 ------------------------------------------------
 Command ===>                                                                   
1       10        20        30        40        50        60        70        80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
        PROC 0                                                                  
CONTROL NOMSG,NOLIST,NOSYMLIST,NOCONLIST,NOFLUSH                                
WRITE *** &SYSICMD   START ***                                                  
WRITE     Logging on to &SYSSMFID at &SYSTIME using &SYSPROC                    
/**********************************************/                                
/* SYSHELP                                    */                                
/**********************************************/                                
WRITE     DEFAULT SYSHELP LIBs                                                  
FREE FILE(SYSHELP)                                                              
ALLOC FILE(SYSHELP) +                                                           
      DSN('SYS1.HELP',      +                                                   
          'SYS2.HELP',      +                                                   
          'REVIEW.RrrMm.HELP')          +                                       
      SHR                                                                       
/**********************************************/                                
/* SYSPROC                                    */                                
/**********************************************/                                
IF &SYSDSN('&SYSUID..CMDPROC') = OK THEN +                                      
   DO                                                                           
      WRITE     APPEND &SYSUID CLIST LIB to SYSPROC                             
      FREE FILE(SYSPROC)                                                        
      ALLOC FILE(SYSPROC) +                                                     
            DSN('&SYSUID..CMDPROC',            +                                
                'SYS1.CMDPROC',                +  
                'SYS2.CMDPROC',                +  
                'REVIEW.RrrMm.CLIST')          +  
            SHR                                   
   END                                            
ELSE +                                            
   DO                                             
      WRITE     DEFAULT CLIST LIBs                
      FREE FILE(SYSPROC)                          
      ALLOC FILE(SYSPROC) +                       
            DSN('SYS1.CMDPROC',                +  
                'SYS2.CMDPROC',                +  
                'REVIEW.RrrMm.CLIST')          +  
            SHR                                   
   END                                            
/**********************************************/  
/* STDLOGON Proc                              */  
/**********************************************/  
%STDLOGON                                         
/**********************************************/  
/* BSPFCOOK Random Cookie Message             */  
/**********************************************/  
/*BSPFCOOK                                        
/**********************************************/ 
/* REVIEW Init                                */ 
/**********************************************/ 
%REVINIT                                         
/**********************************************/ 
/* REVIEW Copy REVPROF to ISP.PROF            */ 
/**********************************************/ 
%CCPYPROF                                        
/**********************************************/ 
/* MISC   Init                                */ 
/**********************************************/ 
%MISCINIT                                        
/**********************************************/ 
/* BREXX370 Init                              */ 
/**********************************************/ 
%B370INIT                                        
                                                 
WRITE *** USRLOGON   END   ***                   
EXIT                                             

You need to decide whether to extend the current TSOLOGON/USRLOGON procedures or use a new LOGON procedure as offered on the ISPF installation tape (ISPLOGON) or introduce a net new TSOLOGON/USRLOGON replacement set.

I elected to use new LOGON procedures for TSO/ISPF, ISPLGN00 and ISPUSR00. Of course, this implies changing/declaring the new logon procedure for the affected user ids using TSO ACCOUNT.

When user LARRY01 signs on, new procedure ISPLOGON is initiated with specific set symbolic values and control given to procedure ISPUSR00 as depicted below.

 SYS2.PROCLIB(ISPLGN00) - 01.19 ------------------------------------------------
 Command ===>                                                                   
1       10        20        30        40        50        60        70        80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
//ISPLOGON PROC R0='RrrM0',  REVIEW CLIST                                       
//             R1='RrrMm',   REVIEW LOAD                                        
//             R2='RrrMm',   REVIEW PANEL                                       
//             R3='RrrMm',   REVIEW HELP                                        
//             I0='V2R2M0',  ISPF WALLY                                         
//             B0='V2R1M0'   BREXX/370 VRM                                      
//*                                                                             
//IKJACCNT EXEC PGM=IKJEFT01,  TSO                                              
//    PARM='ISPUSR00 R0(&R0) R1(&R1) R2(&R2) R3(&R3) I0(&I0) B0(&B0)',          
//             DYNAMNBR=64,                                                     
//             TIME=1440                                                        
//*                                                                             
//STEPLIB  DD   DISP=SHR,DSN=ISP.&I0..LLIB              ISPF                    
//         DD   DISP=SHR,DSN=REVIEW.&R1..LOAD           REVIEW/RFE              
//*                                                                
//SYSPROC  DD  DISP=SHR,DSN=SYS1.CMDPROC                           
//         DD  DISP=SHR,DSN=SYS2.CMDPROC                           
//DD1      DD  DYNAM                                               
//DD2      DD  DYNAM                                               
//DD3      DD  DYNAM                                               
//DD4      DD  DYNAM                                               
//DD5      DD  DYNAM                                               
//DD6      DD  DYNAM                                               
//DD7      DD  DYNAM                                               
//DD8      DD  DYNAM                                               
//DD9      DD  DYNAM                                               
//DDA      DD  DYNAM                                               
//DDB      DD  DYNAM                                               
//DDC      DD  DYNAM                                               
//DDD      DD  DYNAM                                               
//DDE      DD  DYNAM                                               
//DDF      DD  DYNAM                                               
//SYSUDUMP DD  SYSOUT=A                                            
//SYSABEND DD  SYSOUT=A                                            
//SYSDBOUT DD  SYSOUT=A                                            

Procedure ISPUSR00 continues with various DD allocations and initialization CLISTS as shown below.

 SYS2.CMDPROC(ISPUSR00) - 01.11 ------------------------------------------------
 Command ===>                                                                   
1       10        20        30        40        50        60        70        80
+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
        PROC 0 R0() R1() R2() R3() I0() B0()                                    
/*          R0()          REVIEW/RFE CLIST                                      
/*          R1()          REVIEW/RFE LOAD                                       
/*          R2()          REVIEW/RFE PANEL                                      
/*          R3()          REVIEW/RFE HELP                                       
/*          I0()          ISPF PRODUCT WALLY                                    
/*          B0()          BREXX/370 VRM                                         
CONTROL NOMSG,NOLIST,NOSYMLIST,NOCONLIST,NOFLUSH                                
WRITE *** &SYSICMD   START ***                                                  
WRITE     R0=&R0  R1=&R1  R2=&R2  R3=&R3  I0=&I0  B0=&B0                        
WRITE     LOGGING ON TO &SYSSMFID AT &SYSTIME USING &SYSPROC                    
/**********************************************/                                
/* SYSHELP                                    */                                
/**********************************************/                                
FREE FILE(SYSHELP)                                                              
ALLOC FILE(SYSHELP) +                                                           
      DSN('SYS1.HELP',                  +                                       
          'SYS2.HELP',                  +                                       
          'REVIEW.&R3..HELP')           +                                       
      SHR                                                                       
                                                                                
/**********************************************/                                
/* SYSPROC                                    */                                
/**********************************************/   
IF &SYSDSN('&SYSUID..CMDPROC') = OK THEN +         
   DO                                              
      WRITE     APPEND &SYSUID CLIST LIB TO SYSPROC
      FREE FILE(SYSPROC)                           
      ALLOC FILE(SYSPROC) +                        
            DSN('&SYSUID..CMDPROC',            +   
                'SYS1.CMDPROC',                +   
                'SYS2.CMDPROC',                +   
                'REVIEW.&R0..CLIST')           +   
            SHR                                    
   END                                             
ELSE +                                             
   DO                                              
      WRITE     DEFAULT SYSPROC LIBS               
      FREE FILE(SYSPROC)                           
      ALLOC FILE(SYSPROC) +                        
            DSN('SYS1.CMDPROC',                +   
                'SYS2.CMDPROC',                +   
                'REVIEW.&R0..CLIST')           +   
            SHR                                    
   END                                             
                                                   
/**********************************************/  
/* STDLOGON PROC                              */  
/**********************************************/  
/*%STDLOGON                                       
/**********************************************/  
/* BSPFCOOK RANDOM COOKIE MESSAGE             */  
/**********************************************/  
/*BSPFCOOK                                        
/**********************************************/  
/* REVIEW INIT                                */  
/**********************************************/  
%REVINIT                                          
/**********************************************/  
/* MISC   INIT                                */  
/**********************************************/  
%MISCINIT                                         
/**********************************************/  
/* ISPFINIT INIT                              */  
/**********************************************/  
%ISPFINIT R0(&R0) R1(&R1) R2(&R2) R3(&R3) I0(&I0) 
/**********************************************/  
/* BREXX370 INIT                              */  
/**********************************************/  
+---+----+----+----+----+----+----+----+----+---
%B370INIT B0(&B0)                               
/**********************************************/
/* START ISPF                                 */
/**********************************************/
%ISPFGO R0(&R0) R1(&R1) R2(&R2) R3(&R3) I0(&I0) 
                                                
WRITE *** ISPUSR00   END   ***                  
                                                
DONE: +                                         
EXIT CODE(0)                                    

The vital CLIST, ISPFINIT (in the above procedure) ensures all necessary ISPF libraries are allocated with the correct dataset search order prior to ISPF launch to successfully and correctly resolve ISPF components at execution time.

Note the concatenation of RFE/REVIEW libraries for DD SYSHELP and SYSPROC.

Below is my systems copy of CLIST ISPFINIT for your viewing pleasure –

PROC 0 R0(R45M0) R1(R49M4) R2(R48M3) R3(R49M7) I0(V2R0M0)
/*          R0(),         REVIEW/RFE CLIST
/*          R1(),         REVIEW/RFE LOAD
/*          R2(),         REVIEW/RFE PANEL
/*          R3(),         REVIEW/RFE HELP
/*          I0()          ISPF PRODUCT WALLY
/*CONTROL NOMSG  CONLIST*/ /* USE TO DEBUG */
CONTROL NOMSG

WRITE *** &SYSICMD   START ***

/**********************************************************************/
/*   CREATE USER DYNAMIC ISPF PANEL LIBRARY                           */
/*   TO BE ALLOCATED LATER AS PART OF ISPPLIB                         */
/**********************************************************************/
SET DSNAME0 = &SYSUID..DYN.ISPPLIB
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(PROFATTR)
    ATTR PROFATTR RECFM(F B) LRECL(80) BLKSIZE(3120)
    ALLOC F(ISPDYNP) DA('&DSNAME0') NEW +
       USING(PROFATTR) DIR(40) SP(3 1) CYL
    CONTROL NOMSG
    FREE ATTR(PROFATTR)
    FREE FI(ISPDYNP)
  END

/**********************************************************************/
/*   CREATE USER ISPF PROFILE DATASET                                 */
/*   TO BE ALLOCATED LATER AS PART OF ISPPROF                         */
/**********************************************************************/
SET DSNAME0 = &SYSUID..ISP.PROF
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(PROFATTR)
    ATTR PROFATTR RECFM(F B) LRECL(80) BLKSIZE(3120)
    ALLOC F(ISPPROF) DA('&DSNAME0') NEW +
       USING(PROFATTR) DIR(10) SP(1 1) CYL
    CONTROL NOMSG
    FREE ATTR(PROFATTR)
    FREE FI(ISPPROF)
  END

/**********************************************************************/
/*   CREATE USER ISPF CLIST DATASET                                   */
/*   TO BE ALLOCATED LATER AS PART OF ISPCLIB                         */
/**********************************************************************/
SET DSNAME0 = &SYSUID..ISPCLIB
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(PROFATTR)
    FREE F(ISPCLIB)
    ATTR PROFATTR RECFM(F B) LRECL(80) BLKSIZE(3120)
    ALLOC F(ISPCLIB) DA('&DSNAME0') NEW +
       USING(PROFATTR) DIR(40) SP(5 1) CYL
    CONTROL NOMSG
    FREE ATTR(PROFATTR)
    FREE F(ISPCLIB)
  END

/**********************************************************************/
/*   CREATE USER ISPF MESSAGE DATASET                                 */
/*   TO BE ALLOCATED LATER AS PART OF ISPSLIB                         */
/**********************************************************************/
SET DSNAME0 = &SYSUID..ISPMLIB
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(PROFATTR)
    FREE F(ISPMLIB)
    ATTR PROFATTR RECFM(F B) LRECL(80) BLKSIZE(3120)
    ALLOC F(ISPMLIB) DA('&DSNAME0') NEW +
       USING(PROFATTR) DIR(40) SP(5 1) CYL
    CONTROL NOMSG
    FREE ATTR(PROFATTR)
    FREE F(ISPMLIB)
  END

/**********************************************************************/
/*   CREATE USER ISPF LOAD DATASET                                    */
/*   TO BE ALLOCATED LATER AS PART OF ISPLLIB                         */
/**********************************************************************/
SET DSNAME0 = &SYSUID..ISPLLIB
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(PROFATTR)
    FREE F(ISPLLIB)
    ATTR PROFATTR RECFM(U)           BLKSIZE(19069)
    ALLOC F(ISPLLIB) DA('&DSNAME0') NEW +
       USING(PROFATTR) DIR(40) SP(5 1) CYL
    CONTROL NOMSG
    FREE ATTR(PROFATTR)
    FREE F(ISPLLIB)
  END

/**********************************************************************/
/*   CREATE USER ISPF PANEL DATASET                                   */
/*   TO BE ALLOCATED LATER AS PART OF ISPSLIB                         */
/**********************************************************************/
SET DSNAME0 = &SYSUID..ISPPLIB
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(PROFATTR)
    FREE F(ISPPLIB)
    ATTR PROFATTR RECFM(F B) LRECL(80) BLKSIZE(3120)
    ALLOC F(ISPPLIB) DA('&DSNAME0') NEW +
       USING(PROFATTR) DIR(40) SP(5 1) CYL
    CONTROL NOMSG
    FREE ATTR(PROFATTR)
    FREE F(ISPPLIB)
  END

/**********************************************************************/
/*   CREATE USER ISPF SKELETON DATASET                                */
/*   TO BE ALLOCATED LATER AS PART OF ISPSLIB                         */
/**********************************************************************/
SET DSNAME0 = &SYSUID..ISPSLIB
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(PROFATTR)
    FREE F(ISPSLIB)
    ATTR PROFATTR RECFM(F B) LRECL(80) BLKSIZE(3120)
    ALLOC F(ISPSLIB) DA('&DSNAME0') NEW +
       USING(PROFATTR) DIR(40) SP(5 1) CYL
    CONTROL NOMSG
    FREE ATTR(PROFATTR)
    FREE F(ISPSLIB)
  END

/**********************************************************************/
/*   CREATE USER ISPF TABLE OUTPUT DATASET                            */
/*   TO BE ALLOCATED LATER AS PART OF ISPTTABL                        */
/**********************************************************************/
SET DSNAME0 = &SYSUID..ISPTLIB
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(PROFATTR)
    FREE F(ISPTABL)
    ATTR PROFATTR RECFM(F B) LRECL(80) BLKSIZE(3120)
    ALLOC F(ISPTABL) DA('&DSNAME0') NEW +
       USING(PROFATTR) DIR(40) SP(5 1) CYL
    CONTROL NOMSG
    FREE ATTR(PROFATTR)
    FREE F(ISPTABL)
  END

/**********************************************************************/
/* LOGGING FILE                                                       */
/**********************************************************************/
FREE  F(LOGIT)
SET DSNAME0 = &SYSUID..LOGIT
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
    ALLOC F(LOGIT) DA('&DSNAME0') MOD REUSE
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(LOGATTR)
  /*ATTR LOGATTR  RECFM(F B) LRECL(120) BLKSIZE(12000)
    ATTR LOGATTR  RECFM(V B A) LRECL(125) BLKSIZE(129)
    ALLOC F(LOGIT) DA('&DSNAME0') MOD REUSE USING(LOGATTR)
    CONTROL NOMSG
    FREE ATTR(LOGATTR)
  END

/**********************************************************************/
/* LISTING FILE                                                       */
/**********************************************************************/
FREE  F(LISTIT)
SET DSNAME0 = &SYSUID..LISTIT
IF &SYSDSN('&DSNAME0') = OK THEN +
  DO
    WRITE     FOUND... => &DSNAME0
    ALLOC F(LISTIT) DA('&DSNAME0') MOD REUSE
  END
ELSE +
  DO
    WRITE     CREATED... => &DSNAME0
    CONTROL MSG
    FREE ATTR(LSTATTR)
    ATTR LSTATTR  RECFM(F B A) LRECL(121) BLKSIZE(12100)
    ALLOC F(LISTIT) DA('&DSNAME0') MOD REUSE USING(LSTATTR)
    CONTROL NOMSG
  /*FREE ATTR(LSTATTR) */
  END

/**********************************************************************/
/* DISPLAY VRM LEVELS                                                 */
/**********************************************************************/
WRITE     RFE  CVRM:(&R0)  LVRM:(&R1)  PVRM:(&R2)  HVRM:(&R3)
WRITE     ISPF VRM:(&I0)

/**********************************************************************/
/* ISPF CLISTS                                                        */
/**********************************************************************/
FREE  F(ISPCLIB)
ALLOC F(ISPCLIB)                           -
      DA('&SYSUID..ISPCLIB'                -
         'ISP.SYSCOM.ISPCLIB'              -
         'ISP.&I0..CLIB'                   -
         'REVIEW.&R0..CLIST'               -
         'LARRY01.SYSLOG.ISPCLIB'          -
         'LARRY01.ISPCLIB.CBT143'          -
                                ) SHR

/**********************************************************************/
/* ISPF LOAD MEMBERS                                                  */
/**********************************************************************/
FREE  F(ISPLLIB)
ALLOC F(ISPLLIB)                           -
      DA('&SYSUID..ISPLLIB'                -
         'ISP.SYSCOM.ISPLLIB'              -
         'ISP.&I0..LLIB'                   -
         'REVIEW.&R1..LOAD'                -
         'LARRY01.SYSLOG.LOADLIB'          -
         'LARRY01.ISPLLIB.CBT143'          -
                                ) SHR

/**********************************************************************/
/* ISPF MESSAGES                                                      */
/**********************************************************************/
FREE  F(ISPMLIB)
ALLOC F(ISPMLIB)                           -
      DA('&SYSUID..ISPMLIB'                -
         'ISP.SYSCOM.ISPMLIB'              -
         'ISP.&I0..MLIB'                   -
         'XEF.V62.MLIB'                    -
                                ) SHR

/**********************************************************************/
/* ISPF PANELS                                                        */
/**********************************************************************/
FREE  F(ISPPLIB)
ALLOC F(ISPPLIB)                           -
      DA('&SYSUID..DYN.ISPPLIB'            -
         '&SYSUID..ISPPLIB'                -
         'ISP.SYSCOM.ISPPLIB'              -
         'REVIEW.&R2..PNLS'                -
         'ISP.&I0..PLIB'                   -
         'LARRY01.SYSLOG.ISPPLIB'          -
         'XEF.V62.PLIB'                    -
         'LARRY01.ISPPLIB.CBT143'          -
                                ) SHR

/**********************************************************************/
/* ISPF SKELATONS                                                     */
/**********************************************************************/
FREE  F(ISPSLIB)
ALLOC F(ISPSLIB)                           -
      DA('&SYSUID..ISPSLIB'                -
         'ISP.SYSCOM.ISPSLIB'              -
         'ISP.&I0..SLIB'                   -
                                ) SHR

/**********************************************************************/
/* ISPF TABLES INPUT                                                  */
/**********************************************************************/
FREE  F(ISPTLIB)
ALLOC F(ISPTLIB)                           -
      DA('&SYSUID..ISPTLIB'                -
         'ISP.SYSCOM.ISPTLIB'              -
         'ISP.&I0..TLIB'                   -
                                ) SHR

/**********************************************************************/
/* ISPF TABLES OUTPUT                                                 */
/**********************************************************************/
FREE  F(ISPTABL)
ALLOC F(ISPTABL)                           -
      DA('&SYSUID..ISPTLIB'                -
                                ) SHR

/**********************************************************************/
/* ISPF PROFILE                                                       */
/**********************************************************************/
FREE  F(ISPPROF)
ALLOC F(ISPPROF)                           -
      DA('&SYSUID..ISP.PROF'               -
                                ) SHR

/**********************************************************************/
/* REVIEW PROFILE                                                     */
/**********************************************************************/
FREE  F(REVPROF)
ALLOC F(REVPROF)                           -
      DA('&SYSUID..REVPROF'                -
                                ) SHR

/**********************************************************************/
/* ISPTRACE                                                           */
/**********************************************************************/
FREE  F(ISPTRACE)
ALLOC F(ISPTRACE)                          -
      DA(*                                 -
                                ) SHR

/**********************************************************************/
/* COPY &SYSUID.REVPROF TO &SYSUID.ISP.PROF (NO MEMBER REPLACE)       */
/* FOR RFE (REVIEW)                                                   */
/**********************************************************************/
%CCPYPROF
FREE  F(REVPROF)

/**********************************************************************/
/* INVOKE A DUMMY CLIST TO WRITE MSG (COMMENTED STATEMENT)            */
/**********************************************************************/
/*EX 'ISP.SYSCOM.ISPCLIB(LB)'

WRITE *** &SYSICMD   END   ***


DONE: +
EXIT CODE(0)


Note the concatenation of RFE/REVIEW libraries for DD ISPCLIB, ISPLLIB, and ISPPLIB.

For more specific information regarding ISPF, refer to Wally Mclaughlin’s documentation and installation libraries from the distribution HET tape (ISP.R2V2M00.DOC and ISP.R2V2M00.INSTALL).

In conclusion…

The above approach is somewhat basic! Yes!

It can be more complicated as numerous applications are implemented on your ISPF system and desire to maintain application isolation. This potentially translates to more library concatenations or utilization of start-up and terminate CLISTs to temporarily allocate/deallocate application libraries when an application is initiated/terminated on behalf of an ISPF user. This is a discussion for another day.

As mentioned in the post opening, please submit comments and/or feedback by leaving a reply below.

Good luck with your ISPF v2.2 installation on your legacy MVS 38J system!

Larry Belmontes

Software Disclaimer

No guarantee; No warranty; Install / Use at your own risk.

This software is provided “AS IS” and without any expressed or implied warranties, including, without limitation, the implied warranties of merchantability and fitness for a particular purpose.

The author requests keeping authors name intact to any modified versions.

In addition, the author requests readers to submit any code modifications / enhancements and associated comments for consideration into a subsequent release (giving credit to contributors) thus, improving overall functionality and further benefiting the MVS 3.8J hobbyist public domain community.

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.