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.