Skip to main content

Software  >  Software Development  >  z/OS SCLM Suite  >  

SCLM for z/OS

  White Paper

SCLM Customer Migration - A Case Study
TR 29.2035

Mike Petersen
Library Development
IBM Software Solutions
Research Triangle Park, N.C.


Table of Contents

Back to top




Abstract

This report assists the experienced IBM(*) ISPF SCLM (Software Configuration and Library Manager) user in migrating a customer application into an SCLM application development environment. A case study of a customer migration is presented as a typical situation one may encounter. The names of the customer and related personnel are fictitious although the company and the people do exist.

ITIRC KEYWORDS
  • Architecture definition
  • BMS
  • CICS(*)
  • Configuration Management
  • DB2(*)
  • ISPF
  • ISPF 4.1
  • Language definition
  • Library Management
  • Project definition
  • SCLM
  • SCLM migration
  • Software Configuration and Library Manager

Back to top




About the Author

Mike Petersen is an IBM software developer for service offerings in Raleigh, North Carolina. Mike was an SCLM software developer for six years. He has worked in systems, application, and other product programming areas. He also has had assignments with world trade, IBM faculty loan program, technical education, and technical support for marketing.

Mike received a BS in mathematics with a physics minor in 1972 and an MS in computer science in 1974 from Purdue University. In 1979 he received an MBA from Marist College.

Back to top




Before We Begin

This report is written for the experienced SCLM user who needs to migrate a customer application into an SCLM application development environment. Experience should include constructing and modifying project definitions, language definitions, and architecture definitions. The user should also be able to assemble and link SCLM project definitions. Programming and JCL skills will be helpful in any SCLM migration.

This case study involves a DB2 and CICS solution. Experience with DB2 and CICS application development will be helpful in understanding the technical details of the solution.

Programmers and project leaders involved in migrating an existing application to SCLM libraries may find this case study helpful. This information may also be helpful for establishing new applications under SCLM library controls.

Back to top




Mayfield Gas and Electric Company

The Mayfield Gas and Electric Company (MGE) provides natural gas and electricity utilities for the Mayfield metropolitan area. The company has an application development and software maintenance staff of 35 people. There are no unusual software packages or practices. This company is an example of a straight forward business enterprise and SCLM migration.

The names of the customer and related personnel are fictitious although the company and the people do exist.

The predominant language in use is COBOL with a little assembler and report generator. Applications are written in COBOL, COBOL with DB2, COBOL with CICS, COBOL with DB2 and CICS, assembler, and report generator.

A conference call was held with an IBM field representative, and two customer developers, and me prior to my arrival at the customer location. The customer developers were John Roberts (project leader) and Betty Morris (developer). From this conference call I was able to determine:

  1. There was no competitive or home-grown library product in use. Application development was controlled with a manual process.
  2. DB2, CICS, and COBOL were the main languages in use.
  3. MGE was using ISPF 4.1.
  4. MGE had no training in SCLM.
  5. There were 35 people in the application development and software maintenance areas.
  6. Application development activity was divided into 5 areas.
  7. SCLM functions were reviewed and appeared to meet the customer needs.
  8. 8 business days would be required to teach a one day class and migrate a subset of customer applications into an SCLM environment.

Prior to my arrival at MGE, I constructed the following plan for the 8 days and reviewed it with the IBM field people:

  1. Day One
    Objective - install SCLM samples and make sure system is working properly
  2. Day Two and Three
    Objective - finish samples, study application development process, look at specific tools used to build the MGE applications, formulate an SCLM migration plan
  3. Day Four
    Objective - full day of SCLM education
  4. Day Five
    Objective - construct an SCLM project definition, allocate data sets, construct language definitions
  5. Day Six
    Objective - migrate a subset of programs into SCLM libraries, BUILD, PROMOTE
  6. Day Seven
    Objective - demonstrate that SCLM, SCLM utilities, and reports are working as advertised
  7. Day Eight
    Objective - wrap up, Questions/Answers, additional skills transfer

Back to top




Day One

I met with John Roberts, Betty Morris, and Lou Wolfe (another developer). We discussed the current application development process and identified these data sets as part of the process:

  1. MGE.PROD.LOADOLIB - production load modules for online applications
  2. MGE.PROD.LOADBLIB - production load modules for batch applications
  3. MGE.PROD.DBRMOLIB - DBRMs for online applications
  4. MGE.PROD.DBRMBLIB - DBRMs for batch applications
  5. MGE.PROD.MAPLIB - BMS maps for CICS
  6. MGE.PROD.COBOL - production COBOL source programs
  7. MGE.PROD.COPYLIB - production copy books for the production COBOL source programs
  8. MGE.PROD.COPYLIB.SCREENS - production CICS BMS source
  9. MGE.PROD.FORTRAN - production FORTRAN source programs
  10. MGE.PROD.JCL - production JCL
  11. MGE.PROD.PROCLIB - production JCL procedures
  12. MGE.PROD.COMPJCL - sample JCL for compiling, assembling, linking, and binding DB2 plans
  13. MGE.PROD.COMPPROC - JCL procedures used by PGM.PROD.COMPJCL
  14. MGE.PROD.COMPILE - JCL job streams, one per load module, for compiling and linking specific programs

The application development process consisted primarily of:

  1. creating and/or editing source members from the MGE.PROD.COBOL, MGE.PROD.COPYLIB, and MGE.PROD.COPYLIB.SCREENS data set
  2. creating, changing, or using "as is" members in MGE.PROD.COMPILE to build the application (MGE.PROD.COMPJCL and MGE.PROD.COMPPROC contained JCL samples and the JCL procedures)

Partitioning of the total MGE application was discussed in order to determine a possible architecture definition structure. The five main partitions identified were:

  1. Customer Service (CS)
  2. Engineering (EG)
  3. Human Resources (HR)
  4. Accounting (AC)
  5. Power Production (PP)

Even though these applications are somewhat disjointed they do share copy books and utilities. These applications represent a logical separation of application development work. At this point I was beginning to think about a high level architecture definition called MGE that would have these statements:

  1. INCL CS ARCHDEF Customer Service
  2. INCL EG ARCHDEF Engineering
  3. INCL HR ARCHDEF Human Resources
  4. INCL AC ARCHDEF Accounting
  5. INCL PP ARCHDEF Power Production


EXAMPLE: Initial MGE Architecture Concept

+------+ ³ ³ +----------+ CS ³ ³ ³ ³ ³ +------+ ³ ³ +------+ ³ ³ ³ +----------+ EG ³ ³ ³ ³ ³ +------+ ³ +------+ ³ +------+ ³ ³ ³ ³ ³ ³ MGE +----------------------+ HR ³ ³ ³ ³ ³ ³ +------+ ³ +------+ ³ ³ +------+ ³ ³ ³ +----------+ AC ³ ³ ³ ³ ³ +------+ ³ ³ +------+ ³ ³ ³ +----------+ PP ³ ³ ³ +------+

Back to top




Day Two

I received the user id IBMMXP on the MGE system with proper authority to view the data sets and to work with SCLM. I was placed in telephone contact with the main systems programmer Sam Crew. It is crucial during this stage of investigation and installing the samples that one may be able to easily contact the person who knows the system data set names, job card structure, RACF(*) procedures, and other details that a new user needs to know. Sam Crew was very helpful.

I turned to page 55 in the "ISPF SCLM Project Manager's Guide", SC34-4470-00, and followed the instructions for installing the sample project definition that is shipped as part of ISPF. IBMMXP.PROJDEFS.SOURCE, IBMMXP.PROJDEFS.OBJ, and IBMMXP.PROJDEFS.LOAD data sets were allocated for my work with the samples. I quickly discovered that ISP.V4R1M0.SISPSAMP referenced in the manual as the data set containing the samples did not exist. A call to Sam Crew cleared it up - the data set was named SYS1.SISPSAMP. Fortunately the other system data sets had similar names and were easy to locate. I copied the appropriate members from SYS1.SISPSAMP into IBMMXP.PROJDEFS.SOURCE as per the instructions in the project manager's guide.

SYS1.SISPSAMP(FLM02ALL) is the sample batch job for allocating the SCLM controlled libraries referenced by the sample project definition. After a few more calls to Sam Crew and John Roberts I was able to modify the member FLM02ALL that I had copied into IBMMXP.PROJDEFS.SOURCE with a proper job card and the correct volumes for the sample data set allocations. I also discovered that MGE did not have PLI which is needed for one of the SCLM sample programs. This was easily remedied by replacing the sample PLI program with a simple COBOL program written by John Roberts. The COPY for the PLI language definition in the IBMMXP project definition was replaced with a COPY FLM@COB for COBOL work.

The SCLM language definition FLM@ARCH works correctly "out of the box". However, the FLM@ASM, FLM@COB, and FLM@L370 language definitions typically require modifications for library names. I created corresponding members FLM01ASM, FLM01CB2, and FLM01370 in IBMMXP.PROJDEFS.SOURCE based upon the language definitions supplied by IBM in SYS1.SISPSAMP. Since the sample members start with FLM01 and FLM02, it made sense to continue that naming convention for my members.

These are a few of the typical changes that were required to the language definitions as well as ISPF:

  1. the name of the assembler had to be changed to ASMA90
  2. the COBOL compiler was in a special data set and the FLMTRNSL DSNAME keyword was used to point to the special data set
  3. option 4.1 of ISPF, used to assemble the project definition, did not work because the wrong assembler was being referenced (Sam Crew quickly fixed this)

By the end of the day I was able to do a successful BUILD and PROMOTE using the samples in my IBMMXP project definition. Exercising the samples demonstrates that the SCLM function is working properly. I was able to:

  1. Use the SCLM migration utility for the sample COBOL source program and architecture definitions
  2. BUILD using the sample high level architecture definition member
  3. PROMOTE using the sample high level architecture definition member from development to test and from test to production
  4. EDIT the sample COBOL source member to perform a draw down of the member
  5. BUILD and PROMOTE again using the high level architecture definition member

At the end of the day we had a modified sample project definition that was the beginning of the MGE project definition:


         TITLE '*** SAMPLE PROJECT DEFINITION - DAY TWO ***'
IBMMXP   FLMABEG
*
*        **************************************************************
*        *  DEFINE THE TYPES                                          *
*        **************************************************************
*
ARCHDEF  FLMTYPE                        -- ARCHITECTURE DEFINITIONS  --
SOURCE   FLMTYPE                        -- SOURCE CODE               --
SOURCLST FLMTYPE                        -- LISTINGS                  --
OBJ      FLMTYPE                        -- OBJECT CODE               --
LMAP     FLMTYPE                        -- LINKAGE EDITOR MAPS       --
LOAD     FLMTYPE                        -- LOAD MODULES              --
*
*        **************************************************************
*        *  DEFINE THE GROUPS                                         *
*        **************************************************************
*
DEV1     FLMGROUP AC=(P),KEY=Y,PROMOTE=TEST
DEV2     FLMGROUP AC=(P),KEY=Y,PROMOTE=TEST
TEST     FLMGROUP AC=(P),KEY=Y,PROMOTE=RELEASE
RELEASE  FLMGROUP AC=(P),KEY=Y
*
**********************************************************************
*                PROJECT CONTROLS
**********************************************************************
*
         FLMCNTRL ACCT=IBMMXP.ACCOUNT.FILE
*
**********************************************************************
*                LANGUAGE DEFINITION TABLES
**********************************************************************
*
         COPY  FLM@ARCD           -- ARCHDEF    ARCHITECTURE DEFN.  --
         COPY  FLM01ASM           -- ASM        ASSEMBLER ASMA90    --
         COPY  FLM01CB2           -- COB2       COBOL II            --
         COPY  FLM01370           -- LE370      LINKAGE EDITOR      --
*
***********************************************************************
*
         FLMAEND


EXAMPLE: Library hierarchy for sample project definition - Day Two

+---------+ ³ RELEASE ³ +----+----+ ³ +----+----+ ³ TEST ³ +----+----+ ³ +-------------------------+ ³ ³ +---+--+ +---+---+ ³ DEV1 ³ ³ DEV2 ³ +------+ +-------+

Back to top




Day Three

was now time to expand my IBMMXP project definition to incorporate MGE language definitions, data set types, and data set groups. I examined MGE.PROD.COMPILE, MGE.PROD.COMPJCL, and MGE.PROD.COMPPROC for details about the MGE compile, assemble, link, and bind process.

I noticed that the sample JCL in MGE.PROD.COMPJCL had member names COBOL, DB2, RPTGEN, CICSDB2, and the like. This was somewhat true of the members in MGE.PROD.COMPPROC (the COMPJCL member DB2 used the COMPPROC member DB2). Since a developer could use the COBOL JCL member as a model for building a COBOL source member, it made sense to use a language definition with LANG=COBOL for building COBOL source members. Similarly a language definition with LANG=DB2 was used for building COBOL source members that required the DB2 preprocessor.

The MGE COBOL programs had COPY commands for members in the MGE.PROD.COPYLIB data set. I added COPYLIB as a type to the project definition and made it an extension of the SOURCE type.


EXAMPLE: SOURCE FLMTYPE with COPYLIB extension:

SOURCE FLMTYPE EXTEND=COPYLIB -- SOURCE CODE -- COPYLIB FLMTYPE -- COPY BOOKS --

The appropriate COPYLIB data sets were allocated for the SCLM controlled libraries by creating a job that used one of the steps in IBMMXP.PROJDEFS.SOURCE(FLM02ALL) with COPYLIB as the low level data set name qualifier. This data set allocation step was added to the allocation job (IBMMXP.PROJDEFS.SOURCE(FLM02ALL)) for later use.

I was able to name the language definitions with names that were familiar to the customer for similar purposes. For example, these were the steps I followed to create the DB2 language definition:

  1. I looked around in MGE.PROD.COMPPROC for something that looked like COBOL and DB2. The member name DB2 looked like a likely candidate and turned out to be the one I needed.
  2. I looked around in MGE.PROD.COMPJCL for something that looked like it might use the DB2 JCL procedure. The member name DB2 looked like a likely candidate and it turned out to be the one I needed. It also had the DB2 BIND command which would be needed later for the DB2 CLIST.
  3. I created member FLM01DB2 in IBMMXP.PROJDEFS.SOURCE from the IBM sample FLM@ECO2.
  4. I modified FLM01DB2 to remove the CICS preprocessor FLMTRNSL and related FLMALLOC macro calls.
  5. I used the customer JCL to determine the proper OPTIONS list for the DB2 preprocessor and COBOL II compiler.

The DB2 preprocessor in language definition FLM01DB2 produces a DBRM output. A type was added to the project definition for the DBRMs and the appropriate DBRM SCLM controlled libraries were allocated. A data set allocation step was added to the allocation job (IBMMXP.PROJDEFS.SOURCE(FLM02ALL)) for later use.


***********************************************************************
*            SCLM LANGUAGE DEFINITION FOR                             *
*          COBOL II WITH DB2 PREPROCESSOR                             *
*                                                                     *
* DB2 - CREATED FROM SAMPLE FLM@ECO2                                  *
*                                                                     *
**********************  GENERAL NOTES  ********************************
*                                                                     *
*  THIS LANGUAGE DEFINITION IS AN EXAMPLE THAT CAN SERVE AS A         *
*  REFERENCE IN THE CONSTRUCTION AND CUSTOMIZATION OF LANGUAGE        *
*  DEFINITIONS FOR A PARTICULAR APPLICATION AND ENVIRONMENT.          *
*                                                                     *
********************* CUSTOMIZATION NOTES *****************************
*                                                                     *
* DB2 OUTPUT IS PASSED VIA THE DB2TRANS DD ALLOCATION TO THE COBOL II *
* COMPILER.                                                           *
*                                                                     *
* TO CUSTOMIZE POINT THE FLMSYSLB MACRO(S) AT ALL 'STATIC' COPY       *
* DATASETS NEEDED FOR THE PARSER.                                     *
*                                                                     *
* CUSTOMIZE THE 'OPTIONS' AND 'GOODRC' FIELDS TO YOUR STANDARDS.      *
*                                                                     *
* ADD THE 'DSNAME' FIELD IF THE TRANSLATOR IS IN A PRIVATE LIBRARY.   *
*                                                                     *
* WHEN A NEW TRANSLATOR VERSION REQUIRES TOTAL RECOMPILATION FOR THIS *
* LANGUAGE, THE 'VERSION' FIELD ON FLMLANGL SHOULD BE CHANGED.        *
***********************************************************************
*
*
*
         FLMLANGL    LANG=DB2,ALCSYSLB=Y,VERSION=2.0
*
* PARSER TRANSLATOR
*
          FLMTRNSL   CALLNAM='SCLM COBOL PARSE',                       C
               FUNCTN=PARSE,                                           C
               PORDER=1,                                               C
               OPTIONS=(@@FLMLIS,@@FLMSTP,@@FLMSIZ,)
*          (* SOURCE      *)
           FLMALLOC  IOTYPE=A,DDNAME=SOURCE
            FLMCPYLB @@FLMDSN(@@FLMMBR)
*
* BUILD TRANSLATORS
*
*         --DB2 PREPROCESSOR INTERFACE--
          FLMTRNSL   CALLNAM='DB2 PREPROCESS',                         C
               FUNCTN=BUILD,                                           C
               COMPILE=DSNHPC,                                         C
               VERSION=1.0,                                            C
               GOODRC=4,                                               C
               PORDER=3,                                               C
               OPTIONS=(HOST(COB2),APOST,SOURCE)
*  1       -- N/A --
           FLMALLOC  IOTYPE=N
*  2       -- N/A --
           FLMALLOC  IOTYPE=N
*  3       -- N/A --
           FLMALLOC  IOTYPE=N
*  4       -- SYSLIB --
           FLMALLOC  IOTYPE=I,KEYREF=SINC
*  5       -- SYSIN --
           FLMALLOC  IOTYPE=S,KEYREF=SINC,RECFM=FB,LRECL=80,           C
               RECNUM=5000
*  6       -- SYSPRINT --
           FLMALLOC  IOTYPE=W,RECFM=FBA,LRECL=133,                     C
               RECNUM=35000,PRINT=Y
*  7       -- N/A --
           FLMALLOC  IOTYPE=N
*  8       -- SYSUT1 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
*  9       -- SYSUT2 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
* 10       -- SYSUT3 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
* 11       -- N/A --
           FLMALLOC  IOTYPE=N
* 12       -- SYSTERM --
           FLMALLOC  IOTYPE=A
            FLMCPYLB NULLFILE
* 13       -- N/A --
           FLMALLOC  IOTYPE=N
* 14       -- SYSCIN --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,                       C
               RECNUM=9000,DDNAME=DB2TRANS
* 15       -- N/A --
           FLMALLOC  IOTYPE=N
* 16       -- DBRMLIB--
           FLMALLOC  IOTYPE=P,DDNAME=DBRMLIB,MEMBER=@@FLMONM,          C
               DFLTTYP=DBRM,KEYREF=OUT1,                               C
               RECFM=FB,LRECL=80,RECNUM=5000,DIRBLKS=1
*
*
*
          FLMTRNSL   CALLNAM='COBOL II COMPILER',                      C
               FUNCTN=BUILD,                                           C
               COMPILE=IGYCRCTL,                                       C
               DSNAME=SYS1.COB2COMP,                                   C
               VERSION=2.0,                                            C
               GOODRC=4,                                               C
               PORDER=3,                                               C
               OPTIONS=(OBJ,APOST,LIB,FLAG(E),OFF,NOSEQ,RES,DYN,NUM,   C
               TRUNC(OPT),FDUMP,NOOPT,NOTEST,NOLIST,NOMAP,SSR,NOXREF)
*
* DDNAME ALLOCATION (USING DDNAMELIST SUBSTITUTION)
*
*  1       (* SYSLIN *)
           FLMALLOC  IOTYPE=O,KEYREF=OBJ,RECFM=FB,LRECL=80,            C
               RECNUM=8000,DFLTTYP=OBJ,DDNAME=SYSLIN
*  2       (* N/A *)
           FLMALLOC  IOTYPE=N
*  3       (* N/A *)
           FLMALLOC  IOTYPE=N
*  4       (* SYSLIB *)
           FLMALLOC  IOTYPE=I,KEYREF=SINC,DDNAME=SYSLIB
*  5       (* SYSIN *)
           FLMALLOC  IOTYPE=U,DDNAME=DB2TRANS
*  6       (* SYSPRINT *)
           FLMALLOC  IOTYPE=W,KEYREF=LIST,RECFM=FBA,LRECL=133,         C
               RECNUM=50000,PRINT=Y,DFLTTYP=SOURCLST,DDNAME=SYSPRINT
*  7       (* SYSPUNCH *)
           FLMALLOC  IOTYPE=A
            FLMCPYLB NULLFILE
*  8       (* SYSUT1 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
*  9       (* SYSUT2 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 10       (* SYSUT3 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 11       (* SYSUT4 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 12       (* SYSTERM *)
           FLMALLOC  IOTYPE=A,DDNAME=SYSTERM
            FLMCPYLB NULLFILE
* 13       (* SYSUT5 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 14       (* SYSUT6 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 15       (* SYSUT7 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000

I was now ready for a real customer COBOL program involving DB2. The human resources application was the simplest and was chosen as the first application to migrate into SCLM. I talked to Betty Morris about a candidate program to be first and we decided to use the program HREIBILD. The source was sent to me and I migrated it into the IBMMXP.DEV1.SOURCE library of the sample project definition that I had created.

Since this was DB2 it was a good time to add an FLMTYPE for DB2CLIST and DB2OUT. The associated data sets were allocated and steps added to the allocation job (IBMMXP.PROJDEFS.SOURCE(FLM02ALL)) for later use. The FLM02ALL member evolved into the data set allocation job needed for the customer project definition.

Language definitions FLM@BDO and FLM@DB2 from SYS1.SISPSAMP were used to create FLM01BDO (DB2OUT) and FLM01DB2(DB2CLIST) language definitions used in IBMMXP.PROJDEFS.SOURCE. As with all other language definitions these were referenced in the IBMMXP project definition with the COPY command.


         TITLE '*** SAMPLE PROJECT DEFINITION - DAY THREE ***'
IBMMXP   FLMABEG
*
*        **************************************************************
*        *  DEFINE THE TYPES                                          *
*        **************************************************************
*
ARCHDEF  FLMTYPE                        -- ARCHITECTURE DEFINITIONS  --
SOURCE   FLMTYPE EXTEND=COPYLIB         -- SOURCE CODE               --
COPYLIB  FLMTYPE                        -- COPY BOOKS                --
DBRM     FLMTYPE                        -- DBRM CREATED BY DB2 PRE.PR--
DB2CLIST FLMTYPE                        -- DB2CLIST FOR BIND AND FREE--
DB2OUT   FLMTYPE                        -- COPY OF DB2CLIST          --
SOURCLST FLMTYPE                        -- LISTINGS                  --
OBJ      FLMTYPE                        -- OBJECT CODE               --
LMAP     FLMTYPE                        -- LINKAGE EDITOR MAPS       --
LOAD     FLMTYPE                        -- LOAD MODULES              --
*
*        **************************************************************
*        *  DEFINE THE GROUPS                                         *
*        **************************************************************
*
DEV1     FLMGROUP AC=(P),KEY=Y,PROMOTE=TEST
DEV2     FLMGROUP AC=(P),KEY=Y,PROMOTE=TEST
TEST     FLMGROUP AC=(P),KEY=Y,PROMOTE=RELEASE
RELEASE  FLMGROUP AC=(P),KEY=Y
*
**********************************************************************
*                PROJECT CONTROLS
**********************************************************************
*
         FLMCNTRL ACCT=IBMMXP.ACCOUNT.FILE
*
**********************************************************************
*                LANGUAGE DEFINITION TABLES
**********************************************************************
*
         COPY  FLM@ARCD           -- ARCHDEF    ARCHITECTURE DEFN.  --
         COPY  FLM01ASM           -- ASM        ASSEMBLER ASMA90    --
         COPY  FLM01CB2           -- COB2       COBOL II            --
         COPY  FLM01DB2           -- DB2        DB2 AND COBOL II    --
         COPY  FLM01BD2           -- DB2CLIST   DB2 CLIST, BIND/FREE--
         COPY  FLM01BDO           -- DB2OUT     DB2 CLIST, COPY     --
         COPY  FLM01370           -- LE370      LINKAGE EDITOR      --
*
***********************************************************************
*
         FLMAEND

The MGE process for a DB2 BIND involved executing a job in which the DB2 BIND command was in a JCL member as SYSIN data. They did not use a CLIST to perform a DB2 BIND. I needed a DB2 CLIST member for the SCLM solution. I used the sample DB2 CLIST from the SCLM manual as a starting point and created member HREIBILD of IBMMXP.DEV1.DB2CLIST. A few modifications were made for obvious MGE values in the BIND command. At this point my objective was to get a clean compile and link of the source code as well as the production of a DBRM and an attempt to BIND. A successful BIND was not needed to exercise the language definition at this point.

After a few adjustments to the DB2 language definition the compile got underway with a BUILD of the source member HREIBILD. Since the copy books had not been copied into IBMMXP.DEV1.COPYLIB (or any other COPYLIB data set in the hierarchical path) I received compile errors for each of the missing copy books. There were 141 members in the MGE.PROD.COPYLIB data set. In order to maintain tight control over the migration I only copied and migrated into IBMMXP.DEV1.COPYLIB those members needed by HREIBILD. The next BUILD of the source member HREIBILD was successful - OBJ and DBRM members were created.

It was now time to create the architecture definition for HREIBILD. Since this is a COBOL program with DB2, the high level architecture definition member must have an INCL for a link edit control architecture definition member (named HREIBLDS) for the source code and an INCL for a generic architecture definition member (named HREIBLDD) for the DB2 CLIST.


EXAMPLE: Architecture definition members for a DB2/COBOL program

+----------------------------------------------------------------+ ³ * ³ ³ * ARCHDEF HREIBILD ³ ³ * ³ ³ INCL HREIBLDS ARCHDEF POINT TO THE SOURCE ARCHITECTURE ³ ³ INCL HREIBLDD ARCHDEF POINT TO THE DB2 ARCHITECTURE ³ +----------------------------------------------------------------+

+----------------------------------------------------------------+ ³ * ³ ³ * ARCHDEF HREIBLDS ³ ³ * - DB2 PREPROCESSOR ³ ³ * - COBOL COMPILE ³ ³ * - OBJECT CODE LINK ³ ³ * ³ ³ INCLD HREIBILD SOURCE SOURCE INPUT, LANGUAGE DB2 ³ ³ LMAP HREIBILD LMAP LOAD MAP OUTPUT ³ ³ LOAD HREIBILD LOAD LOAD MODULE OUTPUT ³ +----------------------------------------------------------------+

+----------------------------------------------------------------+ ³ * ³ ³ * ARCHDEF HREIBLDD ³ ³ * - DB2 BIND OF DBRM ³ ³ * - DB2CLIST MEMBER COPIED INTO DB2OUT ³ ³ * ³ ³ INCLD HREIBILD DB2CLIST DB2 CLIST INPUT, LANGUAGE DB2CLIST ³ +----------------------------------------------------------------+

The BUILD of architecture definition HREIBILD produced a DBRM, HREIBILD object code, HREIBILD load map, HREIBILD load module, and an HREIBILD member in the DB2OUT data set. The compilations listings were suppressed by using IOTYPE=W. The customer was not interested in keeping the compilation listings. As expected, the BIND failed because the DB2CLIST did not have the correct OWNER value for the BIND. A successful BIND was not yet required in order to proceed with the migration.

Back to top




Day Four

MGE developers did not have any prior formal SCLM education nor had they worked with the SCLM samples. SCLM education was needed in order to transfer skills to the customer and to develop a project definition and application architecture that would meet the customer needs and be maintained by the customer.

A 6.5 hour lecture and discussion class was held. The experiences from the previous three days afforded me the opportunity to use the customer terminology and the IBMMXP project definition as examples. This greatly assisted the customer in grasping the material. Normally hands-on exercises and a more intensive class are required. However, in this situation the 6.5 hour class was successful because:

  1. the samples had been installed, the customer application development process was analyzed, and the application development JCL was studied before the class was held
  2. the customer played an active role in the analysis prior to the class and was to be active in the migration after the class
  3. the customer developers were quick learners and knowledgeable about their total system

The 6.5 hour class covered these topics:

  1. SCLM - A Tech Look (Guide '93 presentation, available on the marketing tools disk)
  2. Examples of the customer project definition in IBMMXP.PROJDEFS.SOURCE
  3. Advanced Topics (authorization codes, language definitions)
  4. Techniques (versioning, emergency fixes, backups, exits - versioning and emergency fix presentations are available on the marketing tools disk)
  5. Live demonstration using the IBMMXP project definition and the samples (EDIT, BUILD, and PROMOTE of the sample COBOL source program followed by demonstrations to answer questions and elaborate on points of interest to the class)

After the class John Roberts, Betty Morris, Lou Wolfe, and I returned to the task of completing the human resources application.

The HREIBILD DB2CLIST member was updated in order to produce a proper BIND. These updates involved significant logic changes to the sample DB2CLIST in order to meet MGE needs. The major logic change involved using several "IF...THEN" statements rather than a SELECT statement to set variables based upon the group value. MGE's understanding of SCLM and of their total application development environment resulted in this being a straight-forward task. John Roberts and I also discussed various library hierarchies and the number of development groups for the MGE project definition. The result of that discussion was to set up the actual MGE project definition. The IBMMXP project definition and related language definitions were used as a starting point.

The high level qualifier PGM was selected for the MGE project id. John Roberts and I followed these steps:

  1. allocate PGM.PROJDEFS.SOURCE, PGM.PROJDEFS.OBJ, PGM.PROJDEFS.LOAD data sets
  2. copy the members from IBMMXP.PROJDEFS.SOURCE into PGM.PROJDEFS.SOURCE
  3. create member VSAM with a copy of member FLM02VSM (FLM02VSM creates the VSAM cluster for the accounting records)
  4. change the JCL and qualifiers in member VSAM for the PGM project
  5. submit VSAM to create the VSAM cluster PGM.ACCOUNT.FILE
  6. create member ALLOCATE with a copy of member FLM02ALL
  7. change the JCL and qualifiers in member ALLOCATE for the PGM project
  8. submit ALLOCATE to allocate the data sets
  9. create PGM.PROJDEFS.SOURCE(PGM) with a copy of member IBMMXP
  10. edit member PGM to use the proper PGM label for FLMABEG and the PGM.ACCOUNT.FILE for the FLMCNTRL macro

Back to top




Day Five

Betty Morris was the human resources application developer. John Roberts added the MORRIS group to the project definition and ran a modified form of ALLOCATE to allocate the MORRIS data sets. The PGM project definition now had DEV1, DEV2, and MORRIS development groups.

With Betty Morris at the controls, the HREIBILD member and its related copy book members were migrated to PGM.MORRIS.SOURCE and PGM.MORRIS.COPYLIB. The human resources application architecture definitions and DB2 CLIST from the IBMMXP project were migrated to PGM.MORRIS.ARCHDEF and PGM.MORRIS.DB2CLIST. A BUILD and PROMOTE of HREIBILD architecture definition demonstrated that the system was working and program HREIBILD migration was complete.

The human resources application was comprised of two source programs: HREIBILD and HREIUPDT. Source program HREIUPDT used COBOL with DB2 just like HREIBILD. Migrating this program with its related copy books followed the same process as the HREIBILD program:

  1. copy HREIUPDT source member into PGM.MORRIS.SOURCE
  2. migrate HREIUPDT with language DB2
  3. examine the HREIUPDT accounting record for copy books, copy the needed copybooks into PGM.MORRIS.COPYLIB, and migrate the copy books with language DB2 (not all of them were needed - some were already present from the HREIBILD migration)
  4. create the HREIUPDT DB2CLIST using HREIBILD as a pattern
  5. create architecture definitions HREIUPDT, HREIUPDS, and HREIUPDD by using the pattern for HREIBILD


EXAMPLE: Architecture definition members for a DB2/COBOL program
         NOTE: this follows the pattern of HREIBLD

+------------------------------------------------------------------+ ³ * ³ ³ * ARCHDEF HREIUPDT ³ ³ * ³ ³ INCL HREIUPDS ARCHDEF POINT TO THE SOURCE ARCHITECTURE ³ ³ INCL HREIUPDD ARCHDEF POINT TO THE DB2 ARCHITECTURE ³ +------------------------------------------------------------------+

+------------------------------------------------------------------+ ³ * ³ ³ * ARCHDEF HREIUPDS ³ ³ * - DB2 PREPROCESSOR ³ ³ * - COBOL COMPILE ³ ³ * - OBJECT CODE LINK ³ ³ * ³ ³ INCLD HREIUPDT SOURCE SOURCE INPUT, LANGUAGE DB2 ³ ³ LMAP HREIUPDT LMAP LOAD MAP OUTPUT ³ ³ LOAD HREIUPDT LOAD LOAD MODULE OUTPUT ³ +------------------------------------------------------------------+

+------------------------------------------------------------------+ ³ * ³ ³ * ARCHDEF HREIUPDD ³ ³ * - DB2 BIND OF DBRM ³ ³ * - DB2CLIST MEMBER COPIED INTO DB2OUT ³ ³ * ³ ³ INCLD HREIUPDT DB2CLIST DB2 CLIST INPUT, LANGUAGE DB2CLIST ³ +------------------------------------------------------------------+

The HR application also involved run time JCL and JCL procedures. The new types JCL and PROCLIB were created for these members. A language definition called NOBUILD was created for members such as JCL and JCL procedures that did not require a BUILD translator. NOBUILD used IEFBR14 as the parser and had no BUILD translator.


***********************************************************************
*            SCLM LANGUAGE DEFINITION FOR                             *
*          SIMPLE PARSE AND NO BUILD                                  *
*                                                                     *
***********************************************************************
*
*
*
         FLMLANGL    LANG=NOBUILD,VERSION=2.0
*
* PARSER TRANSLATOR
*
          FLMTRNSL   CALLNAM='NOBUILD  PARSE',                         C
               FUNCTN=PARSE,                                           C
               COMPILE=IEFBR14,                                        C
               PORDER=0
*          (* SOURCE      *)
           FLMALLOC  IOTYPE=A,DDNAME=SOURCE
            FLMCPYLB @@FLMDSN(@@FLMMBR)

Types for JCL and PROCLIB were added to the PGM project definition. The appropriate data sets were allocated and steps were added to PGM.PROJDEFS.SOURCE(ALLOCATE) for future use. In anticipation of adding other developers in the future, PGM.PROJDEFS.SOURCE(DEVALLOC) was created to allocate the data sets required by a new developer. As types were added to the project definition the PGM.PROJDEFS.SOURCE members DEVALLOC and ALLOCATE were also kept up to date by adding allocation steps for the new types.

The human resource application members HREIBILD and HREIUPDT in PGM.PROD.JCL and PGM.PROD.PROCLIB were copied into PGM.MORRIS.JCL and PGM.MORRIS.PROCLIB from the production libraries. They were then migrated with language NOBUILD. Since there is no BUILD translator the architecture definition HRJCLPRC uses the PROM statement.


   *
   * ARCHDEF HRJCLPRC
   *
   PROM  HREIBILD  PROCLIB    PROMOTE THE HREIBILD JCL PROCEDURE
   PROM  HREIBILD  JCL        PROMOTE THE HREIBILD JCL
   PROM  HREIUPDT  PROCLIB    PROMOTE THE HREIBILD JCL PROCEDURE
   PROM  HREIUPDT  JCL        PROMOTE THE HREIBILD JCL

The architecture definitions for the human resources application were now in place: one for each load module and one for all of the JCL and JCL procedures. A high level architecture definition referencing all of these was created so that the entire human resources application may be built using one architecture definition. This architecture definition member was named HR.

   *
   * ARCHDEF HR
   *
   INCL  HREIBILD  ARCHDEF
   INCL  HREIUPDT  ARCHDEF
   INCL  HRJCLPRC  ARCHDEF

Additional discussion took place with John Roberts, Betty Morris, and Lou Wolfe regarding the use of one development group for each developer and the structure of the entire PGM architecture. The decisions were:

  1. have one development group per developer
  2. have one high level architecture definition member for each application (HR, PP, CS, AC, EG)
  3. have one high level architecture definition for the entire PGM application that would be comprised of an INCL for each application high level architecture definition member

The completion of the human resources application migration demonstrated that the COBOL and DB2 part of the system was working properly. Our attention now turned to the customer service application as it had programs that used COBOL with DB2 and CICS. Lou Wolfe selected the program MUNIAD as a good example. I created the language definition CICSDB2 which John Roberts modified to meet the needs of the MGE system.

Back to top




Day Six

Before moving ahead with COBOL/DB2/CICS the team felt it was time to add some additional features to the PGM project definition. These additional features brought the project definition to a form that would be similar to one that would handle all five MGE applications. In the project definition we see these additional features:

  1. A FIX and DEVFIX group was added for emergency fixes.
  2. Authorization code T was added to the development groups for concurrent development.
  3. A change code authorization routine CCODEVER was put into use.
    1. CCODEVER initially was just like IEFBR14 - this was sufficient to require the user to enter a change code for SCLM migration and edit activity.
  4. LOADOLIB and LOADBLIB were added for online and batch load modules (these replaced type LOAD).
  5. The MORRIS development group was added.
  6. It was decided that the standard FLM@BD2 and FLM@BDO language definitions could be used instead of the FLM01BD2 and FLM01BDO modified language definitions from earlier tests.
  7. FLM01DB2 was renamed to DB2 after sufficient testing with the HR application in order to be consistent with the name of the JCL procedure that was used for the job that performed the BIND.
  8. FLM01ASM was the basis for three assembly language definitions: ASMRNT, BASM, and BASMRNT.
    1. ASMRNT - reentrant assembler
    2. BASM - batch assembler
    3. BASMRNT - batch reentrant assembler
  9. The COBOL language definition was renamed to CMPLNK in order to be consistent with the MGE.PROD.COMPILE member CMPLINK.


          TITLE '*** LIBRARY DEFINITION FOR PGM AFTER HR ***'
PGM      FLMABEG
*
*        **************************************************************
*        *  DEFINE THE TYPES                                          *
*        **************************************************************
*
ARCHDEF  FLMTYPE                        -- ARCHITECTURE DEFINITIONS  --
JCL      FLMTYPE                        -- JCL                       --
PROCLIB  FLMTYPE                        -- PROCLIB                   --
SOURCE   FLMTYPE EXTEND=COPYLIB         -- SOURCE CODE               --
COPYLIB  FLMTYPE                        -- COPY BOOKS                --
DBRM     FLMTYPE                        -- DBRM CREATED BY DB2 PRE.PR--
DB2CLIST FLMTYPE                        -- DB2CLIST FOR BIND AND FREE--
DB2OUT   FLMTYPE                        -- COPY OF DB2CLIST          --
SOURCLST FLMTYPE                        -- LISTINGS                  --
OBJ      FLMTYPE                        -- OBJECT CODE               --
LMAP     FLMTYPE                        -- LINKAGE EDITOR MAPS       --
LOADOLIB FLMTYPE                        -- LOAD ONLINE MODULES       --
LOADBLIB FLMTYPE                        -- LOAD BATCH MODULES        --
*
*        **************************************************************
*        *  DEFINE THE GROUPS                                         *
*        **************************************************************
*
DEV1     FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
MORRIS   FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
DEV2     FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
TEST     FLMGROUP AC=(P),KEY=Y,PROMOTE=PROD
PROD     FLMGROUP AC=(P),KEY=Y
*
FIX      FLMGROUP AC=(F),KEY=N,PROMOTE=PROD
DEVFIX   FLMGROUP AC=(F),KEY=Y,PROMOTE=FIX
**********************************************************************
*                PROJECT CONTROLS
**********************************************************************
*
         FLMCNTRL ACCT=PGM.ACCOUNT.FILE,                               C
               VERCC=CCODEVER,                                         C
               VERCCDS=PGM.PROJDEFS.LOAD
*
**********************************************************************
*                LANGUAGE DEFINITION TABLES
**********************************************************************
*
*
*        USE THE FOLLOWING FORMAT TO COPY IN THE MACROS USED BY YOUR
*        OWN SYSTEM
*
         COPY  FLM01370           -- LE370      LINKAGE EDITOR      --
*
         COPY  FLM@ARCD           -- ARCHDEF    ARCHITECTURE DEFN.  --
         COPY  FLM@BD2            -- DB2CLIST   DB2 CLIST, BIND/FREE--
         COPY  FLM@BDO            -- DB2OUT     DB2 CLIST, COPY     --
         COPY  ASMRNT             -- ASMRNT     REENTRANT ASSEMBLER --
         COPY  BASM               -- BASM       BATCH ASSEMBLER     --
         COPY  BASMRNT            -- BASMRNT    BATCH ASSEMBLER RENT--
         COPY  CMPLNK             -- CMPLNK     COBOL II            --
         COPY  DB2                -- DB2        DB2 AND COBOL II    --
         COPY  NOBUILD            -- NOBUILD    PARSE WITH NO BUILD --
*
***********************************************************************
*
         FLMAEND


EXAMPLE: Library hierarchy for PGM after HR

+---------+ ³ PROD ³ +----+----+ ³ +---------------------------+ ³ ³ ³ ³ +----+----+ +----+----+ ³ TEST ³ ³ FIX ³ +----+----+ +----+----+ ³ ³ +------------+------------+ ³ ³ ³ ³ ³ +---+--+ +----+----+ +---+---+ +----+----+ ³ DEV1 ³ ³ MORRIS ³ ³ DEV2 ³ ³ DEVFIX ³ +------+ +---------+ +-------+ +---------+

The HREIBLDS and HREIUPDS architecture definition members were changed from specifying type LOAD to type LOADOLIB and LOADBLIB respectively for the LOAD statements.

The CICSDB2 language definition was added to the project definition for COBOL programs such as MUNIAD. MUNIAD also had screen input MUNIADS in MGE.PROD.COPYLIB.SCREENS. The decision was made to add the type SCREENS for BMS map screen input such as MUNIADS. Similarly, types COPYSCR for the screen DSECT output and MAPLIB for the BMS output were added to the PGM project definition. These output type names corresponded with the low level qualifiers used in the manual system.

The group WOLFE was added to the project definition for developer Lou Wolfe. The appropriate data sets were allocated and the allocation JCL was updated for future use.

The language definition BMSMAP was added for building the screens while the language definition BMSLINK was added to produce the MAPLIB output. The BMSMAP language definition required the use of an intermediate IEBGENER translator to copy the object code output to a separate file so that the DSECT output would not overlay it.


***********************************************************************
*            SCLM LANGUAGE DEFINITION FOR                             *
*          COBOL II WITH DB2 AND CICS PREPROCESSORS                   *
*                                                                     *
**********************  GENERAL NOTES  ********************************
*                                                                     *
*  THIS LANGUAGE DEFINITION IS AN EXAMPLE THAT CAN SERVE AS A         *
*  REFERENCE IN THE CONSTRUCTION AND CUSTOMIZATION OF LANGUAGE        *
*  DEFINITIONS FOR A PARTICULAR APPLICATION AND ENVIRONMENT.          *
*                                                                     *
********************* CUSTOMIZATION NOTES *****************************
*                                                                     *
* DB2 OUTPUT IS PASSED VIA THE DB2TRANS DD ALLOCATION TO THE CICS     *
* PREPROCESSOR. CICS OUTPUT IS PASSED VIA THE CICSTRAN DD ALLOCATION  *
* TO THE COBOL II COMPILER.                                           *
*                                                                     *
* TO CUSTOMIZE POINT THE FLMSYSLB MACRO(S) AT ALL 'STATIC' COPY       *
* DATASETS NEEDED FOR THE PARSER.                                     *
*                                                                     *
* CUSTOMIZE THE 'OPTIONS' AND 'GOODRC' FIELDS TO YOUR STANDARDS.      *
*                                                                     *
* ADD THE 'DSNAME' FIELD IF THE TRANSLATOR IS IN A PRIVATE LIBRARY.   *
*                                                                     *
* WHEN A NEW TRANSLATOR VERSION REQUIRES TOTAL RECOMPILATION FOR THIS *
* LANGUAGE, THE 'VERSION' FIELD ON FLMLANGL SHOULD BE CHANGED.        *
***********************************************************************
*
* NOTE: SECOND QUALIFIER SET AT IPL
*
CICSDB2  FLMSYSLB  SYSC.CIC1PT.SDFHCOB
         FLMSYSLB  SYSC.CIC1PT.SDFHMAC
         FLMSYSLB  SYSC.CIC1PT.SDFHSAMP
*
         FLMLANGL    LANG=CICSDB2,ALCSYSLB=Y,VERSION=2.0
*
         FLMINCLS TYPES=(@@FLMETP,COPYSCR)
*
* PARSER TRANSLATOR
*
          FLMTRNSL   CALLNAM='SCLM COBOL PARSE',                       C
               FUNCTN=PARSE,                                           C
               COMPILE=FLMLPCBL,                                       C
               PORDER=1,                                               C
               OPTIONS=(@@FLMLIS,@@FLMSTP,@@FLMSIZ,)
*          (* SOURCE      *)
           FLMALLOC  IOTYPE=A,DDNAME=SOURCE
            FLMCPYLB @@FLMDSN(@@FLMMBR)
*
* BUILD TRANSLATORS
*
*         --DB2 PREPROCESSOR INTERFACE--
          FLMTRNSL   CALLNAM='DB2 PREPROCESS',                         C
               FUNCTN=BUILD,                                           C
               COMPILE=DSNHPC,                                         C
                VERSION=1.0,                                            C
                GOODRC=4,                                               C
                PORDER=3,                                               C
                OPTIONS=(HOST(COB2),APOST,SOURCE)
 *  1       -- N/A --
            FLMALLOC  IOTYPE=N
 *  2       -- N/A --
            FLMALLOC  IOTYPE=N
 *  3       -- N/A --
            FLMALLOC  IOTYPE=N
 *  4       -- SYSLIB --
            FLMALLOC  IOTYPE=I,KEYREF=SINC
 *  5       -- SYSIN --
            FLMALLOC  IOTYPE=S,KEYREF=SINC,RECFM=FB,LRECL=80,           C
                RECNUM=5000
*  6       -- SYSPRINT --
           FLMALLOC  IOTYPE=W,RECFM=FBA,LRECL=133,                     C
               RECNUM=35000,PRINT=Y
*  7       -- N/A --
           FLMALLOC  IOTYPE=N
*  8       -- SYSUT1 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
*  9       -- SYSUT2 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
* 10       -- SYSUT3 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
* 11       -- N/A --
           FLMALLOC  IOTYPE=N
* 12       -- SYSTERM --
           FLMALLOC  IOTYPE=A
            FLMCPYLB NULLFILE
* 13       -- N/A --
           FLMALLOC  IOTYPE=N
* 14       -- SYSCIN --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,                       C
               RECNUM=9000,DDNAME=DB2TRANS
* 15       -- N/A --
           FLMALLOC  IOTYPE=N
* 16       -- DBRMLIB--
           FLMALLOC  IOTYPE=P,DDNAME=DBRMLIB,MEMBER=@@FLMONM,          C
               DFLTTYP=DBRM,KEYREF=OUT1,                               C
               RECFM=FB,LRECL=80,RECNUM=5000,DIRBLKS=1
*
* BUILD TRANSLATOR(S)
*
*         - CICS PRECOMPILE -
          FLMTRNSL   CALLNAM='CICS PRE-COMPILE',                       C
               FUNCTN=BUILD,                                           C
               COMPILE=DFHECP1$,                                       C
               DSNAME=SYSC.CIC1PT.SDFHLOAD,                            C
               VERSION=3.2.1,                                          C
               GOODRC=4,                                               C
               PORDER=3,                                               C
               OPTIONS=(COBOL2,NOSEQ,NOSOURCE)
*  1       -- N/A --
           FLMALLOC  IOTYPE=N
*  2       -- N/A --
           FLMALLOC  IOTYPE=N
*  3       -- N/A --
           FLMALLOC  IOTYPE=N
*  4       -- N/A --
           FLMALLOC  IOTYPE=N
*  5       (* SYSIN *)
           FLMALLOC  IOTYPE=U,DDNAME=DB2TRANS
*  6       (* SYSPRINT *)
           FLMALLOC  IOTYPE=W,RECFM=FBA,LRECL=121,                     C
               RECNUM=35000,PRINT=Y
*  7       (* SYSPUNCH *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,                       C
               RECNUM=5000,DDNAME=CICSTRAN
*
*
*
          FLMTRNSL   CALLNAM='COBOL II COMPILER',                      C
               FUNCTN=BUILD,                                           C
               COMPILE=IGYCRCTL,                                       C
               DSNAME=SYS1.COB2COMP,                                   C
               VERSION=2.0,                                            C
               GOODRC=4,                                               C
               PORDER=3,                                               C
               OPTIONS=(OBJ,APOST,LIB,NORES,FLAG(E),OFF,NOSEQ,NUM,     C
               NODYN,TRUNC(OPT),NOTEST,NOOPT,NOLIST,NOMAP,SSR,         C
               NOXREF)
*
* DDNAME ALLOCATION (USING DDNAMELIST SUBSTITUTION)
*
*  1       (* SYSLIN *)
           FLMALLOC  IOTYPE=O,KEYREF=OBJ,RECFM=FB,LRECL=80,            C
               RECNUM=8000,DFLTTYP=OBJ,DDNAME=SYSLIN
*  2       (* N/A *)
           FLMALLOC  IOTYPE=N
*  3       (* N/A *)
           FLMALLOC  IOTYPE=N
*  4       (* SYSLIB *)
           FLMALLOC  IOTYPE=I,KEYREF=SINC,DDNAME=SYSLIB
*  5       (* SYSIN *)
           FLMALLOC  IOTYPE=U,DDNAME=CICSTRAN
*  6       (* SYSPRINT *)
           FLMALLOC  IOTYPE=W,KEYREF=LIST,RECFM=FBA,LRECL=133,         C
               RECNUM=50000,PRINT=Y,DFLTTYP=SOURCLST,DDNAME=SYSPRINT
*  7       (* SYSPUNCH *)
           FLMALLOC  IOTYPE=A
            FLMCPYLB NULLFILE
*  8       (* SYSUT1 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
*  9       (* SYSUT2 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 10       (* SYSUT3 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 11       (* SYSUT4 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 12       (* SYSTERM *)
           FLMALLOC  IOTYPE=A,DDNAME=SYSTERM
            FLMCPYLB NULLFILE
* 13       (* SYSUT5 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 14       (* SYSUT6 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 15       (* SYSUT7 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000


*********************************************************************
*       BMSMAP LANGUAGE DEFINITION
*   IEBGENER TRANSLATOR IS USED FOR THE OBJ SO THAT IT IS NOT
*   OVERLAID BY THE DSECT
*
BMSMAP   FLMSYSLB SYSC.CIC1PT.SDFHMAC
         FLMSYSLB SYS1.MACLIB
*
          FLMLANGL LANG=BMSMAP,VERSION=2.0,ALCSYSLB=Y
*
          FLMINCLS TYPES=(@@FLMETP,COPYSCR)
*
*
* PARSER TRANSLATOR
*
          FLMTRNSL   CALLNAM='SCLM TEXT PARSE',                        C
               FUNCTN=PARSE,                                           C
               COMPILE=FLMLPGEN,                                       C
               PORDER=1,                                               C
               OPTIONS=(SOURCEDD=SOURCE,                               C
               PARSEMEM=@@FLMMBR,                                      C
               STATINFO=@@FLMSTP,                                      C
               LISTINFO=@@FLMLIS,                                      C
               LISTSIZE=@@FLMSIZ,                                      C
               LANG=T)               *** THIS IS A TEXT PARSER  ***
*          (* SOURCE      *)
           FLMALLOC  IOTYPE=A,DDNAME=SOURCE
            FLMCPYLB @@FLMDSN(@@FLMMBR)
***********************************************************************
*
* BUILD TRANSLATOR(S)
*
*
*         --ASSEMBLER INTERFACE--
*
          FLMTRNSL   CALLNAM='ASSEMBLER - OBJ',                        C
               FUNCTN=BUILD,                                           C
               COMPILE=ASMA90,                                         C
               VERSION=1.0,                                            C
               GOODRC=4,                                               C
               PORDER=1,                                               C
               OPTIONS=(SYSPARM(MAP),DECK)
*
* DDNAME ALLOCATIONS
*
 FLMALLOC  IOTYPE=S,DDNAME=SYSIN,RECFM=FB,LRECL=80,BLKSIZE=400,        C
               RECNUM=10000,KEYREF=SINC
 FLMALLOC  IOTYPE=W,DDNAME=SYSUT1,RECNUM=17500
 FLMALLOC  IOTYPE=W,DDNAME=SYSUT2,RECNUM=17500
 FLMALLOC  IOTYPE=W,DDNAME=SYSUT3,RECNUM=17500
 FLMALLOC  IOTYPE=W,DDNAME=SYSPUNCH,RECFM=FB,LRECL=80,                 C
               RECNUM=10000
 FLMALLOC  IOTYPE=I,DDNAME=SYSLIB,KEYREF=SINC
 FLMALLOC  IOTYPE=W,DDNAME=SYSPRINT,KEYREF=LIST,PRINT=Y,               C
               DFLTTYP=SOURCLST,RECNUM=20000
***************************
* COPY SYSPUNCH SO IT DOES NOT GET OVERLAID BY THE NEXT ASSEMBLER
*
          FLMTRNSL FUNCTN=BUILD,CALLNAM='IEBGENER - OBJ',              C
               COMPILE=IEBGENER,                                       C
               GOODRC=4,                                               C
               PORDER=3
          FLMALLOC IOTYPE=N
          FLMALLOC IOTYPE=N
          FLMALLOC IOTYPE=N
          FLMALLOC IOTYPE=N
*  SYSIN
          FLMALLOC IOTYPE=A
            FLMCPYLB NULLFILE
*  SYSPRINT
          FLMALLOC IOTYPE=A
            FLMCPYLB NULLFILE
          FLMALLOC IOTYPE=N
*  SYSUT1
          FLMALLOC IOTYPE=U,DDNAME=SYSPUNCH
*  SYSUT2
          FLMALLOC IOTYPE=O,LRECL=80,RECFM=FB,                         C
               RECNUM=10000,KEYREF=OBJ,DFLTTYP=OBJ
*  SYSUT3   - NOT USED BY IEBGENER
          FLMALLOC IOTYPE=A
            FLMCPYLB NULLFILE
*  SYSUT4   - NOT USED BY IEBGENER
          FLMALLOC IOTYPE=A
            FLMCPYLB NULLFILE
**************************************
*         --ASSEMBLER INTERFACE--
*
          FLMTRNSL   CALLNAM='ASSEMBLER - SCR',                        C
               FUNCTN=BUILD,                                           C
               COMPILE=ASMA90,                                         C
               VERSION=1.0,                                            C
               GOODRC=4,                                               C
               PORDER=1,                                               C
               OPTIONS=(SYSPARM(DSECT),DECK,NOLOAD)
*
* DDNAME ALLOCATIONS
*
 FLMALLOC  IOTYPE=S,DDNAME=SYSIN,RECFM=FB,LRECL=80,BLKSIZE=400,        C
               RECNUM=10000,KEYREF=SINC
 FLMALLOC  IOTYPE=W,DDNAME=SYSUT1,RECNUM=17500
 FLMALLOC  IOTYPE=W,DDNAME=SYSUT2,RECNUM=17500
 FLMALLOC  IOTYPE=W,DDNAME=SYSUT3,RECNUM=17500
 FLMALLOC  IOTYPE=O,DDNAME=SYSPUNCH,RECFM=FB,LRECL=80,                 C
               RECNUM=10000,KEYREF=OUT1,DFLTTYP=COPYSCR
 FLMALLOC  IOTYPE=I,DDNAME=SYSLIB,KEYREF=SINC
 FLMALLOC  IOTYPE=W,DDNAME=SYSPRINT,KEYREF=LIST,PRINT=Y,               C
               DFLTTYP=SOURCLST,RECNUM=20000


***********************************************************************
*        370/LINKAGE EDITOR LANGUAGE DEFINITION FOR SCLM
*
*   LINK AFTER BMSMAP
*
* ADD FLMCPYLB MACROS FOR EACH 'STATIC' INPUT DATASET FOR LINKEDIT
* PROCESSING, TO THE 'SYSLIB' FLMALLOC MACRO.
* MAKE SURE PORDER=3. THE LINK EDIT USES DD NAME LIST SUBSTITUTION.
* CUSTOMIZE THE 'OPTIONS' AND 'GOODRC' FIELDS TO YOUR STANDARDS.
* ADD THE 'DSNAME' FIELD IF THE TRANSLATOR IS IN A PRIVATE LIBRARY.
* WHEN A NEW TRANSLATOR VERSION REQUIRES TOTAL RECOMPILATION FOR THIS
* LANGUAGE, THE 'VERSION' FIELD ON FLMLANGL SHOULD BE CHANGED.
***********************************************************************
***********************************************************************
***********************************************************************
*
         FLMLANGL    LANG=BMSLINK,CANEDIT=N,VERSION=L370V1.A,          C
               ALCSYSLB=Y
*
          FLMTRNSL   CALLNAM='LKED/370 FOR MAP',                       C
               FUNCTN=BUILD,                                           C
               COMPILE=IEWL,                                           C
               VERSION=F64,                                            C
               GOODRC=0,                                               C
               PORDER=3,                                               C
               OPTIONS=(LIST,XREF,LET)
*
*  1       (* SYSLIN *)
           FLMALLOC  IOTYPE=S,KEYREF=INCL,RECFM=FB,LRECL=80,           C
               RECNUM=20000,DDNAME=SYSLIN
*
*  2       (* LOAD MODULE NAME *)
           FLMALLOC  IOTYPE=L,KEYREF=LOAD
*
*  3       (* SYSLMOD *)
           FLMALLOC  IOTYPE=P,KEYREF=LOAD,RECFM=U,LRECL=0,             C
               RECNUM=500,DIRBLKS=20,DDNAME=SYSLMOD
*
*  4       (* SYSLIB  *)
           FLMALLOC  IOTYPE=A,DDNAME=SYSLIB
            FLMCPYLB NULLFILE
*
*  5       (* N/A *)
           FLMALLOC  IOTYPE=N
*
*  6       (* SYSPRINT *)
           FLMALLOC  IOTYPE=W,KEYREF=LMAP,RECFM=FB,LRECL=121,          C
               RECNUM=2500,PRINT=Y,DDNAME=SYSPRINT
*
*  7       (* N/A *)
           FLMALLOC  IOTYPE=N
*
*  8       (* SYSUT1 *)
           FLMALLOC  IOTYPE=W,RECFM=U,LRECL=0,RECNUM=5000,             C
               DDNAME=SYSUT1
*
*  9       (* N/A *)
           FLMALLOC  IOTYPE=N
*
* 10       (* N/A *)
           FLMALLOC  IOTYPE=N
*
* 11       (* N/A *)
           FLMALLOC  IOTYPE=N
*
* 12       (* SYSTERM *)
           FLMALLOC  IOTYPE=A,DDNAME=SYSTERM
            FLMCPYLB NULLFILE

The MUNIAD program architecture consists of three pieces: MUNIAD COBOL source with DB2 and CICS, MUNIAD DB2 BIND, and MUNIADS screens. It is similar to the HREIBILD program with the added screens.


+------------------------------------------------------------------+
³  *                                                               ³
³  * ARCHDEF MUNIAD                                                ³
³  *                                                               ³
³  INCL  MUNIADC   ARCHDEF    POINT TO THE SOURCE ARCHITECTURE     ³
³  INCL  MUNIADD   ARCHDEF    POINT TO THE DB2 ARCHITECTURE        ³
³  INCL  MUNIADS   ARCHDEF    POINT TO THE SCREENS ARCHITECTURE    ³
+------------------------------------------------------------------+


+------------------------------------------------------------------+
³  *                                                               ³
³  * ARCHDEF MUNIADC                                               ³
³  *   - DB2 PREPROCESSOR                                          ³
³  *   - CICS PREPROCESSOR                                         ³
³  *   - COBOL COMPILE                                             ³
³  *   - OBJECT CODE LINK                                          ³
³  *                                                               ³
³  INCLD MUNIAD    SOURCE     SOURCE INPUT, LANGUAGE CICSDB2       ³
³  LMAP  MUNIAD    LMAP       LOAD MAP OUTPUT                      ³
³  LOAD  MUNIAD    LOADBLIB   LOAD MODULE OUTPUT                   ³
+------------------------------------------------------------------+

+------------------------------------------------------------------+ ³ * ³ ³ * ARCHDEF MUNIADD ³ ³ * - DB2 BIND OF DBRM ³ ³ * - DB2CLIST MEMBER COPIED INTO DB2OUT ³ ³ * ³ ³ INCLD MUNIAD DB2CLIST DB2 CLIST INPUT, LANGUAGE DB2CLIST ³ +------------------------------------------------------------------+

+------------------------------------------------------------------+ ³ * ³ ³ * ARCHDEF MUNIADS ³ ³ * - ASSEMBLE MUNIADS CSECT ³ ³ * - ASSEMBLE MUNIADS DSECT ³ ³ * ³ ³ INCLD MUNIADS SCREENS SCREEN INPUT, LANGUAGE BMSMAP ³ ³ LKED BMSLINK SPECIAL LINKAGE EDIT FOR BMS ³ ³ LOAD MUNIADS MAPLIB ³ +------------------------------------------------------------------+

The MUNIAD program was part of a collection of programs starting with MU. These programs represented a municipal subapplication for the customer service application. It was decided at this point to tie the architecture definitions together with a high level architecture definition for the entire PGM application. This is the refinement of the MGE architecture idea from Day One.


+------------------------------------------------------------------+
³  *                                                               ³
³  * ARCHITECTURE DEFINITION MEMBER PGM                            ³
³  *                                                               ³
³  INCL   CS   ARCHDEF      CUSTOMER SERVICE                       ³
³  *INCL  EG   ARCHDEF      ENGINEERING - TO BE ADDED LATER        ³
³  INCL   HR   ARCHDEF      HUMAN RESOURCES                        ³
³  *INCL  AC   ARCHDEF      ACCOUNTING - TO BE ADDED LATER         ³
³  *INCL  PP   ARCHDEF      POWER PRODUCTION - TO BE ADDED LATER   ³
+------------------------------------------------------------------+

+------------------------------------------------------------------+ ³ * ³ ³ * ARCHITECTURE DEFINITION MEMBER CS - CUSTOMER SERVICE ³ ³ * ³ ³ INCL MU ARCHDEF MUNICIPAL APPLICATIONS ³ +------------------------------------------------------------------+

+------------------------------------------------------------------+ ³ * ³ ³ * ARCHITECTURE DEFINITION MEMBER HR - HUMAN RESOURCES ³ ³ * ³ ³ INCL HREIBILD ARCHDEF ³ ³ INCL HREIUPDT ARCHDEF ³ ³ INCL HRJCLPRC ARCHDEF JCL AND JCL PROCEDURES ³ +------------------------------------------------------------------+

+------------------------------------------------------------------+ ³ * ³ ³ * ARCHITECTURE DEFINITION MEMBER MU - MUNICIPAL APPLICATIONS ³ ³ * ³ ³ INCL MUNIAD ARCHDEF ³ ³ INCL MUJCLPRC ARCHDEF JCL AND JCL PROCEDURES ³ +------------------------------------------------------------------+

As with the human resources application, the MU subapplication of the customer service application had JCL and JCL procedures. The MU JCL and JCL procedures were handled exactly like the HR JCL and JCL procedures.

The MUNIAD COBOL source and MUNIADS screen source were migrated into PGM.WOLFE.SOURCE (language CICSDB2) and PGM.WOLFE.SCREENS (language BMSMAP). An appropriate MUNIAD DB2CLIST was created using HREIBILD as a pattern. The architecture member PGM was built. Everything worked fine. The remainder of the MU application program migration followed the MUNIAD pattern.


          TITLE '*** LIBRARY DEFINITION FOR PGM AFTER HR AND MU ***'
PGM      FLMABEG
*
*        **************************************************************
*        *  DEFINE THE TYPES                                          *
*        **************************************************************
*
ARCHDEF  FLMTYPE                        -- ARCHITECTURE DEFINITIONS  --
JCL      FLMTYPE                        -- JCL                       --
PROCLIB  FLMTYPE                        -- PROCLIB                   --
SOURCE   FLMTYPE EXTEND=COPYLIB         -- SOURCE CODE               --
COPYLIB  FLMTYPE                        -- COPY BOOKS                --
DBRM     FLMTYPE                        -- DBRM CREATED BY DB2 PRE.PR--
DB2CLIST FLMTYPE                        -- DB2CLIST FOR BIND AND FREE--
DB2OUT   FLMTYPE                        -- COPY OF DB2CLIST          --
SOURCLST FLMTYPE                        -- LISTINGS                  --
SCREENS  FLMTYPE                        -- CICS SCREEN SOURCE        --
COPYSCR  FLMTYPE                        -- CICS SCREEN SOURCE COPYS  --
MAPLIB   FLMTYPE                        -- CICS SCREEN MAPS          --
OBJ      FLMTYPE                        -- OBJECT CODE               --
LMAP     FLMTYPE                        -- LINKAGE EDITOR MAPS       --
LOADOLIB FLMTYPE                        -- LOAD ONLINE MODULES       --
LOADBLIB FLMTYPE                        -- LOAD BATCH MODULES        --
*
*        **************************************************************
*        *  DEFINE THE GROUPS                                         *
*        **************************************************************
*
DEV1     FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
MORRIS   FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
WOLFE    FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
DEV2     FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
TEST     FLMGROUP AC=(P),KEY=Y,PROMOTE=PROD
PROD     FLMGROUP AC=(P),KEY=Y
*
FIX      FLMGROUP AC=(F),KEY=N,PROMOTE=PROD
DEVFIX   FLMGROUP AC=(F),KEY=Y,PROMOTE=FIX
**********************************************************************
*                PROJECT CONTROLS
**********************************************************************
*
         FLMCNTRL ACCT=PGM.ACCOUNT.FILE,                               C
               VERCC=CCODEVER,                                         C
               VERCCDS=PGM.PROJDEFS.LOAD
*
**********************************************************************
*                LANGUAGE DEFINITION TABLES
**********************************************************************
*
*
*        USE THE FOLLOWING FORMAT TO COPY IN THE MACROS USED BY YOUR
*        OWN SYSTEM
*
         COPY  FLM01370           -- LE370      LINKAGE EDITOR      --
*
         COPY  FLM@ARCD           -- ARCHDEF    ARCHITECTURE DEFN.  --
         COPY  FLM@BD2            -- DB2CLIST   DB2 CLIST, BIND/FREE--
         COPY  FLM@BDO            -- DB2OUT     DB2 CLIST, COPY     --
         COPY  ASMRNT             -- ASMRNT     REENTRANT ASSEMBLER --
         COPY  BASM               -- BASM       BATCH ASSEMBLER     --
         COPY  BASMRNT            -- BASMRNT    BATCH ASSEMBLER RENT--
         COPY  BMSLINK            -- BMSLINK    LINK FOR CICS MAP   --
         COPY  BMSMAP             -- BMSMAP     CICS MAP ASSEMBLER  --
         COPY  CICSDB2            -- CICSDB2    DB2, CICS, COBOL    --
         COPY  CMPLNK             -- CMPLNK     COBOL II            --
         COPY  DB2                -- DB2        DB2 AND COBOL II    --
         COPY  NOBUILD            -- NOBUILD    PARSE WITH NO BUILD --
*
***********************************************************************
*
         FLMAEND

Back to top




Day Seven

Exits for Updating Run Time Libraries

John Roberts, Betty Morris, Lou Wolfe, and I discussed the application development process several times each day. These discussions ranged from a few question/answers to a chalk board analysis of application development scenarios (concurrent development with the same members, emergency fixes, library backup). The use of SCLM and improvements to the process were brought to light as the customer gained SCLM skills. This was a direct result of having the customer perform the SCLM migration work under my direction starting with the conclusion of the class on Day Four.

The customer had initially believed MGE would execute production programs from the PGM.PROD.LOADOLIB, PGM.PROD.LOADBLIB, and PGM.PROD.MAPLIB data sets. While this is technically possible, there are a few advantages to keeping actual production load libraries separate from the project files. These advantages include:

  1. The libraries in the PROD group provide a back up for the run time libraries. One may obtain a clean copy of a load module from the PROD libraries in the event the run time libraries are corrupted or are suspected of being corrupted (and vice versa).
  2. A problem with PROMOTE from TEST to PROD can be corrected without affecting the run time libraries.

The customer then requested that three exits be written in order to save a copy of the TEST libraries, save a copy of the PROD libraries as a backup of the previous version prior to PROMOTE, and copy the PROD libraries into the run time libraries after a PROMOTE. SCLM provides three user PROMOTE exits that were used for this customer requirement:

  1. PRMEXT1 - This exit receives control after the PROMOTE verification phase. COPYBKUP was written to copy the desired PROD libraries to private production run time backup libraries in order to preserve the current production libraries before PROMOTE updates these libraries with the new release.
  2. PRMEXT2 - This exit receives control after the PROMOTE copy phase. COPYTEST was written to copy the desired TEST libraries to private libraries in order to preserve the TEST environment for additional DB2 test activity.
  3. PRMEXT3 - This exit receives control after the PROMOTE purge phase. COPYPROD was written to copy the desired PROD libraries to the production run time libraries.

All three exits are similar. Each exit receives control, checks to see if the PROMOTE from group is TEST, checks to see if the PROMOTE type is correct, checks to see if the PROMOTE was performed with an architecture definition member, and then either copies the libraries or exits. One exit could have performed all three functions by merely checking for the PROMOTE from group of TEST, the PROMOTE type, and the type of the member involved in the PROMOTE (in this case it would be ARCHDEF). The PROMOTE type would determine if the copy should handle a TEST backup or a PROD backup as well as the "copy to" data set names. Three exits were written in anticipation of additional exit requirements and as a means of clarifying to the customer the exit activity. In addition, the customer was provided with three exit stubs in the event the customer wanted to quickly disable an exit by substituting the stub for the exit.

The exits use the IEBCOPY utility. PGM.PROJDEFS.SOURCE(IEBCOPY) was created and used as the SYSIN for IEBCOPY. The COPYBKUP exit is a good example of one of the three exits:


/* REXX ***************************************************************/
/**********************************************************************/
/* COPY FROM PROD TO PRIVATE BACKUP LIBRARIES                         */
/* PROGRAM NAME: COPYBKUP                                             */
/**********************************************************************/
/* INPUTS:                                                            */
/*   PARAMETERS -                                                     */
/*                                                                    */
/*     option list     -- character string as defined by BEXT1OP,     */
/*                        PEXT1OP, PEXT2OP, or PEXT3OP.               */
/*                                                                    */
/*     EXITTYPE        -- 8 characters, left justified, blank fill.   */
/*                        PVERIFY when used as PRMEXT1.               */
/*                                                                    */
/*     PROJECT         -- 8 characters, capitalized, left justified,  */
/*                        blank fill, project identifier.             */
/*                                                                    */
/*     LIBDEF          -- 8 characters, capitalized, left justified,  */
/*                        blank fill, project definition name.        */
/*                                                                    */
/*     USERID          -- 8 characters, capitalized, left justified,  */
/*                        blank fill, TSO logon id.                   */
/*                                                                    */
/*     FROMGRP         -- 8 characters, capitalized, left justified,  */
/*                        blank fill, FROM group.                     */
/*                                                                    */
/*     TYPE            -- 8 characters, capitalized, left justified,  */
/*                        blank fill, type.                           */
/*                                                                    */
/*     MEMBER          -- 8 characters, capitalized, left justified,  */
/*                        blank fill, member.                         */
/*                                                                    */
/*     SCOPE           -- 8 characters, capitalized, left justified,  */
/*                        blank fill, scope.                          */
/*                                                                    */
/*     MODE            -- 13 characters, capitalized, left justified, */
/*                        blank fill, mode.                           */
/*                                                                    */
/*     TOGRP           -- 8 characters, capitalized, left justified,  */
/*                        blank fill, TO group, blank for BUILD.      */
/*                                                                    */
/*     Note: These parameters are supplied by SCLM.                   */
/*                                                                    */
/*   FILES -                                                          */
/*     The DDNAME PROMEXIT will contain the members processed by SCLM.*/
/*     See page 42 of "ISPF SCLM Project Manager's GUIDE" SC34-4470-00*/
/*                                                                    */
/**********************************************************************/
/* OUTPUTS:                                                           */
/*   PARAMETERS -                                                     */
/*     NONE                                                           */
/*                                                                    */
/*   FILES -                                                          */
/*     NONE                                                           */
/*                                                                    */
/*   RETURN CODES -                                                   */
/*     0 - Successful completion.                                     */
/*                                                                    */
/**********************************************************************/
/* FUNCTIONAL DESCRIPTION:                                            */
/*                                                                    */
/*   IF (proper exit) AND (proper group) AND (proper type)            */
/*     THEN                                                           */
/*       copy members from PROD to private backup libraries           */
/*                                                                    */
/*   No ERROR analysis for proper parameters                          */
/*                                                                    */
/**********************************************************************/
/* CHANGE ACTIVITY:                                                   */
/*   MEP    - 950817 - Created                                        */
/*                                                                    */
/**********************************************************************/

ADDRESS TSO

/* read in argument string */ arg parm

/* parse argument string */ parse value parm with , EXITTYPE ',' , PROJECT ',' , LIBDEF ',' , USERID ',' , FROMGRP ',' , TYPE ',' , MEMBER ',' , SCOPE ',' , MODE ',' , TOGRP

/* initialize return code */ ret_code = 0

/* assign values that identify when to do the COPY from PROD */ PROMEXIT = 'PVERIFY ' PROMGRP = 'TEST ' PROMTYPE = 'ARCHDEF '

IF ((EXITTYPE = PROMEXIT) &, (FROMGRP = PROMGRP) &, (TYPE = PROMTYPE)) , THEN DO SAY '******** COPYBKUP EXIT - START' "ALLOCATE FILE(SYSIN) DA('PGM.PROJDEFS.SOURCE(IEBCOPY)') SHR REU" "ALLOCATE FILE(SYSPRINT) DUMMY SHR REU" /* */ /* copy ARCHDEF */ /* */ SAY '******** COPYBKUP EXIT - ARCHDEF' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.ARCHDEF') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.ARCHDEF') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy SOURCE */ /* */ SAY '******** COPYBKUP EXIT - SOURCE' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.SOURCE') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.SOURCE') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy COPYLIB */ /* */ SAY '******** COPYBKUP EXIT - COPYLIB' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.COPYLIB') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.COPYLIB') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy DBRM */ /* */ SAY '******** COPYBKUP EXIT - DBRM' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.DBRM') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.DBRM') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy DB2CLIST */ /* */ SAY '******** COPYBKUP EXIT - DB2CLIST' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.DB2CLIST') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.DB2CLIST') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy DB2OUT */ /* */ SAY '******** COPYBKUP EXIT - DB2OUT' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.DB2OUT') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.DB2OUT') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy SOURCLST */ /* */ SAY '******** COPYBKUP EXIT - SOURCLST' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.SOURCLST') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.SOURCLST') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy SCREENS */ /* */ SAY '******** COPYBKUP EXIT - SCREENS' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.SCREENS') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.SCREENS') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy COPYSCR */ /* */ SAY '******** COPYBKUP EXIT - COPYSCR' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.COPYSCR') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.COPYSCR') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy OBJ */ /* */ SAY '******** COPYBKUP EXIT - OBJ' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.OBJ') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.OBJ') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy LMAP */ /* */ SAY '******** COPYBKUP EXIT - LMAP' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.LMAP') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.LMAP') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy LOADOLIB */ /* */ SAY '******** COPYBKUP EXIT - LOADOLIB' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.LOADOLIB') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.LOADOLIB') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy LOADBLIB */ /* */ SAY '******** COPYBKUP EXIT - LOADBLIB' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.LOADBLIB') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.LOADBLIB') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy MAPLIB */ /* */ SAY '******** COPYBKUP EXIT - MAPLIB' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.MAPLIB') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.MAPLIB') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy JCL */ /* */ SAY '******** COPYBKUP EXIT - JCL' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.JCL') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.JCL') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" /* */ /* copy PROCLIB */ /* */ SAY '******** COPYBKUP EXIT - PROCLIB' "ALLOCATE FILE(TESTFILE) DA('PGM.PROD.PROCLIB') SHR" "ALLOCATE FILE(PRIVFILE) DA('PGM.BKUP.PROCLIB') OLD" "CALL 'SYS1.LINKLIB(IEBCOPY)'" "FREE FILE(TESTFILE)" "FREE FILE(PRIVFILE)" "FREE FILE(SYSIN)" "FREE FILE(SYSPRINT)" SAY '******** COPYBKUP EXIT - END' END

EXIT ret_code

The PGM.PROJDEFS.SOURCE(IEBCOPY) member which serves as the SYSIN for the IEBCOPY utility:

   COPY INDD=TESTFILE,OUTDD=PRIVFILE,LIST=NO

The stub for COPYBKP is similar to the stub for each of the three exits:

COPYBKUP CSECT
*
* EXIT STUB - SIMILAR TO IEFBR14
*
         XR  15,15
         BR  14
         END

Back to top




Accounting Application

The accounting application (AC) was the next subset of the entire MGE application to be migrated into SCLM. The AC application uses CICS/COBOL (no DB2) and RPG (report generator). Two new language definitions were constructed for these in the same manner as the previous language definitions by finding the appropriate JCL and constructing a language definition.

The CICSCOB2 language definition was constructed for programs using only CICS and COBOL:


***********************************************************************
*             SCLM LANGUAGE DEFINITION FOR                            *
*            COBOL II WITH CICS PREPROCESSOR                          *
*                                                                     *
**********************  GENERAL NOTES  ********************************
*                                                                     *
*  THIS LANGUAGE DEFINITION IS AN EXAMPLE THAT CAN SERVE AS A         *
*  REFERENCE IN THE CONSTRUCTION AND CUSTOMIZATION OF LANGUAGE        *
*  DEFINITIONS FOR A PARTICULAR APPLICATION AND ENVIRONMENT.          *
*                                                                     *
********************* CUSTOMIZATION NOTES *****************************
*                                                                     *
* CICS OUTPUT IS PASSED VIA THE 'SYSPUNCH' DD ALLOCATION TO COBOL II. *
*                                                                     *
* TO CUSTOMIZE POINT THE FLMSYSLB MACRO(S) AT ALL 'STATIC' COPY       *
* DATASETS NEEDED FOR THE PARSER.                                     *
*                                                                     *
* CUSTOMIZE THE 'OPTIONS' AND 'GOODRC' FIELDS TO YOUR STANDARDS.      *
*                                                                     *
*                                                                     *
* WHEN A NEW TRANSLATOR VERSION REQUIRES TOTAL RECOMPILATION FOR THIS *
* LANGUAGE, THE 'VERSION' FIELD ON FLMLANGL SHOULD BE CHANGED.        *
***********************************************************************
* CHANGE ACTIVITY:                                                    *
*                                                                     *
*                                                                     *
***********************************************************************
*
* NOTE: MIDDLE QUALIFIER SPECIFIED AT IPL TIME
*
CICSCOB2 FLMSYSLB  SYSC.CIC1PT.SDFHCOB
         FLMSYSLB  SYSC.CIC1PT.SDFHMAC
         FLMSYSLB  SYSC.CIC1PT.SDFHSAMP
*
         FLMLANGL  LANG=CICSCOB2,VERSION=V2R1M0,ALCSYSLB=Y
*
* PARSER TRANSLATOR
*
          FLMTRNSL   CALLNAM='SCLM COBOL PARSE',                       C
               FUNCTN=PARSE,                                           C
               COMPILE=FLMLPCBL,                                       C
               PORDER=1,                                               C
               OPTIONS=(@@FLMLIS,@@FLMSTP,@@FLMSIZ,)      *M34FN*
*          (* SOURCE      *)
           FLMALLOC  IOTYPE=A,DDNAME=SOURCE
            FLMCPYLB @@FLMDSN(@@FLMMBR)                   *M34FN*
*
* BUILD TRANSLATOR(S)
*
*         - CICS PRECOMPILE -
*
*   NOTE: SYSC.&CICT..SDFHLOAD IS TO BE IN FRONT OF SYS1.COB2CICS
*
          FLMTRNSL   CALLNAM='CICS PRE-COMPILE',                       C
               FUNCTN=BUILD,                                           C
               COMPILE=DFHECP1$,                                       C
               DSNAME=SYSC.CIC1PT.SDFHLOAD,                            C
               VERSION=2.1,                                            C
               GOODRC=0,                                               C
               PORDER=1,                                               C
               OPTIONS=(COBOL2,SOURCE,NOSEQ)
*  1       (* SYSIN *)
           FLMALLOC  IOTYPE=S,KEYREF=SINC,RECFM=FB,LRECL=80,           C
               DDNAME=SYSIN
*  2       (* SYSPUNCH *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,                       C
               RECNUM=4000,DDNAME=SYSPUNCH,PRINT=Y
*  3       (* SYSPRINT *)
           FLMALLOC  IOTYPE=O,KEYREF=LIST,RECFM=FBA,LRECL=121,         C
               RECNUM=5000,PRINT=Y,DDNAME=SYSPRINT
*
*
          FLMTRNSL   CALLNAM='COBOL II COMPILER',                      C
               FUNCTN=BUILD,                                           C
               COMPILE=IGYCRCTL,                                       C
               DSNAME=SYS1.COB2COMP,                                   C
               VERSION=2.0,                                            C
               GOODRC=0,                                               C
               PORDER=3,                                               C
               OPTIONS=(OBJ,APOST,LIB,NORES,F(E),OFF,NOSEQ,NUM,NODYN,  C
               TRUNC(OPT),FDUMP,NOTEST,NOOPT,NOLIST,NOMAP,SSR,NOXREF)
*
* DDNAME ALLOCATION (USING DDNAMELIST SUBSTITUTION)
*
*  1       (* SYSLIN *)
           FLMALLOC  IOTYPE=O,KEYREF=OBJ,RECFM=FB,LRECL=80,            C
               RECNUM=5000,DFLTTYP=OBJ,DDNAME=SYSLIN
*  2       (* N/A *)
           FLMALLOC  IOTYPE=N
*  3       (* N/A *)
           FLMALLOC  IOTYPE=N
*  4       (* SYSLIB *)
           FLMALLOC  IOTYPE=I,KEYREF=SINC,DDNAME=SYSLIB
*  5       (* SYSIN *)
           FLMALLOC  IOTYPE=U,DDNAME=SYSPUNCH
*  6       (* SYSPRINT *)
           FLMALLOC  IOTYPE=W,KEYREF=OUT2,RECFM=FBA,LRECL=133,         C
               RECNUM=25000,PRINT=Y,DFLTTYP=SOURCLST,DDNAME=SYSPRINT
*  7       (* SYSPUNCH *)
           FLMALLOC  IOTYPE=A
            FLMCPYLB NULLFILE
*  8       (* SYSUT1 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=5000
*  9       (* SYSUT2 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=5000
* 10       (* SYSUT3 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=5000
* 11       (* SYSUT4 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=5000
* 12       (* SYSTERM *)
           FLMALLOC  IOTYPE=A,DDNAME=SYSTERM
            FLMCPYLB NULLFILE
* 13       (* SYSUT5 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=5000
* 14       (* SYSUT6 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=5000
* 15       (* SYSUT7 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=5000

The DB2RPT language definition was constructed for COBOL programs using DB2 and the report generator. Each program uses different parameters for the COBOL compiler in order to use the report generator. In the DB2RPT language definition the COBOL compiler parameters common to each program were placed in the OPTIONS list. A PARMKWD of PARM1 was used so that the additional parameters may be specified in the architecture definition member for each DB2RPT program:


***********************************************************************
*            SCLM LANGUAGE DEFINITION FOR                             *
*          COBOL II WITH DB2 PREPROCESSOR                             *
*                                                                     *
* DB2RPT                                                              *
*                                                                     *
**********************  GENERAL NOTES  ********************************
*                                                                     *
*  THIS LANGUAGE DEFINITION IS AN EXAMPLE THAT CAN SERVE AS A         *
*  REFERENCE IN THE CONSTRUCTION AND CUSTOMIZATION OF LANGUAGE        *
*  DEFINITIONS FOR A PARTICULAR APPLICATION AND ENVIRONMENT.          *
*                                                                     *
********************* CUSTOMIZATION NOTES *****************************
*                                                                     *
* DB2 OUTPUT IS PASSED VIA THE DB2TRANS DD ALLOCATION TO THE COBOL II *
* COMPILER.                                                           *
*                                                                     *
* TO CUSTOMIZE POINT THE FLMSYSLB MACRO(S) AT ALL 'STATIC' COPY       *
* DATASETS NEEDED FOR THE PARSER.                                     *
*                                                                     *
* CUSTOMIZE THE 'OPTIONS' AND 'GOODRC' FIELDS TO YOUR STANDARDS.      *
*                                                                     *
* ADD THE 'DSNAME' FIELD IF THE TRANSLATOR IS IN A PRIVATE LIBRARY.   *
*                                                                     *
* WHEN A NEW TRANSLATOR VERSION REQUIRES TOTAL RECOMPILATION FOR THIS *
* LANGUAGE, THE 'VERSION' FIELD ON FLMLANGL SHOULD BE CHANGED.        *
***********************************************************************
*
*
*
         FLMLANGL    LANG=DB2RPT,ALCSYSLB=Y
*
         FLMINCLS TYPES=(@@FLMETP,COPYSCR)
*
* PARSER TRANSLATOR
*
          FLMTRNSL   CALLNAM='SCLM COBOL PARSE',                       C
               FUNCTN=PARSE,                                           C
               COMPILE=FLMLPCBL,                                       C
               PORDER=1,                                               C
               OPTIONS=(@@FLMLIS,@@FLMSTP,@@FLMSIZ,)
*          (* SOURCE      *)
           FLMALLOC  IOTYPE=A,DDNAME=SOURCE
            FLMCPYLB @@FLMDSN(@@FLMMBR)
*
* BUILD TRANSLATORS
*
*         --DB2 PREPROCESSOR INTERFACE--
          FLMTRNSL   CALLNAM='DB2 PREPROCESS',                         C
               FUNCTN=BUILD,                                           C
               COMPILE=DSNHPC,                                         C
               VERSION=1.0,                                            C
               GOODRC=4,                                               C
               PORDER=3,                                               C
               OPTIONS=(HOST(COB2),APOST,SOURCE)
*  1       -- N/A --
           FLMALLOC  IOTYPE=N
*  2       -- N/A --
           FLMALLOC  IOTYPE=N
*  3       -- N/A --
           FLMALLOC  IOTYPE=N
*  4       -- SYSLIB --
           FLMALLOC  IOTYPE=I,KEYREF=SINC
*  5       -- SYSIN --
           FLMALLOC  IOTYPE=S,KEYREF=SINC,RECFM=FB,LRECL=80,           C
               RECNUM=5000
*  6       -- SYSPRINT --
           FLMALLOC  IOTYPE=W,RECFM=FBA,LRECL=133,                     C
               RECNUM=35000,PRINT=Y
*  7       -- N/A --
           FLMALLOC  IOTYPE=N
*  8       -- SYSUT1 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
*  9       -- SYSUT2 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
* 10       -- SYSUT3 --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=800,RECNUM=9000
* 11       -- N/A --
           FLMALLOC  IOTYPE=N
* 12       -- SYSTERM --
           FLMALLOC  IOTYPE=A
            FLMCPYLB NULLFILE
* 13       -- N/A --
           FLMALLOC  IOTYPE=N
* 14       -- SYSCIN --
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,                       C
               RECNUM=9000,DDNAME=DB2TRANS
* 15       -- N/A --
           FLMALLOC  IOTYPE=N
* 16       -- DBRMLIB--
           FLMALLOC  IOTYPE=P,DDNAME=DBRMLIB,MEMBER=@@FLMONM,          C
               DFLTTYP=DBRM,KEYREF=OUT1,                               C
               RECFM=FB,LRECL=80,RECNUM=5000,DIRBLKS=1
*
*
*
          FLMTRNSL   CALLNAM='COBOL II COMPILER',                      C
               FUNCTN=BUILD,                                           C
               COMPILE=IGYCRCTL,                                       C
               DSNAME=SYS1.COB2COMP,                                   C
               VERSION=2.0,                                            C
               GOODRC=4,                                               C
               PORDER=3,                                               C
               PARMKWD=PARM1,                                          C
               OPTIONS=(OBJ,APOST,LIB,F(E),OFF,NOSEQ,RES,DYN,          C
               TRUNC(OPT),FDUMP,                                       C
               EX(INX(''LGSEQ'',RW),PRTX(RW)))
*
* DDNAME ALLOCATION (USING DDNAMELIST SUBSTITUTION)
*
*  1       (* SYSLIN *)
           FLMALLOC  IOTYPE=O,KEYREF=OBJ,RECFM=FB,LRECL=80,            C
               RECNUM=8000,DFLTTYP=OBJ,DDNAME=SYSLIN
*  2       (* N/A *)
           FLMALLOC  IOTYPE=N
*  3       (* N/A *)
           FLMALLOC  IOTYPE=N
*  4       (* SYSLIB *)
           FLMALLOC  IOTYPE=I,KEYREF=SINC,DDNAME=SYSLIB
*  5       (* SYSIN *)
           FLMALLOC  IOTYPE=U,DDNAME=DB2TRANS
*  6       (* SYSPRINT *)
           FLMALLOC  IOTYPE=W,KEYREF=LIST,RECFM=FBA,LRECL=133,         C
               RECNUM=50000,PRINT=Y,DFLTTYP=SOURCLST,DDNAME=SYSPRINT
*  7       (* SYSPUNCH *)
           FLMALLOC  IOTYPE=A
            FLMCPYLB NULLFILE
*  8       (* SYSUT1 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
*  9       (* SYSUT2 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 10       (* SYSUT3 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 11       (* SYSUT4 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 12       (* SYSTERM *)
           FLMALLOC  IOTYPE=A,DDNAME=SYSTERM
            FLMCPYLB NULLFILE
* 13       (* SYSUT5 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 14       (* SYSUT6 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000
* 15       (* SYSUT7 *)
           FLMALLOC  IOTYPE=W,RECFM=FB,LRECL=80,RECNUM=8000

The group BAKER was added to the project definition for AC application developer Cathy Baker. The project definition was also updated for the language definitions required for the AC application and the exits needed to support the MGE application development process:


          TITLE '*** Library Definition for PGM after HR, MU, and AC '
PGM      FLMABEG
*
*        **************************************************************
*        *  DEFINE THE TYPES                                          *
*        **************************************************************
*
ARCHDEF  FLMTYPE                        -- ARCHITECTURE DEFINITIONS  --
JCL      FLMTYPE                        -- JCL                       --
PROCLIB  FLMTYPE                        -- PROCLIB                   --
SOURCE   FLMTYPE EXTEND=COPYLIB         -- SOURCE CODE               --
COPYLIB  FLMTYPE                        -- COPY BOOKS                --
DBRM     FLMTYPE                        -- DBRM CREATED BY DB2 PRE.PR--
DB2CLIST FLMTYPE                        -- DB2CLIST FOR BIND AND FREE--
DB2OUT   FLMTYPE                        -- COPY OF DB2CLIST          --
SOURCLST FLMTYPE                        -- LISTINGS                  --
SCREENS  FLMTYPE                        -- CICS SCREEN SOURCE        --
COPYSCR  FLMTYPE                        -- CICS SCREEN SOURCE COPYS  --
MAPLIB   FLMTYPE                        -- CICS SCREEN MAPS          --
OBJ      FLMTYPE                        -- OBJECT CODE               --
LMAP     FLMTYPE                        -- LINKAGE EDITOR MAPS       --
LOADOLIB FLMTYPE                        -- LOAD ONLINE MODULES       --
LOADBLIB FLMTYPE                        -- LOAD BATCH MODULES        --
*
*        **************************************************************
*        *  DEFINE THE GROUPS                                         *
*        **************************************************************
*
DEV1     FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
MORRIS   FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
WOLFE    FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
BAKER    FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
DEV2     FLMGROUP AC=(P,T),KEY=Y,PROMOTE=TEST
TEST     FLMGROUP AC=(P),KEY=Y,PROMOTE=PROD
PROD     FLMGROUP AC=(P),KEY=Y
*
FIX      FLMGROUP AC=(F),KEY=N,PROMOTE=PROD
DEVFIX   FLMGROUP AC=(F),KEY=Y,PROMOTE=FIX
**********************************************************************
*                PROJECT CONTROLS
**********************************************************************
*
* PRMEXT1 = COPYBKUP EXECUTES AFTER PROMOTE VERIFY PHASE, COPIES
*                    MEMBERS FROM PROD TO PRIVATE LIBRARIES ONLY WHEN
*                    PROMOTE FROM TEST HAS BEEN INVOKED
* PRMEXT2 = COPYTEST EXECUTES AFTER PROMOTE COPY PHASE, COPIES
*                    MEMBERS FROM TEST TO PRIVATE LIBRARIES ONLY WHEN
*                    PROMOTE FROM TEST HAS BEEN INVOKED
* PRMEXT3 = COPYPROD EXECUTES AFTER PROMOTE PURGE PHASE, COPIES
*                    MEMBERS FROM PROD TO PRIVATE LIBRARIES ONLY WHEN
*                    PROMOTE FROM TEST HAS BEEN INVOKED
* VERCC   = CCODEVER EXECUTES AFTER MIGRATION AND EDIT, REQUIRES
*                    CHANGE CODE TO BE ENTERED
*
* NOTE: COPYBKUP, COPYTEST, COPYPROD IN PGM.PROJDEFS.LOAD
*       ARE IEFBR14 LOGIC. THESE ARE STUB MODULES. THE SOURCE MEMBERS
*       ARE B14COPYB, B14COPYT, AND B14COPYP IN PGM.PROJDEFS.SOURCE.
*       YOU MAY TURN OFF ONE OF THESE EXITS BY USING A STUB OR BY
*       REMOVING THE REFERENCE FROM THE FLMCNTRL MACRO.
*
*       USE    PEXTNDS=PGM.PROJDEFS.LOAD
*       AND    PEXTNCM=LINK
*       IN ORDER TO USE THE STUB MODULE FOR EXIT N
*
*       USE    PEXTNDS=PGM.PROJDEFS.SOURCE
*       AND    PEXTNCM=TSOLNK
*       IN ORDER TO USE THE REXX PROGRAM FOR EXIT N
*
         FLMCNTRL ACCT=PGM.ACCOUNT.FILE,                               C
               PRMEXT1=COPYBKUP,                                       C
               PEXT1DS=PGM.PROJDEFS.SOURCE,                            C
               PEXT1CM=TSOLNK,                                         C
               PRMEXT2=COPYTEST,                                       C
               PEXT2DS=PGM.PROJDEFS.SOURCE,                            C
               PEXT2CM=TSOLNK,                                         C
               PRMEXT3=COPYPROD,                                       C
               PEXT3DS=PGM.PROJDEFS.SOURCE,                            C
               PEXT3CM=TSOLNK,                                         C
               VERCC=CCODEVER,                                         C
               VERCCDS=PGM.PROJDEFS.LOAD
*
**********************************************************************
*                LANGUAGE DEFINITION TABLES
**********************************************************************
*
*
*        USE THE FOLLOWING FORMAT TO COPY IN THE MACROS USED BY YOUR
*        OWN SYSTEM
*
         COPY  FLM01370           -- LE370      LINKAGE EDITOR      --
*
         COPY  FLM@ARCD           -- ARCHDEF    ARCHITECTURE DEFN.  --
         COPY  FLM@BD2            -- DB2CLIST   DB2 CLIST, BIND/FREE--
         COPY  FLM@BDO            -- DB2OUT     DB2 CLIST, COPY     --
         COPY  ASMRNT             -- ASMRNT     REENTRANT ASSEMBLER --
         COPY  BASM               -- BASM       BATCH ASSEMBLER     --
         COPY  BASMRNT            -- BASMRNT    BATCH ASSEMBLER RENT--
         COPY  BMSLINK            -- BMSLINK    LINK FOR CICS MAP   --
         COPY  BMSMAP             -- BMSMAP     CICS MAP ASSEMBLER  --
         COPY  CICSCOB2           -- CICSCOB2   CICS, COBOL II      --
         COPY  CICSDB2            -- CICSDB2    DB2, CICS, COBOL    --
         COPY  CMPLNK             -- CMPLNK     COBOL II            --
         COPY  DB2                -- DB2        DB2 AND COBOL II    --
         COPY  DB2RPT             -- DB2RPT     DB2, COBOL II, RPT  --
         COPY  NOBUILD            -- NOBUILD    PARSE WITH NO BUILD --
*
***********************************************************************
*
         FLMAEND

Back to top




Day Eight

Cathy Baker had attended the SCLM class on Day Four. She joined the team on Day Eight to work on the accounting application. John Roberts, Betty Morris, and Lou Wolfe showed Cathy Baker the process used to migrate the HR and MU applications. Cathy migrated three AC programs using the process and guidance from the team. Cathy was then able to handle the remaining AC program migrations by herself.

Cathy Baker migrated half of the AC application programs into SCLM in four hours. While she was working on the AC application, Lou Wolfe continued to work on the MU application. The partitioning of the MGE application permitted the migration of subapplications to continue in parallel. Cathy Baker built the architecture definition member AC while Kevin Wolfe built the architecture definition member MU.

All of the language definitions needed for engineering (EG), power production (PP), and the remainder of customer service (CS) programs had been defined. The migration for the remaining programs would follow the same migration process used for HR, MU, and AC.

John Roberts and I then turned our attention back to a situation that we had postponed. In the manual MGE process Sam Crew would decide if production system libraries or test system libraries were to be used for building the MGE applications. The manual process required Sam Crew to change values in SYS1.PROCLIB(INCLUDE) depending upon the need to use test or production libraries. These values were the second qualifiers of the system data sets that were now referenced by the FLMSYSLB macros in the language definitions. The MGE JCL referenced the member INCLUDE and used a symbolic for the second qualifier. Thus at the time of an MGE build the system data sets would be a mixture of test and production based upon the settings of values in SYS1.PROCLIB(INCLUDE).

In order to move forward with the SCLM migration I decided to address this problem later and "hard code" the system libraries using the production second qualifier. One solution presented to the customer was to use a similar technique in the PGM project definition. One could code a symbolic second qualifier for test or production data sets. Sam Crew could continue his process by updating symbols in a macro that would be used in the PGM project definition. After the updates to the symbols Sam Crew could assemble and link the PGM project definition and in so doing set up the language definitions with the desired mix of production and test system libraries.

Back to top




Epilogue

The MGE SCLM migration was a success. Its success may be attributed to these factors:

  1. The customer was intimately familiar with the current system build process.
  2. The customer was intimately familiar with the MGE applications.
  3. The customer quickly learned SCLM.
  4. The customer had the proper people and computer resources ready for the conversion effort.
  5. The customer supported the move to SCLM.
  6. The customer participated in the move to SCLM.

The services provided to the customer by IBM involved these skills:

  1. SCLM language definitions
  2. SCLM exits
  3. SCLM solution for DB2 and CICS
  4. assembler programming
  5. REXX programming
  6. JCL
  7. JCL procedures
  8. IEBCOPY utility
  9. PDF component of ISPF
  10. SCLM formal presentations and education
  11. patience and a good "bed side manner" in dealing with novice customers
  12. general MVS concepts

Without a doubt the single most important factor in the success of this conversion was commitment to the conversion on the part of the customer.

Back to top




Glossary

ISPF
Interactive System Productivity Facility
JCL
Job Control Language
Language Definition
A language definition specifies the set of translators to be executed for SCLM functions PARSE, VERIFY, BUILD, COPY, and PURGE. A language definition is composed of one FLMLANGL macro followed by an FLMTRNSL macro for each translator to be executed for members of SCLM libraries whose language attribute matches the value of the LANG keyword in the FLMLANGL macro.
MGE
Mayfield Gas and Electric Company - fictitious name for the customer in this case study.
PDF
The Program Development Facility of ISPF.
project definition
A project definition defines the SCLM library structure, project control information, and language definitions. A project definition is a load module used by SCLM at run time. The source code for a project definition is composed of macros.
RPG
Report Generator - an IBM product commonly used in businesses to produce reports.
SCLM
The Software Configuration and Library Manager is a component of the ISPF/PDF product. SCLM was first introduced in ISPF/PDF Version 3 Release 1.
Translator
A translator is a load module, CLIST, or REXX program that receives control from SCLM for execution. The name of the translator is specified as the value of the COMPILE keyword for the FLMTRNSL macro. Examples of translators are compilers, assemblers, linkage editors, text processors, DB2 preprocessors, CICS preprocessors, utilities, and customer tools.

Back to top




Trademarks and Service Marks

The following terms, denoted by an asterisk (*) on their first occurrence in this publication, are trademarks or service marks of the IBM Corporation in the United States or other countries:

  • IBM
  • CICS
  • DB2
  • RACF

Back to top