|
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:
- There was no competitive or home-grown library product in use.
Application development was controlled with a manual process.
- DB2, CICS, and COBOL were the main languages in use.
- MGE was using ISPF 4.1.
- MGE had no training in SCLM.
- There were 35 people in the application development and software
maintenance areas.
- Application development activity was divided into 5 areas.
- SCLM functions were reviewed and appeared to meet the customer
needs.
- 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:
-
Day One
Objective - install SCLM samples and make sure system is working
properly
-
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
-
Day Four
Objective - full day of SCLM education
-
Day Five
Objective - construct an SCLM project definition, allocate data sets,
construct language definitions
-
Day Six
Objective - migrate a subset of programs into SCLM libraries, BUILD,
PROMOTE
-
Day Seven
Objective - demonstrate that SCLM,
SCLM utilities, and reports are working as advertised
-
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:
- MGE.PROD.LOADOLIB - production load modules for online applications
- MGE.PROD.LOADBLIB - production load modules for batch applications
- MGE.PROD.DBRMOLIB - DBRMs for online applications
- MGE.PROD.DBRMBLIB - DBRMs for batch applications
- MGE.PROD.MAPLIB - BMS maps for CICS
- MGE.PROD.COBOL - production COBOL source programs
- MGE.PROD.COPYLIB - production copy books for the production COBOL
source programs
- MGE.PROD.COPYLIB.SCREENS - production CICS BMS source
- MGE.PROD.FORTRAN - production FORTRAN source programs
- MGE.PROD.JCL - production JCL
- MGE.PROD.PROCLIB - production JCL procedures
- MGE.PROD.COMPJCL - sample JCL for compiling, assembling, linking,
and binding DB2 plans
- MGE.PROD.COMPPROC - JCL procedures used by PGM.PROD.COMPJCL
- MGE.PROD.COMPILE - JCL job streams, one per load module, for
compiling and linking specific programs
The application development process consisted primarily of:
- creating and/or editing source members from the MGE.PROD.COBOL,
MGE.PROD.COPYLIB, and MGE.PROD.COPYLIB.SCREENS data set
- 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:
- Customer Service (CS)
- Engineering (EG)
- Human Resources (HR)
- Accounting (AC)
- 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:
- INCL CS ARCHDEF Customer Service
- INCL EG ARCHDEF Engineering
- INCL HR ARCHDEF Human Resources
- INCL AC ARCHDEF Accounting
- 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:
- the name of the assembler had to be changed to ASMA90
- the COBOL compiler was in a special data set and the FLMTRNSL
DSNAME keyword was used to point to the special data set
- 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:
- Use the SCLM migration utility for the sample COBOL source
program and architecture definitions
- BUILD using the sample high level architecture definition member
- PROMOTE using the sample high level architecture definition member
from development to test and from test to production
- EDIT the sample COBOL source member to perform a draw down of the
member
- 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:
- 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.
- 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.
- I created member FLM01DB2 in IBMMXP.PROJDEFS.SOURCE
from the IBM sample FLM@ECO2.
- I modified FLM01DB2 to remove the CICS preprocessor FLMTRNSL
and related FLMALLOC macro calls.
- 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:
- the samples had been installed, the customer application development
process was analyzed, and the application development JCL was
studied before
the class was held
- the customer played an active role in the analysis prior to the
class and was to be active in the migration after the class
- the customer developers were quick learners and knowledgeable about
their total system
The 6.5 hour class covered these topics:
- SCLM - A Tech Look (Guide '93 presentation, available on the
marketing tools disk)
- Examples of the customer project definition in IBMMXP.PROJDEFS.SOURCE
- Advanced Topics (authorization codes, language definitions)
- Techniques (versioning, emergency fixes, backups, exits - versioning
and emergency fix presentations are available on the marketing tools
disk)
- 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:
- allocate PGM.PROJDEFS.SOURCE, PGM.PROJDEFS.OBJ, PGM.PROJDEFS.LOAD
data sets
- copy the members from IBMMXP.PROJDEFS.SOURCE into
PGM.PROJDEFS.SOURCE
- create member VSAM with a copy of member FLM02VSM
(FLM02VSM creates the VSAM cluster for the accounting records)
- change the JCL and qualifiers in member VSAM for the
PGM project
- submit VSAM to create the VSAM cluster PGM.ACCOUNT.FILE
- create member ALLOCATE with a copy of member FLM02ALL
- change the JCL and qualifiers in member ALLOCATE for the
PGM project
- submit ALLOCATE to allocate the data sets
- create PGM.PROJDEFS.SOURCE(PGM) with a copy of member IBMMXP
- 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:
- copy HREIUPDT source member into PGM.MORRIS.SOURCE
- migrate HREIUPDT with language DB2
- 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)
- create the HREIUPDT DB2CLIST using HREIBILD as a pattern
- 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:
- have one development group per developer
- have one high level architecture definition member
for each application
(HR, PP, CS, AC, EG)
- 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:
- A FIX and DEVFIX group was added for emergency fixes.
- Authorization code T was added to the development groups for
concurrent development.
- A change code authorization routine CCODEVER was put into use.
- CCODEVER initially was just like IEFBR14 - this was sufficient to
require the user to enter a change code for SCLM migration and edit
activity.
- LOADOLIB and LOADBLIB were added for online and batch load
modules (these replaced type LOAD).
- The MORRIS development group was added.
- 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.
- 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.
- FLM01ASM was the basis for three assembly language definitions:
ASMRNT, BASM, and BASMRNT.
- ASMRNT - reentrant assembler
- BASM - batch assembler
- BASMRNT - batch reentrant assembler
- 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:
- 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).
- 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:
- 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.
- 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.
- 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:
- The customer was intimately familiar with the current system build
process.
- The customer was intimately familiar with the MGE applications.
- The customer quickly learned SCLM.
- The customer had the proper people and computer resources ready
for the conversion effort.
- The customer supported the move to SCLM.
- The customer participated in the move to SCLM.
The services provided to the customer by IBM involved these skills:
- SCLM language definitions
- SCLM exits
- SCLM solution for DB2 and CICS
- assembler programming
- REXX programming
- JCL
- JCL procedures
- IEBCOPY utility
- PDF component of ISPF
- SCLM formal presentations and education
- patience and a good "bed side manner" in dealing with novice
customers
- 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:
Back to
top
|