MVS 3.8j User Modifications

May, 2020

 

After you have generated an MVS 3.8j system, you may at times find that there are modifications you would like to make to the components of the Operating System.  There are some changes for MVS 3.8j that people have made in the distant past; you can find these on the Internet, for example at the CBT Tape Site.  Remember that this version of MVS, the predecessor of OS/390 and z/OS, is very old, so any changes you find for MVS, OS/390, and Z/OS will have to be examined closely to ensure that they will apply to this older Operating System without breaking something.  There are also a few people who are interested in keeping this old system running and improving it, so at times users in that community will make useful enhancements to MVS 3.8j as well, so there will occasionally be a new update that shows up.

Changes to MVS (and its successors) are referred to as Usermods (User modifications) and are applied using the same System Modification Program that was used to build the distribution libraries and apply modifications during System Generation.  You will be familiar with this process if you have used my instructions (Installing MVS 3.8j) to build an MVS 3.8j system from the IBM distribution tapes.  The reason that all changes are expected to be applied using SMP, is that it maintains a history of all changes applied to the Operating System to ensure that any new change being applied will not break changes applied previously.  The history that SMP retains for the Operating System begins when the Stage 2 jobstream (jobs SYSGEN1 through SYSGEN6) are examined and loaded into the SMP datasets.

If you decide to rebuild your system from the distribution tapes, you might decide to add all (or most) of the modifications included on this page into the build steps, along with any modifications you have personal created, so that all of the modifications that you want on your MVS 3.8j are all installed when the system is complete.  Since I recently had the necessity to create a modification to my own system, even though I just rebuilt it, and also have had a modification submitted to me by another individual, I decided to create this page to collect MVS 3.8j User Modifications.  I suspect there will be more user modifications added to this page over time.  Just as a real world mainframe system is not a static thing, an instance of MVS 3.8j running under Hercules is an evolving system and changes to it will need to be made over time.

 

Modifications by Name

Modifications by Target [Usermod]

Modificatons by Originator [Usermod]
#DYP001-#DYP005, #DYPDMY JES2 [#DYP001-#DYP005, #DYPDMY] Brian Westerman [#DYP001-#DYP005, #DYPDMY]
JWS0001 SYS1.NUCLEUS(IEAVNP03) [MS00100] Jay Moseley (CBT/SHARE{SPLA}/James Purdy) [MS00100]
MS00100 SYS1.MACLIB(RESETPL) [JWS0001] Jeff Snyder [JWS0001]

 


#DYP001 - #DYP005, #DYPDMY

Brian Westerman reworked the Amdahl modification that allows for the specification of a dynamic proclib in JCL.  You can find the original Amdahl modification at the CBT Tape site in file #271 and Brian's modification, which was done for the Turnkey 3, in file #619.  Brian distributed the modification in several forms, but I have reworked them a bit to combine the modification into a single jobstream.  My jobstream builds the new load module from source, which avoids dealing with object code in decks that may have gone through EBCDIC/ASCII conversions, perhaps more than once.

Also, Brian left the ACCEPT step as a separate job, but I have combined it as the final step of the same job that does the APPLY of the modifications.

You may download the jobstream from dynproc.jcl.  Expect a return code of 0012 from the fourth step, as there is a REJECT that will not work the first time you execute the job.  Also expect a return code of 0004 on the final step due to link editor external links.  All other return codes should be 0000.  The output from the job on my system may be viewed at dynproc.pdf.

You will also need to modify your JES2 procedure in SYS1.PROCLIB.  This is the modified version of my JES2 procedure:    (changes shown in magenta)

//JES2     PROC M=JES2PM00,
//             N1=SYS1,
//             N2=SYS2,
//             L=LINKLIB,
//             U=3350,
//             P=PARMLIB
//IEFPROC  EXEC PGM=HASJES20,
//             TIME=1440,
//             DPRTY=(15,15)
//STEPLIB  DD  UNIT=&U,DISP=SHR,DSN=&N1..&L
//PROC00   DD  DSN=&N1..PROCLIB,DISP=SHR
//         DD  UNIT=&U,VOL=SER=SYSCPK,DISP=SHR,DSN=SYSC.PROCLIB
//         DD  DSN=&N2..PROCLIB,DISP=SHR
//         DD  DSN=&N1..PROCLIB,DISP=SHR
//IDF0PDSI DD  DSN=&N1..PROCLIB,DISP=SHR             <---1ST CONVERTER
//         DD  UNIT=&U,VOL=SER=SYSCPK,DISP=SHR,DSN=SYSC.PROCLIB
//         DD  DSN=&N2..PROCLIB,DISP=SHR
//         DD  DSN=&N1..PROCLIB,DISP=SHR
//IDF1PDSI DD  DSN=&N1..PROCLIB,DISP=SHR             <---2ND CONVERTER
//         DD  UNIT=&U,VOL=SER=SYSCPK,DISP=SHR,DSN=SYSC.PROCLIB
//         DD  DSN=&N2..PROCLIB,DISP=SHR
//         DD  DSN=&N1..PROCLIB,DISP=SHR
//HASPPARM DD  DSN=&N1..&P(&M),DISP=SHR
//HASPLIST DD  DDNAME=IEFRDER

As shown above, this will handle two converters.  If you need more (up to sixteen), consult Brian's documentation in CBT file #619.

To execute a procedure in a user proclib, include a JOBPROC card in your job before the first EXEC card:

//JOBPROC DD DISP=SHR,DSN=MY.PROC.LIBRARY,SYSPROC=YES 

The partitioned dataset specified must be fixed length, 80 character records.  The optional SYSPROC=YES parameter specifies that the system procedure libraries are to be searched for the procedure to be executed if it is not found in the user proclib.  If you omit the SYSPROC parameter, it defaults to SYSPROC=YES.  If you specify SYSPROC=NO, the job will fail if the procedure to be executed is not found in the user proclib.

 


JWS0001

The sample program SAMP327L in SYS1.SAMPLIB does not compile as shipped.  The RESETPL macros in both SYS1.MACLIB and SYS1.AMACLIB have RESETPOL in the macro header, rather than RESETPL.

Here is the complete jobstream to apply the modification:

//JWS0001 JOB (SYS),'USERMOD: JWS0001 ',
// CLASS=S,
// MSGCLASS=X,
// MSGLEVEL=(1,1),
// REGION=4096K
/*JOBPARM LINES=100
//*
//RECEIVE EXEC SMPREC,WORK='SYSALLDA'
//SMPPTFIN DD DATA,DLM='><'
++USERMOD(JWS0001).
++VER(Z038) FMID(EBT1102) SUP(UZ57310)
/*
PROBLEM DESCRIPTION(S):
THE PROTOTYPE STATEMENT IN THE RESETPL MACRO HAS THE NAME RESETPOL.

SPECIAL CONDITIONS:
ACTION: NONE REQUIRED, THE CHANGE IS IMMEDIATE.

COMMENTS:
LAST CHANGE: 2020/04/29

THE FOLLOWING MODULES AND/OR MACROS ARE AFFECTED BY THIS USERMOD:

MODULES
<NONE>
MACROS
RESETPL
*/.
++MACUPD(RESETPL) DISTLIB(AMACLIB).
./ CHANGE NAME=RESETPL
&NAME RESETPL &DECB,&TYPE,&SPEC @JWS0001 02000000
><
//SMPCNTL DD *
REJECT
S(JWS0001)
.
RESETRC .
RECEIVE
S(JWS0001)
.
//*
//APPLYCK EXEC SMPAPP,WORK='SYSALLDA'
//SMPCNTL DD *
APPLY
S(JWS0001)
CHECK
.
//*
//APPLY EXEC SMPAPP,COND=(0,NE),WORK='SYSALLDA'
//SMPCNTL DD *
APPLY
S(JWS0001)
DIS(WRITE)
COMPRESS(ALL)
.
//*
//

You may download a copy of this job at jws0001.jcl.  Expected return codes for all steps is 0000.  (Note:  you may see a 0012 return code from the REJECT command if you have not previously RECEIVEd this modification, but it is reset immediatly after by the RESETRC command.  The REJECT is coded so that this job may be rerun, if required.)  The output from the job on my system may be viewed at jws0001.pdf.

 


 

MS00100

When (with the encouragement of Phil Roberts) I originally created the Compiler/Language/Tools Volume (in December 2008) I envisioned SYSCPK as a way to group all of the various language compilers into a single place for easy installation into MVS 3.8j running under Hercules.  Over time it evolved to contain a number of additional programs, and some documentation, that did not fall strictly under the heading of language compilers, but were just useful to have.  Recently I have been moving CBT batch programs that I had installed into SYS2.LINKLIB over onto the link library on SYSCPK.  Then I remembered that libraries concatenated by inclusion into SYS1.PARMLIB(LNKLST00) must be catalogued in the Master Catalog.  Since I did not want to keep modifying my jobstreams to include a STEPLIB DD to SYSC.LINKLIB, I went looking for a solution.  

In November 1981, James Purdy submitted to SHARE a modification to IEAVNP03 to bypass the requirement that all libraries concatenated with the LNKLST parameter had to be catalogued in the Master Catalog.  I found another file that had various other versions of this code, but all for even later versions of MVS, so this version was the closest to MVS 3.8j in age.  The original version is included on the CBT Overflow tape (version 466) in file #130.  This corresponds to SHARE tape #30, so you can also find the modification on the SPLA volume in SPLA.SPL623.FILE030.DATA.  

IEAVNP03 is one of the programs that is executed during the MVS nucleus initialization, and at the time that it is executed, MVS is not far enough along to have access to User Catalogs.  The modification adds code to IEAVNP03 so that when the normal lookup of the library fails, the code scans forward from the library name to see if there is an additional parameter coded following the library name, enclosed in parentheses.  If so, that text is inserted as the Volume Serial Number of the DASD device where the library is located and IEAVNP03 processing resumes.

There were several steps to get from this original version of the modification to a version that would apply to MVS 3.8j.  There is source code for IEAVNP03 provided in the MVS 3.8j optional materials tapes, but as I expected, it does not match the version that is installed on MVS 3.8j from the distribution tapes.  Using a listing of the disassembly of IEAVNP03 (from SYS1.NUCLEUS on my newly built MVS 3.8j) and a listing of the assembly of the source for IEAVNP03 (found on the optional materials tapes for MVS 3.8j), I modified the original MS00100 code created by James Purdy.  Here is the original, side by side with my version altered for MVS 3.8j:

IEAVNP03 CSECT
* THIS IS A MODIFICATION TO MODULE IEAVNP03 TO RECOGNIZE A DATASET
* IN THE LINKLIST THAT IS EITHER NOT CATALOGUED OR IS CATALOGUED
* BUT NOT IN THE MVS MASTER CATALOG.
* THIS MOD IS AT THE 8107 LEVEL OF MVS/SP1.1
*
*
* USE:  PLACE THE VOLSER OF THE DATASET IN PARENTHESIS IMMEDIATELY
*       FOLLOWING THE DATA SET NAME
*
*  LINKLIST CARD EXAMPLE:
*
*       SYSTEMS.LINKLIB(RES012)
*
* THIS CODE IS INTENDED TO BE ASSEMBLED AND THEN PASSED THROUGH
* AN ASSMBLER-TO-ZAP TRANSLATOR LIKE THE YALE ASMTOZAP PROGRAM
*
@0       EQU   0
@1       EQU   1
@2       EQU   2
@3       EQU   3
@4       EQU   4
@5       EQU   5
@6       EQU   6
@7       EQU   7
@8       EQU   8
@9       EQU   9
@10      EQU   10
@11      EQU   11
@12      EQU   12
@13      EQU   13
@14      EQU   14
@15      EQU   15
SCANREG  EQU   8
LNKVOLID EQU   X'2D'
         SPACE 2
*ZAP CARD ++USERMOD(MS00100).
*ZAP CARD ++VER(Z038) FMID(EBB1102).
*ZAP CARD ++ZAP(IEAVNP03) DISTLIB(AOSC5).
*ZAP CARD   NAME         IEAVNP03 IEAVNP03
*ZAP CARD   IDRDATA      MS00100
         SPACE 3                
         ORG   IEAVNP03+X'26'   
@PSTART  EQU   *                
         USING @PSTART,@11      
         USING @PSTART+4095,@12 
         USING @PSTART+8190,@13 
         SPACE 1                
         ORG   IEAVNP03+X'1D40' 
LCNAMPTR EQU   *                
         ORG   IEAVNP03+X'CDA'  
*ZAP START VER                  
NP3LCLOC L     @7,LCNAMPTR      
         ORG   IEAVNP03+X'CFE'  
NP3LCLXT LA    SCANREG,51(,SCANREG)
         ORG   IEAVNP03+X'CDA'     
*ZAP START REP                     
         B     PATCHLOC            
         ORG   IEAVNP03+X'2768'    
PATCHLOC LA    @15,36              
SCANLPAR LA    @7,1(@15,SCANREG)   
         CLI   0(@7),C'('          
         BE    FOUND               
         BCT   @15,SCANLPAR        
         B     NOTFOUND            
         SPACE 1                   
FOUND    CLI   7(@7),C')'          
         BE    MOVEVOL             
NOTFOUND L     @7,LCNAMPTR         
         B     NP3LCLOC+4          
         SPACE 1                   
MOVEVOL  MVC   LNKVOLID(6,SCANREG),1(@7)
         MVI   0(@7),C' '               
         MVC   1(7,@7),0(@7)            
         SLR   @15,@15                  
         B     NP3LCLXT                 
*ZAP END                                
         END
IEAVNP03 CSECT
* THIS IS A MODIFICATION TO MODULE IEAVNP03 TO RECOGNIZE A DATASET
* IN THE LINKLIST THAT IS EITHER NOT CATALOGUED OR IS CATALOGUED
* BUT NOT IN THE MVS MASTER CATALOG.
* THIS MOD IS AT THE 8107 LEVEL OF MVS/SP1.1
* (MODIFIED 05/19/2020 FOR MVS 3.8J - JLM)
*
*
* USE:  PLACE THE VOLSER OF THE DATASET IN PARENTHESIS IMMEDIATELY
*       FOLLOWING THE DATA SET NAME
*
*  LINKLIST CARD EXAMPLE:
*
*       SYSTEMS.LINKLIB(RES012)
*
* THIS CODE IS INTENDED TO BE ASSEMBLED AND THEN PASSED THROUGH
* AN ASSMBLER-TO-ZAP TRANSLATOR LIKE THE YALE ASMTOZAP PROGRAM
*
@0       EQU   0
@1       EQU   1
@2       EQU   2
@3       EQU   3
@4       EQU   4
@5       EQU   5
@6       EQU   6
@7       EQU   7
@8       EQU   8
@9       EQU   9
@10      EQU   10
@11      EQU   11
@12      EQU   12
@13      EQU   13
@14      EQU   14
@15      EQU   15
SCANREG  EQU   8
LNKVOLID EQU   X'2D'
         SPACE 2
*ZAP CARD ++USERMOD(MS00100).
*ZAP CARD ++VER(Z038) FMID(EBB1102).
*ZAP CARD ++ZAP(IEAVNP03) DISTLIB(AOSC5).
*ZAP CARD   NAME         IEAVNP03 IEAVNP03
*ZAP CARD   IDRDATA      MS00100
         SPACE 3
         ORG   IEAVNP03+X'22'
@PSTART  EQU   *
         USING @PSTART,@11
         USING @PSTART+4095,@12
         USING @PSTART+8190,@13
         SPACE 1
         ORG   IEAVNP03+X'1CF8'
LCNAMPTR EQU   *
         ORG   IEAVNP03+X'CAE'
*ZAP START VER
NP3LCLOC L     @10,LCNAMPTR
         ORG   IEAVNP03+X'CD2'
NP3LCLXT LA    SCANREG,51(,SCANREG)
         ORG   IEAVNP03+X'CAE'
*ZAP START REP
         B     PATCHLOC
         ORG   IEAVNP03+X'2768'
PATCHLOC LA    @15,36
SCANLPAR LA    @10,1(@15,SCANREG)
         CLI   0(@10),C'('
         BE    FOUND
         BCT   @15,SCANLPAR
         B     NOTFOUND
         SPACE 1
FOUND    CLI   7(@10),C')'
         BE    MOVEVOL
NOTFOUND L     @10,LCNAMPTR
         B     NP3LCLOC+4
         SPACE 1
MOVEVOL  MVC   LNKVOLID(6,SCANREG),1(@10)
         MVI   0(@10),C' '
         MVC   1(7,@10),0(@10)
         SLR   @15,@15
         B     NP3LCLXT
*ZAP END
         END

As noted in the comments above, this code fragment is processed by the assembler, any version will do, and the listing is then processed by the ASMTOZAP program (file #44 on the CBT tape).  The output from ASMTOZAP is valid input to the SMP program.  Here is the complete jobstream, with some documentation added, to apply the modification:

//MS00100  JOB (SYS),'USERMOD: MS00100 ',
//             CLASS=S,
//             MSGCLASS=X,
//             MSGLEVEL=(1,1),
//             REGION=4096K
/*JOBPARM LINES=100
//RECEIVE  EXEC SMPREC,WORK='SYSALLDA'
//SMPPTFIN   DD DATA,DLM='><'
++USERMOD(MS00100).
++VER(Z038) FMID(EBB1102)
  /*
   PROBLEM DESCRIPTION(S):
     DURING NIP PARMLIB LINK LIST CONCATENATION PROCESSING,
     LIBRARIES INCLUDED MUST BE CATALOGUED IN THE MASTER
     CATALOG OR THEY WILL NOT BE LOCATED AND THE ENTRY WILL
     BE IGNORED. THIS MODIFICATION ALLOWS THE INCLUSION OF
     A VOLUME SERIAL NUMBER IN PARENTHESES IMMEDIATELY AFTER
     THE LIBRARY NAME WHICH IS USED TO LOCATE THE LIBRARY.

       EXAMPLE: SYSC.LINKLIB(SYSCPK)

   COMPONENT: 5752-VS2-EBB1102

   SPECIAL CONDITIONS:
     ACTION:
       AN IPL IS REQUIRED FOLLOWING THE SUCCESSFUL APPLICATION.

   COMMENTS:
     REWORKED FROM JAMES PURDY ORIGINAL, SOURCE: SPLA FILE #030,
     COPY OBTAINED FROM CBT OVERFLOW V466 FILE #130.

     LAST CHANGE: 2020/05/19 JAY MOSELEY

   THE FOLLOWING MODULES AND/OR MACROS ARE AFFECTED BY THIS USERMOD:

     MODULES
       SYS1.NUCLEUS(IEAVNP03)
     MACROS
       <NONE>
 */.
++ZAP(IEAVNP03) DISTLIB(AOSC5).
  NAME         IEAVNP03 IEAVNP03
  IDRDATA      MS00100
*                   NP3LCLOC EQU   *
VER 0CAE 58A0,CCD7           L     @10,LCNAMPTR
*                            ORG   IEAVNP03+X'CD2'
*                   NP3LCLXT EQU   *
VER 0CD2 4180,8033           LA    SCANREG,51(,SCANREG)
*                            ORG   IEAVNP03+X'CAE'
REP 0CAE 47F0,D748           B     PATCHLOC
*                            ORG   IEAVNP03+X'2768'
*                   PATCHLOC EQU   *
REP 2768 41F0,0024           LA    @15,36
*                   SCANLPAR EQU   *
REP 276C 41AF,8001           LA    @10,1(@15,SCANREG)
REP 2770 954D,A000           CLI   0(@10),C'('
REP 2774 4780,D760           BE    FOUND
REP 2778 46F0,D74C           BCT   @15,SCANLPAR
REP 277C 47F0,D768           B     NOTFOUND
*                   FOUND    EQU   *
REP 2780 955D,A007           CLI   7(@10),C')'
REP 2784 4780,D770           BE    MOVEVOL
*                   NOTFOUND EQU   *
REP 2788 58A0,CCD7           L     @10,LCNAMPTR
REP 278C 47F0,BC90           B     NP3LCLOC+4
*                   MOVEVOL  EQU   *
REP 2790 D205,802D,A001      MVC   LNKVOLID(6,SCANREG),1(@10)
REP 2796 9240,A000           MVI   0(@10),C' '
REP 279A D206,A001,A000      MVC   1(7,@10),0(@10)
REP 27A0 1FFF                SLR   @15,@15
REP 27A2 47F0,BCB0           B     NP3LCLXT
* DECK PRODUCED BY THE ASMTOZAP UTILITY 20/05/19 170131
><
//SMPCNTL  DD  *
  REJECT
          S(MS00100)
          .
  RESETRC .
  RECEIVE
          S(MS00100)
          .
//*
//APPLYCK  EXEC SMPAPP,WORK='SYSALLDA'
//SMPCNTL  DD  *
  APPLY
        S(MS00100)
        CHECK
        .
//*
//APPLY    EXEC SMPAPP,COND=(0,NE),WORK='SYSALLDA'
//SMPCNTL  DD  *
  APPLY
        S(MS00100)
        DIS(WRITE)
        COMPRESS(ALL)
        .
//*
//

You may download a copy of this job at ms00100.jcl.  Expected return codes for all steps is 0000.  (Note:  you may see a 0012 return code from the REJECT command if you have not previously RECEIVEd this modification, but it is reset immediatly after by the RESETRC command.  The REJECT is coded so that this job may be rerun, if required.)  The output from the job on my system may be viewed at ms00100.pdf.

This modification updates IEAVNP03 to allow the inclusion of a Volume Serial Number in parentheses following the library name in SYS1.PARMLIB(LNKLST00) entries.  You must edit SYS1.PARMLIB(LNKLST00) to add the Volume Serial Number where needed for uncatalogued libraries (or libraries catalogued in User Catalogs).  See the example coding in the comments section of the modification code.

 


I hope that you have found my instructions useful.  If you have questions that I can answer to help expand upon my explanations and examples shown here, please don't hesitate to send them to me:


Return to Site Home Page Frequently Asked Questions


This page was last updated on May 29, 2020 .