MVSJCLtest - Contents


Part_0 - Overview of the Conversion & Testing plans & procedures.
- all team members & management should read & understand.

Part_1 - install Vancouver Utilities - brief review
  (should already be installed following instructions in install.htm).
- setting up profiles for appsadm, programmers,& operators
- using 'stub' profiles in home dirs, calling a common profile
- a 'common_profile' makes site administration much easier
- 'stub_profile's (renamed as .profile or .bash_profile) in each user's
  homedir allows them to code their preferences
- setup 'appsadm' (applications administrator) homedir /home/appsadm
  to hold profiles modified for site, site specific scripts,crontabs,etc
- Preparations for UV Software Onsite Training & Conversion Assistance
- Directory & File-Design for JCL conversions
- RUNLIBS & RUNDATA environmental variables in profiles of prgmrs&oprtrs
  allow multiple sets of Libraries & Data, with no changes in JCL/scripts
- RUNLIBS/RUNDATA defined as testlibs/testdata OR prodlibs/proddata

Part_2 - Sample JCL/scripts listings for test/demos
- original mainframe JCL + converted Korn shell script equivalents
  (JAR100.jcl,JAR200,JGL100,JGL200,JGL300,JGL320,FTPPUT1,MAILSMTP,
  QJTLIST,EZTLIST)

Part_3 - Converting the VU supplied demo JCL,PROCs,PARMs,COBOL,copybooks
- Directories for JCL conversions & testing
- setup userid mvstest1 with superdirs testlibs & testdata
  or setup testlibs & testdata within your homedir
- script 'mvslibsdirs' sets up subdirs within testlibs
- script 'mvsdatadirs' sets up subdirs within testdata
- script 'copymvsctls' copies control files from uvadm
- copy demo JCL/PROCs/Parms to testlibs/jcl0,proc0,parm0
- copy demo COBOL programs/copybooks to testlibs/cbl0,cpy0
- copy demo datafiles from uvadm to testdata/data
- script 'jcl2ksh51A' performs all steps of JCL/PROCs/Parms conversion
- script 'cnvMF51Ac' performs all steps of COBOL copybook conversion
- script 'cnvMF51A' performs all steps of COBOL program conversion
- script 'mfcbl5A' compiles all COBOL programs
- select QuikJobs from parms & convert to uvcopy
  ********* Execute the converted JCL/scripts *********
- EXECUTE the demo JCL/scripts
  (jar100.ksh,jar200,jgl100,jgl200,jgl300,jgl320,ftpput1,mailsmtp,
  qjtlist.ksh,eztlist.ksh)
- Job-Logging & Console-Logging

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

MVSJCLtest - Contents (continued)


Part_4 Cross-References available
xrefall - script to run all cross-ref reports
xkshfile1 - list all datafiles in each JCL/ksh/script
xkshfile2 - shows all JCL/ksh/scripts using each data-file
xkshparm1 - list all SYSIN/PARM modules in each JCL/ksh/script
xkshparm2 - shows all JCL/ksh/scripts referencing each SYSIN/PARM
xkshproc1 - list all PROCs executed in each JCL/ksh/script
xkshproc2 - shows all JCL/ksh/scripts executing each PROC
xkshprog1 - list all programs executed in each JCL/ksh/script
xkshprog2 - shows all JCL/ksh/scripts executing each program
xcobcopy1 - list all 'copy'books used in each program
xcobcopy2 - shows all programs using each 'copy'book
xcobcall1 - list all 'call'ed programs in each program
xcobcall2 - shows all programs 'call'ing each program
xcobfile2 - crossref all PROGRAMS using each external-file
xcobsql1 - list all SQL Includes in any 1 PROGRAM
xcobsql2 - crossref all PROGRAMS using any 1 SQL Include
cobfil51 - COBOL file report
Statistics (table-summaries) available
statmvsjcl1 - statistics for mainframe JCL
- count programs,PROCs,top-nodes,files used in all JCLs
statksh1 - statistics for Korn shell scripts
- count programs,exportfile/exportgen,filenames in Ksh scripts
statcbl1 - statistics for COBOL programs
- count copybooks, called programs,& file ORG type
mvsfiles5A - script to trace data files in MVS JCL
- extracts all data files from jcl2 (JCL procs expanded)
- identify origin step# & destination step#s for each file

Part_5 - FTP mainframe data files to Unix/Linux
- must use binary mode if any packed/binary fields
- may use ASCII mode if all unpacked character fields
- ASCII mode advantage automatic translate EBCDIC to ASCII & inserts
  LineFeeds which allows use of unix tools (vi,lp,cat,mopre,etc)
- disadvantage increases record sizes, need to modify programs to match
- also need to correct zone signs in unpacked numeric fields
  from mainframe conventions to Micro Focus COBOL conventions
- using uvcp to change record lengths & file types & zoned signs
- detecting wrong-sized records in FTP'd files
- selecting desired record-sizes from FTP ASCII files

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

MVSJCLtest - Contents (continued)


Part_6 - Data File Conversions for demo JCL/script executions - Overview
- More complex conversions in MVSJCL.htm
- SQL scripts to create/load tables in SQLconvert.htm
  setup to perform DATA file conversions
  script 'cnvdatadirs' to create conversion subdirs
  Summary of subdirs/procedures used to convert DATA files
  script 'gencnvD2' generates all conversion jobs
- convert EBCDIC to ASCII, preserving packed fields
- convert to pipe delimited text for loading DB tables
- generate batch-files to create & load tables
  Op. Instrns. - convert customer master & sales detail files
  checking results of conversions
- uvhd to investigate input & output files
- listpipeA - list pipe delimited with copybook fieldnames
  Listings of generated uvcopy conversion jobs
  EBCDIC to ASCII, pipe delimit, scripts to create/load DB tables
  genfixd1 - convert Pipe|Delimited back to Fixed-Field records
  genrfmA alterantive reformat datafiles based on 2 COBOL copybooks
- see DATAcnv1.htm#4I1

Part_7 - JCL/COBOL/DATA conversions at YOUR site
  (vs the demos in prior parts using VU supplied test files)
- concise operating Instructions extracted from prior parts
  without explanations & examples (refer to prior parts when you need)
- considerations & changes for the REAL (Go Ahead) conversion

Part_8 - Select JCLs, PROCs, COBOL programs & copybooks, PARMs,& DATA-files
  required for a POC or next phase of large conversion.
- Automated selections based on a list of JCLs desired in the POC
- selection scripts for various components generated from cross-refs

Part_9 - converting mainframe utilities such as QuikJob & EasyTrieve
  with significant code in library modules that must be converted
  separately from the JCL
- sample conversion of QuikJob code to uvcopy code
- sample conversion of EasyTrieve code to uvcopy code

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

MVSJCLtest - Contents (continued)


Part_10 - control-M requirements (stub.ini & common.ini)
- call to stub.ini inserted on line 9 of all converted JCL/scripts
- stub.ini & common.ini required since contol-M can't use profiles
  to determine $RUNDATA & $RUNLIBS as for programmers & live operators

Part_11 - CNVaids.htm - Testing & Debugging Aids
- Cross-References, Jobflow reports, job logging, etc
- many other scripts & utilities valuable during conversions
- get familiar with these, so you will know when they can save you time
- several of these can be run using supplied test files
- Illustrations of the most valuabel test/debug aids
  such as 'diff' unix/linux utility for text files with LineFeeds &
  'uvcmpFA1' UV Software compare for files without LFs & with packed

DataUtilities.doc

Please also study http://uvsoftware.ca/datautilities.htm. Just as this MVSJCLtest.doc is a good place to start learning the JCL to Korn shell script conversions. DataUtilities.htm is a good place to start learning about the various data file utitlities (uvhd,uvhdcob,uvcp,uvsort,uvlist,uvcopy).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_0. MVS JCL test/demo conversions

Overview of Conversion & Testing plans

This document is intended for JCL conversion team members, who have completed the Vancouver Utilities training course, and are ready to start converting & testing JCL/scripts. We assume the following:

  1. UV Software (probably Owen Townsend) is onsite & has completed the Vancouver Utilities training course.

  2. All students have a login on the Unix/Linux system, and are ready to do some test/demo/training conversions/executions in in their homedirs or in /home/mvstest1 ($HOME/testlibs & $HOME/testdata or /home/mvstest1/testlibs & /home/mvstest1/testdata).

  3. Setup user 'mvstest1' to convert/execute a sample set of JCL's selected from the UV Software supplied demo JCL (in /home/uvadm/mvstest/testlibs/jcl0/...) Converting & executing these supplied samples will help you get familiar with these conversion procedures & you can compare your results to those listed in Part_3.

  4. Setup user 'mvstest2' to convert/execute a sample set of a few JCL's selected from YOUR mainframe JCLs/PROCs/Parms. Transfer from the mainframe to /home/mvstest2/testlibs/jcl0,proc0,parm0. These samples could be used for a 'POC' (Proof Of Concept).

  5. Use '/home/mvstest2/testlibs' if the POC team is working together. Could use $HOME/testlibs if team members want to work independently for initial self-training & to get familiar with the conversion & testing procedures.

  6. For the later real JCL conversion (following initial training & POC), you should setup common testlibs & testdata. These should not be in the homedirs since large sites would exceed storage available in homedirs. For example these might be /p1/apps/testlibs & /p2/apps/testdata. '/p1' & '/p2' are separate file systems with lots of capacity, especially /p2 for the data files which can be very large at many sites.

  7. Note that for the later real conversion, it is important that all programmers work on the 1 common set of testlibs/JCL & not in their homedirs (unless possibly each programmer works on a different system).

  8. During testing, it is probably best if each programmer can have his own set of testdata, so his test files are not modified by other programmers running their tests.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Overview of Conversion & Testing (continued)

  1. Note that this flexibility of using different sets of testlibs & testdata is achieved by defining environmental variables RUNLIBS & RUNDATA in the profiles of the various programmers, for example:
      export RUNLIBS=$HOME/testlibs
      export RUNDATA=$HOME/testdata
                       --- or ---
      export RUNLIBS=/home/mvstest1/testlibs
      export RUNDATA=/home/mvstest1/testdata
                       --- or ---
      export RUNLIBS=/p1/apps/testlibs
      export RUNDATA=/p2/apps/testdata
  1. For later production, we will copy JCL/script libraries & data files to the production machine & change the names of testlibs & testdata to 'prodlibs' & 'proddata'. We will then change the definitions of RUNLIBS/RUNDATA in operator profiles & appsadm profile for cron jobs to:
      export RUNLIBS=/p1/apps/prodlibs
      export RUNDATA=/p2/apps/proddata
  1. Using $RUNLIBS & $RUNDATA in profiles & in function jobset51 (called on line 10 of all converted JCL/scripts) mean that you never have to modify the JCL/scripts when used by different programmers or between test & production environments.

  2. We assume All JCL/PROCs/Parms (& COBOL programs & copybooks) have been transferred to unix/linux & stored somewhere accessible to team members (might be /home/mvstest2/testlibsALL/jcl0,proc0,parm0). If very large, team members might copy subsets/subsystems to /home/mvstest2/testlibs/jcl0,proc0,parm0 or to their homedirs $HOME/testlibs/jcl0,proc0,parm0.

  3. We assume enough DATA has been transferred to test a few JCLs selected for the initial training exercise or POC. The DATA files might be stored in /home/mvstest2/testdata/data/... or $HOME/testdata/data. If data files are very large they should not be in homedirs, but rather in a separate file system (such as /p2/apps/testdata/data).

  4. Note that initial JCL/script testing will probably discover problems in the JCL conversion (unique to the site), that can be corrected. Then we can re-convert all JCL to greatly reduce any manual changes that might be required in the vast majority of JCL/scripts yet to be tested.

  5. Conversion Team members can make a valuable contribution by discovering conversion problems & suggesting conversion enhancements to UV Software.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Overview of Conversion & Testing (continued)

  1. Team-members can continue to have their own set of testdata in their homedir/testdata/... to avoid conflicts while testing. Note that the data superdir is defined by environmental-variable 'RUNDATA' in .profile.

      export RUNDATA=$HOME/testdata           <-- for individual training/testing
      =============================
      export RUNDATA=/home/mvstest2/testdata  <-- for later serious testing
      ======================================
  1. You should have a clear understanding of the JCL conversion subdirs.
 jcl0 ------> jcl1 ----------> jcl2 -------------> jcl3 ------------> jcls
      cleanup      PROC expand      convert to ksh      manual copy 1 at a time
                                                        just before test/debug
  1. We convert all JCL automatically from original mainframe JCL in jcl0/... thru to jcl3/... Team members should copy JCL/scripts 1 at a time manually from jcl3/ to jcls/ just before ready to test/debug each JCL/script.

  2. This allows us to automatically reconvert the vast majority of the JCL as team members discover problems & suggest improvements that can be made to the JCL converter, without losing any extensive editing made to the JCL/scripts in jcls/...

  3. Note that converted scripts are executed from jcls/... which is in the PATH defined in the profiles, for example:

      export PATH=$PATH:$RUNLIBS/jcls
      ===============================
  1. Using $RUNLIBS makes it easy to change our execution library from homedirs to a common library, as explained above without ever having to modify JCL/scripts for different directories (or production vs test).
Note
  • Please re-read & understand this part 0 overview/plan before proceeding
    to the detailed operating instructions covered in the following parts.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

related links

This MVSJCLtest.htm will present the step by step operating instructions to convert & test your JCL/scripts. There are several other documents that give more examples & explanations that you may need to consult.


MVSJCL.htm - complete documentation for JCL conversion
- part 1 examples of JCL & converted scripts with explanations
- part 4 all aspects of mainframe conversion
- part 5 GDG files for unix provided by UV Software

MVSCOBOL.htm - mainframe COBOL conversions to Micro Focus COBOL on unix

MVSDATA.htm - Convert MVS EBCDIC Data to ASCII, preserving packed fields
- complete doc for high volume conversions

DATAcnv1.htm - Basic DATA conversion with samples & explanations
- conversion jobs generated from COBOL copybooks
- simpler procedures for 1 file at a time

install.htm - installation guide for Vancouver Utilities software package

ADMjobs.htm - Administration guide for Vancouver Utilities
- setting up users intending to use Vancouver Utilities
- profiles required (common profile for easier admin)
- setup 'appsadm' for application logging, cron scheduling, etc
- backups, console logging, unix tools

CNVaids.htm - Conversion Aids for mainframe applications on unix systems
- many handy scripts to make life easier on unix systems
- data file maintenance utilities for unix systems
  (to replace mainframe utilities)
- JCL & COBOL cross-references

uvsort.htm - Vancouver Utility replacement for mainframe SORT or SYNCSORT
- unix system sort can NOT sort mainframe type files that
  do not have LineFeeds, can NOT sort on packed fields, etc

uvcp.htm - Vancouver Utility replacement for IDCAMS, IEBGENER, etc
- JCL converter converts IDCAMS,IEBGENER,etc to 'uvcp'
- can select/delete records, reformat records, etc

uvcopy.htm - most powerful Vancouver Utility
- replace complex mainframe utilities (EASYTRIEVE,QUIKJOB,etc)

uvhd.htm - interactive data file investigation utiltiy
- displays records in 'vertical hexadecimal'
- great for mainframe type files with packed/binary data
- browse,search,update,select,print,etc
- most customer's favorite utility

uvhdcob.htm - similar to uvhd, and also shows COBOL copybook fieldnames
beside data field contents

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_1. MVS JCL test/demo conversions

Part 1 - Directories & Profiles for conversdion


1A1. Install Vancouver Utilities - brief review
(should already be installed following instructions in install.htm).
1A3. 'uvadm' homedir contents

1B1. profiles provided in /home/uvadm/env
- to be copied & modified in /home/appsadm/env
1B2.  profiles are vital to Unix/Linux & mainframe conversions
- split to 2 components for greater flexibility & reduced maintenance
  (stub_profile & common_profile)

1B3. RUNLIBS & RUNDATA determine PATHs to programs & DATA
- many advantages, scripts are portable
- can have multiple sets of Libraries & DATA on same machine

1C0. profile summary
- see listings at ADMjobs.htm#1C1 - 1C4
 'stub_profile' - modify & copy to user homedirs
- rename as .bash_profile for bash, .profile for ksh
- defines RUNLIBS as testlibs for programmers OR prodlibs for operators
- defines RUNDATA as testdata for programmers OR proddata for operators
 'common_profile' - called by 'stub_profile'
- defines search PATHs to libraries & data based on $RUNLIBS & $RUNDATA
'bashrc' - modify & copy to user homedirs
- rename as .bashrc (for bash), or .kshrc (for ksh)
- required for console logging to preserve aliases & umask

1C4. Recommended permissions for directories & files that must be shared
 by groups of programmers & opperators (as in mainframe conversions).
- 775 for directories, 664 for files, 002 umask in profiles
- programmers & operators in a common group (suggest 'apps')
- extending security to the group level

1D1. appsadm - Applications Administrator
- subdirs in appsadm homedir
- appsadm vs uvadm
1D2.  Setup 'appsadm' userid
1D3.  Setup 'appsadm' subdirs
- modify common_profile
1D4.  modify stub_profile_appsadm
1D5.  additional optional changes to stub profiles
 create _test & _prod versions of stub_profile
1D6.  Modify RUNLIBS & RUNDATA in _test & _prod stubs
1D7.  copy 'stub' profiles to homedirs
 copy .bashrc to homedirs

1E1. Directory & File-Design - Principles
1E2. RUNLIBS, RUNDATA,& CNVDATA - Concepts
1F1. directories for RUNLIBS & RUNDATA
RUNLIBS/RUNDATA = testlibs/testdata OR prodlibs/proddata

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1A1. ADMjobs.doc - Applications Administration for Unix/Linux

Install Vancouver Utilities - short version

The Vancouver Utilities should already have been installed frollowing the instructions in install.htm, but here is a much shortened version assuming Linux (see install guide for other unix O/S's).

setup uvadm Vancouver Utilities admin account


 #1. login as 'root'

 #2. groupadd apps        <-- setup group 'apps', if not already setup
     =============          - OR use whatever groupID you wish
                            - BUT see notes below in '-g apps' paragraph

 #3. useradd -m -g apps uvadm   <-- setup user 'uvadm'
     ========================

 #4. passwd uvadm        <-- setup password desired
     ============

 #5. exit (logout from root)

Download/Install Vancouver Utilities

This assumes UV Software has supplied you with a userid/password to download 'uvadm.zip' from the UV Software web site.


 #1, Login as 'uvadm' --> /home/uvadm

 #2. sftp uvsoft2@uvsoftware.ca  <-- Secure FTP userid 'uvsoft2'
     ==========================
 #2a. passwd --> xxxxxxx
 #2b. get uvadm.zip
 #2e. bye

 #3. unzip uvadm.zip
     ===============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1A2. Install Vancouver Utilities - short version

setup profile for uvadm


 #4. cp env/stub_profile .bash_profile  <-- copy rename for bash shell
     =================================

 #5. vi .bash_profile   <-- modify profile now or later ?
     ================     - see optional changes at '1D4'

 #5b. vi common_profile  <-- modify common profile now or later ?
      =================    - see optional changes at '1D4'

 #6. exit   <-- logout & back in to make new profile effective
     ====

 #7. Login uvadm --> /home/uvadm

After unzip, the stub_profiles & common profiles are available in /home/uvadm/env/ and you can copy the stub_profile over .bash_profile.

See profiles listed begining on page '1C0'. Note that the stub_profile (must be renamed as .bash_profile in homedir) calls the 'common_profile' from /home/uvadm/env/common_profile. A common_profile greatly reduces system admininstration since PATH's etc can be defined in 1 place for use by all users.

Only uvadm will call the common_profile from /home/uvadm. We will soon setup the 'appsadm' user & copy /home/uvadm/env/... to /home/appsadm. All other stub_profiles call the common_profile from /home/appsadm/env/common_profile. This allows you to install new versions of uvadm without disrupting the common_profile called by other users - Important since the common_profile usually is modified considerably depending on site requirements.

compiling Vancouver Utility C Programs


 #8. ccuvall LNX H64 uvlib64.a disamLNX64.a
     ======================================
     - compile Vancouver Utilities on Linux Intel 64 bit machine

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1A3. MVS JCL test/demo conversions

uvadm - Vancouver Utility home directory

 /home/uvadm
 :-----bin             <-- binaries (uvcopy,uvsort,etc) distros are RedHat Linux
 :-----ctl               - control files for various purposes
 :-----dat1              - test data files
 :-----doc               - Vancouver Utilities documentation (text)
 :-----dochtml           - documentation in HTML (same as on www.uvsoftware.ca)
 :-----env          <----- profiles for Unix/Linux users & administrators
 :-----hdr               - hdr files for C compiles
 :-----htmlcode          - merged into dochtml when text converted to HTML
 :-----lib               - libraries for C compiles (subfunctions,DISAM,etc)
 :-----mvstest         <-- test/demos for MVS JCL/COBOL mainframe conversions
 :     :-----...         - many subdirs omitted, see MVSJCL.htm
 :-----pf              <-- Parameter Files for uvcopy & uvqrpg
 :     :-----adm         - administrative jobs
 :     :-----demo        - demo jobs
 :     :-----IBM         - IBM mainframe conversion jobs
 :     :-----util        - utility jobs
 :-----sf              <-- Script Files
 :     :-----adm         - administrative scripts
 :     :-----demo        - demo scripts
 :     :-----IBM         - IBM mainframe conversion scripts
 :     :-----util        - utility scripts
 :-----sfun              - ksh functions used in converted JCL/scripts
 :                       - jobset51,jobend51,exportgen0,exportgen1,logmsg1,etc
 :-----src             <-- Vancouver Utilities C source code
 :-----srcf              - C source for various sub-functions
 :-----tf                - test files for various examples in doc
 :-----tmp               - tmp subdir (test/demo outputs)
 :-----vsetest         <-- test/demos for VSE JCL/COBOL mainframe conversions
 :     :-----...         - many subdirs omitted, see VSEJCL.htm

The profiles (listed on the following pages) are intended to be used with uvadm, appsadm, mvstest,& vsetest. You will need only minor changes to use for your programmers & operators.

The /home/uvadm sub-directories are illustrated here to clarify the procedures required should you find reasons to modify any of the Vancouver Utility scripts or uvcopy jobs or programs at your site.

Note that the uvadm subdirs for 'sf' (script files) & 'pf' (uvcopy parameter files) (or uvcopy jobs) are further sub-directoried as shown above, but there is no need for you to subdirectory sf & pf in appsadm or your homedir.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1B1. MVS JCL test/demo conversions

'profiles' provided in /home/uvadm/env

 /home/uvadm/env      <--- profiles provided here
 :-----stub_profile      - copy/rename to .profile (ksh) or .bash_profile (bash)
 :                       - defines RUNLIBS/RUNDATA for programmers & operators
 :-----common_profile    - common profile (called by stub_profile)
 :                         defines PATH's etc using $RUNLIBS/$RUNDATA
 /home/appsadm/env    <--- setup user 'appsadm' & copy from /home/uvadm/env/*
 :-----stub_profile      - customize & copy to homedirs .profile or .bash_profile
 :-----common_profile    - common profile (called by stub_profile)

Mainframe conversion sites should setup an application administrator userid 'appsadm', copy /home/uvadm/env/* to /home/appsadm/env,& customize profiles there depending on the locations of their libraries & data.

Do NOT customize profiles in /home/uvadm/env/... because they would be overwritten when a new version of Vancouver Utilities is installed.

We recommend the concept of 'stub' & 'common' profiles. The shell profile in each user's homedir is a 'stub' that calls 'common_profile' which are stored in /home/appsadm/env/...

  1. The supplied 'stub_profile' is copied to homedirs, renamed as '.bash_profile' for bash shell (Linux) & '.profile' for Korn shell (Unix), and then modified depending on whether the user is a programmer or operator. - defines RUNLIBS as testlibs for programmers OR prodlibs for operators - defines RUNDATA as testdata for programmers OR proddata for operators

  2. 'common_profile' then defines the 'PATH's using $RUNLIBS,$COBDIR,$UV,etc For example: export PATH=$PATH:$RUNLIBS/jcls (converted JCL/scripts). Defines software superdirs (uvadm, COBDIR, ORACLE_BASE, ORACLE_HOME, etc)

  3. '$RUNDATA' determines data-file locations indirectly as follows: $RUNDATA defines the superdir housing all data-files. All JCL/scripts call a common function 'jobset51' which changes directory to $RUNDATA (cd $RUNDATA). The JCL converter inserts jobset51 at the begining of all converted JCL/scripts and then addresses all data files relative to $RUNDATA.

Note that stub profiles must call 'common_profile' using '.' (dot execution), which means the 'export's made in the common_profile will still be effective on return to the users profile.

This system is a big advantage for any site with multiple users, it means the sysadmin can update common_profile once in 1 place & those changes are effective for all users.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1B2. MVS JCL test/demo conversions

Profiles are vital for Unix/Linux

Profiles are vital to the success of any Unix/Linux site and especially for sites converting from a mainframe. You can not find much practical advice on 'how to setup user profiles' in books or on the internet, so here are my methods which have been proven successful at over 50 conversion sites.

UV Software supplies the recommended profiles with the Vancouver Utilities, or you can save them from http://www.uvsoftware.ca/admjobs.htm#1C1 thru 1C6. BUT, before you try to use them, it is important to understand the concepts. I assume the reader has some basic understanding of profile functions.

The most important profile function is to define search 'PATH's to scripts, programs,& (indirectly) to data-files. Some other functions are to define aliases, terminal types,& to capture console logs.

Without direction, an inexperienced unix programmer would probably define everything (PATHs,aliases,etc) in the profile in his home directory. Then the 1st programmer's profile might be copied to the homedirs of other programmers working on the same system.

You can see a big problem developing - when they need to change search PATHs, etc, they would have to update the multiple profiles in the homedirs of all programmers & operators.

Here is a better system to overcome the problem described above, and to provide many other benefits described further below. The solution is to split the profile in 2 parts (stub_profile & common_profile).

stub_profile

common_profile

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1B3. profiles for Vancouver Utilities on Unix/Linux

RUNLIBS & RUNDATA determine PATHs to programs/scripts & data

The PATH to JCL/scripts depends on $RUNLIBS (testlibs or prodlibs), example:


 export PATH=$PATH:$RUNLIBS/jcls    <-- PATH to JCL/scripts (in common_profile)
 ===============================

'$RUNDATA' determines data-file locations indirectly as follows:

Advantages of stub_profile,& common_profile

The benefits of this system are HUGE:

  1. You never need to change JCL/scripts between TESTING & PRODUCTION.

  2. Programmers execute JCL/scripts from $TESTLIBS/jcls that access data from $TESTDATA/... because their profiles set RUNLIBS/RUNDATA as TESTLIBS/TESTDATA

  3. Operators execute JCL/scripts from $PRODLIBS/jcls that access data from $PRODDATA/... because their profiles set RUNLIBS/RUNDATA as PRODLIBS/PRODDATA

  4. This system could allow testing & production on the same machine. They are usually on separate machines, and this system provides great flexibility for both these situations.

  5. Different programmers can have their own set of TESTDATA simply by changing the definition of RUNDATA in their profile.

  6. On production machines, different operators could operate on different sets of data for different companies on the same machine, using the same JCL/scripts & COBOL programs with no changes required.

  7. The system administrator (appsadm) can make changes in 1 place to affect all users vs having to update profiles in all user homedirs.

  8. The sysadmin would control any updates to common_profile. On test systems the programmers would control updates to their stub_profile.

  9. Programmers have the flexibility required. They can select different sets of testdata by redefining RUNDATA in their profile

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1C0. profiles for Vancouver Utilities on Unix/Linux

Profile Summary


1C1. stub_profile - distributed in /home/uvadm/env/...
- copy (to user homedirs) & rename depending on the desired shell
  (.bash_profile for bash, .profile for ksh)
- modify RUNLIBS/RUNDATA differently for programmers or operators
- calls common_profile

1C2. common_profile - distributed in /home/uvadm/env/...
- defines search PATHs to libraries & data based on $RUNLIBS & $RUNDATA
  defined in the stub_profiles of programmers & operators
  (see suggested directory designs in ADMjobs.doc Part 3)
- allows updates in 1 place to affect all users
- modify TERM & 'stty erase' character depending on most common terminal
  (distribution has TERM=linux & stty erase '^?')

1C3. bashrc - 'rc file' distributed in /home/uvadm/env/...
- copy (to user homedirs) & rename depending on the desired shell
  (.bashrc for bash, .kshrc for ksh)
- master version supplied without the '.' for visibility
- required if you invoke another shell level (console logging script)
- carries aliases & umask which get lost on another shell level
- you should customize & store in /home/appsadm/env/...

See profile listings at ADMjobs.htm#1C0 or inspect at /home/uvadm/env/...

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1C1. profiles for Vancouver Utilities on Unix/Linux

stub_profile (.profile or .bash_profile)

 # stub_profile_short - stub_profile, short version for training guide
 #             - copy to user homedirs & rename as '.profile' or .bash_profile
 #             - stub_profile calls 'common_profile'
 #             - by Owen Townsend, Jan30/2012, Pune India
 #             - many #comments & less vital stuff omitted here
 #             - see full listing in ADMjobs.doc
 #             - or at www.uvsoftware.ca/admjobs.htm#1C1
 #
 # stub_profile - for users of Vancouver Utilities
 # - defines $RUNLIBS & $RUNDATA for common_profile, which uses them
 #   to define PATHs to libraries & data (test or production)
 #
 #                      ** TEST or PRODuction **
 #
 # export TESTPROD=P000   # P___ for PRODuction
 export TESTPROD=T000     # T___ for TEST
 #
 echo "Vancouver Utility profile for JCL,COBOL,& DATA conversions"
 ls -ld $HOME/*
 echo "$LOGNAME logging in, $HOME homedirs listed above"
 export SYS=POC  #<-- modify default SYStem here
 cnvdata=${SYS}cnvdata; rundata=${SYS}testdata; runlibs=${SYS}testlibs;
 echo "Defaults: cnvdata=$cnvdata, rundata=$rundata, runlibs=$runlibs"
 echo "enter null to accept default SYStem"
 echo "- or enter desired SYStem (P1A, POC, OLD)"
 read SYS
 if [[ -n "$SYS" ]]; then
    cnvdata=${SYS}cnvdata; rundata=${SYS}testdata; runlibs=${SYS}testlibs;
 fi
 #
 #           ** define RUNLIBS/RUNDATA & call common_profile **
 export CNVDATA=$HOME/$cnvdata
 export RUNDATA=$HOME/$rundata
 export RUNLIBS=$HOME/$runlibs
 #
 . /home/appsadm/env/common_profile   #<-- call from 'appsadm' for all users
 #=================================   #    (except uvadm distribution/install)
 #
 #              ** misc items that user may need an override **
 #
 # export TERM=linux       # TERM - modify depending on your terminal
 # stty erase '^?'         # erase char - modify depending on your terminal
 # stty intr '^C'          # interrupt ^C, (probably already default ?)
 # alias l='ls -l'         # save keystrokes on very often used commands
 # alias rm='rm -i'        # confirm removes (see more aliases in common_profile)
 # export UVLPDEST="-dlp0" # default destination for uvlp(uvlist) scripts
 #                         # change to a printer near you & un-comment
 #
 #                   ** Console Logging - optional **
 # - see full listing at www.uvsoftware.ca/admjobs.htm#1C1

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1C2. profiles for Vancouver Utilities on Unix/Linux

common_profile - called by stub_profile

 # common_profile_short - short version of common_profile
 #                - for listing in training guide MVSJCLtest.doc
 #                - by Owen Townsend, Jan30/2012, Pune India
 #                - many #comments & less vital stuff omitted here
 #                - see full listing in ADMjobs.doc
 #                - or at www.uvsoftware.ca/admjobs.htm#1C2
 #
 # common_profile - defines search PATHs based on $RUNLIBS & $RUNDATA
 #                  which must be defined in user's .profile or .bash_profile
 #                  before calling this commmon_profile
 #
 # stub_profile - copied to user homedirs & renamed as .profile or .bash_profile
 #              - defines RUNLIBS & RUNDATA before calling common_profile
 #              - stub_profile distributed in $UV/env contains following:
 #
 #     export RUNLIBS=$HOME/testlibs
 #     export RUNDATA=$HOME/testdata
 #     export CNVDATA=$HOME/cnvdata
 #     . /home/uvadm/env/common_profile   #<-- call this common_profile
 #     . /home/appsadm/env/common_profile #<-- should change uvadm to appsadm
 #
 #                  ** begin code for common_profile **
 #
 export UV=/home/uvadm           # UV homedir symbol used below
 export APPSADM=/home/appsadm    # site applications administrator
 export LOGDIR=$APPSADM          # console logging subdirs log1,log2,log3
 #
 # setup PATH for Vancouver Utilities programs & scripts (uvadm & appsadm)
 # - append onto system PATH, using symbols defined above ($UV, $APPSADM, etc)
 export PATH=$PATH:$HOME/bin:$HOME/sf:$APPSADM/bin:$APPSADM/sf:$RUNLIBS/sf
 export PATH=$PATH:$UV/bin:$UV/sf/adm:$UV/sf/demo:$UV/sf/util:$UV/sf/IBM
 export PATH=$PATH:/usr/sbin   # add system dir for sendmail
 #
 #----------------------------------------------------------------------------
 # setup 'PFPATH' for uvcopy & uvqrpg interpreter to find Parameter Files (jobs)
 export PFPATH=$RUNLIBS/pf,$RUNLIBS/pfx3,$RUNLIBS/ezts,$HOME/pf,$APPSADM/pf
 export PFPATH=$PFPATH,$UV/pf/adm,$UV/pf/demo,$UV/pf/util,$UV/pf/IBM
 # - use symbol $UV (defined above) to shorten PFPATH definition
 #
 #----------------------------------------------------------------------------
 # setup PATH & FPATH for JCL/scripts converted from mainframe Vancouver Utils
 # - see www.uvsoftware.ca/mvsjcl.htm or www.uvsoftware.ca/vsejcl.htm
 export PATH=$PATH:$RUNLIBS/jcls  # RUNLIBS defined in common_profile
 export FPATH=$APPSADM/sfun       # ksh functions used by VU JCL/scripts
 #
 #----------------------------------------------------------------------------
 # Indexed file extension controls for Vancouver Utilities
 export DISAMEXT="dat"  # .dat/.idx Indexed files for uvsort,uvcopy,uvcp,etc
 export ISDATEXT=".dat" #Apr14/10 - new way to control DISAM .dat extension
 #
 # printer destinations for VU laser printing scripts
 # - modify UVLPDEST to the network printer closest to you
 export UVLPDEST="-dlp0"       # default dest for uvlp(uvlist) scripts
 export UVLPOPTN="-onobanner"  # for unix/linux (SFU does not allow)
 export UVHDPRINT=uvlp12       # script for uvhd 'i' immediate print command
 export UVHDPWIDE=uvlp12L      # script for uvhd 'iprint' Landscape 100 chs/line
 export COBMAPDIR=$RUNLIBS/maps # for uvhdcob (display data with fieldnames)
 #
 #-------------------------------------------------------------------------
 # For Micro Focus COBOL Server Express
 # Morada RPG user requirements
 # - omitted for this short listing, see full list ADMjobs.doc#1C1
 #
 #-------------------------------------------------------------------------
 # define TERM & dependent 'erase' char
 # export TERM=linux         # TERM - modify depending on your terminal
 stty erase '^?'           # erase char - modify depending on your terminal
 # stty intr '^C'          # interrupt ^C, (probably already default ?)
 #-------------------------------------------------------------------------
 # Recommended items
 umask 002                     # permissions 775 dirs, 664 files
 set -o ignoreeof              # disallow logoff via ctl D (use exit)
 export HOST1=$(uname -n)      # add to PS1 prompt if desired
 trm=$(tty)                    # capture terminal device for PS1
 export trmv=${trm#/dev/}      # remove prefix /dev/
 export PS1='<@$HOST1:$LOGNAME:$PWD> '
 export EDITOR=vi              # for Korn shell history
 export VISUAL=vi              # for Korn shell history
 export HISTSIZE=1000;         # Korn shell history file size
 #-------------------------------------------------------------------------
 # alias commands to prompt for overwrite (highly recommended)
 # - use option '-f' when you have many files  (rm -f tmp/*, etc)
 alias rm='rm -i'              # confirm removes
 alias mv='mv -i'              # confirm renames
 alias cp='cp -i'              # confirm copy overwrites
 alias rmf='rm -f'             # force removes (no prompts)
 alias mvf='mv -f'             # force renames (no prompts)
 alias cpf='cp -f'             # force copies (no prompts)
 alias l='ls -l'               # save keystrokes
 alias grep='grep -n'          # ensure filename & line# on matching lines
 alias uname='uname -a'        # ensure -a on uname (All info)
 alias cduv='cd $UV'           # Vancouver Utilities
 alias cdl='cd $RUNLIBS'       # quick access to LIBS superdir
 alias cdd='cd $RUNDATA'       # DATA superdir
 alias cdc='cd $CNVDATA'       # data CONVERSION superdir
 alias cdk='cd $CMPDATA'       # data COMPARISON superdir
 alias cdb='cd $BACKUP'        # BACKUP superdir
 alias cdr='cd $RESTORE'       # RESTORE superdir
 #-------------------------------------------------------------------------
 # Verify that critical environmental variables have been defined
 # (by stub_profile or this common_profile)
 if [[ "$UV" = "" || "$APPSADM" = "" || "$COBDIR" = "" ]]; then
    echo "UV=$UV, APPSADM=$APPSADM,or COBDIR=$COBDIR not defined"
    echo "- enter to exit"; read $reply; exit 99; fi
 if [[ "$RUNLIBS" = "" || "$RUNDATA" = "" ]]; then
    echo "RUNLIBS=$RUNLIBS or RUNDATA=$RUNDATA not defined"
    echo "- enter to exit"; read $reply; exit 99; fi
 #------------------------- end of common_profile ---------------------------

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1C3. profiles for Vancouver Utilities on Unix/Linux

control-M stub.ini & common.ini

Also see stub.ini & common.ini, which replace the profiles when JCL/scripts scheduled by control-M. Control-M can not use the profiles which setup $RUNDATA & $RUNLIBS for programmers & live operators.

'stub.ini' is called on line 9 of all converted JCL/scripts. Note that 'stub.ini' is changed to 'system.ini' (xwo.ini, xpp.ini, etc) to match the the system to which this JCL/script belongs. Here is a sample line 9 call:


 . $APPSADM/env/xwo.ini
 ======================

The stub.ini's export the RUNDATA & RUNLIBS locations for that system, and call $APPSADM/env/common.ini to setup the PATHs to scripts & DATA.

Note that the line 9 call to 'stub.ini' does not interfere with programmer testing of the same JCL/scripts (no changes required) because programmer profiles export TESTPROD=T (Testing), whereas control-M profile exports TESTPROD=P (Production). stub.ini tests $TESTPROD & does nothing if TESTPROD=T.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1C4. profiles for Vancouver Utilities on Unix/Linux

permissions: directories 775 & files 664

The profiles set umask 002, which means the permissions will be 775 for directories & 664 for files, created by users of these profiles with umask 002.

Also be sure to assign a common group-ID (we suggest 'apps') to the programmers & operators who are working on a common set of directories & files (JCL, COBOL,& DATAfiles).

Unix normally defaults umask 022, which means subdirs would be 755 & files 644, which would not allow users to write in directories created by other members of the team.

Making umask 002 (dirs 775 files 664) & ensuring all team members in a common group allows team members to write into a common set of directories for JCL, COBOL,& DATA. We are in effect extending security to the group.

Be sure to copy .bashrc or .kshrc to the homedirs of anybody using console logging. Console-Logging is activated by uncommenting 9 '##' lines at bottom of stub_profile. The 'script' command invokes another level of the shell, which loses aliases & 'umask' set in the common_profile. .bashrc/.kshrc restores these aliases & umask.

permissions vital for nightly cron jobs

Nightly batch jobs could fail due to files with bad permisions or group. Nightly batch jobs are scheduled by a crontab owned by 'appsadm' (see crontabs in ADMjobs.htm#Part_5). Files with bad permissions might be FTP'd to the site or somebody may have used 'root' to copy a file & forgot to fix permissions.

See 'chmod_custom1' ADMjobs.htm#7B8 sample script that could be run before nightly batch jobs to ensure permissions on all data directories/files 775/664 & group 'apps'. You could also reset owner to 'appsadm' if you want to see who changed what files during the day (or reset owner more infrequently). This sample script has hard-coded directories & permissions for reliability. You would customize for your site.

Note that 'root' should be used only when necessary (fixing permissions, etc). It is too dangerous to run application scripts with root privileges. Of course the chmod_custom1 script must be scheduled by a root crontab, but all batch jobs would be scheduled by 'appsadm' crontabs. And appsadm shares group 'apps' with all operators & programmers who access the data files.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1D1. MVS JCL test/demo conversions

setup appsadm - Application Administrator

We recommend you setup a login/userid 'appsadm' to serve as the applications administrator for the unix/linux site. The appsadm home directory would hold various scripts, crontabs, log files, etc used in application administration. Here are some suggested sub-directories:

 /home/appsadm
 :------bin              - binaries for site developed/modified programs
 :--UV--ctl              - control files for converting JCL & COBOL & GDG files
 :--UV--env              - profiles copied from /home/uvadm/env/...
 :                         modify appropriately for your site
 :------log1             - console logging files (currently active)
 :      :-----user1        - sub-directoried by user login
 :      :-----user2,etc
 :------log2             - console logging files (for current month)
 :      :-----user1
 :      :-----user2,etc
 :------log3             - console logging files (for last month)
 :------logs             - console logs from nightly 'cron' scripts
 :
 :------pf             <-- uvcopy jobs developed/modified by site admin
 :------sf             <-- shell scripts developed/modified by appsadm
 :--UV--sfun           <-- functions for JCL/scripts (jobset51,exportgen0,etc)
 :------src              - source for any programs developed/modified by appsadm
 :------tmp
Note
  • 'UV' marks directories that must be copied from uvadm to appsadm
  • other subdirs are optinal & may remain empty initially

appsadm vs uvadm

Do not confuse 'appsadm' (applications administrator userid/login) with 'uvadm' (the Vancouver Utilities administrator userid/login). Please see the uvadm subdirs illustrated on page '1A3'.

One important purpose of appsadm is to hold the modified versions of control files, profiles, scripts & uvcopy jobs that you need to customize at your site. Copy files you need to change from /home/uvadm/... to /home/appsadm/... Do NOT copy yet, see copy commands on page '1D3' after subdir setup on '1D2'.

      cp  /home/uvadm/ctl/*   /home/appsadm/ctl
      cp  /home/uvadm/env/*   /home/appsadm/env
      cp  /home/uvadm/sfun/*  /home/appsadm/sfun

This protects you from losing your customized versions when you install a future new version of Vancouver Utilities, which would overwrite /home/uvadm.

Note that the recommended profile (listed previously) searches PATH & PFPATH of appsadm before uvadm, so any scripts & uvcopy jobs that you modify will be found before any of the original scripts/jobs.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1D2. appsadm - Applications Administrator

Create 'appsadm'

We will use 'useradd' (command line method) here, but you can use the GUI sysadm screen if you prefer. In any case you have to login as 'root' to setup a new user, but be sure to login as 'appsadm' before you setup the profile, make subdirs,& copy any files.


 #1. login as 'root'

 #2. groupadd apps        <-- setup group 'apps', if not already setup
     =============            (when uvadm was setup in install.htm)

 #3.  useradd -m -g apps -s /bin/bash appsadm   <-- setup user 'appsadm'
      =======================================
 #3a. useradd -m -d /export/home/appsadm -g apps -s /bin/bash appsadm
      ===============================================================
      - must specify '-d ...' homedir option for SUN Solaris

 #3a. passwd appsadm        <-- setup password desired
      ==============

'-m' is the option to create the home directory (/home/appsadm).

'-g apps' assigns the group. Assign it as you wish, but it is VERY important that you assign the same group as for uvadm, and the programmers, analysts, & other users who are going to use the Vancouver Utilities & share information on your UNIX system. This is also related to the recommended system permissions for file read/write/execute, which extends security to the 'group' level, using 'umask 002'.

'-s /bin/bash' specifies the 'bash' shell (the default on Linux systems). For Unix I recommend 'ksh' if 'bash' not available.

These shells are much superior to 'sh' (Bourne shell, default on some Unix systems). The 'history' feature of bash & ksh is a reason enough to upgrade.

The Korn shell is recommended for all scripts - 1st line is '#!/bin/ksh'. All scripts used in the installation procedures have been verified under ksh. The JCL converters create 'ksh' shells since they use some features that are lacking in the 'bash' shell. But 'bash' is easier to use as the login shell.

While you are still logged in as 'root', you might as well setup other user logins, you will require. For example if you plan on running the test/demos described in MVSJCL.htm or VSEJCL.htm, you will need to setup 'mvstest' or 'vsetest'.


 #4a. useradd -m -g apps -s /bin/bash mvstest   <-- for MVS JCL test/demos
      =======================================
 #4b. useradd -m -g apps -s /bin/bash prgmr1    <-- setup programmers ...
      ======================================
 #4c. useradd -m -g apps -s /bin/bash oper1     <-- setup operators ...
      =====================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1D3. appsadm - Applications Administrator

Setup 'appsadm'

Assuming that 'root' has already created the appsadm account, we will now setup subdirs, copy files from /home/uvadm,& modify as required.


 #1. login as 'appsadm' --> /home/appsadm

 #2a. mkdir bin ctl log1 log2 log3 logs pf sf sfun src tmp
      ====================================================
      - setup subdirs, see '1D1'

 #2b. mkdir log1/oper1 log2/oper1 log3/oper1 log1/oper2 log2/oper2 log3/oper2 etc
      =======================================================================
      - setup subdirs matching logins that will be using console logging

 #3. cp /home/uvadm/ctl/* ctl    <-- copy control files from uvadm to appsadm
     ========================

 #4. cp /home/uvadm/sfun/* sfun  <-- copy functions from uvadm to appsadm
     ==========================    - for JCL/scripts (jobset51,exportgen0,etc)

 #5. cp /home/uvadm/env/* env    <-- copy profiles from uvadm to appsadm
     =========================
     bashrc               - bash 'rc' aliases req'd if console logging
     kshrc                - rename as kshrc for Korn shell (vs bash shell)
     stub_profile         - stub profile (rename to .profile or .bash_profile)
                          - copy to /home/appsadm/env & modify
                          - modify RUNLIBS/RUNDATA for programmers & operators
     common_profile       - common profile (called by stub_profile)
                            defines PATH's etc using $RUNLIBS/$RUNDATA
     stub_profile_test    - could make diff versions for prgmrs & oprtrs
     stub_profile_prod    - for copying to homedirs of new users

Alternate directories for uvadm & appsadm

The profile defaults assume you will install uvadm & appsadm in /home/... but it is easy to change to other locations by modifying the definitions of $UV & $APPSADM in the common_profile.


 export UV=/home/uvadm        <-- default location for uvadm
 =====================
 export APPSADM=/home/uvadm   <-- default location for appsadm
 ==========================

If you modify these, then it is convenient to use $UV & $APPSADM instead of any hard-coded directory paths you see in this documentation. For example #3,#4,#5 above would become:


 #3a. cp /home/uvadm/ctl/* ctl    <-- copy control files from uvadm to appsadm
      ========================
 #4a. cp /home/uvadm/sfun/* sfun  <-- copy functions from uvadm to appsadm
      ==========================
 #5a. cp /home/uvadm/env/* env    <-- copy profiles from uvadm to appsadm
      =========================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1D4. appsadm - Applications Administrator

modify /home/appsadm/stub_profile

Note
  • these changes made only after copying profiles from uvadm to appsadm
  • original stub (uvadm) will be used only for uvadm, mvstest, vsetest
  • modified stub (appsadm) will be used for your programmers & operators
  • #5 above copied all profiles from /home/uvadm/env/* to /home/appsadm/env

 #6. vi env/stub_profile     <-- modify 'stub_profile' for your site
     ===================

 #6a. Modify stub_profile to call common_profile from appsadm (NOT from uvadm)
      Very important because new versions of uvadm would overwrite env/profiles
      Note common_profile is '.' dot executed by stub_profile as follows:

      . /home/uvadm/env/common_profile  #<-- as distributed in uvadm/env
      #=======*****===================

      . /home/appsadm/env/common_profile  #<-- call from 'appsadm' for all users
      #=======*******===================  #    (except uvadm distribution)

 #6b. Define RUNLIBS/RUNDATA for programmers & operators
      export RUNLIBS=$HOME/testlibs  #<-- initial values for training
      export RUNDATA=$HOME/testdata
      =============================
      export RUNLIBS=/p1/apps/testlibs #<-- later for conversion project
      export RUNDATA=/p2/apps/testdata

 #6c. Make any other changes you need to the stub profile before you copy it
      to the home dirs of your programmers & operators.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1D5. appsadm - Applications Administrator

modify $APPSADM/common_profile


 #7. vi env/common_profile             <-- modify for your site
     =====================

 #7a. change 'COBDIR' to wherever you installed Micro Focus COBOL
      - COBDIR defined in the supplied common_profile
      - as the default location for Micro Focus COBOL install which is:

      export COBDIR=/opt/microfocus/cobol
      ===================================

 #7b. Modify TERM & 'stty erase' character depending on user's terminal
       (distribution has TERM=linux & stty erase '^?')

       export TERM=linux    # TERM - modify depending on your terminal
       =================    # (vt100,xterm,at386,ansi,etc)

       stty erase '^?'      # erase char - modify depending on your terminal
       ===============      #  '^?' for linux/at386, '^H' for vt100,ansi,xterm

 #7c. Modify UVLPDEST to a central laser printer at your site.

       export UVLPDEST="-dlp0"     <-- change 'lp0' to your laser printer
       =======================
Note
  • TERM,erase,& UVLPDEST are defined initially only in the common_profile
  • as required users can redefine in their stub_profile
  • for example, users can define UVLPDEST to a printer near them

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1D6. appsadm - Applications Administrator

additional optional changes to stub profiles

For most unix/linux OS's I think you can simply copy the supplied stub_profile to user homedirs, overwriting the default .profile or .bash_profile that is created when you setup new users (via useradd or the GUI).

But if desired you could read in the default .profile or .bash_profile, at the begining of the VU supplied stub_profile, before copying to user homedirs.


 #10c. vi env/stub_profile        <-- additional optional? change
       ===================
       - read in the '.profile' from your OS (SUN,HP,AIX,etc)
         at the begining of the supplied stub_profile
       - write & quit

 #10d. Should not define 'COBDIR' in user profiles. COBDIR should be defined
       only in the 'common_profile', since there is usually no need to have
       different COBDIRs for different users. See #14 on '1D7'.

      export COBDIR=/opt/microfocus/cobol
      ===================================

#11. create _test & _prod versions of stub_profile

If you are performing JCL conversions, you will need different versions of the stub_profile for programmers & operators. It might be convenient to setup stub_profile_test & stub_profile_prod in /home/appsadm/env/... and then you can simply copy the appropriate version to the homedirs of your programmers & operators.

The main difference is the definition of RUNLIBS & RUNDATA which are intended to point to the 'test' or 'prod' libraries & data appropriate for the user (programmer or operator).


 #11. login appsadm --> /home/appsadm
      =============
      - we should already be in /home/appsadm with stub_profile in 'env'

 #11a. cp env/stub_profile env/stub_profile_test
       =========================================

 #11b. cp env/stub_profile env/stub_profile_prod
       =========================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1D7. appsadm - Applications Administrator

#12. Modify RUNLIBS & RUNDATA in _test & _prod stubs

The supplied stub_profile defines RUNLIBS/RUNDATA as follows:


 export RUNLIBS=$HOME/testlibs
 #============================
 export RUNDATA=$HOME/testdata
 #============================

These definitions work well for the JCL conversion test/demo jobs documented in MVSJCL.htm#Part_1, but you could modify for your serious conversions depending on where you plan to store your own JCLs, COBOLs, & Data files. For example:

export RUNLIBS=/p1/apps/testlibs <-- in stub_profile for programmers export RUNDATA=/p1/apps/testdata

export RUNLIBS=/p2/apps/testlibs <-- in stub_profile for operators export RUNDATA=/p2/apps/testdata

#13. copy 'stub' profiles to homedirs

If desired, you could setup master copies of the stub_profile for programmers & operators & copy them to the homedir of your programmers & operators, renaming as .bash_profile for bash (or .profile for ksh).


 #13a. cp env/stub_profile_test /home/prgmr1/.bash_profile
       ===================================================
       ... etc for other programmers ...

 #13b. cp env/stub_profile_prod /home/oper1/.bash_profile
       ==================================================
       ... etc for other operators ...

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1D8. appsadm - Applications Administrator

copy .bashrc/.kshrc to homedirs


 #14. cp env/bashrc /home/user1/.bashrc
      =================================
 #14a. cp env/kshrc /home/user1/.kshrc
       ===============================
      ... etc for other users (programmers & operators) ...

.bashrc/.kshrc should be copied to the homedirs of any programmers & operators who might use 'console logging' (see ADMjobs.htm#Part_6). Console logging is activated by uncommenting the 'script' command at the end of the profile. 'script' is another level of the shell which causes any 'aliases' & 'umask' in the profile to be lost.

See .bashrc/.kshrc listed at ADMjobs.htm#1C3. It contains the same aliases & umask as the common_profile (listed at ADMjobs.htm#1C2).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1E1. MVS JCL test/demo conversions

Directory & File-Design - Principles

  1. A good Directory Design is critical to the success of your conversion and to the future efficiency & flexibility of your unix/linux installation.

  2. The basic principle is to have multiple separate file systems and group your libraries & data into file systems in a manner that facilitates backup & restore. You can group libraries & data under super-directories (prodlibs,proddata,testlibs,testdata) that allow you to backup to multiple separate archives on tape & if necessary restore the desired archive without having to restore the entire tape (saving time & disc space).

  3. Separate file systems limit data corruption & protects against runaway programs. Runaway programs can fill up the Test Data file system without harming production data or libraries. Data directories can be very large & should be assigned to large file systems (library directories of programs & JCL are comparatively small).

  4. Testing & Production will probably be on separate machines, but this design allows them to be on 1 machine. You could also have different test libraries & data for different programmers

  5. This design follows good unix/linux principles. There are at least 3 or 4 levels of directories before files are assigned. This gives us more flexibility & better file protection.

  6. The design might allow for multiple related companies (aaco,bbco,ccco,etc), and/or multiple applications (apay,arcv,ordr,etc).

  7. Backup tapes are written as multiple archives. This makes it easy to recover systems separately. It is easy to have enough disc space to restore just the system in question & then retrieve desired files over to production data or libraries.

  8. On-disc backup is recommended for at least 1 day's data files & 2 days libraries. This is very convenient if you discover problems within 1 or 2 days. Programmers have the assurance that they can quickly recover from mistakes (rm *).

    RUNLIBS & RUNDATA

RUNLIBS & RUNDATA are the 2 critical environmental variables (defined in the profile of programmers & operators) that point to the appropriate Libraries & Data for Testing & Production (prodlibs/proddata or testlibs/testdata).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1E2. MVS JCL test/demo conversions

RUNLIBS, RUNDATA,& CNVDATA - Concepts

  1. RUNLIBS, RUNDATA,& CNVDATA are environmental variables (in the .profile of programmers & operators) that control access to JCL/scripts/programs & Data files.

  2. When programmers & operators enter JCL/script names to be executed, RUNLIBS (in the .profile) determines which Library directories are searched (Test or Production).

  3. When the JCL/script executes, RUNDATA determines which directories of Data files are accessed (Test data or Production data).

  4. CNVDATA is a convenience during conversion. $CNVDATA is coded in the conversion scripts so you can easily change locations just by changing your .profile.
Note
  • Most sites will have separate machines for Testing & production,
  • But RUNLIBS & RUNDATA are valuable constructs for the following reasons:
  1. RUNLIBS & RUNDATA mean you do not have to modify your JCL/scripts as you move them from testing machines to production machines. RUNLIBS & RUNDATA in the login .profiles supply the top-level portion of the pathnames to the Libraries & Data files.

  2. RUNLIBS & RUNDATA allow you to run various systems separately on the same machine. This is important if you want to maintain separate console logs for the various systems.

  3. RUNLIBS & RUNDATA allow you to control which operators can run which systems. Operators cannot run unauthorized systems, since their .profile PATH & RUNLIBS will not find the unauthorized JCL/scripts. Operators that need to run multiple systems would be provided with the multiple logins required. Terminal emulators make it easy to run the multiple sessions on 1 physical terminal.

  4. Dedicated logins can be used to enforce the tight control required for computer room batch shift operations. You might setup logins that match the system/application IDs. Examples might be apay,arcv,ordr for separate applications, or aaco,bbco,ccco,etc for separate companies.

  5. I suggest the above userids be used for your production operators. Your programmers would use their personal logins, but modify RUNLIBS & RUNDATA in their .profile as required for testing the various systems.

  6. The .profiles also include aliases (cdl,cdd,& cdc) which allow you to easily switch between the superdirs ($RUNLIBS,$RUNDATA,$CNVDATA).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

1F1. MVS JCL test/demo conversions

directories for RUNLIBS & RUNDATA

Environmental variables RUNLIBS/RUNDATA defined in profiles of programmers & operators could allow small sites to use 1 machine for testing & production (larger sites would use separate machines for testing & production).

 /home             <-- home directories
 :----uvadm          <-- Vancouver Utilities
 :    :-----...        - about 25 subdirs, see page '1A3'
 :----appsadm        <-- Applications Administrator
 :    :-----...        - about 10 subdirs, see page '1D1'
 :----prgmr1
 :----prgmr2,3,4,etc
 :----oper1
 :----oper2,3,4,etc
 /p1/apps            <---- /p1 file system mount point
 :-----testlibs        <-- RUNLIBS=$TESTLIBS=/p1/apps/testlibs
 :     :-----cbls        - COBOL programs
 :     :-----jcls        - JCL/scripts
 :     :---etc---        - see other subdirs at ADMjobs.htm#2C1
 :-----testdata      <---- RUNDATA=$TESTDATA=/p1/apps/testdata
 :     :-----data        - data files (or use topnodes as subdirs)
 :     :-----jobtmp      - job temporary files
 :     :---etc---        - see other subdirs at ADMjobs.htm#2C2
 /p2/apps            <---- /p2 file system mount point
 :-----prodlibs        <-- RUNLIBS=$PRODLIBS=/p2/apps/prodlibs
 :     :-----cbls        - COBOL programs (production)
 :     :-----jcls        - JCL/scripts (production)
 :     :---etc---
 :-----proddata
 :     :-----data        - data files (or use topnodes as subdirs)
 :     :-----jobtmp      - job temporary files
 /p3/apps            <---- /p3 file system mount point
 :-----backup            - backup & restore directories
 :-----restore
 /p4/apps            <---- /p4 file system mount point
 :-----cnvdata           - data conversion directories
 :     :----d1ebc        - EBCDIC data files from mainframe
 :     :----d2asc        - converted to ASCII (preserving packed)

RUNLIBS/RUNDATA = testlibs/testdata OR prodlibs/proddata

RUNLIBS & RUNDATA are assigned in the profiles, which were discussed & listed begining on page '1C0. 'stub_profile's should define RUNLIBS & RUNDATA for use by the 'common_profile' as shown below:

      export RUNLIBS=/p1/apps/testlibs  <-- stub_profile_test for programmers
      export RUNDATA=/p1/apps/testdata
      export RUNLIBS=/p2/apps/prodlibs  <-- stub_profile_prod for operators
      export RUNDATA=/p2/apps/proddata

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_2 MVS JCL test/demo conversions

Part 2 - Sample JCL/script Conversions


2A1. JAR100.jcl - simple 1 step JCL calling COBOL program to create report
2A2. jar100.ksh - Korn shell equivalent calling Micro Focus COBOL

2B1. JAR200.jcl - 2 step JCL calling SORT & COBOL program
2B2. jar200.ksh - Korn shell calling uvsort & MF cobol

2C1. JGL100.jcl - 1 step JCL/PROC/COBOL using GDG files
2C2. jgl100.ksh - demo 'exportgen' functions replacing mainframe GDG

2D1. JGL200.jcl - 2 step JCL/PROC/COBOL using GDG files
2D2. jgl200.ksh - demo 'exportgen' functions replacing mainframe GDG

2E1. JGL300.jcl - 2 step JCL calling IEBGENER & IDCAMS with COND's
2E2. jgl300.ksh - ksh with 'uvcp' replacements & COND/if's

2F1. JGL320.jcl - 2 step JCL IEBGENER & IDCAMS with IF/THEN/ENDIF
2F2. jgl320.ksh - ksh with 'uvcp' replacements & if/then/fi

2G1. FTPPUT1.jcl - JCL to demo FTP conversion
2G2. ftpput1.ksh - ksh equivalent

2H1. MAILSMTP.jcl - JCL demo IEBGENER with SMTP MAIL
2H2. mailsmtp.ksh - ksh conversion to sendmail

2I1. QJTLIST.jcl - JCL demo QuikJob conversion (QuikJob code in parms module)
2I2. qjtlist.ksh - ksh converted script calling uvcopy

2J1. EZTLIST.jcl - JCL demo EasyTrieve conversion (code in parms module)
2J2. eztlist.ksh - ksh converted script calling uvcopy

Notes re JCL/ksh conversion demos

  1. This MVSJCLtest.htm#Part_2 lists a few of the JCL/ksh sample conversions illustrated & explained in detail at MVSJCL.htm#Part_1


    2. Part_3 of this MVSJCLtest.doc will show you how to setup, convert,&
    execute these JCL/scripts. You can compare your results to the console
    logs & reports listed in Part_3.
  2. In the JCL/ksh listings below, we have inserted a line sequence# for reference by the explanations in MVSJCL.htm#Part_1

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2A1. Sample JCL/scripts to demo Test procedures

JAR100.jcl

 j#001 //JAR100   JOB  'TEST MVS2UNIX CONVERSION',DATE=20080323
 j#002 //* CUSTOMER NAME & ADDRESS LIST (WITH DATE & RPT HDNGS)
 j#003 //STEP010  EXEC PGM=CAR100,PARM=2008
 j#004 //CUSTMAS  DD DSN=AR.CUSTOMER.MASTER,DISP=SHR
 j#005 //NALIST   DD DSN=AR.CUSTOMER.NAMEADRS.LIST100,DISP=(,CATLG,DELETE),
 j#006 //            UNIT=DISK,SPACE=(TRK,(25,25),RLSE),
 j#007 //            DCB=(MODEL.DSCB,LRECL=133,BLKSIZE=6118,RECFM=FBA)

2A2. jar100.ksh

 k#001 #!/bin/ksh
 k#002 ##JAR100   JOB  'TEST MVS2UNIX CONVERSION',DATE=20080323
 k#003 export JOBID2=JAR100 jobid2=jar100; scriptpath="$0"; args="$*"
 k#004 if [[ -z "$JOBID1" ]]; then export JOBID1=$JOBID2; fi
 k#005 for arg in $args; do if [[ "$arg" == *=* ]]; then export $arg; fi; done
 k#006 integer JCC=0 SCC=0 LCC=0  # init step status return codes
 k#007 autoload jobset51 jobset52 jobend51 jobabend51 logmsg1 logmsg2 stepctl51
 k#008 autoload exportfile exportgen0 exportgen1 exportgenall exportgenx
 k#009 . $APPSADM/env/stub.ini  #<-- for control-M (see notes in env/stub.ini)
 k#010 jobset51  # call function for JCL/script initialization
 k#011 goto
 k#012 S0000=A
 k#013 # * CUSTOMER NAME & ADDRESS LIST (WITH DATE & RPT HDNGS)
 k#014 #1======================= begin step#S0010 CAR100 ========================
 k#015 S0010=A
 k#016 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#017 goto
 k#018 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#019 logmsg2 "******** Begin Step $JSTEP car100 (#$XSTEP) ********"
 k#020 ##STEP010  EXEC PGM=CAR100,PARM=2008
 k#021 export PROGID=car100
 k#022 export PARM="2008"
 k#023 exportfile  CUSTMAS data/ar.customer.master
 k#024 exportfile  NALIST data/ar.customer.nameadrs.list100
 k#025 exportfile SYSOUT $SYOT/${JOBID2}_${JSTEP}_SYSOUT
 k#026 logmsg2 "Executing--> cobrun $ANIM $RLX/car100"
 k#027 #3----------------------------------------------------------------------
 k#028 cobrun $ANIM $RLX/car100
 k#029 #4----------------------------------------------------------------------
 k#030 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#031 if ((S0010C != 0))
 k#032    then logmsg2 "ERR: step#$JSTEP car100 abterm $SCC"
 k#033    alias goto="<<S9900=A"; fi
 k#034 goto
 k#035 #8======================================================================
 k#036 S9000=A
 k#037 jobend51 #move any GDG files from jobtmp/GDG/subdirs to RUNDATA/subdirs
 k#038 logmsg2 "JobEnd=Normal, StepsExecuted=$XSTEP, LastStep=$JSTEP"
 k#039 exit 0 #ver:20120208 a1b2c0d1e2f3g1i1j0k3l40m4n3o0p0r0s0t1u1v3w0x0y1z0
 k#040 #9======================================================================
 k#041 S9900=A
 k#042 logmsg2 "JobEnd=AbTerm, JCC=$JCC,StepsX/L=$XSTEP/$JSTEP" RV ACK
 k#043 jobabend51 #report GDGs NOT moved from jobtmp/GDG/subdirs to outdirs
 k#044 exit $JCC

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Notes re JCL/ksh samples

  1. See detailed explanations in separate document starting at MVSJCL.htm#1C1.

  2. The 1st 12 & last 10 lines of each converted script are the same, except for JCL/script name. These lines will be omitted from subsequent listings.

  3. 'jobset51' (called on line 10 of each converted JCL/script) is a very important setup function. jobset51 makes these scripts work (without changes) in different locations for different programmers, operators, schedulers. jobset51 changes to $RUNDATA, data super-directory defined in the profile. jobset51 uses $RUNLIBS to access the programs called by the scripts. jobset51 sets up subdirs for temporary files, such as new GDGs to be restored at successsful EOJ. More explanation starting at MVSJCL.htm#1C4.

  4. See other jar100 explanations starting at MVSJCL.htm#1C9 thru 1C14. (DD to exportfile, EXEC to cobrun, testing COBOL return code & abort if bad)

 #5. joblog jar100.ksh <-- execute & capture log in $RUNDATA/joblog/jar100.log
     =================   - see joblog on page '3M1'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2B1. Sample JCL/scripts to demo Test procedures

JAR200.jcl

 j#001 //JAR200   JOB  (1234),'TEST/DEMO MVS JCL CONVERT'
 j#002 //* SORT AR.SALES.ITEMS BY PRODUCT CODE FOR LISTING
 j#003 //STEP010  EXEC PGM=SORT,REGION=2048K
 j#004 //SORTIN   DD DSN=AR.SALES.ITEMS,DISP=SHR
 j#005 //SORTOUT  DD DSN=&&TEMPSLS,DISP=(NEW,PASS),
 j#006 //            DCB=(LRECL=64,BLKSIZE=6400,RECFM=FB),
 j#007 //            SPACE=(TRK,(50,50),RLSE),UNIT=DISK
 j#008 //SYSIN    DD *
 j#009 SORT FIELDS=(31,6,CH,A,1,6,CH,A)
 j#010 OMIT COND=((11,2,CH,EQ,C'65'),OR,(COND=(11,2,CH,EQ,C'85'))
 j#011 /*
 j#012 /=* LIST AR.SALES.ITEMS IN PRODUCT CODE SEQUENCE
 j#013 //*============================ step# 0020 ============================
 j#014 //STEP020  EXEC PGM=CAR200,COND=(4,LT,STEP010),PARM=2006
 j#015 //SALEDTL  DD DSN=&&TEMPSLS,DISP=(OLD,PASS)
 j#016 //CUSTMAS  DD DSN=AR.CUSTOMER.MASTER.INDEXED,DISP=SHR
 j#017 //SALELST  DD DSN=AR.SALES.LIST,DISP=(,CATLG,DELETE),
 j#018 //            UNIT=DISK,SPACE=(TRK,(25,25),RLSE),
 j#019 //            DCB=(MODEL.DSCB,LRECL=133,BLKSIZE=6118,RECFM=FBA)

2B2. jar200.ksh

Note
  • 1st 12 & last 10 lines of converted script omitted (same as for jar100).

 k#013 # * SORT AR.SALES.ITEMS BY PRODUCT CODE FOR LISTING
 k#014 #1======================= begin step#S0010 SORT ========================
 k#015 S0010=A
 k#016 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#017 goto
 k#018 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#019 logmsg2 "******** Begin Step $JSTEP sort (#$XSTEP) ********"
 k#020 ##STEP010  EXEC PGM=SORT,REGION=2048K
 k#021 export PROGID=sort
 k#022 export PARM=""
 k#023 exportfile  SORTIN1 data/ar.sales.items
 k#024 exportfile  SORTOUT $JTMP/__tempsls
 k#025 exportfile SYSIN $JTMP/${JSTEP}_${PROGID}_SYSIN
 k#026 cat > $SYSIN <</*
 k#027 SORT FIELDS=(31,6,CH,A,1,6,CH,A)
 k#028 OMIT COND=((11,2,CH,EQ,C'65'),OR,(COND=(11,2,CH,EQ,C'85'))
 k#029 /*
 k#030 logmsg2 "Executing--> uvsort \"fili1=$SORTIN1,typ=RSF,rcs=64,filo1=$SORT..."
 k#031 #3----------------------------------------------------------------------
 k#032 uvsort "fili1=$SORTIN1,typ=RSF,rcs=64,filo1=$SORTOUT,typ=RSF,rcs=64\
 k#033 ,keys=(30,6,c,a,0,6,c,a),del1=10(2c):65,del1=10(2c):85"
 k#034 #4----------------------------------------------------------------------
 k#035 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#036 if ((S0010C != 0)) #need to modify for COND step S0020
 k#037    then logmsg2 "ERR: step#$JSTEP sort abterm $SCC"
 k#038    alias goto="<<S9900=A"; fi
 k#039 goto
 k#040 #/=* LIST AR.SALES.ITEMS IN PRODUCT CODE SEQUENCE
 k#041 #1======================= begin step#S0020 CAR200 ========================
 k#042 if ((S0010C >  4)); then   # COND=(4,LT,STEP010)
 k#043     alias goto="<<S9000=A"; fi
 k#044 goto
 k#045 S0020=A
 k#046 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#047 goto
 k#048 export JSTEP=S0020; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#049 logmsg2 "******** Begin Step $JSTEP car200 (#$XSTEP) ********"
 k#050 ##STEP020  EXEC PGM=CAR200,COND=(4,LT,STEP010),PARM=2006
 k#051 export PROGID=car200
 k#052 export PARM="2006"
 k#053 exportfile  SALEDTL $JTMP/__tempsls
 k#054 exportfile  CUSTMAS data/ar.customer.master.indexed
 k#055 exportfile  SALELST data/ar.sales.list
 k#056 logmsg2 "Executing--> cobrun $ANIM $RLX/car200"
 k#057 #3----------------------------------------------------------------------
 k#058 cobrun $ANIM $RLX/car200
 k#059 #4----------------------------------------------------------------------
 k#060 LCC=$?; S0020C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0020R=1; alias goto="";
 k#061 if ((S0020C != 0))
 k#062    then logmsg2 "ERR: step#$JSTEP car200 abterm $SCC"
 k#063    alias goto="<<S9900=A"; fi
 k#064 goto
Note
  • See jar200 explanations starting at MVSJCL.htm#1D1 thru 1D4.
  • SORT FIELDS converted to uvsort keys, OMITs converted to selects

 joblog jar200.ksh <-- execute & capture log in $RUNDATA/joblog/jar200.log
 =================   - see joblog on page '3M2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2C1. Sample JCL/scripts to demo Test procedures

JGL100.jcl

 J#001 //JGL100   JOB  (1234),'LIST GL MASTER CHART OF ACCOUNTS'         00000010
 J#002 //* MVS JCL CONVERSION DEMO - PROCs & GDG files                   00000020
 J#003 //STEPA    EXEC PGL100,HLQ=GL,YEAREND=2003                        00000030

PGL100.proc

 P#001 //PGL100   PROC HLQ=GL,YEAREND=2002                               00000010
 P#002 //* LIST G/L CHART OF ACCOUNTS FROM ACCOUNT.MASTER                00000020
 P#003 //STEP010  EXEC PGM=CGL100,REGION=1024K,PARM=&YEAREND             00000030
 P#004 //ACCTMAS  DD DSN=&HLQ..ACCOUNT.MASTER(0),DISP=SHR                00000040
 P#005 //ACTLIST  DD DSN=&HLQ..ACCOUNT.ACNTLIST(+1),                     00000050
 P#005 //            DISP=(,CATLG,DELETE),                               00000060
 P#006 //            UNIT=DISK,SPACE=(TRK,(25,25),RLSE),                 00000070
 P#007 //            DCB=(MODEL.DSCB,LRECL=133,BLKSIZE=6118,RECFM=FBA)   00000080
 P#008 //SYSOUT   DD SYSOUT=*                                            00000090
Note
  • PROCs expanded jcl0/JGL100.jcl + procs/PGL100 --> jcl2/jgl100.jcl

jgl100.jcl

 j#001 //JGL100   JOB  (1234),'LIST GL MASTER CHART OF ACCOUNTS'
 j#002 //* MVS JCL CONVERSION DEMO - PROCs & GDG files
 j#003 //*
 j#004 ##STEPA    EXEC PGL100,HLQ=GL,YEAREND=2003                    #<-PROC1call
 j#005 //PGL100   PROC HLQ=GL,YEAREND=2002
 j#006 //*
 j#007 //STEPA    EXEC PGL100,HLQ=GL,YEAREND=2003                    #<-PROC1exp
 j#008 //* LIST G/L CHART OF ACCOUNTS FROM ACCOUNT.MASTER
 j#009 //STEPA  EXEC PGM=CGL100,REGION=1024K,PARM=&YEAREND
 j#010 //ACCTMAS  DD DSN=GL.ACCOUNT.MASTER(0),DISP=SHR
 j#011 //ACTLIST  DD DSN=GL.ACCOUNT.ACNTLIST(+1),DISP=(,CATLG,DELETE),
 j#012 //            UNIT=DISK,SPACE=(TRK,(25,25),RLSE),
 j#013 //            DCB=(MODEL.DSCB,LRECL=133,BLKSIZE=6118,RECFM=FBA)
 j#014 //SYSOUT   DD SYSOUT=*

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2C2. jgl100.ksh

 k#013 # * MVS JCL CONVERSION DEMO - PROCs & GDG files
 k#014 ##STEPA    EXEC PGL100,HLQ=GL,YEAREND=2003                    #<-PROC1call
 k#015 ##PGL100   PROC HLQ=GL,YEAREND=2002
 k#016 HLQ="GL";YEAREND="2002";
 k#017 ##STEPA    EXEC PGL100,HLQ=GL,YEAREND=2003                    #<-PROC1exp
 k#018 HLQ="GL";YEAREND="2003";
 k#019 # * LIST G/L CHART OF ACCOUNTS FROM ACCOUNT.MASTER
 k#020 #1======================= begin step#S0010 CGL100 ========================
 k#021 S0010=A
 k#022 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#023 goto
 k#024 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#025 logmsg2 "******** Begin Step $JSTEP cgl100 (#$XSTEP) ********"
 k#026 ##STEPA  EXEC PGM=CGL100,REGION=1024K,PARM=&YEAREND
 k#027 export PROGID=cgl100
 k#028 export PARM="2003"
 k#029 exportgen0 0 ACCTMAS data/gl.account.master_
 k#030 exportgen1 +1 ACTLIST $JGDG/data/gl.account.acntlist_
 k#031 #exportgen1 $JGDG/subdir/tempfiles restored to outdir at Normal EOJ
 k#032 exportfile SYSOUT $SYOT/${JOBID2}_${JSTEP}_SYSOUT
 k#033 logmsg2 "Executing--> cobrun $ANIM $RLX/cgl100"
 k#034 #3----------------------------------------------------------------------
 k#035 cobrun $ANIM $RLX/cgl100
 k#036 #4----------------------------------------------------------------------
 k#037 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#038 if ((S0010C != 0))
 k#039    then logmsg2 "ERR: step#$JSTEP cgl100 abterm $SCC"
 k#040    alias goto="<<S9900=A"; fi
 k#041 goto
Note
  • See jgl100 explanations starting at MVSJCL.htm#1E1 thru 1E4.
  • PROCs expanded, GDG files converted to exportgen0/exportgen1 functions

 joblog jgl100.ksh <-- execute & capture log in $RUNDATA/joblog/jgl100.log
 =================   - see joblog on page '3M3'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2D1. Sample JCL/scripts to demo Test procedures

JGL200.jcl

 j#001 //JGL200   JOB  (1234),'TEST/DEMO MVS JCL CONVERSION'
 j#002 //* SORT TRANSACTIONS & UPDATE GL ACCOUNT MASTER
 j#003 //* - demo GDG processing, write gltrans(+1) & read back as (+1)
 j#004 //*
 j#005 ##STEPA    EXEC PGL200,HLQ=GL,YEAREND=2003                    #<-PROC1call
 j#006 //PGL200   PROC HLQ=GL,YEAREND=2002
 j#007 //*
 j#008 //STEPA    EXEC PGL200,HLQ=GL,YEAREND=2003                    #<-PROC1exp
 j#009 //* SORT GL TRANSACTIONS BEFORE UPDATING ACCOUNT MASTER
 j#010 //STEPA  EXEC PGM=SORT,REGION=2048K
 j#011 //SORTIN   DD DSN=GL.ACCOUNT.TRAN1,DISP=OLD
 j#012 //SORTOUT  DD DSN=GL.ACCOUNT.TRANS(+1),DISP=(,CATLG,DELETE),
 j#013 //            DCB=(LRECL=80,BLKSIZE=8000,RECFM=FB),
 j#014 //            SPACE=(TRK,(50,50),RLSE),UNIT=DISK
 j#015 //SYSIN    DD DSN=GL.PARMS(PGL200S1)
 j#016 /=* UPDATE ACCOUNT.MASTER WITH TRANSACTION DETAIL
 j#017 //*============================ step# 0020 ============================
 j#018 //STEP020  EXEC PGM=CGL200,COND=(4,LT,STEP010),PARM=&YEAREND
 j#019 //GLTRANS  DD DSN=GL.ACCOUNT.TRANS(+1),DISP=OLD
 j#020 //GLMSOLD  DD DSN=GL.ACCOUNT.MASTER(0),DISP=OLD
 j#021 //GLMSNEW  DD DSN=GL.ACCOUNT.MASTER(+1),DISP=(,CATLG,DELETE),
 j#022 //            UNIT=DISK,SPACE=(TRK,(50,50),RLSE),
 j#023 //            DCB=(MODEL.DSCB,LRECL=80,BLKSIZE=6118,RECFM=FBA)

2D2. jgl200.ksh

 k#013 # * SORT TRANSACTIONS & UPDATE GL ACCOUNT MASTER
 k#014 # * - demo GDG processing, write gltrans(+1) & read back as (+1)
 k#015 ##STEPA    EXEC PGL200,HLQ=GL,YEAREND=2003                    #<-PROC1call
 k#016 ##PGL200   PROC HLQ=GL,YEAREND=2002
 k#017 HLQ="GL";YEAREND="2002";
 k#018 ##STEPA    EXEC PGL200,HLQ=GL,YEAREND=2003                    #<-PROC1exp
 k#019 HLQ="GL";YEAREND="2003";
 k#020 # * SORT GL TRANSACTIONS BEFORE UPDATING ACCOUNT MASTER
 k#021 #1======================= begin step#S0010 SORT ========================
 k#022 S0010=A
 k#023 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#024 goto
 k#025 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#026 logmsg2 "******** Begin Step $JSTEP sort (#$XSTEP) ********"
 k#027 ##STEPA  EXEC PGM=SORT,REGION=2048K
 k#028 export PROGID=sort
 k#029 export PARM=""
 k#030 exportfile  SORTIN1 data/gl.account.tran1
 k#031 exportgen1 +1 SORTOUT $JGDG/data/gl.account.trans_
 k#032 #exportgen1 $JGDG/subdir/tempfiles restored to outdir at Normal EOJ
 k#033 exportfile  SYSIN $RUNLIBS/parms/pgl200s1
 k#034 #2-------------------------- parms/pgl200s1 ---------------------------
 k#035 # SORT FIELDS=(1,8,CH,A,69,12,CH,A)
 k#036 logmsg2 "Executing--> uvsort \"fili1=$SORTIN1,typ=RSF,rcs=80,filo1=$SORT..."
 k#037 #3----------------------------------------------------------------------
 k#038 uvsort "fili1=$SORTIN1,typ=RSF,rcs=80,filo1=$SORTOUT,typ=RSF,rcs=80\
 k#039 ,keys=(0,8,c,a,68,12,c,a)"
 k#040 #4----------------------------------------------------------------------
 k#041 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#042 if ((S0010C != 0)) #need to modify for COND step S0020
 k#043    then logmsg2 "ERR: step#$JSTEP sort abterm $SCC"
 k#044    alias goto="<<S9900=A"; fi
 k#045 goto
 k#046 #/=* UPDATE ACCOUNT.MASTER WITH TRANSACTION DETAIL
 k#047 #1======================= begin step#S0020 CGL200 ========================
 k#048 if ((SCC >  4)); then   # COND=(4,LT,STEP010)
 k#049     alias goto="<<S9000=A"; fi
 k#050 goto
 k#051 S0020=A
 k#052 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#053 goto
 k#054 export JSTEP=S0020; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#055 logmsg2 "******** Begin Step $JSTEP cgl200 (#$XSTEP) ********"
 k#056 ##STEP020  EXEC PGM=CGL200,COND=(4,LT,STEP010),PARM=&YEAREND
 k#057 export PROGID=cgl200
 k#058 export PARM="2003"
 k#059 exportgen1 +1 GLTRANS $JGDG/data/gl.account.trans_
 k#060 #exportgen1 $JGDG/subdir/tempfiles restored to outdir at Normal EOJ
 k#061 exportgen0 0 GLMSOLD data/gl.account.master_
 k#062 exportgen1 +1 GLMSNEW $JGDG/data/gl.account.master_
 k#063 logmsg2 "Executing--> cobrun $ANIM $RLX/cgl200"
 k#064 #3----------------------------------------------------------------------
 k#065 cobrun $ANIM $RLX/cgl200
 k#066 #4----------------------------------------------------------------------
 k#067 LCC=$?; S0020C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0020R=1; alias goto="";
 k#068 if ((S0020C != 0))
 k#069    then logmsg2 "ERR: step#$JSTEP cgl200 abterm $SCC"
 k#070    alias goto="<<S9900=A"; fi
 k#071 goto

 joblog jgl200.ksh <-- execute & capture log in $RUNDATA/joblog/jgl200.log
 =================   - see joblog on page '3M4'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2E1. Sample JCL/scripts to demo Test procedures

JGL300.jcl

 j#001 //JGL300   JOB  (1234),'TEST MVS JCL CONVERSION'
 j#002 //* DEMO CONVERSION OF IEBGENER (TO UVCP) & IDCAMS (TO CP)
 j#003 //* COPY GL.ACCOUNT.MASTER TO A TEMP/WORK FILE & BACK (GEN# +1)
 j#004 //* - demos CONDition code testing (also see JGL320 IF/THEN/ENDIF)
 j#005 //STEP010  EXEC PGM=IEBGENER
 j#006 //SYSUT1   DD   DSN=GL.ACCOUNT.MASTER(0),DISP=SHR
 j#007 //SYSUT2   DD   DSN=&&TEMPGLM,DISP=(NEW,PASS),DCB=(LRECL=80)
 j#008 /=*
 j#009 //*============================ step# 0020 ============================
 j#010 //STEP020  EXEC PGM=IDCAMS,COND=(4,LT,STEP010)
 j#011 //TEMPGLM  DD   DSN=&&TEMPGLM,DISP=(OLD,PASS)
 j#012 //ACNTMAS  DD   DSN=GL.ACCOUNT.MASTER(+1),DISP=(NEW,CATLG),LRECL=80
 j#013 //SYSIN    DD   *
 j#014   REPRO INFILE(TEMPGLM) OUTFILE(ACNTMAS) RECORDSIZE(80)
 j#015 /*

2E2. jgl300.ksh

 k#013 # * DEMO CONVERSION OF IEBGENER (TO UVCP) & IDCAMS (TO CP)
 k#014 # * COPY GL.ACCOUNT.MASTER TO A TEMP/WORK FILE & BACK (GEN# +1)
 k#015 # * - demos CONDition code testing (also see JGL320 IF/THEN/ENDIF)
 k#016 #1======================= begin step#S0010 IEBGENER ========================
 k#017 S0010=A
 k#018 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#019 goto
 k#020 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#021 logmsg2 "******** Begin Step $JSTEP iebgener (#$XSTEP) ********"
 k#022 ##STEP010  EXEC PGM=IEBGENER
 k#023 export PROGID=iebgener
 k#024 export PARM=""
 k#025 exportgen0 0 SYSUT1 data/gl.account.master_
 k#026 exportfile  SYSUT2 $JTMP/__tempglm
 k#027 logmsg2 "Executing--> uvcp \"fili1=$SYSUT1,typ=RSF,rcs=80,filo1=$SYSUT2,..."
 k#028 #3----------------------------------------------------------------------
 k#029 uvcp "fili1=$SYSUT1,typ=RSF,rcs=80,filo1=$SYSUT2,typ=RSF,rcs=80"
 k#030 #4----------------------------------------------------------------------
 k#031 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#032 if ((S0010C != 0)) #need to modify for COND step S0020
 k#033    then logmsg2 "ERR: step#$JSTEP iebgener abterm $SCC"
 k#034    alias goto="<<S9900=A"; fi
 k#035 goto
 k#036 #1======================= begin step#S0020 IDCAMS ========================
 k#037 if ((S0010C >  4)); then   # COND=(4,LT,STEP010)
 k#038     alias goto="<<S9000=A"; fi
 k#039 goto
 k#040 S0020=A
 k#041 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#042 goto
 k#043 export JSTEP=S0020; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#044 logmsg2 "******** Begin Step $JSTEP idcams (#$XSTEP) ********"
 k#045 ##STEP020  EXEC PGM=IDCAMS,COND=(4,LT,STEP010)
 k#046 export PROGID=idcams
 k#047 export PARM=""
 k#048 exportfile  TEMPGLM $JTMP/__tempglm
 k#049 exportgen1 +1 ACNTMAS $JGDG/data/gl.account.master_
 k#050 #exportgen1 $JGDG/subdir/tempfiles restored to outdir at Normal EOJ
 k#051 exportfile SYSIN $JTMP/${JSTEP}_${PROGID}_SYSIN
 k#052 cat > $SYSIN <</*
 k#053   REPRO INFILE(TEMPGLM) OUTFILE(ACNTMAS) RECORDSIZE(80)
 k#054 /*
 k#055 logmsg2 "Executing--> uvcp \"fili1=$TEMPGLM,typ=RSF,rcs=80,filo1=$ACNTMA..."
 k#056 #3----------------------------------------------------------------------
 k#057 uvcp "fili1=$TEMPGLM,typ=RSF,rcs=80,filo1=$ACNTMAS,typ=RSF,rcs=80";
 k#058 LCC=$?; ((SCC+=LCC)); ((JCC+=LCC));
 k#059 #4----------------------------------------------------------------------
 k#060 S0020C=$SCC; ((JCC+=SCC)); S0020R=1; alias goto="";
 k#061 if ((S0020C != 0))
 k#062    then logmsg2 "ERR: step#$JSTEP idcams abterm $SCC"
 k#063    alias goto="<<S9900=A"; fi
 k#064 goto
Note
  • See jgl300 explanations starting at MVSJCL.htm#1G1 thru 1G2.
  • CONDition code conversion to if/then/goto/fi
  • IEBGENER & IDCAMS converted to 'uvcp'

 joblog jgl300.ksh <-- execute & capture log in $RUNDATA/joblog/jgl300.log
 =================   - see joblog on page '3M5'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2F1. Sample JCL/scripts to demo Test procedures

JGL320.jcl

 j#001 //JGL320   JOB  (1234),'TEST MVS JCL CONVERSION'
 j#002 //* DEMO CONVERSION OF IEBGENER (TO UVCP) & IDCAMS (TO CP)
 j#003 //* COPY GL.ACCOUNT.MASTER TO A TEMP/WORK FILE & BACK (GEN# +1)
 j#004 //* - demos IF/THEN/ENDIF (vs CONDition codes in JGL320)
 j#005 //* - change input filename (step1 will fail) & step2 will be skipped
 j#006 //STEP010  EXEC PGM=IEBGENER
 j#007 //SYSUT1   DD   DSN=GL.ACCOUNT.MASTER(0),DISP=SHR
 j#008 //SYSUT2   DD   DSN=&&TEMPGLM,DISP=(NEW,PASS),DCB=(LRECL=80)
 j#009 /=*
 j#010 //*============================ step# 0020 ============================
 j#011 // IF (RC = 0) THEN #J001(1)
 j#012 //*
 j#013 //STEP020  EXEC PGM=IDCAMS,COND=(4,LT,STEP010)
 j#014 //TEMPGLM  DD   DSN=&&TEMPGLM,DISP=(OLD,PASS)
 j#015 //ACNTMAS  DD   DSN=GL.ACCOUNT.MASTER(+1),DISP=(NEW,CATLG),LRECL=80
 j#016 //SYSIN    DD   *
 j#017   REPRO INFILE(TEMPGLM) OUTFILE(ACNTMAS) RECORDSIZE(80)
 j#018 /*
 j#020 // ENDIF #J001(1) #IF (RC = 0) THEN #J001(1)

2F2. jgl320.ksh

 k#013 # * DEMO CONVERSION OF IEBGENER (TO UVCP) & IDCAMS (TO CP)
 k#014 # * COPY GL.ACCOUNT.MASTER TO A TEMP/WORK FILE & BACK (GEN# +1)
 k#015 # * - demos IF/THEN/ENDIF (vs CONDition codes in JGL320)
 k#016 # * - change input filename (step1 will fail) & step2 will be skipped
 k#017 #1======================= begin step#S0010 IEBGENER ========================
 k#018 S0010=A
 k#019 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#020 goto
 k#021 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#022 logmsg2 "******** Begin Step $JSTEP iebgener (#$XSTEP) ********"
 k#023 ##STEP010  EXEC PGM=IEBGENER
 k#024 export PROGID=iebgener
 k#025 export PARM=""
 k#026 exportgen0 0 SYSUT1 data/gl.account.master_
 k#027 exportfile  SYSUT2 $JTMP/__tempglm
 k#028 logmsg2 "Executing--> uvcp \"fili1=$SYSUT1,typ=RSF,rcs=80,filo1=$SYSUT2,..."
 k#029 #3----------------------------------------------------------------------
 k#030 uvcp "fili1=$SYSUT1,typ=RSF,rcs=80,filo1=$SYSUT2,typ=RSF,rcs=80"
 k#031 #4----------------------------------------------------------------------
 k#032 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#033 if ((S0010C != 0)) #need to modify for COND step S0020
 k#034    then logmsg2 "ERR: step#$JSTEP iebgener abterm $SCC"
 k#035    alias goto="<<S9900=A"; fi
 k#036 goto
 k#037 if ((S0010C == 0)); then #IF (RC = 0) THEN #J001(1)
 k#038 #1======================= begin step#S0020 IDCAMS ========================
 k#039 if ((S0010C >  4)); then   # COND=(4,LT,STEP010)
 k#040     alias goto="<<S9000=A"; fi
 k#041 goto
 k#042 S0020=A
 k#043 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#044 goto
 k#045 export JSTEP=S0020; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#046 logmsg2 "******** Begin Step $JSTEP idcams (#$XSTEP) ********"
 k#047 ##STEP020  EXEC PGM=IDCAMS,COND=(4,LT,STEP010)
 k#048 export PROGID=idcams
 k#049 export PARM=""
 k#050 exportfile  TEMPGLM $JTMP/__tempglm
 k#051 exportgen1 +1 ACNTMAS $JGDG/data/gl.account.master_
 k#052 #exportgen1 $JGDG/subdir/tempfiles restored to outdir at Normal EOJ
 k#053 exportfile SYSIN $JTMP/${JSTEP}_${PROGID}_SYSIN
 k#054 cat > $SYSIN <</*
 k#055   REPRO INFILE(TEMPGLM) OUTFILE(ACNTMAS) RECORDSIZE(80)
 k#056 /*
 k#057 logmsg2 "Executing--> uvcp \"fili1=$TEMPGLM,typ=RSF,rcs=80,filo1=$ACNTMA..."
 k#058 #3----------------------------------------------------------------------
 k#059 uvcp "fili1=$TEMPGLM,typ=RSF,rcs=80,filo1=$ACNTMAS,typ=RSF,rcs=80";
 k#060 LCC=$?; ((SCC+=LCC)); ((JCC+=LCC));
 k#061 #4----------------------------------------------------------------------
 k#062 S0020C=$SCC; ((JCC+=SCC)); S0020R=1; alias goto="";
 k#063 if ((S0020C != 0))
 k#064    then logmsg2 "ERR: step#$JSTEP idcams abterm $SCC"
 k#065    alias goto="<<S9900=A"; fi
 k#066 goto
 k#067 fi  #ENDIF #J001(1) #IF (RC = 0) THEN #J001(1)
Note
  • See jgl320 explanations starting at MVSJCL.htm#1G3 thru 1G5.
  • IF/THEN/ELSE converted to if/then/fi

 joblog jgl320.ksh <-- execute & capture log in $RUNDATA/joblog/jg3200.log
 =================   - see joblog on page '3M6'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2G1. Sample JCL/scripts to demo Test procedures

FTPPUT1.jcl

 j#001 //FTPPUT1  JOB 'test FTP conversion'
 j#002 //*
 j#003 //FTPSTEP1 EXEC PGM=FTP,PARM='127.0.0.1'
 j#004 //INPUT     DD   *
 j#005 mvstest mvstest00
 j#006 cd testdata
 j#007 binary
 j#008 put GL.ACCOUNT.TRANS(0)
 j#009 quit
 j#010 /*

2G2. ftpput1.ksh

 k#013 #1======================= begin step#S0010 FTP ========================
 k#014 S0010=A
 k#015 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#016 goto
 k#017 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#018 logmsg2 "******** Begin Step $JSTEP ftp (#$XSTEP) ********"
 k#019 ##FTPSTEP1 EXEC PGM=FTP,PARM='127.0.0.1'
 k#020 export PROGID=ftp
 k#021 export PARM="127.0.0.1"
 k#022 exportfile INPUT1 $JTMP/${JSTEP}_${PROGID}_INPUT1
 k#023 cat > $INPUT1 <</*
 k#024 mvstest mvstest00
 k#025 cd testdata
 k#026 binary
 k#027 put GL.ACCOUNT.TRANS(0)
 k#028 quit
 k#029 /*
 k#030 exportgen0 0 FTPPUT01 data/gl.account.trans_
 k#031 exportfile FTPTMP2 $JTMP/${JSTEP}_${PROGID}_FTPTMP2
 k#032 cat > $FTPTMP2 <</*FTP2
 k#033 open 127.0.0.1
 k#034 user mvstest mvstest00
 k#035 cd testdata
 k#036 binary
 k#037 put $FTPPUT01
 k#038 quit
 k#039 /*FTP2
 k#040 logmsg2 "Executing--> ftp -i -n -u -v <$FTPTMP2"
 k#041 #3----------------------------------------------------------------------
 k#042 ftp -i -n -u -v <$FTPTMP2
 k#043 #4----------------------------------------------------------------------
 k#044 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#045 if ((S0010C != 0))
 k#046    then logmsg2 "ERR: step#$JSTEP ftp abterm $SCC"
 k#047    alias goto="<<S9900=A"; fi
 k#048 goto

 joblog ftpput1.ksh <-- execute & capture log in $RUNDATA/joblog/ftpput1.log
 ==================   - see joblog on page '3M7'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2H1. Sample JCL/scripts to demo Test procedures

MAILSMTP.jcl

 j#001 //MAILSMTP JOB  'test/demo SMTP MAIL convert to sendmail'
 j#002 //*
 j#003 //STEP010  EXEC PGM=IEBGENER
 j#004 //SYSUT2     DD   SYSOUT=(B,SMTP)
 j#005 //SYSUT1     DD   *
 j#006 TO: appsadm
 j#007 FROM: mvstest
 j#008 SUBJECT: testing SMTP/sendmail to other unix logins
 j#009
 j#010 Hello: appsadm, sending this mail from batch job MAILSMTP (a test)
 j#011 Note: the blank line between SUBJECT: & message is mandatory
 j#012 Similar mail might be used to alert you of problems in batch jobs ?
 j#013 This mail from 1 unix login to another unix login
 j#014 Not sure if we can send to an internet email address yet ?
 j#016 /*

2H2. mailsmtp.ksh

 k#013 #1======================= begin step#S0010 IEBGENER ========================
 k#014 S0010=A
 k#015 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#016 goto
 k#017 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#018 logmsg2 "******** Begin Step $JSTEP iebgener (#$XSTEP) ********"
 k#019 ##STEP010  EXEC PGM=IEBGENER
 k#020 export PROGID=iebgener
 k#021 export PARM=""
 k#022 exportfile SYSUT2 $SYOT/${JOBID2}_${JSTEP}_SYSUT2
 k#023 exportfile SYSUT1 $JTMP/${JSTEP}_${PROGID}_SYSUT1
 k#024 cat > $SYSUT1 <</*
 k#025 TO: appsadm
 k#026 FROM: mvstest
 k#027 SUBJECT: testing SMTP/sendmail to other unix logins
 k#028
 k#029 Hello: appsadm, sending this mail from batch job MAILSMTP (a test)
 k#030 Note: the blank line between SUBJECT: & message is mandatory
 k#031 Similar mail might be used to alert you of problems in batch jobs ?
 k#032 This mail from 1 unix login to another unix login
 k#033 Not sure if we can send to an internet email address yet ?
 k#035 /*
 k#036 logmsg2 "Executing--> sendmail -t <$SYSUT1"
 k#037 #3----------------------------------------------------------------------
 k#038 sendmail -t <$SYSUT1
 k#039 #4----------------------------------------------------------------------
 k#040 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#041 if ((S0010C != 0))
 k#042    then logmsg2 "ERR: step#$JSTEP iebgener abterm $SCC"
 k#043    alias goto="<<S9900=A"; fi
 k#044 goto

 joblog mailsmtp.ksh <-- execute & capture log in $RUNDATA/joblog/mailsmtp.log
 ===================   - see joblog on page '3M8'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2I1. Sample JCL/scripts to demo Test procedures

QJTLIST.jcl

 j#001 //QJTLIST  JOB  'CUSTOMER MASTER TELEPHONE LIST'
 j#002 //* demo quikjob conversion to uvcopy, Oct 2011
 j#003 //QJTL100  EXEC PGM=QUIKJOB
 j#004 //SYSUT1   DD  DSN=AR.CUSTOMER.MASTER,DISP=SHR
 j#005 //SYSUT2   DD  DSN=AR.CUSTMAS.TELLIST,DISP=(,CATLG,DELETE),
 j#006 //             SPACE=(133,(1,1),RLSE),AVGREC=K,RECFM=FB,LRECL=133
 j#007 //SYSIN    DD  DSN=AR.QJLIB(QJTLIST1),DISP=SHR

2I2. qjtlist.ksh


 k#013 # * demo quikjob conversion to uvcopy, Oct 2011
 k#014 #1======================= begin step#S0010 QUIKJOB ========================
 k#015 S0010=A
 k#016 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#017 goto
 k#018 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#019 logmsg2 "******** Begin Step $JSTEP quikjob (#$XSTEP) ********"
 k#020 ##QJTL100  EXEC PGM=QUIKJOB
 k#021 export PROGID=quikjob
 k#022 export PARM=""
 k#023 exportfile  SYSUT1 data/ar.customer.master
 k#024 exportfile  SYSUT2 data/ar.custmas.tellist
 k#025 exportfile  SYSIN $RUNLIBS/qjs/qjtlist1
 k#026 logmsg2 "Executing--> uvcopy $QJS/qjtlist1"
 k#027 #3----------------------------------------------------------------------
 k#028 uvcopy $QJS/qjtlist1
 k#029 #4----------------------------------------------------------------------
 k#030 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#031 if ((S0010C != 0))
 k#032    then logmsg2 "ERR: step#$JSTEP quikjob abterm $SCC"
 k#033    alias goto="<<S9900=A"; fi
 k#034 goto

 joblog qjtlist.ksh <-- execute & capture log in $RUNDATA/joblog/qjtlist.log
 ==================
Note
  • see the execution joblog on page '3M9'
  • see the original QuikJob code on page '9B1'
  • see the converted eqivalent uvcopy code on '9B2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

2J1. Sample JCL/scripts to demo Test procedures

EZTLIST.jcl

 j#001 //EZTLIST  JOB  'CUSTOMER MASTER TELEPHONE LIST'
 j#002 //* demo EasyTrieve conversion to uvcopy, Oct 2011
 j#003 //EZTL100  EXEC PGM=EZTPA00
 j#004 //CUSTMAS  DD  DSN=AR.CUSTOMER.MASTER,DISP=SHR
 j#005 //EZTLIST  DD  DSN=AR.CUSTOMER.EZTLIST,DISP=(,CATLG,DELETE),
 j#006 //             SPACE=(133,(1,1),RLSE),AVGREC=K,RECFM=FB,LRECL=133
 j#007 //SYSIN    DD  DSN=AR.EZLIB(EZTLIST1),DISP=SHR

eztlist.ksh


 k#013 # * demo EasyTrieve conversion to uvcopy, Oct 2011
 k#014 #1======================= begin step#S0010 EZTPA00 ========================
 k#015 S0010=A
 k#016 stepctl51;  #calc StepTimes & check jobstop/goto end
 k#017 goto
 k#018 export JSTEP=S0010; ((XSTEP+=1)); SCC=0; LCC=0; alias goto="";
 k#019 logmsg2 "******** Begin Step $JSTEP eztpa00 (#$XSTEP) ********"
 k#020 ##EZTL100  EXEC PGM=EZTPA00
 k#021 export PROGID=eztpa00
 k#022 export PARM=""
 k#023 exportfile  CUSTMAS data/ar.customer.master
 k#024 exportfile  EZTLIST data/ar.customer.eztlist
 k#025 exportfile  SYSIN $RUNLIBS/parms/eztlist1
 k#026 #2-------------------------- parms/eztlist1 ---------------------------
 k#027 # * EZTLIST1 - CREATE CUSTOMER TELEPHONE LIST
 k#028 # * - cust#, name, tel#, contact
 k#029 # * - demo EasyTrieve conversion to uvcopy
 k#030 # * - by Owen Townsend, Oct 2011
 k#031 # FILE CUSTMAS SYS004 F(256)
 k#032 # CUS-REC 1 256 A
 k#033 # CUS-NO 1 6 N
 k#034 # CUS-NAME 11 25 A
 k#035 # --- only 1st 10 lines shown of parms/eztlist1 ---
 k#059 logmsg2 "Executing--> uvcopy $EZTS/eztlist1"
 k#060 #3----------------------------------------------------------------------
 k#061 uvcopy $EZTS/eztlist1
 k#062 #4----------------------------------------------------------------------
 k#063 LCC=$?; S0010C=$LCC; ((SCC+=LCC)); ((JCC+=LCC)); S0010R=1; alias goto="";
 k#064 if ((S0010C != 0))
 k#065    then logmsg2 "ERR: step#$JSTEP eztpa00 abterm $SCC"
 k#066    alias goto="<<S9900=A"; fi
 k#067 goto

 joblog eztlist.ksh <-- execute & capture log in $RUNDATA/joblog/eztlist.log
 ==================
Note
  • see the execution joblog on page '3M10'
  • see the original EasyTrieve code on page '9C1'
  • see the converted eqivalent uvcopy code on '9C2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_3 JCL/COBOL conversions/executions using VU demo files

Part 3 - Contents


3A1. Converting/Testing JCL/COBOL/DATA - 3 scenarios
Part3 - conversions using UV Software demo JCL
- illustrated Operating Instructions
Part7 - concise Op. Instrns. to transfer/convert ALL your JCL/COBOL/DATA
Part8 - select samples of YOUR JCL/COBOL/DATA for POC
- optimize conversions on smaller sample of your JCL/COBOL/DATA

3B1. HomeDirs for JCL conversions & testing
3B2.  test/demo LIBRARIES (JCL,COBOL,etc) supplied by UV Software
3B3.  test/demo DATA-FILES supplied by UV Software
3B4.  test/demo JCL conversion in mvstest1 or your homedir
3B5.  conversion scripts expect you to stay in the working directory
- do not change into subdirs

3C1. setup user mvstest1 & profile
- option use your homedir subdirs testlibs/testdata
3C2.  setup .profile & .kshrc

3D1. setup directories for demo conversions
- super-directories testlibs & testdata
- setsup subdirs with scripts 'mvslibsdirs' & 'mvsdatadirs'
- copy control files from uvadm with script 'copymvsctls'
- modify JCL converter options file 'jclunixop51'

3D2. copy demo JCLs,PROCs,& Parms for conversion demo
- from $UV/mvstest/jcl0,proc0,parm0 to your testlibs/jcl0,proc0,parm0

3D3. copy COBOL programs & copybooks for conversion demo
- from $UV/mvstest/cbl0,cpy0 to your testlibs/cbl0,cpy0

3D4. copy DATA for JCL/script demo executions
- ASCII datafiles provided for testing in Part_3
- will demo EBCDIC to ASCII conversions in Part_6

3E1. JCL conversion to Korn shell scripts

3E2. subdirs/files to convert JCLs/PROCs/Parms
- script 'jcl2ksh51A' performs all steps fo Micro Focus COBOL
- use 'jcl2ksh53A' to convert JCL intended to execute AIX COBOL

3E3. console log from jcl2ksh51A
- note responses for your JCL conversions

3F1. Converting Mainframe COBOL to Unix/Linux, scripts are:
cnvMF51Ac - convert all COBOL copybooks for Micro Focus COBOL
cnvMF51A - convert all COBOL programs for Micro Focus COBOL
cnvAIXcblAc - convert all COBOL copybooks for AIX COBOL
cnvAIXcblA - convert all COBOL copybooks for AIX COBOL

3F2. console log from cnvMF51Ac copybook conversion
3F3.  console log from cnvMF51A program conversion
3F4.  compiling the demo COBOL programs
- console log from compiling COBOL programs

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part 3 - Contents (continued)


3G1. select QUIKJOBs (from parms/... to qj0/...)
- convert all to uvcopy (in qj1/...)
- copy 1 at a time from qj1/... to qjs/...
  when ready to debug the JCL/scritps that call them

3G2. select EasyTrieve modules (from parms/... to ezt0/...)
- convert to uvcopy (in ezt1/...)
- copy 1 at a time from ezt1/... to ezts/... when ready to debug

3H1. Create Cross-References & Statistics (table summary counts) of
JCLs, PROCS, Parms, COBOL programs, copybooks, datafilenames, etc.

3I1. creating the GDG control file by selecting all filenames from JCL
- may edit to specify desired generations for each file
3I2.  console log from generating GDG control file

3J1. cleanup TeraData SQL parameters tdsql0 --> tdsql1 --> tdsqls
- clear 73-80, translate to lower except in quotes

Executing converted JCL/scripts


3K1. Execute sample script jar100.ksh
- console log from executing jar100.ksh

3L1. Console-Logging & Job-Logging
3L2. Job-Logging
- re-execute jar100.ksh with job-logging
- joblog/jar100.log

3M0. executing other demo JCL/scripts
3M1. jar100.log - 1 step COBOL
3M2. jar200.log - SORT + COBOL
3M3. jgl100.log - GDG files with COBOL
3M4. jgl200.log - GDG files + SORT + COBOL
3M5. jgl300.log - IEBGENER + IDCAMS + COND
3M6. jgl320.log - IEBGENER + IDCAMS + IF/THEN/ELSE
3M7. ftpput1.log - FTP (to same machine)
3M8. mailsmtp.log - IEBGENER/SMTP to appsadm
3M9. qjtlist.log - QuikJob to uvcopy
3M10. eztlist.log - EasyTrieve to uvcopy

3N1. Activating Console-Logging

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part 3 - Contents (continued)


3O1. Test/Debug procedures for difficult JCL/scripts

3O2. modify JCL/script for test/debug

3O3. option to convert DELETEs to #commented '#rm's
- reconvert JCLs - all or 1 at a time
  (jclxx51, jcl2ksh51, jclunix51)
- comment/replace 3rd party utilities with no unix equivalents

3O4. prepare data-files for debug
- clear all data/* files except those required for difficult job

3O5. test/debug executions
- testdatainit script to clear jobtmp subdirs to highlight 1 job's files

3O6. jobstop - pause at each step
- activate stop at begin each step to examine files from 2nd screen

3O7. execute job with jobstop activated

3O8. job restart & job stop

3P1. GDG files & step Restart
- VU JCL conversions write new GDGs into a jobtmp subdir & restore to
  the data subdir only if JobEnd=Normal. This allows you to rerun scripts
  without worrying about any new GDGs created in the failing run.
- If there are steps prior to the failing step with updates in place,
  you can use "step Restart" at the failed step to prevent double updates.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3A1. JCL/COBOL conversions/executions using VU demo files

1. converting UV Software demo JCL/COBOL

Part_3 suggests convert/test in your own homedir, by setting up subdirs testlibs & testdata, OR setup new userid 'mvstest1'. We will use mvstest1, but the documentation is the same if you setup testlibs/testdata in your homedir.

2. transfer ALL your JCL/COBOL to unix & initial convert

Part_7 gives more concise instructions without as many illustrations to transfer ALL your JCL/COBOL/DATA to unix & perform initial conversions. You could do this using subdirs in your homedir, but better to setup in a separate file system with lots of space if you have thousands of files. We suggest setup superdirs ALLtestlibs, ALLtestdata, ALLcnvdata.

The difference here is that you would not want to store your full set of libraries (JCLs,PROCs,Parms,COBOL programs & copybooks) & especially your full set of DATA, in the homedirs. Your full set of libraries & DATA should be stored in separate file-systems with higher capacities than homedirs. This also protects the separate file-systems from possible shortages & corruptions that could affect other file-systems.

The full set of libraries & DATA must also be setup to ensure shared access by all the programmers & operators that will be working on them (vs the homedirs which could have write access restricted to the owners).

3. select small set of JCL/COBOL/DATA for POC

Part_8 documents this procedure to optimize conversions on smaller samples of your JCL/COBOL/DATA before tackling the possible thousands of JCLs/COBOLs. We suggest you setup POC superdirs as POCtestlibs, POCtestdata, POCcnvdata. Update the SYS variable in your profile so cdl,cdd,cdc take you to the POC superdirs vs the ALL superdirs.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3B1. JCL/COBOL conversions/executions using VU demo files

HomeDirs for JCL conversions & testing

Here is a summary of the home directories used for JCL conversion & testing. We are showing only a few subdirs in uvadm & appsadm. See all subdirs in 'mvstest' on the next page.

 /home/uvadm   <-- Vancouver Utilities home directory
 :                   - showing only a few of the more important subdirs
 :                   - see all 25 subdirs on page '1A3'
 :-----bin             <-- executables (uvcopy,uvsort,jclunix51,etc)
 :-----ctl             <-- control files for various purposes
 :-----pf              <-- Parameter Files for uvcopy & uvqrpg
 :-----sf              <-- Script Files
 :-----src             <-- Vancouver Utilities C source code
 :-----mvstest         <-- sample JCL & DATA provided by UV Software
 :     :-----testlibs    - 30 library subdirs (see all next page)
 :     :     :-----cbl0  - COBOL programs
 :     :     :-----cpy0  - COBOL copybooks
 :     :     :-----jcl0  - JCL
 :     :     :-----parm0 - Parms
 :     :     :-----proc0 - PROCs
 :     :     :-----qj0   - QuikJobs selected from parms
 :     :     :-----ezt0  - EasyTrieves selected from parms
 :     :-----testdata    - 10 DATA subdirs (see all next page)
 :     :     :-----data  - ar.master, gl.master, etc
 /home/appsadm  <-- Applications Administrator
 :                   - showing only a few of the more important subdirs
 :                   - see all 15 subdirs on page '1D1'
 :-----ctl              <-- control files
 :-----env              <-- common_profiles customized for site
 :-----log1             <-- console logging files (currently active)
 :     :-----user1        - sub-directoried by user login
 :     :-----.etc.
 :-----log2             <-- console logging files (for current month)
 :     :-----user1
 :     :-----.etc.
 :-----pf               <-- uvcopy jobs developed by site admin
 :-----sf               <-- shell scripts developed by appsadm
 :-----sfun              - ksh functions used in converted JCL/scripts
 :                       - jobset51,jobend51,exportgen0,exportgen1,logmsg1,etc
 /home/mvstest1 <-- mvstest1 with demo JCL/data for user self-training
 /home/userxx   <-- or could setup testlibs/testdata in userhomedir
 :-----testlibs    <- sample JCL/COBOL for user self-training
 :     :-----cbl0   - COBOL programs
 :     :-----cpy0   - COBOL copybooks
 :     :-----jcl0   - JCL selected from /home/uvadm/mvstest/testlibs/jcl0
 :     :-----parm0  - Parms
 :     :-----proc0  - PROCs
 :     :-----qj0    - QuikJobs selected from parms
 :     :-----ezt0   - EasyTrieves selected from parms
 :-----testdata    <- sample DATA files for user self-training
 :     :-----data   - data files selected from /home/uvadm/mvstest/testdata/data

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3B2. JCL/COBOL conversions/executions using VU demo files

test/demo LIBRARIES supplied by UV Software

 /home/uvadm/mvstest   <-- test/demo libraries supplied in /home/uvadm/...
 /home/mvstest1        <-- could setup new user & copy from /home/uvadm
 /home/yourhomedir     <-- OR could copy to your homedir
 :-----testlibs
 :     :--UV--cbl0        - COBOL programs ('*' means files present)
 :     :------cbl1        - cleaned up, cols 1-6 & 73-80 cleared, etc
 :     :------cbl2        - cnvMF5 converts mainframe COBOL to MicroFocus COBOL
 :     :------cbl3        - sysin1 converts instream ACCEPTs to READs from a file
 :     :------cbl4        - sysout1 converts DISPLAY on SYSOUT to WRITE to a file
 :     :---ux-cbls        - copy here (standard source library) before compiling
 :     :------cblst       - cobol source listings from compiles
 :     :------cblx        - compiled COBOL programs (.int's)
 :     :--UV--cpy0        - for COBOL copybooks
 :     :------cpy1        - cleaned up, cols 1-6 & 73-80 cleared, etc
 :     :------cpy2        - cnvMF5 converts mainframe COBOL to MicroFocus COBOL
 :     :---ux-cpys        - copy here (standard copybook library)
 :     :--UV--ctl         - conversion control files (jclunixop51,cobdirectives)
 :     :------errs        - JCL converter writes ERROR reports here
 :     :--UV--jcl0        - test/demo JCLs supplied
 :     :------jcl1        - intermediate conversion 73-80 cleared
 :     :------jcl2        - PROCs expanded from procs
 :     :------jcl3        - JCLs converted to Korn shell scripts
 :     :---ux-jcls        - copy here manually 1 by 1 during test/debug
 :     :------maps        - 'cobmaps' record layouts generated from copybooks
 :     :------pf          - uvcopy jobs to replace utilities (easytrieve,etc)
 :     :--UV--parm0       - control cards & includes (SORT FIELDS, etc)
 :     :------parms       - control cards with 73-80 cleared
 :     :--UV--proc0       - test/demo PROCs supplied
 :     :------procs       - will be merged with jcl1, output to jcl2
 :     :------qj0         - QuikJobs selected from parms
 :     :------qj1         - QuikJobs cleanup (73-80 cleared, lower cased)
 :     :------qj2         - QuikJobs converted to uvcopy
 :     :------qjs         - copied to execution subdir (protect reconvert)
 :     :------ezt0        - EasyTrieves selected from parms
 :     :------ezt1        - EasyTrieves cleanup (73-80 cleared, lower cased)
 :     :------ezt2        - Easytrieves converted to uvcopy
 :     :------ezts        - copy to Execution subdir (protect recconvert)
 :     :------sf          - for misc scripts you may wish to write
 :     :------tdsql0      - Teradata SQL scripts (create/load tables,etc)
 :     :------tdsql1      - cleaned up, lower cased, some conversions required
 :     :------tdsqls      - JCL/scripts will input from tdsqls
 :     :------tmp         - tmp subdir used by uvsort & various conversions
 :     :------xref        - cross-references (see XREFjobs.htm)
 --UV-- Marks subdirs containing UV Software demo files for conversion
        - COBOL programs, copybooks, JCLs, PROCs, Parms,& data
        - control files required for conversions or executions
  ---ux-  marks the most important outputs of the conversion
          most other subdirs can go away after the conversion is complete

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3B3. JCL/COBOL conversions/executions using VU demo files

Library subdirs required for Production

The previous page illustrated the many library subdirs requiired for conversion There were many because most conversions are multi-stage, but only the final stage subdir is required for production as shown below:

 /p1/apps/             <-- mount point for file system separate from homedirs
 :-----mvsprod         <-- Library superdir for production $RUNLIBS
 :     :------cbls        - COBOL program source
 :     :------cblst       - cobol source listings from compiles
 :     :------cblx        - compiled COBOL programs
 :     :------parms       - SYSIN modules (control cards)
 :     :------cpys        - COBOL copybooks
 :     :------ctl         - control files (cobdirectives,etc)
 :     :------jcls        - JCL/scripts (Korn shells converted from JCLs)
 :     :------pf          - uvcopy jobs to replace misc utilities
 :     :------qjs         - Quick Jobs converted to uvcopy code
 :     :------ezts        - EasyTrieves converted to uvcopy code
 :     :------sf          - for misc scripts for admin, maintenance, etc
 :     :------sqls        - DB2/Oracle scripts to create/load tables
 :     :------tdsqls      - TeraData scripts to create/load tables
 :     :------tmp         - tmp subdir used by uvsort & misc
 :     :------xref        - cross-refs (JCL/scripts,COBOLs,copybooks,etc)

subdirs for DATA conversion

 /home/mvstest       <-- setup & copy files from /home/uvadm/mvstest/cnvdata
 /home/yourhomedir   <-- OR could copy to your homedir
 :-----cnvdata       <-- data conversion superdir $CNVDATA
 :     :-----d1ebc    # EBCDIC files from mainframe for conversion
 :     :-----d2asc    # files converted to ASCII with same record layout
 :     :-----d3ebc    # files converted back to EBCDIC for return to mainframe
 :     :-----d4pipe   # data files converted to '|' pipe delimited format
 :     :-----cpys     # COBOL copybooks
 :     :-----maps     # cobmaps (record layouts) generated from copybooks
 :     :-----pfx1     # uvcopy jobs to convert EBCDIC to ASCII (gen from cobmaps)
 :     :-----pfy1     # optional subdir for ASCII to EBCDIC (script gencnvE)
 :     :-----pfp1     # uvcopy jobs to convert to pipe delimited (from copybooks)
 :     :-----sqlTC1   # scripts to CREATE SQL tables (generated from copybooks)
 :     :-----sqlTL1   # scripts to  LOAD  SQL tables (generated from copybooks)

data subdirs for test/demo executions

 /home/mvstest       <-- setup & copy files from /home/uvadm/mvstest/testdata
 /home/yourhomedir   <-- OR could copy to your homedir
 :-----testdata      <-- data dirs for JCL/script executes $RUNDATA
 :     :--UV--data        - datafiles
 :     :--UV--ctl         - GDG control file
 :     :------joblog      - programmer debug log files
 :     :------jobmsgs     - status msgs from JCL/scripts
 :     :------jobtimes    - job/step times date stamped history files
 :     :------jobtmp      - temporary files for SYSIN instream data
 :     :------sysout      - SYSOUT printer files
 :     :------tmp         - tmp subdir for uvsort & misc use

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3B4. JCL/COBOL conversions using VU demo files

test/demo JCL conversion in mvstest1 or your homedir

The testlibs/subdirs in mvstest1 or your homedir are the same as in /home/uvadm/mvstest/testlibs. Here we are showing only the subdirs to which you will copy the selected JCL/PROCs/Parms/COBOL/copybooks. We are omitting the other subdirs required to convert & execute the JCL/scripts & programs.

 /home/mvstest1  <-- user homedir
 /home/userxx    <-- user homedir
 :-----testlibs      <-- testlibs with small set of JCL for training
 :     :--UV--cbl0       - COBOL programs
 :     :--UV--cpy0       - COBOL copybooks
 :     :--UV--parm0      - control cards & includes (SORT FIELDS, etc)
 :     :--UV--ctl        - conversion control files (jclunixop5,cobdirectives)
 :     :--UV--jcl0       - test/demo JCLs supplied
 :     :--UV--proc0      - test/demo PROCs supplied
 :     :------qj0        - QuikJobs (selected from parm0)
 :     :------ezt0       - EasyTrieves (selected from parm0)

testdata in mvstest1 or your homedir

 /home/mvstest1        <--- userid for testing OR your homedir
 :-----testdata          - data files superdir
 :     :--*--data        - data files
 :     :--*--data_bkup   - backup, allow clear data/.. to files for 1 job debug
 :     :--*--dataMF      - datafiles from MainFrame for comparison
 :     :--*--ctl         - GDG control file
 :     :--0--jobctl      - jobstop control files to debug JCL/script
 :     :--0--joblog      - programmer debug log files
 :     :--0--jobmsgs     - status msgs from JCL/scripts (step begin/end)
 :     :--0--jobtimes    - job/step times date stamped history files
 :     :--0--jobtmp      - temporary files for SYSIN data & GDG temp files
 :     :     :----JOBXX - jobtmp subdir created by jobset51 (script line 10)
 :     :     :    :-----GDG
 :     :     :    :     :-----data - new GDG files restored to data/... at EOJ
 :     :--0--sysout      - SYSOUT printer files
 :     :     :----yymmdd - date stamped subdir for print files
 :     :     :    :-----JOBXX_S0010_SYSPRINT  - named by job+step+DDname
 :     :--0--tmp         - tmp subdir for uvsort & misc use
 :     :--0--wrk         - interstep temporary work files

test/debug tips for difficult jobs

dataMF/...
  • datafiles from MainFrame for comparison
data_bkup/...
  • backup all data/... files here before debug difficult job
  • then remove all data/* & copyback only files for the debug job
data/...
  • could init to only files required for difficult debug jobs

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3B5. JCL/COBOL conversions using VU demo files

stay in the 'working directory'

The conversion scripts expect you to stay in the 'working directory'. The working directory should contain only subdirectories, and all files should reside within sub-directories. In the following example, your working directory is 'testlibs'

 /p1
 :-----testlibs         <-- working directory
 :     :-----cbl0         - COBOL source from mainframe
 :     :-----cbls         - COBOL converted for Micro Focus
 :     :-----cblx         - compile output (.int .idy .cbl .err)
 :     :-----cpys         - COBOL copybooks
 :     :-----jcl0         - JCL from mainframe
 :     :-----jcls         - JCL converted to Unix/Linux scripts
 :     :-----tmp          - temp files (keep working dir clean)

You should work 1 level above your files & address your files through a sub- directory. In the example above, you would edit your programs as follows:

 cd /p1/testlibs        <-- change to working directory
 cdl                    <-- alias 'cdl' changes to $RUNLIBS (defined in profile)

 vi cbls/apay100.cbl    <-- address program thru subdir
 ===================

advantages of working above subdirs

  1. Helps maintain a clean well organized workplace - Since all files are in subdirs, you can probably list all your subdirs on 1 screen, which reminds you of your subdir organization.

  2. Protects your files, even the infamous 'rm *' would do no harm at the working directory level, since all files are in subdirs.

  3. Garbage files (accidentally created) are highlighted & can be easily removed or moved to their proper subdir. When you list your subdirs, any files (non-subdirs) will stick out like a sore thumb.

  4. Subdirs allow you to maintain the same filename for data & programs in the various stages of conversion (conversion scripts exxpect this).

  5. Many scripts require addressing multiple files in multiple subdirs and it is then best to work 1 level above the subdirs. For example:

    jcl2ksh51 jcl0/JAR100.jcl  <-- convert JCL from jcl0->jcl1->jcl2->jcl3->jcls
    ========================= - script assumes jcl1,jcl2,jcl3,jcls are below you

    mfcbl1 car100.cbl   <-- compile 1 COBOL program, expects
    =================     - source in cbls/, copybooks in cpys/, writes to cblx/

Please see http://www.uvsoftware.ca/uvtrain.htm#Part_1 for more unix/linux operating tips, vi summary, & training exercises.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3C1. JCL/COBOL conversions using VU demo files

setup user mvstest1 & profile

You can perform the demo conversions in mvstest1 or your own homedir. You can skip these instructions to setup userid 'mvstest1' if you intend to setup testlibs & testdata subdirs in your homedir.

In either case you MUST HAVE setup user 'appsadm', copied profiles from /home/uvadm/env/... to /home/appsadm/env/..., & modified the profiles as appropriate for your site. See instructions on pages '1D2' - '1D8'.


 #1. login as 'root'

 #2. groupadd apps      <-- setup group 'apps', if not already setup
     =============          (when uvadm & appsadm were setup)

 #3a. useradd -m -g apps -s /bin/bash mvstest1  <-- setup for Linux bash shell
      ========================================

 #3b. useradd -m -g apps -s /bin/ksh mvstest1   <-- setup for Unix Korn shell
      =======================================

 #3c. useradd -m -d /export/home/mvstest1 -g apps -s /bin/ksh mvstest1
      ================================================================
      - must specify '-d ...' homedir option for SUN Solaris

 #3a. passwd mvstest1        <-- setup password desired
      ===============

 #4.  exit     <-- logout from root
      ====

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3C2. JCL/COBOL conversions using VU demo files

setup .profile & .kshrc

Note
  • this must be done for either mvstest1 or your own login userid.

Copy the Vancouver Utilities profile & kshrc from $APPSADM/env/stub_profile and kshrc if not already done by your sysadmin. See listings of stub_profile & kshrc on pages '1C1' & '1C3'. The stub_profile calls the common_profile listed on page '1C2'. You do not copy since it is called from $APPSADM/env/...


 #1a. login mvstest1 --> /home/mvstest1
         ---OR---
 #1b. login yourself --> your homedir

 #2a. cp /home/appsadm/env/stub_profile .profile
      ==========================================
      - if prompted, reply 'y' to overwrite existing .profile

 #2b. cp /home/appsadm/env/stub_profile .bash_profile
      ===============================================
      - alternative for the Bash shell

 #3a. cp /home/appsadm/env/kshrc .kshrc
      =================================
      - if prompted, reply 'y' to overwrite existing .kshrc

 #3b. cp /home/appsadm/env/bashrc .bashrc
      ===================================
      - alternative for the Bash shell
Note
  • Alternatives if you have some profile content to be preserved
  • above #2 & #3 will overwite existing profiles & rc files
  • use cat >> if you have some content you want to preserve

 #2a. cat /home/appsadm/env/stub_profile >>.profile
      =============================================
      - use cat >> to append VU profile on existing profile

 #2b. cat /home/appsadm/env/stub_profile >>.bash_profile
      ==================================================

 #3a. cat /home/appsadm/env/kshrc >>.kshrc
      ====================================

 #3b. cat /home/appsadm/env/bashrc >>.bashrc
      ======================================

 #4. Logout & login to activate new profiles
     =======================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3D1. JCL/COBOL conversions using VU demo files

setup directories for demo conversions


 #1. login mvstest1 --> your /home/mvstest1
            --- OR ---
 #1. login yourself --> your homedir

 #2a. mkdir testlibs   <-- make superdir for JCL/COBOL subdirs
      ==============     - see testlibs subdirs on page '3B1'

 #2b. mkdir testdata   <-- make superdir for DATA subdirs
      ==============     - see testdata subdirs at bottom of '3B1'

 #3a. cdd     <-- alias cdd='cd $RUNDATA' --> cd testdata
      ===

 #3b. mvsdatadirs  <-- setup 12 DATA subdirs for later execution JCL/scripts
      ===========

 #4a. cdl     <-- alias cdl='cd $RUNLIBS' --> cd testlibs
      ===

 #4b. mvslibsdirs  <-- setup 30 subdirs for JCL & COBOL conversions
      ===========

 #5. copymvsctls  <-- script to copy control files from /home/uvadm/ctl
     ===========      to $RUNLIBS/ctl/... & $RUNDATA/ctl

 #5a. l ctl              <-- list ctlfiles copied to $RUNLIBS/ctl/...
      =====
      -rw-rw-r-- 1 mvstest1 apps  3993 Oct 17 09:28 cnvcob5.tbl
      -rw-rw-r-- 1 mvstest1 apps  1989 Oct 17 09:28 cobdirectives
      -rw-rw-r-- 1 mvstest1 apps  2586 Oct 17 09:28 extfh.cfg
      -rw-rw-r-- 1 mvstest1 apps 15337 Oct 17 09:28 jclunixop51

 #5b. l $RUNDATA/ctl     <-- list ctlfiles copied to $RUNLIBS/ctl/...
      ==============
      -rw-rw-r-- 1 mvstest1 apps  156 Oct 17 10:48 gdgctl51_sample
      -rwxrwxr-x 1 mvstest1 apps 1616 Oct 17 09:28 GDGmkdirs

 #6. vi ctl/jclunixop51  <-- modify JCL converter options ?
     ==================
Note
  • see jclunixop51 listing at MVSJCL.htm#3E1
  • options OK for this demo
  • you may need to modify depending on your conversion desires
  • recommend option 'v3' to #comment out file DELETEs
    so you can rerun jobs easily during test/debug

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3D2. JCL/COBOL conversions using VU demo files

copy JCLs for conversion demo


 #7a. cp /home/uvadm/mvstest/testlibs/jcl0/JAR100.jcl jcl0
      ====================================================

 #7b. cp /home/uvadm/mvstest/testlibs/jcl0/JAR200.jcl jcl0
      ====================================================

 #7c. cp /home/uvadm/mvstest/testlibs/jcl0/JGL100.jcl jcl0
      ====================================================

 #7d. cp /home/uvadm/mvstest/testlibs/jcl0/JGL200.jcl jcl0
      ====================================================

 #7e. cp /home/uvadm/mvstest/testlibs/jcl0/JGL300.jcl jcl0
      ====================================================

 #7f. cp /home/uvadm/mvstest/testlibs/jcl0/JGL320.jcl jcl0
      ====================================================

 #7g. cp /home/uvadm/mvstest/testlibs/jcl0/FTPPUT1.jcl jcl0
      =====================================================

 #7h. cp /home/uvadm/mvstest/testlibs/jcl0/MAILSMTP.jcl jcl0
      ======================================================

 #7i. cp /home/uvadm/mvstest/testlibs/jcl0/QJTLIST.jcl jcl0
      =====================================================

copy PROCs for conversion demo


 #8a. cp /home/uvadm/mvstest/testlibs/proc0/PGL100.proc proc0
      =======================================================

 #8b. cp /home/uvadm/mvstest/testlibs/proc0/PGL200.proc proc0
      =======================================================

copy Parms for conversion demo


 #9a. cp /home/uvadm/mvstest/testlibs/parm0/PGL200S1 parm0
      ====================================================

 #9b. cp /home/uvadm/mvstest/testlibs/parm0/QJTLIST1 parm0
      ====================================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3D3. JCL/COBOL conversions using VU demo files

copy COBOL programs for conversion demo


 #10a. cp /home/uvadm/mvstest/testlibs/cbl0/car100.cbl cbl0
       ====================================================

 #10b. cp /home/uvadm/mvstest/testlibs/cbl0/car200.cbl cbl0
       ====================================================

 #10c. cp /home/uvadm/mvstest/testlibs/cbl0/cgl100.cbl cbl0
       ====================================================

 #10d. cp /home/uvadm/mvstest/testlibs/cbl0/cgl200.cbl cbl0
       ====================================================

copy COBOL copybooks for conversion demo


 #11a. cp /home/uvadm/mvstest/testlibs/cpy0/custmas.cpy cpy0
       =====================================================

 #11b. cp /home/uvadm/mvstest/testlibs/cpy0/saledtl.cpy cpy0
       =====================================================

 #11c. cp /home/uvadm/mvstest/testlibs/cpy0/sdline.cpy cpy0
       ====================================================

 #11d. cp /home/uvadm/mvstest/testlibs/cpy0/stline.cpy cpy0
       ====================================================

 #11e. cp /home/uvadm/mvstest/testlibs/cpy0/unixproc1.cpy cpy0
       =======================================================

 #11f. cp /home/uvadm/mvstest/testlibs/cpy0/unixwork1.cpy cpy0
       =======================================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3D4. JCL/COBOL conversions using VU demo files

copy DATA for JCL/script demos


 #12a. cdd   <-- alias cdd='cd $RUNDATA' --> cd testdata
       ===

 #12b. export UVDATA=/home/uvadm/mvstest/testdata/data
       ===============================================
       - create $symbol to shorten following commands

 #12c. cp $UVDATA/ar.customer.master* data
       ===================================
       - '*' also copies 'ar.customer.master.indexed'

 #12d. cp $UVDATA/ar.sales.items data
       ==============================

 #12e. cp $UVDATA/gl.account.master_000001 data
       ========================================

 #12f. cp $UVDATA/gl.account.trans_000001 data
       =======================================

 #12g. cp $UVDATA/gl.account.tran1 data
       ================================

Notes re DATA files

  1. Demo data files supplied by UV Software are ASCII (no conversion required)

  2. But for your conversion (see Part_7), you will need to convert your mainframe files from EBCDIC to ASCII.

  3. If packed/binary fields are present, you cannot simply FTP with translate which would destroy packed/binary fields.

  4. You must FTP in binary mode & use the Vancouver Utility conversion methods which generate conversion jobs automatically from the COBOL copybooks. See DATA conversion in Part_6.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3E1. JCL/COBOL conversions using VU demo files

JCL conversion to Korn shell scripts

Script 'jcl2ksh51A' performs all steps for conversion of all files in the directories of JCLs, PROCs,& Parms. Here is an illustration of the conversions thru several subdirs. Initial subdirs of mainframe files are jcl0,proc0,& parm0. The converted JCL/scripts are in 'jcls' which may read SYSIN files from 'parms'. The intermediate subdirs (jcl1,jcl2,jcl3) may be dropped when conversion is complete & the systems are ready for production.

 proc0 -------> procs    parm0 -------> parms
       cleanup                 cleanup
 jcl0 -------> jcl1 -----------> jcl2 -------------> jcl3 ------------> jcls
      cleanup       PROC expand      convert to ksh      manual copy 1 at a time
                                                         when ready to test each

Script 'jcl2ksh51A' does everything. If you have problems, you might want to use the 'step by step' method to better understand & to detect errors sooner. See MVSJCL.htm#4K1 thru 4K5.


 #1. jcl2ksh51A all    <-- convert ALL JCL thru all steps, as illustrated below
     ==============      - reply null (take default) at all prompts
                         - or reply 'y' for prompts that demand a y/n response
Note
  • see the console log listed on the next 5 pages
  • note the prompts & requesting replies
  • I have === underlined the prompt replies you should make for this demo

Alternative for AIX COBOL


 #1a. jcl2ksh53A all
      ==============

Use 'jcl2ksh53A' vs 'jcl2ksh51A' if the JCL being converted is intended to execute AIX COBOL vs Micro Focus COBOL. For AIX COBOL, we generate a call to the linked program vs the .int for Micro Focus. The GDG file handler is different for AIX, some file types require a TYPE- prefix on the exportfile.

JCL converter control file

See the JCL converter control file listed at page '7F1'. You may need to modify the control file options dpending on your site requirements. We will not worry about that here in Part 3 demos. Part 7 is more concerned with customizing the options as required for your particular site.

Note that the control file is 'jclunixop51' for Micro Focus COBOL, and it is 'jclunixop53' for AIX COBOL.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3E2. JCL/COBOL conversions using VU demo files

subdirs/files to convert JCLs/PROCs/Parms

 <@uvsoft4:mvstest1:/home/mvstest1> cdl
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> l
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cbl0  <-- COBOL input
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cbl1  <-- intermediates
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cbl2  <-- converted
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cbls  <-- copy to ongoing src lib
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cblst
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cblx  <-- compiled executables
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cpy0  <-- copybook input
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cpy1  <-- intermediate
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cpy2  <-- converted
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 cpys  <-- copybook src lib
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 ctl
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 errs
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:44 jcl0  <-- JCL input
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 jcl1  <-- intermediates
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 jcl2  <--
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 jcl3  <-- converted output
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 jcls  <-- copy here for execution
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 maps
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:45 parm0 <-- Parms input
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 parms <-- cleaned up here
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 pf
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:45 proc0 <-- PROCs input
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 procs <-- cleaned up here
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 qj0   <-- QuikJobs from parms
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 qj1   <-- converted to uvcopy
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 qjs   <-- copy here for execution
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 ezt0  <-- EasyTrieves from parms
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 ezt1  <-- converted to uvcopy
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 ezts  <-- copy here for execution
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 sf
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 tmp
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:50 tmp1
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:28 xref
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> l jcl0
 -rw-rw-r-- 1 mvstest1 apps  165 Oct 17 09:44 FTPPUT1.jcl
 -rw-rw-r-- 1 mvstest1 apps  648 Oct 17 09:41 JAR100.jcl
 -rw-rw-r-- 1 mvstest1 apps 1458 Oct 17 09:43 JAR200.jcl
 -rw-rw-r-- 1 mvstest1 apps  243 Oct 17 09:43 JGL100.jcl
 -rw-rw-r-- 1 mvstest1 apps  324 Oct 17 09:43 JGL200.jcl
 -rw-rw-r-- 1 mvstest1 apps 1134 Oct 17 09:43 JGL300.jcl
 -rw-rw-r-- 1 mvstest1 apps 1458 Oct 17 09:44 JGL320.jcl
 -rw-rw-r-- 1 mvstest1 apps  577 Oct 17 09:44 MAILSMTP.jcl
 -rw-rw-r-- 1 mvstest1 apps  345 Oct 17 09:44 QJTLIST.jcl
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> l proc0
 -rw-rw-r-- 1 mvstest1 apps  648 Oct 17 09:45 PGL100.proc
 -rw-rw-r-- 1 mvstest1 apps 1215 Oct 17 09:45 PGL200.proc
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> l parm0
 -rw-rw-r-- 1 mvstest1 apps  81 Oct 17 09:45 PGL200S1
 -rw-rw-r-- 1 mvstest1 apps 768 Oct 17 09:45 QJTLIST

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3E3. JCL/COBOL conversions using VU demo files


 #1. jcl2ksh51A all    <-- convert ALL JCL thru all steps
     =============      - reply null (take default) at all prompts
                        - or reply 'y' for prompts that demand a y/n response
Note
  • reply to prompts as shown by '===' underlines thru out console log

console log from jcl2ksh51A

 <@uvsoft4:mvstest1:/home/mvstest1> cdl
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> jcl2ksh51A all
                                             ==============
 jcl2ksh51A to perform all steps of JCL conversion to Korn shell scripts
 jcl0--------->jcl1------------->jcl2----------->jcl3---------->jcls
      cleanup       Proc-Expand        convert         manual
 - all steps reqd if you retransfer JCL, PROCs,or Parms
 - run 'jclxx51' to reconvert jcl2-->jcl3 after converter/option changes
 for 1st conversion - see step by step in 1Q1-1Q5 of MVSJCL.doc
 jcl2ksh51A can omit cleanup proc0-->procs & parm0-->parms
 - reply 'n' saves time if no new PROCs or PARMs (SYSIN modules)
 convert proc0-->procs & parm0-->parms y/n ? (n if already converted)
 y
 ===
 OK to remove all files (cleanup output) from procs & parms ?y/n
 y
 ===
 clear cols 73-80 of procs & parms y/n ?
 y
 ===
 uvcopyx - script calling uvcopy: cleanup, to process files from: proc0 to: procs
 111026:142347:cleanup: EOF fili01 rds=8 size=648: proc0/PGL100.proc
 111026:142347:cleanup: EOF filo01 wrts=8 size=396: procs/pgl100.proc
 111026:142347:cleanup: EOF fili01 rds=15 size=1215: proc0/PGL200.proc
 111026:142347:cleanup: EOF filo01 wrts=15 size=773: procs/pgl200.proc
 2 files processed from proc0 to procs using uvcopy job cleanup
 cleanup procs complete, enter to cleanup parms
 uvcopyx - script calling uvcopy: cleanup, to process files from: parm0 to: parms
 111026:142348:cleanup: EOF fili01 rds=1 size=81: parm0/PGL200S1
 111026:142348:cleanup: EOF filo01 wrts=1 size=34: parms/pgl200s1
 111026:142348:cleanup: EOF fili01 rds=27 size=768: parm0/QJTLIST1
 111026:142348:cleanup: EOF filo01 wrts=27 size=768: parms/qjtlist1
 2 files processed from parm0 to parms using uvcopy job cleanup
 now cleanup jcl0--->jcl1 & expand PROCs jcl1--->jcl2
 OK to remove all files from jcl1,jcl2,jcl3 ? y/n
 y
 ===
 uvcopyx - script calling uvcopy: cleanup, to process files from: jcl0 to: jcl1
 111026:142349:cleanup: EOF fili01 rds=9 size=165: jcl0/FTPPUT1.jcl
 111026:142349:cleanup: EOF filo01 wrts=9 size=165: jcl1/ftpput1.jcl
 111026:142349:cleanup: EOF fili01 rds=8 size=648: jcl0/JAR100.jcl
 111026:142349:cleanup: EOF filo01 wrts=8 size=403: jcl1/jar100.jcl
 111026:142349:cleanup: EOF fili01 rds=18 size=1458: jcl0/JAR200.jcl
 111026:142349:cleanup: EOF filo01 wrts=18 size=812: jcl1/jar200.jcl
 111026:142349:cleanup: EOF fili01 rds=3 size=243: jcl0/JGL100.jcl
 111026:142349:cleanup: EOF filo01 wrts=3 size=149: jcl1/jgl100.jcl
 111026:142349:cleanup: EOF fili01 rds=4 size=324: jcl0/JGL200.jcl
 111026:142349:cleanup: EOF filo01 wrts=4 size=211: jcl1/jgl200.jcl
 111026:142349:cleanup: EOF fili01 rds=14 size=1134: jcl0/JGL300.jcl
 111026:142349:cleanup: EOF filo01 wrts=14 size=621: jcl1/jgl300.jcl
 111026:142349:cleanup: EOF fili01 rds=17 size=1377: jcl0/JGL320.jcl
 111026:142349:cleanup: EOF filo01 wrts=17 size=710: jcl1/jgl320.jcl
 111026:142349:cleanup: EOF fili01 rds=15 size=577: jcl0/MAILSMTP.jcl
 111026:142349:cleanup: EOF filo01 wrts=15 size=562: jcl1/mailsmtp.jcl
 111026:142349:cleanup: EOF fili01 rds=7 size=345: jcl0/QJTLIST
 111026:142349:cleanup: EOF filo01 wrts=7 size=345: jcl1/qjtlist.jcl
 9 files processed from jcl0 to jcl1 using uvcopy job cleanup
 cleanup complete, enter to perform PROC expansion
 script to expand PROCs in MVS JCL
 OK to remove all files from outdir jcl2 y/n ?
 y
 ===
 jclproc51 jcl1/ftpput1.jcl
 jclproc51 jcl2/ftpput1.jcl   12 in,   11 out,    0 errs
 jclproc51 jcl1/jar100.jcl
 jclproc51 jcl2/jar100.jcl   10 in,    9 out,    0 errs
 jclproc51 jcl1/jar200.jcl
 jclproc51 jcl2/jar200.jcl   20 in,   19 out,    0 errs
 jclproc51 jcl1/jgl100.jcl
 jclproc51 jcl2/jgl100.jcl   17 in,   16 out,    0 errs
 jclproc51 jcl1/jgl200.jcl
 jclproc51 jcl2/jgl200.jcl   25 in,   24 out,    0 errs
 jclproc51 jcl1/jgl300.jcl
 jclproc51 jcl2/jgl300.jcl   16 in,   15 out,    0 errs
 jclproc51 jcl1/jgl320.jcl
 jclproc51 jcl2/jgl320.jcl   21 in,   20 out,    0 errs
 jclproc51 jcl1/mailsmtp.jcl
 jclproc51 jcl2/mailsmtp.jcl   18 in,   17 out,    0 errs
 jclproc51 jcl1/qjtlist.jcl
 jclproc51 jcl2/qjtlist.jcl    9 in,    8 out,    0 errs
 9 MVS JCLs in jcl1 expanded, PROCs procs, INCLUDEs parms, output jcl2
 PROC expansion complete, enter to report any PROCs/INCLUDEs NOT found
 111026:142354:procNF: EOF fili01 size=0: errs/jclproc51.err
 111026:142354:procNF: EOF filo01 size=0: errs/procNF.rpt
 vi errs/procNF      <-- to view report of PROCs not found
 uvlp12 errs/procNF  <-- to print report of PROCs not found
 111026:142354:includeNF: EOF fili01 size=0: errs/jclproc51.err
 111026:142354:includeNF: EOF filo01 size=0: errs/includeNF.rpt
 vi errs/includeNF      <-- to view report of INCLUDEs not found
 uvlp12 errs/includeNF  <-- to print report of INCLUDEs not found
 PROC expansion complete, enter to generate data control file
 generate data info file (ctl/datactl53I) for JCL converter ?
 - could bypass if no change to JCL since datactl53I last created
 - reply 'y' to create now, or 'n' to bypass
 y
 ===
 jcldata5A - create 'datactl53I' data file info for JCL converter
  - data file info may be supplied from 6 sources:
 JCL + LISTCAT + Excel#1 + Excel#2 + Edited + Datafiles
 datajcl51,52 + datacat51,52 + dataxl151,52 + dataxl251/52 + dataedt51,52
  - combined to ctl/datactl53, then loaded to Indexed file ctl/datactl53I
  1. this script runs jcldata51 & jcldata52 to create  ctl/datajcl52
  2. must have run catdata51,52 (separately) to create ctl/datacat52
                                   OR create nullfile >ctl/datacat52
  3. must have run xl1data51,52 (separately) to create ctl/dataxl152
                                   OR create nullfile >ctl/dataxl152
  4. must have run xl2data51,52 (separately) to create ctl/dataxl252
                                   OR create nullfile >ctl/dataxl252
  5. must have run edtdata51,52 (separately) to create ctl/dataedt52
                                   OR create nullfile >ctl/dataedt52
  6. must have run cnvdata51,52 (separately) to create ctl/datacnv52
                                   OR create nullfile >ctl/datacnv52
 enter 'I' to Init 5 files & create datactl53I from JCL only
 enter 'E' to create datactl53I from JCL & Existing 5 files(some null)
 enter 'A' to Abort (perhaps to create some files & Rerun)
 I
 ===
 111026:142400:jcldata51: uvcopy ver=20110802 pf=/home/uvadm/pf/IBM/jcldata51
 uvcopy DISAM ext=.dat LNX L64  license=110802_99V_930630 site=UV_Software
 User OPtion (uop) defaults  = q1
 -->null to accept or enter/override -->
 111026:142419:jcldata51: EOF fili01 rds=16 size=698: jcl2/jgl300.jcl
 111026:142419:jcldata51: EOF fili01 rds=21 size=841: jcl2/jgl320.jcl
 111026:142419:jcldata51: EOF fili01 rds=11 size=174: jcl2/ftpput1.jcl
 111026:142419:jcldata51: EOF fili01 rds=16 size=674: jcl2/jgl100.jcl
 111026:142419:jcldata51: EOF fili01 rds=20 size=889: jcl2/jar200.jcl
 111026:142419:jcldata51: EOF fili01 rds=8 size=350: jcl2/qjtlist.jcl
 111026:142419:jcldata51: EOF fili01 rds=25 size=1173: jcl2/jgl200.jcl
 111026:142419:jcldata51: EOF fili01 rds=17 size=572: jcl2/mailsmtp.jcl
 111026:142419:jcldata51: EOF fili01 rds=9 size=408: jcl2/jar100.jcl
 111026:142419:jcldata51: sort phase complete, used 64 megabytes, sort output begin
 111026:142419:jcldata51: EOF fild01 rds=11 size=4096: jcl2
 111026:142419:jcldata51: EOF filo02 wrts=15 size=1830: ctl/datajcl51
 uop=q1l1   - default options
       l1   - lower case datafilenames
       l2   - UPPER case datafilenames
 111026:142419:jcldata52: uvcopy ver=20110802 pf=/home/uvadm/pf/IBM/jcldata52
 uvcopy DISAM ext=.dat LNX L64  license=110802_99V_930630 site=UV_Software
 User OPtion (uop) defaults  = q1l1l1
 -->null to accept or enter/override -->
 111026:142423:jcldata52: sort phase complete, used 64 megabytes, sort output begin
 111026:142423:jcldata52: EOF fili01 rds=15 size=1830: ctl/datajcl51
 111026:142423:jcldata52: EOF filo02 wrts=15 size=1500: ctl/datajcl52
 ctldata53 - sort 5 files together for JCL cnvtr info DSN,rcs,typ,key,etc
 uop=q1d0j1 - default options
       d1   - for debug, output all records vs 1 per datafilename
         j1 - drop lines without JCL source
         j0 - output info from other sources (Excel w/o JCL match)
 111026:142423:ctldata53: uvcopy ver=20110802 pf=/home/uvadm/pf/IBM/ctldata53
 uvcopy DISAM ext=.dat LNX L64  license=110802_99V_930630 site=UV_Software
 111026:142423:ctldata53: sort phase complete, used 64 megabytes, sort output begin
 111026:142423:ctldata53: EOF fili01 rds=15 size=1500: ctl/datajcl52
 111026:142423:ctldata53: EOF fili02 size=0: ctl/datacat52
 111026:142423:ctldata53: EOF fili03 size=0: ctl/dataxl152
 111026:142423:ctldata53: EOF fili04 size=0: ctl/dataxl252
 111026:142423:ctldata53: EOF fili05 size=0: ctl/dataedt52
 111026:142423:ctldata53: EOF fili06 size=0: ctl/datacnv52
 111026:142423:ctldata53: EOF filo07 wrts=12 size=1605: ctl/datactl53
 111026:142423:uvcp: uvcp fili1=ctl/datactl53,filo1=ctl/datactl53I
 111026:142423:uvcp: EOF fili01 12 rds, 1605 size; ctl/datactl53
 111026:142423:uvcp: EOF filo01 12 wrts, 0 size; ctl/datactl53I
 111026:142423:uvcp: DISAM.dat: recs=12,rcsz=191,keys=1; ctl/datactl53I
 enter to convert JCL to ksh
 script to convert mainframe JCLs to UNIX scripts
 OK to remove all files from outdir jcl3 y/n ?
 y
 ===
 jclunix51 jcl2/ftpput1.jcl
 jclunix51 jcl3/ftpput1.ksh   11 in,   56 out,    0 errs
 jclunix51 jcl2/jar100.jcl
 jclunix51 jcl3/jar100.ksh    9 in,   42 out,    0 errs
 jclunix51 jcl2/jar200.jcl
 jclunix51 jcl3/jar200.ksh   20 in,   70 out,    0 errs
 jclunix51 jcl2/jgl100.jcl
 jclunix51 jcl3/jgl100.ksh   16 in,   50 out,    0 errs
 jclunix51 jcl2/jgl200.jcl
 jclunix51 jcl3/jgl200.ksh   25 in,   80 out,    0 errs
 jclunix51 jcl2/jgl300.jcl
 jclunix51 jcl3/jgl300.ksh   16 in,   70 out,    0 errs
 jclunix51 jcl2/jgl320.jcl
 jclunix51 jcl3/jgl320.ksh   21 in,   73 out,    0 errs
 jclunix51 jcl2/mailsmtp.jcl
 jclunix51 jcl3/mailsmtp.ksh   17 in,   52 out,    0 errs
 jclunix51 jcl2/qjtlist.jcl
 jclunix51 jcl3/qjtlist.ksh    8 in,   42 out,    0 errs
 9 IBM MVS JCLs converted from jcl2 to UNIX KORN shell scripts in jcl3
 JCL to ksh complete, enter to report any control card members NOT found
 111026:142429:parmNF: EOF fili01 size=0: errs/jclunix51.err
 111026:142429:parmNF: EOF filo01 size=0: errs/parmNF.rpt
 vi errs/parmNF  <-- view members Not Found (or uvlp12 to print)
 uvlp12 errs/procNF.rpt     <-- print summary report of PROCsNot Found
 uvlp12 errs/includeNF.rpt  <-- print summary report INCLUDEsNot Found
 uvlp12 errs/parmNF.rpt     <-- print summary report of PARMsNot Found
 all JCLs converted from jcl0 --> jcl1 --> jcl2 --> jcl3 (Notto jcls)
 copy scripts from jcl3 to jcls (in PATH) 1 by 1 as you test/debug

<@uvsoft4:mvstest1:/home/mvstest1/testlibs> exit exit Script done on Wed 26 Oct 2011 02:42:47 PM PDT

Note
  • console logs (as above) can be captured into a date/time stamped file
    by uncommenting 9 '##' lines at end of profile
  • see console logging doc at ADMjobs.htm#Part_6
  • 'console logging' captures operator replies
  • 'job logging' (using joblog script) does NOT capture operator replies

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3F1. JCL/COBOL conversions using VU demo files

Converting Mainframe COBOL to Unix/Linux

We have just converted our demo JCL to Korn shell scripts, and we would now like to execute the scripts and show you the results (console displays).

But, we must also have converted & compiled the demo COBOL programs called by the JCL. COBOL conversion & compile is documented in MVSCOBOL.htm, but in case you have skipped directly to this JCL conversion (MVSJCLtest.doc), we will briefly repeat the COBOL conversion & compile instructions here. You must of course have MicroFocus COBOL installed to compile & execute the COBOL programs, but if you do not, you can still do everything except the 'mfcblA' compiles (#5 on page '1R3'). You can even execute the 'jar200.ksh' demo job. The 1st step will work since it is a SORT.

script to perform all COBOL conversion steps

'cnvMF51Ac' will perform all steps of the copybook conversion & 'cnvMF51A' will perform all steps of the COBOL program conversion. Here is an illustration of the conversion steps from inital subdirs (cbl0 & cpy0) thru intermediate subdirs to the final results in cpys & cbls.

 cpy0 ---------> cpy1 ---------> cpy2 ----------> cpys
       cleanup         convert         copy(cp)
 cbl0-------->cbl1-------->cbl2------->cbl3------->cbl4------->cbls-------->cblx
      cleanup      convert      sysin1     sysout1       copy       compile
                               |--------optional-------|

 #1. cnvMF51Ac all <-- convert copybooks thru all steps, as illustrated above
     ============   - reply null (take defaults) or reply 'y' if y/n demanded

 #2. cnvMF51A all  <-- convert COBOL programs thru all steps, as illustrated above
     ===========    - reply null (take defaults) or reply 'y' if y/n demanded
                    - 1 exception, reply 'n' when asked to run 'cobfil55'

If problems occur, you should use the 'step by step' method which is documented at MVSCOBOL.htm#1D1 thru 1D3, because you will be better able to detect & fix any problems that may occur. Problems should not occur with the demo set of COBOL programs provided, but are more likely when you begin converting your own COBOL programs & copybooks.

Alternative for AIX COBOL


 #1a. cnvAIXcblAc all <-- convert copybooks for AIX COBOL
      ===============

 #2a. cnvAIXcblA all  <-- convert COBOL programs for AIX COBOL
      ==============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3F2. Converting Mainframe COBOL to Micro Focus COBOL


 #1. cnvMF51Ac all <-- convert COBOL 'copybook's thru all steps
     =============   - reply null to prompts not requiring a y/n response
                      or reply as shown by '===' underlines

console log from copybook conversion

 <@uvsoft4:mvstest1:/home/mvstest1> cdl
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> l cpy0
 -rw-rw-r-- 1 mvstest1 apps 1273 Oct 17 10:08 CUSTMAS.cpy
 -rw-rw-r-- 1 mvstest1 apps 1360 Oct 17 10:08 SALEDTL.cpy
 -rw-rw-r-- 1 mvstest1 apps 1501 Oct 17 10:09 SDLINE.cpy
 -rw-rw-r-- 1 mvstest1 apps  553 Oct 17 10:09 STLINE.cpy
 -rw-rw-r-- 1 mvstest1 apps 6939 Oct 17 10:10 UNIXPROC1.cpy
 -rw-rw-r-- 1 mvstest1 apps 3248 Oct 17 10:10 UNIXWORK1.cpy
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> cnvMF51Ac all
 convert all COBOL copybooks from cpy0 --> cpy1 --> cpy2 --> cpys OK?
 cpy0 -------> cpy1 -------> cpy2 --------------> cpys
      cleanup       convert       copy(optional)
 copy UNIXWORK1 & UNIXPROC1 from /home/uvadm/mvstest/testlibs/cpy0 ?
 copy UNIXWORK1 & UNIXPROC1 from /home/uvadm/mvstest/testlibs/cpy0 ?
 copy UNIXWORK1 & UNIXPROC1 from /home/uvadm/mvstest/testlibs/cpy0 ?
 y
 ===
 Next step calls CLEANUP job with options defaulted for most sites
 - see cleanup options at: www.uvsoftware.ca/mvscobol.htm#4I1
 default options=q0i7c5e15g8j1k1l1n1s8t1 (may enter overridesor null)
 example: enter 's0' to NOT clear columns 1-6 (overrides default s8)
 uvcopyx - script calling uvcopy: cleanup, to process files from: cpy0 to: cpy1
 111017:101324:cleanup: EOF fili01 rds=16 size=1273: cpy0/CUSTMAS.cpy
 111017:101324:cleanup: EOF filo01 wrts=16 size=731: cpy1/custmas.cpy
 111017:101324:cleanup: EOF fili01 rds=17 size=1360: cpy0/SALEDTL.cpy
 111017:101324:cleanup: EOF filo01 wrts=17 size=690: cpy1/saledtl.cpy
 111017:101324:cleanup: EOF fili01 rds=19 size=1501: cpy0/SDLINE.cpy
 111017:101324:cleanup: EOF filo01 wrts=19 size=761: cpy1/sdline.cpy
 111017:101324:cleanup: EOF fili01 rds=7 size=553: cpy0/STLINE.cpy
 111017:101324:cleanup: EOF filo01 wrts=7 size=315: cpy1/stline.cpy
 111017:101324:cleanup: EOF fili01 rds=135 size=6939: cpy0/UNIXPROC1.cpy
 111017:101324:cleanup: EOF filo01 wrts=135 size=6929: cpy1/unixproc1.cpy
 111017:101324:cleanup: EOF fili01 rds=68 size=3248: cpy0/UNIXWORK1.cpy
 111017:101324:cleanup: EOF filo01 wrts=68 size=3246: cpy1/unixwork1.cpy
 6 files processed from cpy0 to cpy1 using uvcopy job cleanup
 Next screen will prompt for COBOL CONVERTER options to override defaults
 - here are some options that some sites may want to change
 y1 (default) - clear cols 1-6 (cols 73-80 always cleared)
 y0 - retain cols 1-6 (do NOT clear)
 Enter override options here or on next screen (or null accept defaults)
 cnvMF5 - convert mainframe cobol to UNIX Microfocus externalfilenames
          - converts all programs from indir to outdir
 uop=q1a0c0d0j0l3k0m1p0s1u0w1x0y1 - option defaults
       a0             - process all programs in directory
       a1             - process 1 program, spcfd on arg1 on command line
       a2             - process program names solicited untilnull reply
         c1           - translate copy-book-names to lower case
         c2           - translate copy-book-names to UPPER case
         c0           - do not change (already done by cobsup)
           d0         - leave ACCEPT from DATE as is
           d1         - cnvt ACCEPT DATE to env-var SYSDATE (Hadley dflt)
             j0       - inhibit $JOBID insert
             j1       - insert $JOBID prior to display upon console msgs
               l0     - do not insert ORG Line/Record Seqntl on selects
               l1     - (dflt) insert OLS if matching cardfile keywords
               l2     - (dflt) insert OLS if matching printerfile keywords
               l8     - force all sequential files to ORG Line Seqntl
                 k0   - (dflt) lookup cobfil55I indexed file to test OLS
                 k1   - set OLS if cobfil55I recsize 80 (cardfiles?)
                 k2   - set OLS if cobfil55I recsize 132/133 (printer?)
                 k4   - set OLS if cobfil55I ID L(46) set by advancing
                   m1 - module type = COBOL program
                   m2 - module type = COBOL copybook
                 p1   - insert missing periods in data-div & working-store
                 p2   - insert missing periods in procedure-division
               s1     - convert sql include filename to "filename.cpy"
             u1       - convert unprintable chars to hexadecimal
           w1         - gen move parm lth/data unixwork1 to LINKAGE section
         x1           - inhibit inserting EXTERNAL on SELECT stmnts
       y1             - clear cols 1-6 (default), also see cleanup optn s8
       y0             - retain cols 1-6 (do NOT clear)
       y2             - do NOT translate cols 1-6 to lower
 111017:101336:cnvMF5: EOF fili01 rds=17 size=690: cpy1/saledtl.cpy
 111017:101336:cnvMF5: EOF filo02 wrts=17 size=690: cpy2/saledtl.cpy
 111017:101336:cnvMF5: EOF fili01 rds=135 size=6929: cpy1/unixproc1.cpy
 111017:101336:cnvMF5: EOF filo02 wrts=135 size=6929: cpy2/unixproc1.cpy
 111017:101336:cnvMF5: EOF fili01 rds=68 size=3246: cpy1/unixwork1.cpy
 111017:101336:cnvMF5: EOF filo02 wrts=68 size=3246: cpy2/unixwork1.cpy
 111017:101336:cnvMF5: EOF fili01 rds=7 size=315: cpy1/stline.cpy
 111017:101336:cnvMF5: EOF filo02 wrts=7 size=315: cpy2/stline.cpy
 111017:101336:cnvMF5: EOF fili01 rds=19 size=761: cpy1/sdline.cpy
 111017:101336:cnvMF5: EOF filo02 wrts=19 size=761: cpy2/sdline.cpy
 111017:101336:cnvMF5: EOF fili01 rds=16 size=731: cpy1/custmas.cpy
 111017:101336:cnvMF5: EOF filo02 wrts=16 size=731: cpy2/custmas.cpy
 111017:101336:cnvMF5: EOF fili03 rds=44 size=3993: ctl/cnvcob5.tbl
 111017:101336:cnvMF5: EOF fild01 rds=8 size=4096: cpy1
 111017:101336:cnvMF5: EOF fild02 size=4096: cpy2
 cnvMF51Ac COBOL copybook conversions complete (results in cpy2 subdir)
 reply 'y' to copy/overwrite cpy2/* to cpys/... or 'n' to exit
 if many modified - use cnfMF51c to reconvert few new copybooks
 if few modified, save all cpys, convert,& restore few modified
 if no cpys/... needs to be saved, reply 'y' to overwrite all
 y
 ===
        6  copybooks copied to cpys ready for compiles
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> l cpys
 -rw-rw-r-- 1 mvstest1 apps  731 Oct 17 10:13 custmas.cpy
 -rw-rw-r-- 1 mvstest1 apps  690 Oct 17 10:13 saledtl.cpy
 -rw-rw-r-- 1 mvstest1 apps  761 Oct 17 10:13 sdline.cpy
 -rw-rw-r-- 1 mvstest1 apps  315 Oct 17 10:13 stline.cpy
 -rw-rw-r-- 1 mvstest1 apps 6929 Oct 17 10:13 unixproc1.cpy
 -rw-rw-r-- 1 mvstest1 apps 3246 Oct 17 10:13 unixwork1.cpy

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3F3. Converting Mainframe COBOL to Micro Focus COBOL


 #2. cnvMF51A all <-- convert COBOL 'program's thru all steps
     ============   - reply null to prompts not requiring a y/n response
                      or reply as shown by '===' underlines

console log from COBOL program conversion

 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> l cbl0  <-- list programs to convert
                                             =======
 -rw-rw-r-- 1 mvstest1 apps 3476 Oct 17 10:07 CAR100.cbl
 -rw-rw-r-- 1 mvstest1 apps 4424 Oct 17 10:07 CAR200.cbl
 -rw-rw-r-- 1 mvstest1 apps 3871 Oct 17 10:07 CGL100.cbl
 -rw-rw-r-- 1 mvstest1 apps 4424 Oct 17 10:07 CGL200.cbl
 convert all COBOL programs
 cbl0------->cbl1------->xref-------->cbl2 ------->cbls--------->cblx
     cleanup   identify OLS   convert      copy ?      compile ?
 convert all programs: cbl0-->cbl1-->cbl2-->cbls-->cblx y/n ?
 y
 =====
 Next step calls CLEANUP job with options defaulted for most sites
 - see cleanup options at: www.uvsoftware.ca/cnvaids.htm#2I1
 cleanup default options=q0i7c5e15g8j1k1l1n1s8t1 (may enter overrides or null)
 - enter 's0' to NOT clear columns 1-6 (overrides cleanup default s8)
 - will also later need option 'y0' on cnvMF5 to NOT clear cols 1-6
 uvcopyx - script calling uvcopy: cleanup, to process files from: cbl0 to: cbl1
 120508:110023:cleanup: EOF fili01 rds=44 size=3476: cbl0/CAR100.CBL
 120508:110023:cleanup: EOF filo01 wrts=44 size=1764: cbl1/car100.cbl
 120508:110023:cleanup: EOF fili01 rds=56 size=4424: cbl0/CAR200.CBL
 120508:110023:cleanup: EOF filo01 wrts=56 size=2451: cbl1/car200.cbl
 120508:110023:cleanup: EOF fili01 rds=49 size=3871: cbl0/CGL100.CBL
 120508:110023:cleanup: EOF filo01 wrts=49 size=1895: cbl1/cgl100.cbl
 120508:110023:cleanup: EOF fili01 rds=56 size=4424: cbl0/CGL200.CBL
 120508:110023:cleanup: EOF filo01 wrts=56 size=2232: cbl1/cgl200.cbl
 4 files processed from cbl0 to cbl1 using uvcopy job cleanup
 generate ctl/cobfil55I to determine ORG Line Seqntl y/n ?
 - then run cnvMF5 with option 'k4' to lookup ctl/cobfil55I
   to Identify ORG LINE SEQNTL by cnvMF51 option 'k4'
   or select option 'l3' to ID OLS by keywords (k4 recommended)
   see: http://www.uvsoftware.ca/mvscobol.htm#6G2
 Note - later screen will prompt for override options
 - default k4l0 to use ctl/cobfil55I (vs keywrds printer,report,etc)
 - or use options k0l3 to use only keywords or K4l3 for both
 Recommend --> reply 'y' & use default options k4l0
 generate ctl/cobfil55I to determine OLS y/n ?
 y
 =====
 120508:110025:cobfil55: EOF fili01 rds=56 size=2451: cbl1/car200.cbl hits=2
 120508:110025:cobfil55: EOF fili01 rds=49 size=1895: cbl1/cgl100.cbl hits=1
 120508:110025:cobfil55: EOF fili01 rds=56 size=2232: cbl1/cgl200.cbl
 120508:110025:cobfil55: EOF fili01 rds=44 size=1764: cbl1/car100.cbl hits=2
 *Total programs=4, files=10, hits=5
 120508:110025:cobfil55: EOF fild01 rds=6 size=4096: cbl1 hits=5
 120508:110025:cobfil55: EOF filo02 wrts=16 size=1292: xref/cobfil55a
 120508:110025:uvsort: uvsort fili1=xref/cobfil55a,filo1=xref/cobfil55I
 120508:110025:uvsort: EOF fili01 16 rds, 1292 size; xref/cobfil55a
 120508:110025:uvsort: sort phase complete, used 64 megabytes, sort output begin
 120508:110025:uvsort: EOF filo01 10 wrts, 0 size; xref/cobfil55I
 120508:110025:uvsort: DISAM.dat: recs=10,rcsz=100,keys=1; xref/cobfil55I
 created xref/cobfil55I to Identify ORG Line Seqntl files
 Next screen will prompt for COBOL CONVERTER options to override defaults
 - here are some options that some sites may want to change
 y1 (default) - clear cols 1-6 (cols 73-80 always cleared)
 y0 - retain cols 1-6 (do NOT clear)
 l_ - controls ORGANIZATION LINE SEQUENTIAL (vs RECORD SEQUENTIAL)
 l0 (default) - do NOT set OLS via keywords in card & printer filenames
 l1 - set by keywords in filenames (card,parm,sysin,etc)
 l2 - set by keywords in filenames (printer,sys011,report,etc)
 l8 - force all sequential files ORGANIZATION LINE SEQUENTIAL
 k_ - also use xref/cobfil55I to set ORGANIZATION LINE SEQUENTIAL files
 k0 - do NOT use xref/cobfil55I to determine OLS
 k1 - set OLS if recsize 80 on Input files
 k2 - set OLS if recsize 132/133 on Output files
 k4 (default) - set OLS if matching cobfil55I entry has 'L' in byte 46
 k4l0 - RECOMMENDED (most accurate), unless problems creating cobfil55I
 Enter override options here or next screen (null accept default k4l0)

 null entry  <-- accept defaults (k4l0)
 ==========
 cnvMF5 - convert mainframe cobol to UNIX Microfocus external filenames
          - converts all programs from indir to outdir
 uop=q1a0c0d0j0k4l0m1p0s1u0w1x0y1 - option defaults
       a0             - process all programs in directory
       a1             - process 1 program, spcfd on arg1 on command line
       a2             - process program names solicited until null reply
         c1           - translate copy-book-names to lower case
         c2           - translate copy-book-names to UPPER case
         c0           - do not change (already done by cobsup)
           d0         - leave ACCEPT from DATE as is
           d1         - cnvt ACCEPT DATE to env-var SYSDATE (Hadley dflt)
             j0       - inhibit $JOBID insert
             j1       - insert $JOBID prior to display upon console msgs
               k0     - inhibit lookup cobfil55I indexed file to test OLS
               k1     - set OLS if cobfil55I recsize 80 (card files?)
               k2     - set OLS if cobfil55I recsize 132/133 (printer?)
               k4     - (dflt) set OLS if cobfil55I L(46) from advancing
                 l0   - (dflt) do not insert ORG Line/Record Seqntl selects
                 l1   - insert OLS if matching cardfile keywords
                 l2   - insert OLS if matching printerfile keywords
                 l8   - force all sequential files to ORG Line Seqntl
                   m1 - module type = COBOL program
                   m2 - module type = COBOL copybook
                 p1   - insert missing periods in data-div & working-store
                 p2   - insert missing periods in procedure-division
               s1     - convert sql include filename to "filename.cpy"
             u1       - convert unprintable chars to hexadecimal
           w1         - gen move parm lth/data unixwork1 to LINKAGE section
         x1           - inhibit inserting EXTERNAL on SELECT stmnts
       y1             - clear cols 1-6 (default), also see cleanup optn s8
       y0             - retain cols 1-6 (do NOT clear)
       y2             - do NOT translate cols 1-6 to lower
 User OPtion (uop) defaults  = q1a0c0d0j0k4l0m1p0s1u0w1x0y1q1i3
 -->null to accept or enter/override -->

 null entry  <-- accept defaults (k4l0)
 ==========
 option k_ needs cobfil55I created by cnvMF5A script OK y/n ?
 120508:110031:cnvMF5: EOF fili01 rds=56 size=2451: cbl1/car200.cbl
 120508:110031:cnvMF5: EOF filo02 wrts=65 size=2720: cbl2/car200.cbl
 120508:110031:cnvMF5: EOF fili01 rds=49 size=1895: cbl1/cgl100.cbl
 120508:110031:cnvMF5: EOF filo02 wrts=57 size=2123: cbl2/cgl100.cbl
 120508:110031:cnvMF5: EOF fili01 rds=56 size=2232: cbl1/cgl200.cbl
 120508:110031:cnvMF5: EOF filo02 wrts=65 size=2521: cbl2/cgl200.cbl
 120508:110031:cnvMF5: EOF fili01 rds=44 size=1764: cbl1/car100.cbl
 120508:110031:cnvMF5: EOF filo02 wrts=52 size=1995: cbl2/car100.cbl
 120508:110031:cnvMF5: EOF fili03 rds=44 size=4075: ctl/cnvcob5.tbl
 120508:110031:cnvMF5: EOF fili04 rds=9 size=1010: xref/cobfil55I
 120508:110031:cnvMF5: DISAM.dat: recs=10,rcsz=100,keys=1; xref/cobfil55I
 120508:110031:cnvMF5: EOF fild01 rds=6 size=4096: cbl1
 120508:110031:cnvMF5: EOF fild02 size=4096: cbl2
 cnvMF51A COBOL conversion complete (results in cbl2 subdir)
 - copy to cbls AND compile all programs n/y/g ?
 - n=no, y=compile to .ints(animation), g=compile to .gnts
 cp -f cbl2/* cbls   <-- OR you could copy manually like this
 =================
 mfcblA all          <-- AND compile all programs like this
 ==========              (or use mfcblAg for .gnts)
 copy to cbls & compile ? (n=No, y=compile .ints, g=compile .gnts)
 remove old prgms from cblx & cblst OK y/n ?

 n     <--- or 'y' see next page --->
 ====

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3F4. Converting Mainframe COBOL to Micro Focus COBOL

compiling the COBOL programs

Script 'mfcblA' is provided to compile all programs in the COBOL source subdir 'cbls' (using copybooks in 'cpys'), storing compiled executable programs in 'cblx'. Here is the commands & the console log from compiling the demo COBOL programs.


 #1. cp cbl2/* cbls  <-- copy all converted COBOL programs to COBOL source dir
     ==============    - initial convert/compile only
                       - don't do on reconvert if you need to save some cbls/...

 #2. mfcblA all    <-- compile all programs, input from subdir cbls, output to
     ==========        subdir cblx: .int, .idy, .err,& .cbl (copy for animation)
                     - If problems see MVSCOBOL.htm#1D4 for more information.

console log from compiling COBOL programs

 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> mfcblA all
 remove old prgms from cblx & cblst OK y/n ?
 y
 ===
 mfcblA started 120508:1100
 start compile of: car100.cbl

#Compile#=0001 Program=car100.cbl Lines=52 start compile of: car200.cbl

#Compile#=0002 Program=car200.cbl Lines=65 start compile of: cgl100.cbl

#Compile#=0003 Program=cgl100.cbl Lines=57 start compile of: cgl200.cbl

 #Compile#=0004 Program=cgl200.cbl Lines=65
 *** 0 compiles failed, of 0004 total ***
 programs compiled from cbls to cblx
 copylibs=/home/mvstest/POC2testlibs/cpys
 compile options file=/home/mvstest/POC2testlibs/ctl/cobdirectives
 mfcblA started 120508:1100, ended 120508:1100
 run cblerrs1 & cblerrs2 table summarize error reasons y/n ?
 y
 =====
 ** 4 OK & 0 ERRs of 4 TOTAL = 100 % clean compile
 120508:110039:cblerrs1: EOF fild01 rds=14 size=4096: cblx
 120508:110039:cblerrs1: EOF filo01 wrts=1 size=50: errs/cblerrs1.rpt
 120508:110039:cblerrs2: sort phase complete, used 64 megabytes, sort output begin
 120508:110039:cblerrs2: EOF fili01 rds=1 size=50: errs/cblerrs1.rpt
 120508:110039:cblerrs2: EOF filo01 size=0: errs/cblerrs2.rpt
 120508:110039:cblerrs2: EOF filo02 size=0: errs/cblerrs2a.tbl
 120508:110039:cblerrs2: EOF filo03 size=0: errs/cblerrs2b.tbl
        ** reports & table summaries listed below **
 total 4
 -rw-rw-r-- 1 mvstest apps 50 May  8 11:00 cblerrs1.rpt
 -rw-rw-r-- 1 mvstest apps  0 May  8 11:00 cblerrs2a.tbl
 -rw-rw-r-- 1 mvstest apps  0 May  8 11:00 cblerrs2b.tbl
 -rw-rw-r-- 1 mvstest apps  0 May  8 11:00 cblerrs2.rpt
 errs/cblerrs1.rpt  - unsorted, 5 lines per failing program (do not list)
 errs/cblerrs2a.tbl - table summary by major fail reason     <-- list 1st
 errs/cblerrs2b.tbl - summary detail (missing copybooks,etc) <-- list 2nd
 errs/cblerrs2.rpt  - sorted, prognames & fail reason <-- correction guide
 uvlp12 errs/cblerrs2a.tbl  #<-- sample command to list reports
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> l cblx  <-- list outputs
                                             ======
 -rw-rw-r-- 1 mvstest apps  1995 May  8 11:00 car100.cbl
 -rw-rw-r-- 1 mvstest apps 52224 May  8 11:00 car100.idy
 -rw-rw-r-- 1 mvstest apps  5120 May  8 11:00 car100.int
 -rw-rw-r-- 1 mvstest apps  2720 May  8 11:00 car200.cbl
 -rw-rw-r-- 1 mvstest apps 56064 May  8 11:00 car200.idy
 -rw-rw-r-- 1 mvstest apps  5376 May  8 11:00 car200.int
 -rw-rw-r-- 1 mvstest apps  2123 May  8 11:00 cgl100.cbl
 -rw-rw-r-- 1 mvstest apps 51200 May  8 11:00 cgl100.idy
 -rw-rw-r-- 1 mvstest apps  4864 May  8 11:00 cgl100.int
 -rw-rw-r-- 1 mvstest apps  2521 May  8 11:00 cgl200.cbl
 -rw-rw-r-- 1 mvstest apps 51968 May  8 11:00 cgl200.idy
 -rw-rw-r-- 1 mvstest apps  5120 May  8 11:00 cgl200.int

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3G1. Preparations to Execute JCL/COBOL demos

select QuikJobs from parms & convert to uvcopy

QuikJobs will be in the parms/... library. We will use utility 'qjselect1' to select them into a separate library qj0/... for conversion to uvcopy in qjs/...


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. uvcopy qjselect1,fild1=parms,fild2=qj0
     ======================================
     - select quikjobs from parms to separate subdir qj0

 #3a. uvcopy qjselect1  <-- same as above, files default as shown
      ================

 #4. uvcopyx cleanup qj0 qj1 uop=q0i7g8n5t1
     ======================================
     - clear 73-80, lowercase, rename as 1st node lower (to match JCL)

 #5. uvcopyx quikjob2 qj1 qj2 uop=q0i7
     =================================
     - convert QuikJob code to uvcopy code

 #6. cp qj2/* qjs
     ============
     - copy to execution subdir (JCL/scripts call from qjs/...)
     - Only on initial conversion of all quikjobs
     - make any manual changes in qjs/... (not qj2)
     - protects edited jobs from mass reconverts

 #7. vi qjs/xxxxx   <-- may require some manual edits during test/debug ?
     ============
Note
  • subdirs above allow us to auto reconvert to qj2/... if improvements
    are made to the quikjob converter
  • would then copy 1 at a time desired quikjobs from qj2 to qjs/...
  • so we dont overwrite any already debugged qikjobs in qjs/...
    (so we don't lose our manual changes)

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3G2. Preparations to Execute JCL/COBOL demos

3G2. select EasyTrieve from parms & convert to uvcopy

EasyTrieves will be in the parms/... library. We will use utility 'ezselect1' to select them into a separate library ezt0/... for conversion to uvcopy in ezts/...


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. uvcopy ezselect1,fild1=parms,fild2=ezt0
     ======================================
     - select easytrieve jobs from parms to separate subdir ezt0

 #4. uvcopyx cleanup ezt0 ezt1 uop=q0i7g8n5t1
     ======================================
     - clear 73-80, lowercase, rename as 1st node lower (to match JCL)

 #5. uvcopyx ez2uvcopy ezt1 ezt2 uop=q0i7
     ====================================
     - convert all easytrieves to ezt2/...

 #6. cp ezt2/* ezts/
     ===============
     - copy to execution subdir (JCL/scripts call from ezts/...)
     - Only on initial conversion of all quikjobs
     - make any manual changes in ezts/... not ezt2/
     - protects edited jobs from mass reconverts

 #7. vi ezts/xxxxx   <-- may require some manual edits during test/debug ?
     =============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3H1. JCL/COBOL test/demo Cross-References

create Cross-References & Statistics

Here is the concise Operating Instructions (without sample reports) to create Cross-References of JCL,PROCs,Parms,COBOL programs,copybooks,datafilenames,etc. We also create statistics (table summary counts) of the various elements.

See Part_4 for the full documentation, including sample reports which will give you an understanding of how useful these reports will be during your conversion.

xrefall - create all JCL/COBOL cross-refs


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. xrefall cbls jcl3 ksh    <-- create all cross-ref reports
     =====================
Note
  • see sample crossref reports in Part_4.

create stats, table summary counts of JCLs,programs,etc


 #3. mkdir stats         <-- make subdir for reports
     ===========

 #4. uvcopy statmvsjcl1  <-- create stat reports from MVS JCL
     ==================

 #5. uvcopy statksh1     <-- create stat reports from Korn shell scripts
     ===============

 #6. uvcopy statcbl1     <-- create stat reports from COBOL programs
     ===============

 #7. vi stats/*          <-- view stat reports
     ==========

 #8. uvlpd12 stats       <-- print all reports
     =============           OR print only desired reports
                           - most stats/reports short
                           - BUT, filename reports could be very long
Note
  • see sample crossref reports on page '4I1'.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3I1. Preparations to Execute JCL/COBOL demos

creating the gdgctl file

Before you can execute any JCL/scripts, you must create the GDG control file. 'ctl/gdgctl51I' is an Indexed file that is accessed by GDG functions (exportgen0, exportgen1,& gdgupab1) to supply the number of generations for each data file & also to record a history of the last 14 accesses or errors).

Please study MVSJCL.htm#Part_5 for complete details. Here is the minimum instructions with few explanations.

Utility job 'jcldata56' will read all JCL/scripts, extract all filenames & sort with data reduction to 1 line per unique filename. The output file is then reformatted into the gdgctl layout & loaded into the Indexed file by 'gdgload1'.

You must have already converted the JCL since this job reads the converted scripts from subdir jcl3/... (vs original mainframe jcl0/...)


 #1. login mvstest1 --> /usr/home/mvstest1

 #2. cdl     <-- alias cdl='cd $RUNLIBS' --> cd testlibs
     ===

 #3. uvcopy jcldata56,fild1=jcl3,filo2=ctl/datafiles56
     =================================================
     --> no need to enter this long command, see short alternative below:

 #3a. uvcopy jcldata56   <-- same as above (files default as shown above)
      ================     - sample output shown below

 #5. cp ctl/datafiles56 $RUNDATA/ctl/gdgctl51
     ========================================
     - copy/rename from $RUNLIBS/ctl to $RUNDATA/ctl
Note
  • GDG control files in $RUNDATA to allow multiple $RUNDATA's

 #6. cdd  (alias cdd='cd $RUNDATA') --> /home/mvstest/testdata
     ===

 #7. vi ctl/gdgctl51    <-- edit to modify no of generations as desired
     ===============

 #8. uvcopy gdgload1,fili1=ctl/gdgctl51,filo1=ctl/gdgctl51I
     ======================================================
     - load Indexed file to supply file info to JCL converter

 #8a. uvcopy gdgload1   <-- same but easier (files default as shown above)
      ===============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3I2. JCL/COBOL executions using VU demo files

Alternate location for GDG control file

The location of the GDG control file is determined by the common_profile (stored at /home/appsadm/env/common_profile & called by .profile or .bash_profile). Here are lines 61-64 of $APPSADM/env/common_profile.

 export GDGCTL=$RUNDATA/ctl       #<-- default location
 # export GDGCTL=$APPSADM/ctl     #<-- could change to this ?
 #Mar14/12 - allow gdgctl51I.dat/.idx & GDGmkdirs to be located anywhere
 # - vs $RUNDATA/ctl, see doc at www.uvsoftware.ca/mvsjcltest.htm#3I1 &/or 7M1

If you have multiple RUNDATA directories you might want to activate 'export GDGCTL=$APPSADM/ctl' & #comment out 'export GDGCTL=$RUNDATA/ctl' so you would have only 1 GDG control file vs multiple.

If you followed the instructions on the page above, you could now copy the GDG control files to $APPSADM as follows (assuming you are in $RUNDATA).


 #1. cp ctl/gdgctl51* $APPSADM/ctl
     =============================
     - GDG control file created/edited on page '3I1'

 #2. cp ctl/GDGmkdirs $APPSADM/ctl
     =============================
     - script to make GDG subdirs in $RUNDATA/jobtmp/GDG
     - previously copied to $RUNDATA/ctl by copymvsctls on page '3D1'

console log from generating GDG control file

 Here is the console log from generating & loading the GDG control file
 - the console output from the procedures listed on page '3I1' from #3a to #8a.
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> uvcopy jcldata56
 uop=c0d1f2g31h44j1 - option defaults
     c0             - do NOT insert file count at byte 70
     c1             - DO insert file count at byte 70
       d1           - drop leading directories to lowest 1 level
       d0           - do not drop any leading directories
         f1         - select normal files (non GDG)
         f2         - select exportgen files
         f3         - select both normal & exportgen files
           g0       - do not code gdg=... on end of exportgens
           g31      - append " gdg=31 " on end of exportgens
              h44   - column# desired for gdg=... insert
                 j0 - do NOT drop $JGDG/ at begining of filenames
                 j1 - drop any $JGDG/ at begining of filenames
 111017:104724:jcldata56: uvcopy ver=20110802 pf=/home/uvadm/pf/IBM/jcldata56
 uvcopy DISAM ext=.dat LNX L64  license=110802_99V_930630 site=UV_Software
 User OPtion (uop) defaults  = q1c0d1f2g31h44j1
 -->null to accept or enter/override -->
 jcl3 = default fild01 - null accept or reenter ?
 ctl/datafiles56 = default filo02 - null accept or reenter ?
 111017:104731:jcldata56: EOF fili01 rds=70 size=3182: jcl3/jar200.ksh
 111017:104731:jcldata56: EOF fili01 rds=74 size=3480: jcl3/jgl320.ksh
 111017:104731:jcldata56: EOF fili01 rds=70 size=3283: jcl3/jgl300.ksh
 111017:104731:jcldata56: EOF fili01 rds=50 size=2359: jcl3/jgl100.ksh
 111017:104731:jcldata56: EOF fili01 rds=52 size=2315: jcl3/mailsmtp.ksh
 111017:104731:jcldata56: EOF fili01 rds=57 size=1934: jcl3/qjtlist.ksh
 111017:104731:jcldata56: EOF fili01 rds=80 size=3809: jcl3/jgl200.ksh
 111017:104731:jcldata56: EOF fili01 rds=42 size=1977: jcl3/jar100.ksh
 111017:104731:jcldata56: EOF fili01 rds=56 size=2103: jcl3/ftpput1.ksh
 111017:104731:jcldata56: sort phase complete, used 64 megabytes, sort output begin
 111017:104731:jcldata56: EOF fild01 rds=10 size=4096: jcl3
 111017:104731:jcldata56: EOF filo02 wrts=3 size=156: ctl/datafiles56
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> cp ctl/datafiles56 $RUNDATA/ctl/gdgc tl51
 cp: overwrite `/home/mvstest1/testdata/ctl/gdgctl51'?
 y
 ===
 <@uvsoft4:mvstest1:/home/mvstest1/testlibs> cdd
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> l ctl
 -rw-rw-r-- 1 mvstest1 apps   156 Oct 17 10:48 gdgctl51
 -rwxrwxr-x 1 mvstest1 apps  1616 Oct 17 09:28 GDGmkdirs
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> cat ctl  /gdgctl51
 data/gl.account.acntlist_                    gdg=31
 data/gl.account.master_                      gdg=31
 data/gl.account.trans_                       gdg=31
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> uvcopy gdgload1
 load gdgctl text file to Indexed file, shifting keywords over for maxkey
 111017:104917:gdgload1: uvcopy ver=20110802 pf=/home/uvadm/pf/IBM/gdgload1
 uvcopy DISAM ext=.dat LNX L64  license=110802_99V_930630 site=UV_Software
 ctl/gdgctl51 = default fili01 - null accept or reenter ?
 ctl/gdgctl51I = default filo01 - null accept or reenter ?
 111017:104918:gdgload1: sort phase complete, 64 megabytes, sort output begin
 111017:104919:gdgload1: EOF fili01 rds=3 size=156: ctl/gdgctl51
 111017:104919:gdgload1: EOF filo01 wrts=3 size=0: ctl/gdgctl51I
 111017:104919:gdgload1: DISAM.dat: recs=3,rcsz=2047,keys=1; ctl/gdgctl51I
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> l ctl
 -rw-rw-r-- 1 mvstest1 apps  156 Oct 17 10:48 gdgctl51
 -rw-rw-r-- 1 mvstest1 apps 6144 Oct 17 10:49 gdgctl51I.dat
 -rw-rw-r-- 1 mvstest1 apps 3072 Oct 17 10:49 gdgctl51I.idx
 -rwxrwxr-x 1 mvstest1 apps 1616 Oct 17 09:28 GDGmkdirs
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> exit
 Script done on Mon 17 Oct 2011 10:49:40 AM PDT

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3J1. JCL/COBOL conversions using VU demo files

cleanup TeraData SQL parameters

Some sites may have Databases such as TeraData & the SQL parameters (load tables, unload tables, etc) were maintained in separate libraries on the mainframe & will also be on unix/linux.

TeraData uses 3 programs (BTQMAIN/bteq, FASTLOAD,& MLOAD). FASTLOAD parms needed a modification for DDNAME=INFILE. The unix version of FASTLOAD required any 'DECIMAL' fields to be converted to 'varchar' with length = digits+decimals+2 A uvcopy job 'TDFLcnv1' was written to handle this in Jan 2012.

cleanup tdsql0 --> tdsql1 --> tdsqls


 #1. mkdir tdsql0 tdsql1 tdsqls tdsql1FL tdsqlsFL
     ============================================
     - make subdirs required for TeraData parms conversions

 #2. copy mainframe TeraData SQLs into tdsql0/...

 #3. uvcopyx cleanup tdsql0 tdsql1 uop=q0i7g8n5t1
     ============================================
     - g8 clears 73-80, n5 renames as 1st .node in lower case
       & t1 translates contents to lower case except in quotes

 #4. uvcopyx TDcnv2 tdsql1 tdsqls uop=q0i7
     =====================================
     - convert all TD parms .goto/.label with numeric prefix
     - will then select FASTLOAD parms, modify,& overwrite in tdsqls/...

 #5. uvcopy scand1,fild1=tdsqls,fild2=tdsql1FL,arg1=ddname=,uop=q0w1
     ===============================================================
     - select FASTLOAD parms to separate subdir tdsql1FL/...
       via pattern 'ddname=' known to be unique to FASTLOAD parms

 #6. uvcopyx TDFLcnv1 tdsql1FL tdsqlsFL uop=q0i7
     ===========================================
     - special conversion for FASTLOAD parms
     - convert DECIMAL(9,2) to varchar(13), etc

 #7. cp tdsqlsFL/* tdsqls
     ====================
     - copy converted FASTLOAD parms to subdir used by JCL/scripts

In addition to converting DECIMAL to varchar, the FASYLOAD parms require another change, which cannot be performed ONCE at conversion time, but must be performed dynamically when the JCL/scripts are executed.

The unix version of FASTLOAD does not expand 'ddname=INFILE' to the actual datafilename & the JCL converter has been modified to handle this. Must be handled dynamically at run time (vs conversion time) because the INFILE could be a GDG file.

A uvcopy job 'ddnamex1' was written to handle this. It is called before each fastload in the converted JCL/scripts.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3K1. JCL/COBOL executions using VU demo files

Executing test/demo sample scripts


 #1. login mvstest1 --> /home/mvstest1
     OR: login --> your homedir

 #2. cdl     <-- alias cdl='cd $RUNLIBS' --> cd testlibs

 #3. Copy JCL/scripts from the converter output dir to the execution dir

 #3a. cp jcl3/jar100.ksh jcls <-- copy just 1 script to execution subdir jcls/
      =======================
      --> OR copy ALL as follows:

 #3b. cp jcl3/* jcls  <-- copy All converted scripts to execution subdir jcls/
      ==============    - OK here for VU test/demo, NOT for "real conversion"

You should NOT copy all jcl3/* jcls/ for your "real conversion" project. For your real conversion project, you should copy 1 script at a time when you ready to start test/debug on each script. This is an easy way to keep track of your progress (jcls/... are debugged, jcl3/... not yet)

Another reason NOT to copy all jcl3/* jcls/ when JCL/scripts re-converted:

However, we will copy all jcl3/* to jcls/ here for our test/demo convenience since we know these UV supplied scripts should work.

execute jar100.ksh demo script


 #4. cdd   --> $RUNDATA ($HOME/testdata), alias cdd='cd $RUNDATA'
     ===
Note
  • we recommend you execute the scripts from the testdata DATA subdir
  • so you can easily inspect the output reports

 #5. jar100.ksh   <-- run script
     ===========

 #5a. l data      <-- list data subdir to see outputs
      ======

 #5b. vi data/ar.customer.nameadrs.list100  <-- display output report
      =====================================    - see below in console log

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3K2. JCL/COBOL executions using VU demo files

console log from executing jar100.ksh

 <@uvsoft4:mvstest1:/home/mvstest1> cdd
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> l
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 10:49 ctl
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:48 data    <-- data files subdir
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:27 jobctl
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:27 joblog
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:27 jobmsgs
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:27 jobtmp
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:27 sysout
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:27 tmp
 drwxrwxr-x 2 mvstest1 apps 4096 Oct 17 09:27 wrk
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> l data
 -rw-rw-r-- 1 mvstest1 apps  8192 Oct 17 09:48 ar.customer.master
 -rw-rw-r-- 1 mvstest1 apps  1280 Oct 17 09:48 ar.sales.items
 -rw-rw-r-- 1 mvstest1 apps 13952 Oct 17 09:48 gl.account.master_000001
 -rw-rw-r-- 1 mvstest1 apps  1600 Oct 17 09:48 gl.account.trans_000001
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> jar100.ksh  <-- execute JCL/script
                                             ==========
 111017:105233:JAR100: Begin Job=JAR100
 111017:105233:JAR100: /home/mvstest1/testlibs/jcls/jar100.ksh
 111017:105233:JAR100: Arguments:
 111017:105233:JAR100: TESTPROD=T000
 111017:105233:JAR100: RUNLIBS=/home/mvstest1/testlibs
 111017:105233:JAR100: RUNDATA=/home/mvstest1/testdata
 111017:105233:JAR100: JTMP=jobtmp/JAR100 SYOT=sysout/JAR100
 111017:105233:JAR100: RUNDATE=20111017
 111017:105233:JAR100: ******** Begin Step S0010 car100 (#1) ********
 111017:105233:JAR100: file: CUSTMAS=data/ar.customer.master fsize=8.0K
 111017:105233:JAR100: file: NALIST=data/ar.customer.nameadrs.list100 fsize=
 111017:105233:JAR100: file: SYSOUT=sysout/JAR100/S0010_SYSOUT fsize=
 111017:105233:JAR100: Executing--> cobrun -F /home/mvstest1/testlibs/cblx/car100
 111017:105233:JAR100: Job Times: Begun=10:52:33 End=10:52:33Elapsed=00:00:00
 111017:105233:JAR100: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111017:105233:JAR100: JobEnd=Normal, StepsExecuted=1, LastStep=S0010
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> l data
 -rw-rw-r-- 1 mvstest1 apps  8192 Oct 17 09:48 ar.customer.master
 -rw-rw-r-- 1 mvstest1 apps  2858 Oct 17 10:52 ar.customer.nameadrs.list100
 -rw-rw-r-- 1 mvstest1 apps  1280 Oct 17 09:48 ar.sales.items
 -rw-rw-r-- 1 mvstest1 apps 13952 Oct 17 09:48 gl.account.master_000001
 -rw-rw-r-- 1 mvstest1 apps  1600 Oct 17 09:48 gl.account.trans_000001
 <@uvsoft4:mvstest1:/home/mvstest1/testdata> vi data/ar.customer.nameadrs.list100
 CAR100: CUSTOMER NAME & ADDRESS LIST    111017
 130140    EVERGREEN MOTORS LTD.    1815 BOWEN ROAD          NANAIMO BC V9S1H1
 132588    GEECOE GENERATOR SERVICESUNIT 170 - 2851 SIMPSON  RICHMOND BC V6X2R2
 139923    JOHNSTONE BOILER & TANKS 1250 EAST PENDER STREET  VANCOUVER BC V5L1W1
                  - - - 29 lines omitted - - -
 Note - see the complete report at MVSJCL.htm#1T3

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3L1. JCL/COBOL executions using VU demo files

Console-Logging & Job-Logging

Console-Logging captures the entire login session from login to logout (vs the 'joblog' script which captures the log only for 1 job at a time). We used console-logging to capture the logs shown for the activities shown on the previous pages (JCL/COBOL conversions, COBOL compiles, jar100 execution).

On the next we will re-execute jar100 using job-logging which is more convenient for programmers because you see the log for each job while debugging.

First we will discuss console-logging which is better for operators because it captures the entire login session, including any commands between jobs and any responses to prompts. Second we will discuss 'job-logging' on the following page.

Notes re: Console Logging

  1. Console-Logging will capture the entire login session from login to logout (vs the 'joblog' script which captures the log only for 1 job at a time).

  2. Console-logging captures ALL screen I/O including any reponses to prompts, and any unix commands the operator might do between running jobs.

  3. Console-logging requires subdirs matching your login name ($LOGNAME) to be setup in $APPSADM/log1,log2,log3.

  4. The log is collected in $APPSADM/log1/$LOGNAME and processed to $APPSADM/log2/$LOGNAME (to remove screen control characters), either by a nightly scheduled cron job, or by logging off & back on.

  5. If operators need to see the console log, they need to logoff & back on They can then use the 'logview' script to see the recent logs.

  6. To activate console-logging you must uncomment the 9 '##' lines near the end of your .profile.

  7. You must also have copied the supplied $APPSADM/env/kshrc to your .kshrc (or $APPSADM/env/bashrc to .bashrc if you use the bash shell vs Korn shell) .kshrc/.bashrc set up the PS1 prompt expected by the logfix processing.

  8. .kshrc/.bashrc also contain the same aliases & umask as the common_profile. These would otherwise be lost by the 'script' command (at end of profile) because 'script' invokes another level of the shell.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3L2. JCL/COBOL executions using VU demo files

Job-Logging

Job-Logging is intended for programmer testing & captures the console output messages into a file for review/print as required. Just precede your jobname with 'joblog' which is a VU script that uses the unix 'tee' command to write the output messages to a file as well as the screen. For example:

re-execute jar100.ksh with job-logging


 #1.  login mvstest1 --> /home/mvstest1
 #1a. OR: login --> your homedir

 #2. cdd   --> $RUNDATA ($HOME/testdata), alias cdd='cd $RUNDATA'
     ===

 #3. joblog jar100.ksh   <-- script 'joblog' writes msgs into subdir 'joblog'
     =================     - names file same as jobname, changing .ksh to .log

 #4. vi joblog/jar100.log       <-- review joblog (for long jobs)
     =====================

 #4a. uvlp12 joblog/jar100.log   <-- OR print joblog (to document problems)
      ========================

joblog/jar100.log

 111017:181945:JAR100: Begin Job=JAR100
 111017:181945:JAR100: /home/mvstest1/testlibs/jcls/jar100.ksh
 111017:181945:JAR100: Arguments:
 111017:181945:JAR100: TESTPROD=T000
 111017:181945:JAR100: RUNLIBS=/home/mvstest1/testlibs
 111017:181945:JAR100: RUNDATA=/home/mvstest1/testdata
 111017:181945:JAR100: JTMP=jobtmp/JAR100 SYOT=sysout/JAR100
 111017:181945:JAR100: RUNDATE=20111017
 111017:181945:JAR100: ******** Begin Step S0010 car100 (#1) ********
 111017:181945:JAR100: file: CUSTMAS=data/ar.customer.master fsize=8.0K
 111017:181945:JAR100: file: NALIST=data/ar.customer.nameadrs.list100 fsize=4.0K
 111017:181945:JAR100: file: SYSOUT=sysout/JAR100/S0010_SYSOUT fsize=
 111017:181945:JAR100: Executing--> cobrun -F /home/mvstest1/testlibs/cblx/car100
 111017:181945:JAR100: Job Times: Begun=18:19:45 End=18:19:45 Elapsed=00:00:00
 111017:181945:JAR100: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111017:181945:JAR100: JobEnd=Normal, StepsExecuted=1, LastStep=S0010

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M0. JCL/COBOL executions using VU demo files

executing other demo JCL/scripts

We have already executed the 1st (jar100) of our demo JCL/scripts on page '3J1'. We will now execute all the demo JCL/scripts but with minimal output shown (usually just the joblog, perhaps with a few notes).

If you wish you could execute them all as follows. We are using joblogging so you can later review all the joblogs & investigate/rerun any failures.


 #0a. Login mvstest1 --> /home/mvstest1
      or Login yourself --> your homedir

 #0b. cdd --> $HOME/testdata
      ======================
      - best to be in testdata/ to easily inspect datafiles in subdir data/...

 #1. joblog jar100.ksh
     =================
 #2. joblog jar200.ksh
     =================
 #3. joblog jgl100.ksh
     =================
 #4. joblog jgl200.ksh
     =================
 #5. joblog jgl300.ksh
     =================
 #6. joblog jgl320.ksh
     =================
 #7. joblog ftpput1.ksh
     ==================
 #8. joblog mailsmtp.ksh
     ===================
 #9. joblog qjtlist.ksh
     ==================
 #10. joblog eztlist.ksh
      ==================

 #9. vi joblog/*  <-- review all joblogs, listings start on next page --->
     ===========

 #10. investigate/rerun any failures you get at your site
      ===================================================
Note
  • see all 8 demo JCL/scripts listed on pages '2A1' thru '2H1'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M1. JCL/COBOL executions using VU demo files


 #1. joblog jar100.ksh
     =================

jar100.log - 1 step COBOL

 111017:181945:JAR100: Begin Job=JAR100
 111017:181945:JAR100: /home/mvstest1/testlibs/jcls/jar100.ksh
 111017:181945:JAR100: Arguments:
 111017:181945:JAR100: TESTPROD=T000
 111017:181945:JAR100: RUNLIBS=/home/mvstest1/testlibs
 111017:181945:JAR100: RUNDATA=/home/mvstest1/testdata
 111017:181945:JAR100: JTMP=jobtmp/JAR100 SYOT=sysout/JAR100
 111017:181945:JAR100: RUNDATE=20111017
 111017:181945:JAR100: ******** Begin Step S0010 car100 (#1) ********
 111017:181945:JAR100: file: CUSTMAS=data/ar.customer.master fsize=8.0K
 111017:181945:JAR100: file: NALIST=data/ar.customer.nameadrs.list100 fsize=4.0K
 111017:181945:JAR100: file: SYSOUT=sysout/JAR100/S0010_SYSOUT fsize=
 111017:181945:JAR100: Executing--> cobrun -F /home/mvstest1/testlibs/cblx/car100
 111017:181945:JAR100: Job Times: Begun=18:19:45 End=18:19:45 Elapsed=00:00:00
 111017:181945:JAR100: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111017:181945:JAR100: JobEnd=Normal, StepsExecuted=1, LastStep=S0010

Notes re 'jar100.ksh'

  1. See original mainframe JCL at '2A1' & converted script at '2A2'

  2. You can investigate the input file with 'uvhd' as follows (can not use 'vi' because of packed fields & no LineFeeds)

    uvhd data/ar.customer.master r256
    =================================
  1. You can inspect the printer output report with 'vi' as follows:

    vi data/ar.customer.master.list100
    ==================================
    - should match the report shown at MVSJCL.htm#1T3

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M2. JCL/COBOL executions using VU demo files


 #2. joblog jar200.ksh
     =================

jar200.log - SORT + COBOL

 111018:150508:JAR200: Begin Job=JAR200
 111018:150508:JAR200: /home/mvstest1/testlibs/jcls/jar200.ksh
 111018:150508:JAR200: Arguments:
 111018:150508:JAR200: TESTPROD=T000
 111018:150508:JAR200: RUNLIBS=/home/mvstest1/testlibs
 111018:150508:JAR200: RUNDATA=/home/mvstest1/testdata
 111018:150508:JAR200: JTMP=jobtmp/JAR200 SYOT=sysout/JAR200
 111018:150508:JAR200: RUNDATE=20111018
 111018:150508:JAR200: ******** Begin Step S0010 sort (#1) ********
 111018:150508:JAR200: file: SORTIN1=data/ar.sales.items fsize=4.0K
 111018:150508:JAR200: file: SORTOUT=jobtmp/JAR200/__tempsls fsize=
 111018:150508:JAR200: file: SYSIN=jobtmp/JAR200/S0010_sort_SYSIN fsize=
 111018:150508:JAR200: Executing--> uvsort "fili1=data/ar.sales.items,typ=RSF,rcs=64,filo1=...
 111018:150508:JAR200: uvsort fili1=data/ar.sales.items,filo1=jobtmp/JAR200/__tempsls
 111018:150508:JAR200: EOF fili01 20 rds, 1280 size; data/ar.sales.items
 111018:150508:JAR200: sort phase complete, used 64 megabytes, sort output begin
 111018:150508:JAR200: EOF filo01 16 wrts, 1024 size; jobtmp/JAR200/__tempsls
 111018:150508:JAR200: ******** Begin Step S0020 car200 (#2) ********
 111018:150508:JAR200: file: SALEDTL=jobtmp/JAR200/__tempsls fsize=4.0K
 111018:150508:JAR200: file: CUSTMAS=data/ar.customer.master.indexed fsize=12K
 111018:150508:JAR200: file: SALELST=data/ar.sales.list fsize=
 111018:150508:JAR200: Executing--> cobrun -F /home/mvstest1/testlibs/cblx/car200
 111018:150508:JAR200: Job Times: Begun=15:05:08 End=15:05:08 Elapsed=00:00:00
 111018:150508:JAR200: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111018:150508:JAR200: JobEnd=Normal, StepsExecuted=2, LastStep=S0020

Notes re 'jar200.ksh'

  1. See original mainframe JCL at '2B1' & converted script at '2B2'

  2. Step1 SORT/uvsort sorts ar.sales.items by product code. Step2 COBOL lists sales.items adding customer name by looking up Indexed file ar.customer.master.indexed via customer#.

  3. Note that sorted sales file (DSN=&&TEMPSLS on mainframe) has been converted to jobtmp/JAR200/__tempsls in the unix script. Investigate as follows:

    uvhd jobtmp/JAR200/__tempsls r64
    ================================
  1. See the output report as follows:

      vi data/ar.sales.list
      =====================
      - should match the report shown at MVSJCL.htm#1T5

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M3. JCL/COBOL executions using VU demo files


 #3. joblog jgl100.ksh
     =================

jgl100.log - GDG files with COBOL

 111018:151224:JGL100: Begin Job=JGL100
 111018:151224:JGL100: /home/mvstest1/testlibs/jcls/jgl100.ksh
 111018:151224:JGL100: Arguments:
 111018:151224:JGL100: TESTPROD=T000
 111018:151224:JGL100: RUNLIBS=/home/mvstest1/testlibs
 111018:151224:JGL100: RUNDATA=/home/mvstest1/testdata
 111018:151224:JGL100: JTMP=jobtmp/JGL100 SYOT=sysout/JGL100
 111018:151224:JGL100: RUNDATE=20111018
 111018:151224:JGL100: ******** Begin Step S0010 cgl100 (#1) ********
 111018:151224:JGL100: gen0 ACCTMAS=data/gl.account.master_000001 insize=548K
 111018:151224:JGL100: gen+1 ACTLIST=jobtmp/JGL100/GDG/data/gl.account.acntlist_000001 gens=31
 111018:151224:JGL100: file: SYSOUT=sysout/JGL100/S0010_SYSOUT fsize=
 111018:151224:JGL100: Executing--> cobrun -F /home/mvstest1/testlibs/cblx/cgl100
 111018:151224:JGL100: Job Times: Begun=15:12:24 End=15:12:24 Elapsed=00:00:00
 111018:151224:JGL100: moving jobtmp/JGL100/GDG/subdir/files back to $RUNDATA/subdirs/
 111018:151224:JGL100: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111018:151224:JGL100: JobEnd=Normal, StepsExecuted=1, LastStep=S0010

Notes re 'jgl100.ksh'

  1. See original mainframe JCL at '2C1' & converted script at '2C2'

  2. Inspect the output report as follows:

      vi data/gl.account.acntlist_000001
      ==================================
      - should match the report shown at MVSJCL.htm#1T7
  1. This job demonstrates GDG files - input GDG's converted to exportgen0 & output GDG files converted to exportgen1 (Korn shell functions).

  2. The 2 GDG files are defined in jgl100.ksh on page '2C2' as follows:

      exportgen0 0 ACCTMAS data/gl.account.master_
      ============================================
      exportgen1 +1 ACTLIST $JGDG/data/gl.account.acntlist_
      =====================================================
  1. Note the trailing '_' underscore identifies a GDG file. 'exportgen0' determines the current input generation (000001 in this case) 'exportgen1' determines the next output generation (also 000001 here)

  2. Rerun the job & observe that the output generation will be _000002.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M4. JCL/COBOL executions using VU demo files


 #4. joblog jgl200.ksh
     =================

jgl200.log - GDG files + SORT + COBOL

 111018:151238:JGL200: Begin Job=JGL200
 111018:151238:JGL200: /home/mvstest1/testlibs/jcls/jgl200.ksh
 111018:151238:JGL200: Arguments:
 111018:151238:JGL200: TESTPROD=T000
 111018:151238:JGL200: RUNLIBS=/home/mvstest1/testlibs
 111018:151238:JGL200: RUNDATA=/home/mvstest1/testdata
 111018:151238:JGL200: JTMP=jobtmp/JGL200 SYOT=sysout/JGL200
 111018:151238:JGL200: RUNDATE=20111018
 111018:151238:JGL200: ******** Begin Step S0010 sort (#1) ********
 111018:151238:JGL200: file: SORTIN1=data/gl.account.tran1 fsize=4.0K
 111018:151238:JGL200: gen+1 SORTOUT=jobtmp/JGL200/GDG/data/gl.account.trans_000002 gens=31
 111018:151238:JGL200: file: SYSIN=/home/mvstest1/testlibs/parms/pgl200s1 fsize=4.0K
 111018:151238:JGL200: Executing--> uvsort "fili1=data/gl.account.tran1,typ=RSF,rcs=80,filo1=...
 111018:151238:JGL200: uvsort fili1=data/gl.account.tran1,filo1=jobtmp/JGL200/GDG/data/gl.account.trans_000002
 111018:151238:JGL200: EOF fili01 20 rds, 1600 size; data/gl.account.tran1
 111018:151238:JGL200: sort phase complete, used 64 megabytes, sort output begin
 111018:151238:JGL200: EOF filo01 20 wrts, 1600 size; jobtmp/JGL200/GDG/data/gl.account.trans_000002
 111018:151238:JGL200: ******** Begin Step S0020 cgl200 (#2) ********
 111018:151238:JGL200: gen+1 GLTRANS=jobtmp/JGL200/GDG/data/gl.account.trans_000002 gens=31
 111018:151238:JGL200: gen0 GLMSOLD=data/gl.account.master_000001 insize=4.0K
 111018:151239:JGL200: gen+1 GLMSNEW=jobtmp/JGL200/GDG/data/gl.account.master_000002 gens=31
 111018:151239:JGL200: Executing--> cobrun -F /home/mvstest1/testlibs/cblx/cgl200
 111018:151239:JGL200: Job Times: Begun=15:12:38 End=15:12:39 Elapsed=00:00:01
 111018:151239:JGL200: moving jobtmp/JGL200/GDG/subdir/files back to $RUNDATA/subdirs/
 111018:151239:JGL200: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111018:151239:JGL200: JobEnd=Normal, StepsExecuted=2, LastStep=S0020

Notes re 'jgl200.ksh'

  1. See original mainframe JCL at '2D1' & converted script at '2D2'

  2. Can you reconcile the GDG exportgen0/exportgen1 functions in the listing on page '2D2' to the GDG _generations you see in this console log.

  3. Also see '11B1' data file comparison of before & after updated files, using 'uvcmpFA1' required to compare data files without LineFeeds and with packed fields present.

  4. Note that we can use 'diff' to compare text files with LineFeeds & see a diff demo on page '11A1'.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M5. JCL/COBOL executions using VU demo files


 #5. joblog jgl300.ksh
     =================

jgl300.log - IEBGENER + IDCAMS + COND

 111018:150726:JGL300: Begin Job=JGL300
 111018:150726:JGL300: /home/mvstest1/testlibs/jcls/jgl300.ksh
 111018:150726:JGL300: Arguments:
 111018:150726:JGL300: TESTPROD=T000
 111018:150726:JGL300: RUNLIBS=/home/mvstest1/testlibs
 111018:150726:JGL300: RUNDATA=/home/mvstest1/testdata
 111018:150726:JGL300: JTMP=jobtmp/JGL300 SYOT=sysout/JGL300
 111018:150726:JGL300: RUNDATE=20111018
 111018:150726:JGL300: ******** Begin Step S0010 iebgener (#1) ********
 111018:150726:JGL300: gen0 SYSUT1=data/gl.account.master_000002 insize=452K
 111018:150726:JGL300: file: SYSUT2=jobtmp/JGL300/__tempglm fsize=
 111018:150726:JGL300: Executing--> uvcp "fili1=data/gl.account.master_000002,typ=RSF,rcs=80,filo1=jobtmp/JGL300/__tempglm,...
 111018:150726:JGL300: uvcp fili1=data/gl.account.master_000002,filo1=jobtmp/JGL300/__tempglm
 111018:150726:JGL300: EOF fili01 175 rds, 13952 size; data/gl.account.master_000002
 111018:150726:JGL300: EOF filo01 175 wrts, 14000 size; jobtmp/JGL300/__tempglm
 111018:150726:JGL300: ******** Begin Step S0020 idcams (#2) ********
 111018:150726:JGL300: file: TEMPGLM=jobtmp/JGL300/__tempglm fsize=16K
 111018:150726:JGL300: gen+1 ACNTMAS=jobtmp/JGL300/GDG/data/gl.account.master_000003 gens=31
 111018:150726:JGL300: file: SYSIN=jobtmp/JGL300/S0020_idcams_SYSIN fsize=
 111018:150726:JGL300: Executing--> uvcp "fili1=jobtmp/JGL300/__tempglm,typ=RSF,rcs=80,filo1=...
 111018:150726:JGL300: uvcp fili1=jobtmp/JGL300/__tempglm,filo1=jobtmp/JGL300/GDG/data/gl.account.master_000003
 111018:150726:JGL300: EOF fili01 175 rds, 14000 size; jobtmp/JGL300/__tempglm
 111018:150726:JGL300: EOF filo01 175 wrts, 14000 size; jobtmp/JGL300/GDG/data/gl.account.master_000003
 111018:150726:JGL300: Job Times: Begun=15:07:26 End=15:07:26 Elapsed=00:00:00
 111018:150726:JGL300: moving jobtmp/JGL300/GDG/subdir/files back to $RUNDATA/subdirs/
 111018:150726:JGL300: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111018:150726:JGL300: JobEnd=Normal, StepsExecuted=2, LastStep=S0020

Notes re 'jgl300.ksh'

  1. See original mainframe JCL at '2E1' & converted script at '2E2'

  2. This job demonstrates 'COND'. If you cause a failure in step 1, you would observe that step 2 would be skipped.

  3. An easy way to cause step 1 to fail would be to change the input filename (might change 'ar.customer.master_' to 'ar.customer.masterXXX_').

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M6. JCL/COBOL executions using VU demo files


 #6. joblog jgl320.ksh
     =================

jgl320.log - IEBGENER + IDCAMS + IF/THEN/ELSE

 111018:170354:JGL320: Begin Job=JGL320
 111018:170354:JGL320: /home/mvstest1/testlibs/jcls/jgl320.ksh
 111018:170354:JGL320: Arguments:
 111018:170354:JGL320: TESTPROD=T000
 111018:170354:JGL320: RUNLIBS=/home/mvstest1/testlibs
 111018:170354:JGL320: RUNDATA=/home/mvstest1/testdata
 111018:170354:JGL320: JTMP=jobtmp/JGL320 SYOT=sysout/JGL320
 111018:170354:JGL320: RUNDATE=20111018
 111018:170354:JGL320: ******** Begin Step S0010 iebgener (#1) ********
 111018:170354:JGL320: gen0 SYSUT1=data/gl.account.master_000003 insize=692K
 111018:170354:JGL320: file: SYSUT2=jobtmp/JGL320/__tempglm fsize=
 111018:170354:JGL320: Executing--> uvcp "fili1=data/gl.account.master_000003,typ=RSF,rcs=80,filo1=jobtmp/JGL320/__tempglm,...
 111018:170354:JGL320: uvcp fili1=data/gl.account.master_000003,filo1=jobtmp/JGL320/__tempglm
 111018:170354:JGL320: EOF fili01 175 rds, 14000 size; data/gl.account.master_000003
 111018:170354:JGL320: EOF filo01 175 wrts, 14000 size; jobtmp/JGL320/__tempglm
 111018:170354:JGL320: ******** Begin Step S0020 idcams (#2) ********
 111018:170354:JGL320: file: TEMPGLM=jobtmp/JGL320/__tempglm fsize=16K
 111018:170354:JGL320: gen+1 ACNTMAS=jobtmp/JGL320/GDG/data/gl.account.master_000004 gens=31
 111018:170354:JGL320: file: SYSIN=jobtmp/JGL320/S0020_idcams_SYSIN fsize=
 111018:170354:JGL320: Executing--> uvcp "fili1=jobtmp/JGL320/__tempglm,typ=RSF,rcs=80,filo1=...
 111018:170354:JGL320: uvcp fili1=jobtmp/JGL320/__tempglm,filo1=jobtmp/JGL320/GDG/data/gl.account.master_000004
 111018:170354:JGL320: EOF fili01 175 rds, 14000 size; jobtmp/JGL320/__tempglm
 111018:170354:JGL320: EOF filo01 175 wrts, 14000 size; jobtmp/JGL320/GDG/data/gl.account.master_000004
 111018:170354:JGL320: Job Times: Begun=17:03:54 End=17:03:54 Elapsed=00:00:00
 111018:170354:JGL320: moving jobtmp/JGL320/GDG/subdir/files back to $RUNDATA/subdirs/
 111018:170354:JGL320: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111018:170354:JGL320: JobEnd=Normal, StepsExecuted=2, LastStep=S0020

Notes re 'jgl320.ksh'

  1. See original mainframe JCL at '2F1' & converted script at '2F2'

  2. This job demonstrates 'IF/THEN/FI'. If you cause a failure in step 1, you would observe that step 2 would be skipped.

  3. An easy way to cause step 1 to fail would be to change the input filename (might change 'ar.customer.master_' to 'ar.customer.masterXXX_').

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M7. JCL/COBOL executions using VU demo files


 #7. joblog ftpput1.ksh
     ==================

ftpput1.log - FTP (to same machine)

 111018:162507:FTPPUT1: Begin Job=FTPPUT1
 111018:162507:FTPPUT1: /home/mvstest1/testlibs/jcls/ftpput1.ksh
 111018:162507:FTPPUT1: Arguments:
 111018:162507:FTPPUT1: TESTPROD=T000
 111018:162507:FTPPUT1: RUNLIBS=/home/mvstest1/testlibs
 111018:162507:FTPPUT1: RUNDATA=/home/mvstest1/testdata
 111018:162507:FTPPUT1: JTMP=jobtmp/FTPPUT1 SYOT=sysout/FTPPUT1
 111018:162507:FTPPUT1: RUNDATE=20111018
 111018:162507:FTPPUT1: ******** Begin Step S0010 ftp (#1) ********
 111018:162507:FTPPUT1: file: INPUT1=jobtmp/FTPPUT1/S0010_ftp_INPUT1 fsize=
 111018:162507:FTPPUT1: gen0 FTPPUT01=data/gl.account.trans_000002 insize=4.0K
 111018:162507:FTPPUT1: file: FTPTMP2=jobtmp/FTPPUT1/S0010_ftp_FTPTMP2 fsize=
 111018:162507:FTPPUT1: Executing--> ftp -i -n -u -v <jobtmp/FTPPUT1/S0010_ftp_FTPTMP2
 Connected to 127.0.0.1.
 220 (vsFTPd 2.0.5)
 331 Please specify the password.
 230 Login successful.
 250 Directory successfully changed.
 200 Switching to Binary mode.
 local: data/gl.account.trans_000002 remote: data/gl.account.trans_000002
 550 Permission denied.
 Passive mode refused.  Turning off passive mode.
 200 PORT command successful. Consider using PASV.
 150 Ok to send data.
 226 File receive OK.
 1600 bytes sent in 8.5e-05 seconds (1.8e+04 Kbytes/s)
 221 Goodbye.
 111018:162508:FTPPUT1: Job Times: Begun=16:25:07 End=16:25:08 Elapsed=00:00:01
 111018:162508:FTPPUT1: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111018:162508:FTPPUT1: JobEnd=Normal, StepsExecuted=1, LastStep=S0010

Notes re 'ftpput1.ksh'

  1. See original mainframe JCL at '2G1' & converted script at '2G2'

  2. This job FTP's from the current user 'mvstest1' (or yourself) to userid 'mvstest' at IP# 127.0.0.1, which is the localhost (same mchine). Setp userid mvstest if not existing or change the script to a valid userid/password on your machine.

  3. The login/home directory of mvstest must have directory 'testdata' which must have subdir 'data' because the FTP script does a 'cd testdata' & the filename sent is 'data/gl.account.trans_000002'.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M8. JCL/COBOL executions using VU demo files


 #8. joblog mailsmtp.ksh
     ===================

mailsmtp.log - IEBGENER/SMTP to appsadm

 111018:165934:MAILSMTP: Begin Job=MAILSMTP
 111018:165934:MAILSMTP: /home/mvstest1/testlibs/jcls/mailsmtp.ksh
 111018:165934:MAILSMTP: Arguments:
 111018:165934:MAILSMTP: TESTPROD=T000
 111018:165934:MAILSMTP: RUNLIBS=/home/mvstest1/testlibs
 111018:165934:MAILSMTP: RUNDATA=/home/mvstest1/testdata
 111018:165934:MAILSMTP: JTMP=jobtmp/MAILSMTP SYOT=sysout/MAILSMTP
 111018:165934:MAILSMTP: RUNDATE=20111018
 111018:165934:MAILSMTP: ******** Begin Step S0010 iebgener (#1) ********
 111018:165934:MAILSMTP: file: SYSUT2=sysout/MAILSMTP/S0010_SYSUT2_B_SMTP fsize=
 111018:165934:MAILSMTP: file: SYSUT1=jobtmp/MAILSMTP/S0010_iebgener_SYSUT1 fsize=
 111018:165934:MAILSMTP: Executing--> sendmail -t <jobtmp/MAILSMTP/S0010_iebgener_SYSUT1
 111018:165934:MAILSMTP: Job Times: Begun=16:59:34 End=16:59:34 Elapsed=00:00:00
 111018:165934:MAILSMTP: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111018:165934:MAILSMTP: JobEnd=Normal, StepsExecuted=1, LastStep=S0010

Notes re 'mailsmtp.ksh'

  1. See original mainframe JCL at '2H1' & converted script at '2H2'

  2. This job demos sending mail via IEBGENER SYSOUT=(B,SMTP) which is converted to unix 'sendmail'.

  3. After running this job, read the mail by switching to another terminal, logging in as appsadm, execute the 'mail' program,& make a null entry to read any mail.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M9. JCL/COBOL executions using VU demo files


 #9. joblog qjtlist.ksh
     ==================

qjtlist.log - QuikJob to uvcopy

 111105:095830:QJTLIST: Begin Job=QJTLIST
 111105:095830:QJTLIST: /home/mvstest1/testlibs/jcls/qjtlist.ksh
 111105:095830:QJTLIST: Arguments:
 111105:095830:QJTLIST: TESTPROD=T000
 111105:095830:QJTLIST: RUNLIBS=/home/mvstest1/testlibs
 111105:095830:QJTLIST: RUNDATA=/home/mvstest1/testdata
 111105:095830:QJTLIST: JTMP=jobtmp/QJTLIST SYOT=sysout/QJTLIST
 111105:095830:QJTLIST: RUNDATE=20111105
 111105:095830:QJTLIST: ******** Begin Step S0010 quikjob (#1) ********
 111105:095830:QJTLIST: file: SYSUT1=data/ar.customer.master fsize=8.0K
 111105:095830:QJTLIST: file: SYSPRINT=data/ar.custmas.tellist fsize=4.0K
 111105:095830:QJTLIST: file: SYSIN=/home/mvstest1/testlibs/parms/qjtlist1 fsize=4.0K
 111105:095830:QJTLIST: Executing--> uvcopy /home/mvstest1/testlibs/qjs/qjtlist1
 111105:095830:QJTLIST: uvcopy ver=20111103 pf=/home/mvstest1/testlibs/qjs/qjtlist1
 uvcopy LNX L64  license=111103_99V_930630 site=UV_Software
 111105:095830:QJTLIST: EOF fili01 rds=32 size=8192: data/ar.customer.master
 111105:095830:QJTLIST: EOF filo01 wrts=34 size=1890: data/ar.custmas.tellist
 111105:095830:QJTLIST: Job Times: Begun=09:58:30 End=09:58:30 Elapsed=00:00:00
 111105:095830:QJTLIST: EOF filr01 rds=3 size=6144: /home/mvstest1/testdata/ctl/gdgctl51I
 111105:095830:QJTLIST: JobEnd=Normal, StepsExecuted=1, LastStep=S0010
  1. See original mainframe JCL at '2I1' & converted script at '2I2'

  2. Inspect output report as follows:

      vi data/ar.custmas.tellist
      ==========================
      - 1st few lines shown below

qjtlist sample output

  qjtlist1   customer master telephone list  20111026
  cust#   company-name               telephone     contact-name
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 130140  EVERGREEN MOTORS LTD.      250-754-5531   LARRY WRENCH
 132588  GEECOE GENERATOR SERVICES  604-278-4488   HARRY LIGHT
 139923  JOHNSTONE BOILER & TANKS   604-320-1845   GEORGE BROWN
             - - - 29 lines omitted - - -
Note
  • see the original QuikJob code on page '9B1'
  • see the converted eqivalent uvcopy code on page '9B2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3M10. JCL/COBOL executions using VU demo files


 #10. joblog eztlist.ksh
      ==================

eztlist.log - EasyTrieve to uvcopy

 111028:102328:EZTLIST: Begin Job=EZTLIST
 111028:102328:EZTLIST: /home/mvstest/testlibs/jcls/eztlist.ksh
 111028:102328:EZTLIST: Arguments:
 111028:102328:EZTLIST: TESTPROD=
 111028:102328:EZTLIST: RUNLIBS=/home/mvstest/testlibs
 111028:102328:EZTLIST: RUNDATA=/home/mvstest/testdata
 111028:102328:EZTLIST: JTMP=jobtmp/EZTLIST SYOT=sysout/EZTLIST
 111028:102328:EZTLIST: RUNDATE=20111028
 111028:102328:EZTLIST: ******** Begin Step S0010 eztpa00 (#1) ********
 111028:102328:EZTLIST: file: CUSTMAS=data/ar.customer.master fsize=12K
 111028:102328:EZTLIST: file: EZTLIST=data/ar.customer.eztlist fsize=4.0K
 111028:102328:EZTLIST: file: SYSIN=/home/mvstest/testlibs/parms/eztlist1 fsize=4.0K
 111028:102328:EZTLIST: Executing--> uvcopy /home/mvstest/testlibs/ezts/eztlist1
 111028:102328:EZTLIST: uvcopy ver=20110802 pf=/home/mvstest/testlibs/ezts/eztlist1
 uvcopy DISAM ext=.dat LNX L64  license=110802_99V_930630 site=UV_Software
 data/ar.customer.master = default fili01 - null accept or reenter ?
 data/ar.customer.eztlist = default filo02 - null accept or reenter ?
   TOTAL_RECORDS  00032
 111028:102330:EZTLIST: EOF fili01 rds=32 size=8192: data/ar.customer.master
 111028:102330:EZTLIST: EOF filo02 wrts=32 size=2560: data/ar.customer.eztlist
 111028:102330:EZTLIST: Job Times: Begun=10:23:28 End=10:23:30 Elapsed=00:00:02
 111028:102330:EZTLIST: EOF filr01 rds=5 size=10240: /home/mvstest/testdata/ctl/gdgctl51I
 111028:102330:EZTLIST: JobEnd=Normal, StepsExecuted=1, LastStep=S0010
  1. See original mainframe JCL at '2J1' & converted script at '2J2'

  2. Inspect output report as follows:

      vi data/ar.custmas.eztlist
      ==========================
      - 1st few lines shown below

eztlist sample output

 130140  EVERGREEN MOTORS LTD.      250-754-5531   LARRY WRENCH
 132588  GEECOE GENERATOR SERVICES  604-278-4488   HARRY LIGHT
 139923  JOHNSTONE BOILER & TANKS   604-320-1845  GEORGE BROWN
             - - - 29 lines omitted - - -
Note
  • see the original EasyTrieve code on page '9C1'
  • see the converted eqivalent uvcopy code on page '9C2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3N1. JCL/COBOL executions using VU demo files

Activating Console-Logging

If desired you could activate console-logging & rerun the demo jobs.

Console-Logging will capture the entire login session from login to logout vs the 'joblog' script intended for programmer test/debug to capture the log for 1 job at a time.

Note that console-logging captures all screen I/O including any reponses to prompts & commands the operator might do between running jobs.

See complete details of console logging at ADMjobs.htm#Part_6 but here is the short version of activating. Also see page '3B1' which shows the subdirs required in /home/appsadm where logs are collected. We will assume that you are 'mvstest1'.


 #1. login --> your homedir

 #2a. mkdir $APPSADM/log1/mvstest1  <-- subdir current log being created
 #2b. mkdir $APPSADM/log2/mvstest1  <-- subdir current months processed logs
 #2c. mkdir $APPSADM/log3/mvstest1  <-- subdir last months logs

 #3. vi .profile     <-- edit your profile
     ===========
 #3a. uncomment the 9 '##' lines near the end of your profile
      - see profile listing at ADMjobs.htm#1C1
 #3b. :wq

 #4. Logout & Log back in to start console logging

 #5. Run some jobs (jar100.ksh for example)
 #5a. cdd          - change to $RUNDATA directory
 #5b. l            - list subdirs in $RUNDATA
 #5c. jar100.ksh  - run 1st job (COBOL program car100.cbl)
 #5d. l data       - list data subdir

 #6. Logout/Login to process the log
     - copies from $APPSADM/log1/mvstest1/date_time to $APPSADM/log2/mvstest1/.
       removing screen control codes that would make log unreadable

 #7. logview    <-- script lists your available log filenames
     =======      - prompts for file# to view (#1 is latest)
 #7a. --> 1 <-- enter '1' to see latest log
 #7b. --> 0 <-- enter '0' to quit

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3O1. JCL/COBOL executions using VU demo files

Test/debug JCL/scripts

Most jobs can be debugged by comparing the output files & sysout reports to the mainframe files & reports. Here are some tips for the more difficult cases. We assume that your profile has RUNDATA=$HOME/testdata (debugging in homedir), so you do not affect other programmers working. Your might also have your own set of libraries (RUNLIBS=$HOME/testlibs), OR RUNLIBS might point to a common set of libraries (JCL/scripts, COBOL programs, parms, quikjobs, etc).

testdata subdirs

Please study the testdata subdirs below & relate them to the debug strategies listed following the directory illustrations. Note the meaning of */0 flags:

'*' - identifies subdirs that have files at the begining of each test/debug

 '0' - identifies subdirs that are cleared by the 'testdatainit' script
     - run 'testdatainit' before each test/debug to clear all prior test files
       so you will see the results of each test/debug run
 /home/mvstest1        <--- userid for testing OR your homedir
 :-----testdata          - data files superdir
 :     :--*--data        - data files
 :     :--*--data_bkup   - backup, allow clear data/.. to files for 1 job debug
 :     :--*--dataMF      - datafiles from MainFrame for comparison
 :     :--*--ctl         - GDG control file
 :     :--0--jobctl      - jobstop control files to debug JCL/script
 :     :--0--joblog      - programmer debug log files
 :     :--0--jobmsgs     - status msgs from JCL/scripts (step begin/end)
 :     :--0--jobtimes    - job/step times date stamped history files
 :     :--0--jobtmp      - temporary files for SYSIN data & GDG temp files
 :     :     :----JOBXX - jobtmp subdir created by jobset51 (script line 10)
 :     :     :    :-----GDG
 :     :     :    :     :-----data - new GDG files restored to data/... at EOJ
 :     :--0--sysout      - SYSOUT printer files
 :     :     :----yymmdd - date stamped subdir for print files
 :     :     :    :-----JOBXX_S0010_SYSPRINT  - named by job+step+DDname
 :     :--0--tmp         - tmp subdir for uvsort & misc use
 :     :--0--wrk         - interstep temporary work files

data file debug strategies

dataMF/...
  • datafiles from MainFrame for comparison
data_bkup/...
  • backup all data/... files here before debug difficult job
  • then remove all data/* & copyback only files for the debug job
data/...
  • could init to only files required for difficult debug jobs

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3O2. prepare JCL/script for debug

modify JCL/script for test/debug

We assume you have already converted all JCL to Korn shell scripts as documented on page '3E1' using 'jcl2ksh51A' which converts everything (JCL,PROCs,Parms). Note that jcl2ksh51A leaves the converted ksh scripts in jcl3/... & does not copy to the execution subdir jcls/...

The recommended plan is to copy each converted ksh script from jcl3/ to jcls/ just before you are ready to debug that script. This gives you a measure of your conversion progress. Early in the conversion (based on the experience of debugging the 1st few jobs), we can customize the JCL converter to handle site-dependent coding habits & 3rd party & home-grown utilities. We can then re-run the mass conversion that stops at jcl3/... which means we have preserved the already debugged jobs, and improved the yet to be debugged jobs.

Note that the "do everything" conversion (jcl2ksh51A) uses 'jclxx51' to convert all jcl2/* to jcl3/... You might also need 'jcl2ksh51' which re-converts just 1 JCL thru all stages to jcl3/... & prompts for copy to jcls/... 'jcl2ksh51' allows you to take advantage of any JCL converter enhancements. It prompts before overwriting jcls/... in case you need to save any extensive editing you have already done on some steps of the JCL/script.


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs
     ======================

 #3. jcl2ksh51 jcl0/JOBXX.jcl   <-- optional, re-convert JCL to be debugged
     ========================       (as per discussion above)

 #3a. jcl2ksh53 jcl0/JOBXX.jcl  <-- Alternate jcl2ksh53 for AIX COBOL
      ========================      (vs jcl2ksh51 for Micro Focus COBOL)

 #4. cp jcl3/jobxx jcls         <-- copy job to be debugged to execution library
     ==================             (as per discussion above)

 #5. vi jcls/jobxx.ksh          <-- edit job to be debugged
     =================              if you know any changes required ?

For example, you might #comment out all 'rm's ('DELETE's in original JCL) so you can investigate all files & rerun job without having to restore files.


 #5a. :%s/^rm/#rm/      <-- #comment out all 'rm's ('DELETE's in original JCL)
      ============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3O3. modify JCL/script for test/debug

option to convert DELETEs to #commented '#rm's

If desired you could convert or re-convert all JCL with option 'v3' to #comment out all 'DELETE's. Note 1st line of JCL converter control file is:


 jclunixop51:a1b2c0d3e2f3g1i1j0k3l20m4n3o0p0r0s0t1u1v0w0x0y1z0 #<-- options
 #============================================================

 vi $RUNLIBS/ctl/jclunixop51  <-- change default 'v0' to 'v3'
 ===========================

re-convert JCL/scripts


 #1. jclxx51 jcl2 jcl3  <-- reconvert all JCL/scripts jcl2/* --> jcl3/...
     =================    - after option changes such as #commenting deletes
                          - does not copy any jcl3/* to jcls/...
                          - may not want to overwrite edited/debugged scripts

 #2. jcl2ksh51 jcl0/JOBXX.jcl  <-- re-convert 1 JCL thru all stages
     ========================    - jcl0 --> jcl1 -->jcl2 --> jcl3

 #2a. jcl2ksh53 jcl0/JOBXX.jcl  <-- Alternate jcl2ksh53 for AIX COBOL
      ========================      (vs jcl2ksh51 for Micro Focus COBOL)

 #2b. --> y/n ?  <-- prompts to copy to jcl3 --> jcls

 #3. jclunix51 jcl2/jobxx.jcl jcl3/jobxx.ksh
     =======================================
     - re-convert 1 jcl to script, just jcl2 --> jcl3
     - executing 'jclunix51' converter directly vs script 'jcl2ksh51'

 #3a. cp jcl3/jobxx.ksh jcls
      ======================
      - would then need to copy jcl3/... to jcls/...

#comment/replace 3rd party utilities

For a 2nd example, you might :comment out steps running 3rd party & home-grown utilities for which you do not yet have a unix/linux replacement. Insert a ':' in column 1 of the command (vs '#' because ':' sets return code zero so the end of step status test will not fail).


 #5b. : tslist     <-- could :comment out utilties with no replacement yet
      =========

 #5c. uvcopy param_filexx  <-- OR replace with Vancouver Utility 'uvcopy'
      ===================    - param_file coded & stored in $RUNLIBS/pf/...

 #5d. uvcp "fili1=..."     <-- OR replace with 'uvcp' for simple commands
      ================         coded on the comamnd line (move,select,reformat)

 #5e. uvsort "fili1=..."   <-- OR replace with 'uvsort' for simple commands
      ==================       coded on the comamnd line + a sort

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3O4. JCL/COBOL executions using VU demo files

prepare data-files for debug

We assume that you have been test/debugging many jobs & then find a difficult job that requires these exceptional procedures. The data/... subdir could have hundreds of files from prior tests; we can save them to data_bkup/..., clear all data/* & copyback only the files required for the difficult job being debugged.


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdd --> $HOME/testdata
     ======================

 #3. mkdir data_bkup      <-- make backup subdir for existing datafiles
     ===============          (if not already existing)

 #4. cp data/* data_bkup  <-- backup all existing data/* files
     ===================

 #5a. cp data_bkup/fileAA data  <-- restore files required for debug job
      ========================

 #5b. cp data_bkup/fileBB data  <-- restore files required for debug job
      ========================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3O5. JCL/COBOL executions using VU demo files

test/debug executions

This assumes that you have completed the preparations suggested on the previous pages, especially the backup of data/* files to data_bkup/..., clear all data/*, & copyback only the files required for the difficult job being debugged. These procedures are written to allow for repeated re-runs until OK.


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdd --> $HOME/testdata
     ======================

 #3. rm data/*            <-- remove all existing data/* files
     =========              - see above where backed up to data_bkup/...

 #4a. cp data_bkup/fileAA data  <-- restore files required for debug job
      ========================

 #4b. cp data_bkup/fileBB data  <-- restore files required for debug job
      ========================

 #5. testdatainit       <-- script to clear files from all temporary subdirs
     ============         - subdirs marked with --0-- on page '3O1'
                            (jobctl,joblog,jobmsgs,jobtmp,sysout,tmp,wrk)

 #6. joblog jobxx.ksh      <-- execute the job
     ================

 #7a. vi joblog/jobxx.log  <-- view the joblog
      ===================

 #7b. uvlp14 joblog/jobxx.log  <-- print the joblog for better study
      =======================    - see 'uvlp' scripts in uvlist.htm

 #8a. l data        <-- display the resulting data-files in data/...
      =======

 #8b. lslp data     <-- print data/... to study with jobxx.log
      =========       - 'lslp' script does ls -l to tmp/ & uvlp12 tmp file

 #9a. llr sysout     <-- list printer filenames in sysout/yyyymmdd/...
      ==========

 #9b. uvlp14 sysout/yyyymmdd/JOBXX_S0010_DDname
      =========================================
      - print sysout files

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3O6. test/debug executions

check new GDG files


 #10a. llr jobtmp     <-- list all filenames in jobtmp/ such as GDG files
       ==========

 10b. l jobtmp/JOBXX/GDG/data/  <-- list any GDG files left in jobtmp
      ========================
      - JobEnd=Normal moves new GDG files back to data/... subdir
      - JobEnd=AbTerm leaves new GDG files in jobtmp/JOBXX/GDG/data/...
        so you can fix problem & rerun without removing new GDGs from data/...

jobstop - pause at each step

The JCL converter inserts a call to function 'stepctl51' st the begining of each step. This function normally does nothing, but can be activated by 'jobstop' to stop at the begining of each step (or a specified step) & wait for the operator to enter 'go' or 'clear'.


 stepctl51  # test oprtr jobstop/jobclear
 #========  # inserted at begining of each step by JCL converter option 'b2'

Pausing at the begining of each step allows you to investigate the files in data/... & jobtmp/JOBXX/GDG/data/... that might be deleted at the end of the step. Also see page '3O2' which suggested you might #comment out the 'rm's (converted from original 'DELETE's).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3O7. test/debug executions

execute job with jobstop activated


 #1. Login --> /home/mvstest1 OR your homedir
 #2. cdd --> $HOME/testdata

---> instructions omitted here (see page '3O5')


 #6a. jobstop jobxx.ksh   <-- activate stop at begin each step
      =================     - stores control record in jobctl/jobxx.ctl

 #6b. joblog jobxx.ksh    <-- execute the job
      ================      - will get following display at begin each step
   --> jobxx.ksh paused by job control file: jobctl/jobxx.ctl
       - job control record: jobxx.ksh S0000 111125_124512
       - waiting until reply 'go' or 'clear'

 #7. Login on a 2nd screen --> $HOME
 #8. cdd --> $HOME/testdata

 #9a. l data      <-- investigate data files on screen#2
      =======       - while jobxx paused on screen#1

 #9b. l jobtmp/JOBXX/GDG/data/  <-- investigate GDG files in jobtmp
      ========================

option to specify stop step

The 'jobstop' script may also specify the 1st step# to stop (art end of step)


 #6a. jobstop jobxx.ksh stop=S0030 <-- store jobctl file with stop step#
      ============================

 #6b. joblog jobxx.ksh    <-- execute the job
      ================       - will stop at end of step S0030
                               & subsequent steps if you reply 'cont'inue

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3O8. test/debug executions

job restart & job stop

As of Feb 2012, the 'job restart' facility has been enhanced to include the 'job stop' facility. This means you no longer have to precede your job execute (with or without joblog) by the 'jobstop' script to store the jobctl/file. You can restart a job at a specified step# & stop it at the END of a step#, Here are some examples:


 #1. jgl310.ksh         <-- runs all 6 steps of this demo job
     ==========

 #1a. joblog jgl310.ksh  <-- same with joblogging
      =================    - will omit 'joblog' from following examples
                           - BUT you should use joblog for test/debug

 #2. jgl310.ksh start=S0030  <-- rerun job starting at step 3
     ======================    - will run to end of job with no stops

 #3. jgl310.ksh start=S0030 stop=S0040
     =================================
     - rerun job starting at step 3 & stopping at END of step 4
     - displays following choices:
 120210:155447:JGL310: jgl310.ksh paused by job control file: jobctl/jgl310.ctl
 120210:155447:JGL310: - job control record: jgl310.ksh S0030 120210_155447
 120210:155447:JGL310: - waiting for reply: cont(inue), clear, endok, endab
 cont - continue (execute) to next step, stop again,& reprompt as above
 clear - clear the jobctl/jgl310.ctl file, will execute to end job with no stops
 endok - goto Normal end of job, will restore any new GDG's
 endab - goto AbNormal end of job, will NOT restore any new GDG's

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3P1. JCL/COBOL executions using VU demo files

GDG files & step Restart

The VU JCL conversion writes new GDGs into $RUNDATA/jobtmp/$JOBID2/GDG/data/... and restores the new GDGs to $RUNDATA/data/... at S9000 JobEnd=Normal. If any step fails, the job ends at S9900 JobEnd=AbTerm & any new GDG files in jobtmp/... are not restored to data/...

The logic above means that you can simply rerun JCL/scripts with GDG files and not worry about any new GDGs created in the failing run. However you do need to know if there are any non-GDG files that are updated in place (vs updated by copying to a newfile). If there are updates in place prior to the failing step, then you can use "step Restart" to prevent double updates. This assumes it was not the failing step doing an update in place, in which case you would need to restore that file from a backup made before the job started.

We will demo new GDG file creation & step restart using JCL/script 'jgl200.ksh' (listed on page '2D1' & see normal joblog on page '3M4'). Step1 sorts a transaction file to a GDG file which updates a master file (also GDG) on the step2 COBOL program. We can cause 'AbTerm' by moving the COBOL executable from $RUNLIBS/cblx to tmp/... & return after failed run to demo recovery.


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. mv cblx/cgl200.int tmp   <-- move step2 program out to tmp/...
     ======================     - to cause failure on step2

 #4. cdd --> $HOME/testdata

 #5. l data     <-- list existing files in $RUNDATA/testdata/data
     ======       - will show only files for jgl200.ksh
                  - only 1 generation of each file existing
 -rw-rw-r-- 1 mvstest1 apps 13952 Oct 18 15:11 gl.account.master_000001
 -rw-rw-r-- 1 mvstest1 apps  1600 Oct 18 15:11 gl.account.trans_000001

 #6. joblog jgl200.ksh     <-- execute the job (step2 will fail)
     =================       - joblog listed below (just step2 & AbTerm msgs)
 ******** Begin Step S0020 cgl200 (#2) ********
 gen+1 GLTRANS=jobtmp/JGL200/GDG/data/gl.account.trans_000002 gens=31
 gen0 GLMSOLD=data/gl.account.master_000001 insize=4.0K
 gen+1 GLMSNEW=jobtmp/JGL200/GDG/data/gl.account.master_000002 gens=31
 Executing--> cobrun -F /home/mvstest1/testlibs/cblx/cgl200
 Load error : file '/home/mvstest1/testlibs/cblx/cgl200'
 error code: 173, pc=0, call=1, seg=0
 173     Called program file not found in drive/directory
 ERR: step#S0020 cgl200 abterm 255
 JobEnd=AbTerm, JCC=255,StepsX/L=2/S0020
 GDG files NOT moved from jobtmp/subdirs to /home/mvstest1/testdata/subdirs

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3P2. JCL/COBOL executions using VU demo files

RERUN after failure WITHOUT RESTART


 #7. cdl  --> $HOME/testlibs

 #8. mv tmp/cgl200.int cblx   <-- move step2 program back to execution library
     ======================

 #9. cdd --> $HOME/testdata

 #10. joblog jgl200.ksh   <-- re-execute the job, will get messages
      =================       about GDG files in jobtmp from prior failure
 WARN: files in jobtmp/GDG subdirs (from prior AbTerm ERR?)
 ---- files in jobtmp/JGL200/GDG/*/* listed below:
 jobtmp/JGL200/GDG/data/gl.account.trans_000002
 If NO restart by step#, GDG files in jobtmp/... will be cleared
    - allows rerun from begin job with no worry about GDGs
 If RESTARTing by step#, example--> jobname.ksh start=S0050
    - GDG files in jobtmp/... will NOT be cleared
    - will be available to steps after restart step#
    - will be restored to data/... subdir at JobEnd=Normal
 -->   <-- null entry to continue
         - - - lines removed to JobEnd=Normal - - -
 JobEnd=Normal, StepsExecuted=1, LastStep=S0020

 #11. l data     <-- list existing files in $RUNDATA/testdata/data
      ======       - will show only files for jgl200.ksh
                   - now 2 generations each
 -rw-rw-r-- 1 mvstest1 apps 13952 Oct 18 15:11 gl.account.master_000001
 -rw-rw-r-- 1 mvstest1 apps 13952 Nov 26 12:15 gl.account.master_000002
 -rw-rw-r-- 1 mvstest1 apps  1600 Oct 18 15:11 gl.account.trans_000001
 -rw-rw-r-- 1 mvstest1 apps  1600 Nov 26 12:15 gl.account.trans_000002

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

3P3. JCL/COBOL executions using VU demo files

RERUN after failure WITH RESTART


 #10. joblog jgl200.ksh start=S0020  <-- re-execute job, with RESTART at step2
      ==================***********
      - will get same msgs re GDG files
      - BUT, notice the 'WARN: **START**' msg now appears
 WARN: files in jobtmp/GDG subdirs (from prior AbTerm ERR?)
 ---- files in jobtmp/JGL200/GDG/*/* listed below:
 jobtmp/JGL200/GDG/data/gl.account.trans_000002
 If NO restart by step#, GDG files in jobtmp/... will be cleared
    - allows rerun from begin job with no worry about GDGs
 If RESTARTing by step#, example--> jobname.ksh start=S0050
    - GDG files in jobtmp/... will NOT be cleared
    - will be available to steps after restart step#
    - will be restored to data/... subdir at JobEnd=Normal
 -->   <-- null entry to continue
 WARN: **START** at start=S0020
         - - - lines removed to JobEnd=Normal - - -
 JobEnd=Normal, StepsExecuted=1, LastStep=S0020

 #11. l data     <-- list existing files in $RUNDATA/testdata/data
      ======       - will show only files for jgl200.ksh
                   - still 2 generations each
 -rw-rw-r-- 1 mvstest1 apps 13952 Oct 18 15:11 gl.account.master_000001
 -rw-rw-r-- 1 mvstest1 apps 13952 Nov 26 12:15 gl.account.master_000002
 -rw-rw-r-- 1 mvstest1 apps  1600 Oct 18 15:11 gl.account.trans_000001
 -rw-rw-r-- 1 mvstest1 apps  1600 Nov 26 12:15 gl.account.trans_000002

note re rerun with or without restart

  1. Results of the 2 reruns (without restart on prior page '3P2' & with restart on this page '3P3') are the SAME.

  2. Without restart, GDG files from prior run (in jobtmp/...) are cleared, step#1 is rerun recreating the trans file, to update master file on step#2.

  3. With restart, GDG files from prior run are NOT cleared, step#1 is skipped but trans file from prior run is used to update master file on step#2.

  4. So results same in this case, but you would need to use restart if steps prior to failing step have updated any files in place (vs copy to new output file).

See complete documentation re GDG files at MVSJCL.htm#Part_5

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_4 MVS JCL test/demo conversions

Cross-References - Contents


4A1. xrefall - script to run all cross-ref reports

4B1. xkshfile1 - list all datafiles in each JCL/ksh/script
4B2. xkshfile2 - shows all JCL/ksh/scripts using each data-file
4C1. xkshparm1 - list all SYSIN/PARM modules in each JCL/ksh/script
4C2. xkshparm2 - shows all JCL/ksh/scripts referencing each SYSIN/PARM
4D1. xkshproc1 - list all PROCs executed in each JCL/ksh/script
4D2. xkshproc2 - shows all JCL/ksh/scripts executing each PROC
4E1. xkshprog1 - list all programs executed in each JCL/ksh/script
4E2. xkshprog2 - shows all JCL/ksh/scripts executing each program

4F1. xcobcopy1 - list all 'copy'books used in each program
4F2. xcobcopy2 - shows all programs using each 'copy'book
4G1. xcobfile2 - crossref all PROGRAMS using each external-file

4H1. cobfil51 - COBOL Files Report
(not exactly a cross-reference, but a very useful report)
- information extracted from all COBOL programs in directory
- filenames, Input/Output, Org, Access, record size, copybook
- all programmers should have a copy before starting test/debug

4I1. Statistics (table-summaries) available
statmvsjcl1 - statistics for mainframe JCL
- count programs,PROCs,top-nodes,files used in all JCLs
statksh1 - statistics for Korn shell scripts
- count programs,exportfile/exportgen,filenames in Ksh scripts
statcbl1 - statistics for COBOL programs
- count copybooks, called programs,& file ORG type

4J1. jcl3_programs - table summary all programs executed by converted scripts
- highlights mainframe utilities that may need replacement

4J2. jcl3_exportfiles - summary of exportfiles(non-GDG) & exportgens(GDG files)
- count exportfile/exportgen gen#s & subdirs

4J3. jcl3_parms - table summary of all SYSIN/PARM libarary modules

4J4. jcl3_filenames - table summary of all filenames in JCL/ksh/scripts
- may be a long report (vs above short reports)

4K1. cbls_copybooks - table summary counts of all copybooks used by all programs

4K2. cbls_ORGtypes - table summary of file ORGANIZATION types used
(SEQUENTIAL,LINE SEQUENTIAL,INDEXED,DYNAMIC,RANDOM,etc)

4L1. mvsfiles5A - script to trace data files in MVS JCL
- extracts all data files from subdir jcl2 (JCL procs expanded)
- identify originating step# & destination step#s for each file

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4A1. JCL/COBOL test/demo Cross-References

xrefall - create all JCL/COBOL cross-refs


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. xrefall cbls jcl3 ksh    <-- create all cross-ref reports
     =====================

statistics (table summary counts)


 #4. uvcopy statksh1   <-- create stat reports from Korn shell scripts
     ===============

 #5. uvcopy statcbl1   <-- create stat reports from COBOL programs
     ===============
Note
  • The Cross-References are shown on the next 7 pages '4B1' - '4H1'
  • Then the statistics reports on pages '4I1' - '4K1'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4A2. JCL/COBOL test/demo Cross-References

xrefallparm - extra crossrefs for parms

`xrefall`above creates reports `xkshparm1` & `xkshparm2`. which is sufficient for most sites. `xrefallparm`creates additional crossrefs as follows:

xkshparmjps1/2
  • crossrefs by Jobname + Program + Step
xkshparmjp1/2
  • crossrefs by Jobname + Program
xkshparmp1/2
  • crossrefs by Program (all jobs & steps combined)
xkshparmp1
  • lists all parms used by each program
  • all instances of program in all job steps
xkshparmp2
  • shows programs using each parm

'xkshparmp1' was the main objective here, to get a list of all parms used by proograms such as FASTLOAD which required special conversions (convert DECIMAL to varchar).


 #1. mkdir step1 step2 step3 step4
     =============================

 #2. xrefallparm jcl3
     ================

xrefalltdsql - crossrefs for TeraData SQLs

xrefalltdsql is for sites that maintain a separate parms subdir for systems such as TeraData (BTEQ,FASTLOAD,MLOAD). The SQL parameters (load/unload tables) are maintained in separate parms subdir 'tdsqls'. xrefalltdsql creates following reports:

xkshtdsqlp1
  • lists tdsqls used by all instances of TeraData
    (bteqm fastload, mload)
xkshtdsql2
  • shows programs using each parm

 #3. xrefalltdsql step4
     ==================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4B1. JCL/COBOL test/demo Cross-References

xkshfile1 - list datafiles in each script

 xkshfile1 ** list all DATAFILES used in each ksh SCRIPT **
 Keyword=exportfile:exportgen  Exclude=autoload:JTMP:SYOT Include=~~ Skip=~~ page#  1
 Directory=/home/mvstest1/testlibs/jcl3
 Options=q1a16b16c4e0d0j0l0s2w1a16b50c1j4w2q0i7
 =======================================================2011/11/05_16:35:15
 eztlist.ksh      $RUNLIBS/parms/eztlist1
 ___________      data/ar.customer.eztlist
 ____________3    data/ar.customer.master
 ftpput1.ksh      FTPPUT01
 jar100.ksh       data/ar.customer.master
 ___________2     data/ar.customer.nameadrs.list100
 jar200.ksh       data/ar.customer.master.indexed
 __________       data/ar.sales.items
 ___________3     data/ar.sales.list
 jgl100.ksh       ACCTMAS
 ___________2     ACTLIST
 jgl200.ksh       $RUNLIBS/parms/pgl200s1
 __________       GLMSNEW
 __________       GLMSOLD
 __________       GLTRANS
 __________       SORTOUT
 ___________6     data/gl.account.tran1
 jgl300.ksh       ACNTMAS
 ___________2     SYSUT1
 jgl320.ksh       ACNTMAS
 ___________2     SYSUT1
 qjtlist.ksh      $RUNLIBS/parms/qjtlist1
 ___________      data/ar.custmas.tellist
 ____________3    data/ar.customer.master

**TotalFiles: 9, TotalWords: 24, TotalRefs: 24

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4B2. JCL/COBOL test/demo Cross-References

xkshfile2 - scripts using each data-file

 xkshfile2 ** crossref to show all ksh SCRIPTs using each DATAFILE **
 Keyword=exportfile:exportgen  Exclude=autoload:JTMP:SYOT Include=~~ Skip=~~ page#  1
 Directory=/home/mvstest1/testlibs/jcl3 Options=q1a16b16c4e0d0j0l0s2w1a40b18c3j4w2q0i7
 =======================================================2011/11/05_16:35:15
 $RUNLIBS/parms/eztlist1                  eztlist.ksh
 $RUNLIBS/parms/pgl200s1                  jgl200.ksh
 $RUNLIBS/parms/qjtlist1                  qjtlist.ksh
 ACCTMAS                                  jgl100.ksh
 ACNTMAS_2                                jgl300.ksh        jgl320.ksh
 ACTLIST                                  jgl100.ksh
 FTPPUT01                                 ftpput1.ksh
 GLMSNEW                                  jgl200.ksh
 GLMSOLD                                  jgl200.ksh
 GLTRANS                                  jgl200.ksh
 SORTOUT                                  jgl200.ksh
 SYSUT1_2                                 jgl300.ksh        jgl320.ksh
 data/ar.custmas.tellist                  qjtlist.ksh
 data/ar.customer.eztlist                 eztlist.ksh
 data/ar.customer.master_3                eztlist.ksh       jar100.ksh        qjtlist.ksh
 data/ar.customer.master.indexed          jar200.ksh
 data/ar.customer.nameadrs.list100        jar100.ksh
 data/ar.sales.items                      jar200.ksh
 data/ar.sales.list                       jar200.ksh
 data/gl.account.tran1                    jgl200.ksh
 **TotalWords: 20, TotalFiles=24, TotalRefs: 24

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4C1. JCL/COBOL test/demo Cross-References

4C1. xkshparm1 - all PARMs in each script

 xkshparm1 ** crossref to show all ksh SCRIPTS referencing each PARM **
 Keyword=parms  Exclude=~~ Include=exportfile Skip=~~ page#  1
 Directory=/home/mvstest1/testlibs/jcl3
 Options=q1a16b16c4e0d0j0l0s2w1a16b16c4d1j4l1w1q0i7
 =======================================================2011/11/05_16:35:15
 eztlist.ksh      eztlist1
 jgl200.ksh       pgl200s1
 qjtlist.ksh      qjtlist1

**TotalFiles: 3, TotalWords: 3, TotalRefs: 3

4C2. xkshparm2 - all scripts using each PARM

  xkshparm2 ** crossref to show all ksh SCRIPTS referencing each PARM **
  Keyword=parms  Exclude=~~ Include=exportfile Skip=~~ page#  1
  Directory=/home/mvstest1/testlibs/jcl3 Options=q1a16b16c4e0d0j0l0s2w1a16b16c4d1j4l1w1q0i7
  =======================================================2011/11/05_16:35:15
  eztlist1         eztlist.ksh
  pgl200s1         jgl200.ksh
  qjtlist1         qjtlist.ksh

**TotalWords: 3, TotalFiles=3, TotalRefs: 3

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4D1. JCL/COBOL test/demo Cross-References

xkshproc1 - all PROCs executed in each script

 xkshproc1 ** crossref all MVS JOBnames for each EXEC PROCname **
 Keyword=EXEC  Exclude=PGM Include=call Skip=PROC= page#  1
 Directory=/home/mvstest1/testlibs/jcl3
 Options=q1a16b16c4e0d0j0l0s2w1a16b16c4w1q0i7
 =======================================================2011/11/05_16:35:15
 jgl100.ksh       PGL100
 jgl200.ksh       PGL200

**TotalFiles: 2, TotalWords: 2, TotalRefs: 2

4D2. xkshproc2 - all scripts executing each PROC

  xkshproc2 ** crossref all MVS JOBnames for each EXEC PROCname **
  Keyword=EXEC  Exclude=PGM Include=call Skip=PROC= page#  1
  Directory=/home/mvstest1/testlibs/jcl3 Options=q1a16b16c4e0d0j0l0s2w1a16b16c4w1q0i7
  =======================================================2011/11/05_16:35:15
  PGL100           jgl100.ksh
  PGL200           jgl200.ksh

**TotalWords: 2, TotalFiles=2, TotalRefs: 2

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4E1. JCL/COBOL test/demo Cross-References

4E1. xkshprog1 - programs executed in each script

 xkshprog1 ** list all PROGRAMs executed in each ksh SCRIPT **
 Keyword=progid:program  Exclude=~~ Include=~~ Skip=  page#  1
 Directory=/home/mvstest1/testlibs/jcl3
 Options=q1a16b16c4e0d0j0l0s2w1a18b16c4d8j4l1q0i7
 =======================================================2011/11/05_16:35:15
 eztlist.ksh        eztpa00
 ftpput1.ksh        ftp
 jar100.ksh         car100
 jar200.ksh_2       car200          sort
 jgl100.ksh         cgl100
 jgl200.ksh_2       cgl200          sort
 jgl300.ksh_2       idcams          iebgener
 jgl320.ksh_2       idcams          iebgener
 mailsmtp.ksh       iebgener
 qjtlist.ksh        quikjob
 **TotalFiles: 10, TotalWords: 14, TotalRefs: 14

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4E2. JCL/COBOL test/demo Cross-References

xkshprog2 - all scripts executing each program

  xkshprog2 ** crossref to show all ksh SCRIPTS executing each PROGRAM **
  Keyword=progid:program  Exclude=~~ Include=~~ Skip=  page#  1
  Directory=/home/mvstest1/testlibs/jcl3 Options=q1a16b16c4e0d0j0l0s2w1a16b16c4d8j4l1q0i7
  =======================================================2011/11/05_16:35:15
  car100           jar100.ksh
  car200           jar200.ksh
  cgl100           jgl100.ksh
  cgl200           jgl200.ksh
 *eztpa00          eztlist.ksh
 *ftp              ftpput1.ksh
 *idcams_2         jgl300.ksh      jgl320.ksh
 *iebgener_3       jgl300.ksh      jgl320.ksh      mailsmtp.ksh
 *quikjob          qjtlist.ksh
 *sort_2           jar200.ksh      jgl200.ksh
  **TotalWords: 10, TotalFiles=14, TotalRefs: 14

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4F1. JCL/COBOL test/demo Cross-References

4F1. xcobcopy1 - all copybooks used in each program

 xcobcopy1 ** list all COPYBOOKS in each PROGRAM **
 Keyword=copy:include  Exclude=unix Include=.cpy Skip=  page#  1
 Directory=/home/mvstest1/testlibs/cbls
 Options=q1a16b16c4e0d0j0l0s2w1a16b16c4e3l1q0i7
 =======================================================2011/11/05_16:35:14
 car100.cbl       custmas.cpy
 car200.cbl_4     custmas.cpy     saledtl.cpy     sdline.cpy      stline.cpy

**TotalFiles: 2, TotalWords: 5, TotalRefs: 5

4F2. xcobcopy2 - all programs using each copybook

  xcobcopy2 ** crossref all PROGRAMS using each COPYBOOK **
  Keyword=copy:include  Exclude=unix Include=.cpy Skip=  page#  1
  Directory=/home/mvstest1/testlibs/cbls Options=q1a16b16c4e0d0j0l0s2w1a16b16c4e3l1q0i7
  =======================================================2011/11/05_16:35:14
  custmas.cpy_2    car100.cbl      car200.cbl
  saledtl.cpy      car200.cbl
  sdline.cpy       car200.cbl
  stline.cpy       car200.cbl

**TotalWords: 4, TotalFiles=5, TotalRefs: 5

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4G1. JCL/COBOL test/demo Cross-References

4G1. xcobfile2 - all PROGRAMS using each external-file

 xcobfile2 ** crossref all PROGRAMS using each external-file **
 Keyword=external  Exclude=~~ Include=~~ Skip=  page#  1
 Directory=/home/mvstest1/testlibs/cbls Options=q1a16b16c4e0d0j0l0s2w1a16b16c4e1l1q0i7
 =======================================================2011/11/05_16:35:14
 acctmas          cgl100.cbl
 actlist          cgl100.cbl
 custmas_2        car100.cbl      car200.cbl
 glmsnew          cgl200.cbl
 glmsold          cgl200.cbl
 gltrans          cgl200.cbl
 nalist           car100.cbl
 saledtl          car200.cbl
 salelst          car200.cbl

**TotalWords: 9, TotalFiles=10, TotalRefs: 10

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4H1. JCL/COBOL test/demo Cross-References

COBOL Files Report

 cobfil51  ** COBOL Files Report ** Dir=cbls  2011/10/23_16:39:38
 progname.cbl DDname       OAM   open recsz  copybook.cpy  FDname / Key    lines
 ================================================================================
 car100.cbl   custmas      SS_   I___   256  custmas.cpy   custmas
 car100.cbl   nalist       L__   O___   120                nalist
                                                                              52
 car200.cbl   saledtl      SS_   I___    64  saledtl.cpy   saledtl
 car200.cbl   custmas      IR_   I___   256  custmas.cpy   custmas
 car200.cbl          key->                                    cm-cust
 car200.cbl   salelst      L__   O___   120  sdline.cpy    salelst
                                                                              65
 cgl100.cbl   acctmas      SS_   I___   128                acctmas
 cgl100.cbl   actlist      L__   O___   120                actlist
                                                                              57
 cgl200.cbl   glmsold      SS_   I___   128                glmsold
 cgl200.cbl   glmsnew      SS_   O___   128                glmsnew
 cgl200.cbl   gltrans      SS_   I___    80                gltrans
                                                                              65
                    ** Note re COBOL Files Report **

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4I1. JCL/COBOL test/demo Cross-Refs & Statistics

JCL/script Statistics (table-summaries)

statmvsjcl1
  • statistics for original mainframe JCL
  • count programs,PROCs,top-nodes,files used in all JCLs
  • not shown here, statksh1 similar
statksh1
  • statistics for converted Korn shell scripts
  • count programs,exportfile/exportgen,filenames in Ksh scripts
statcbl1
  • statistics for COBOL programs
  • count copybooks, called programs,& file ORG type

OP. Instrns. for statksh1 & statcbl1


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. mkdir stats       <-- make subdir for reports
     ===========

 #4. uvcopy statmvsjcl1  <-- create stat reports from MVS JCL
     ==================

 #5. uvcopy statksh1   <-- create stat reports from Korn shell scripts
     ===============

 #6. uvcopy statcbl1   <-- create stat reports from COBOL programs
     ===============

 #7. vi stats/*        <-- view stat reports
     ==========

 #8. uvlpd12 stats     <-- print all reports
     =============         OR print only desired reports
                         - most stats/reports short
                         - BUT, filename reports could be very long

 #ra. uvlp12 stats/jcl3_programs  <-- print table summary of executed programs
      ==========================    - 1 of shorter useful reports
Note
  • 'uvlpd12' is script that prints all files in the subdir
    (1st page is contents, list of filenames printed on following pages)
  • 'uvlp12' is a script that prints only the 1 named file

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4J1. JCL/script/COBOL Statistics (table-summaries)

4J1. jcl3_programs - programs executed by scripts

 statksh1  2011/10/28_13:16:05  Summary table of PROGIDs in jcl3
 tbl#0001  tblt1f4 c0(32)
 line#     count  %    1strec#  PROGID
     1         1   7        19  car100
     2         1   7        47  car200
     3         1   7        25  cgl100
     4         1   7        53  cgl200
     5         1   7        19  eztpa00
     6         1   7        18  ftp
     7         2  14        44  idcams
     8         3  21        22  iebgener
     9         1   7        19  quikjob
    10         2  14        19  sort
              14*100             *TOTAL*

4J2. jcl3_exportfiles(nonGDG) & exportgens(GDGs)

 statksh1  2011/10/28_13:16:05  Summary exportfile/exportgen subdirs in jcl3
 tbl#0002  tblt2f4 e100(32)
 line#     count  %    1strec#  exportfile/gen [0/+1] subdir/
     1        12  30        22  exportfile $JTMP/
     2         3   7        31  exportfile $RUNLIBS/
     3         3   7        30  exportfile $SYOT/
     4        10  25        21  exportfile data/
     5         5  12        24  exportgen0 0 data/
     6         6  15        47  exportgen1 +1 $JGDG/
              39*100             *TOTAL*

4J3. jcl3_parms SYSIN/PARM libarary modules

 statksh1  2011/10/28_13:16:05  Summary table of parms/modules in jcl3
 tbl#0004  tblt4f4 d900(30)
 line#     count  %    1strec#  parms/module
     1         1  33        23  eztlist1
     2         1  33        31  pgl200s1
     3         1  33        23  qjtlist1
               3*100             *TOTAL*

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4J4. JCL/script/COBOL Statistics (table-summaries)

4J4. jcl3_filenames - all filenames in ksh/scripts

 statksh1  2011/10/28_13:16:05  Summary table of data/filenames in jcl3
 tbl#0005  tblt5f7 d300(48)
 line#     count  %    1strec#  subdir/filename
     1         1   2        28  $JGDG/data/gl.account.acntlist_
     2         3   7        47  $JGDG/data/gl.account.master_
     3         2   5        29  $JGDG/data/gl.account.trans_
     4         1   2        29  $JTMP/${JSTEP}_${PROGID}_FTPTMP2
     5         1   2        20  $JTMP/${JSTEP}_${PROGID}_INPUT1
     6         3   7        23  $JTMP/${JSTEP}_${PROGID}_SYSIN
     7         1   2        21  $JTMP/${JSTEP}_${PROGID}_SYSUT1
     8         4  10        25  $JTMP/__tempglm
     9         2   5        22  $JTMP/__tempsls
    10         1   2        23  $RUNLIBS/parms/eztlist1
    11         1   2        31  $RUNLIBS/parms/pgl200s1
    12         1   2        23  $RUNLIBS/parms/qjtlist1
    13         2   5        30  $SYOT/${JSTEP}_SYSOUT
    14         1   2        20  $SYOT/${JSTEP}_SYSUT2_B_SMTP
    15         1   2        22  data/ar.custmas.tellist
    16         1   2        22  data/ar.customer.eztlist
    17         3   7        21  data/ar.customer.master
    18         1   2        50  data/ar.customer.master.indexed
    19         1   2        22  data/ar.customer.nameadrs.list100
    20         1   2        21  data/ar.sales.items
    21         1   2        51  data/ar.sales.list
    22         4  10        24  data/gl.account.master_
    23         1   2        28  data/gl.account.tran1
    24         1   2        28  data/gl.account.trans_
              39*100             *TOTAL*

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4K1. JCL/script/COBOL Statistics (table-summaries)

4K1. cbls_copybooks - copybooks used by all programs

 statcbl1  2011/10/24_09:36:59  Summary of copybooks in cbls
 tbl#0001  tblt1f4 d0(32)
 line#     count  %    1strec#  copybook
     1         2  15        27  custmas.cpy
     2         1   7        25  saledtl.cpy
     3         1   7        29  sdline.cpy
     4         1   7        30  stline.cpy
     5         4  30        65  unixproc1.cpy
     6         4  30        46  unixwork1.cpy
              13*100             *TOTAL*

4K2. cbls_ORGtypes - file ORGANIZATION types

 statcbl1  2011/10/24_09:36:59  Summary of ORGANIZATION types in cbls
 tbl#0003  tblt3f4 d0(32)
 line#     count  %    1strec#  organization
     1         1  10        15  indexed
     2         3  30        20  line sequential
     3         6  60        10  record sequential
              10*100             *TOTAL*

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4L1. JCL/COBOL test/demo Cross-References

mvsfiles5A - data file trace in MVS JCL

Script 'mvsfiles5A' creates a "data file trace" report from subdir jcl2 (MVS JCLs with procs expanded). The final report 'xmvs/mvsfiles6' should help determine the minimum files actually needed to be transfered from the mainframe. See mvsfiles5A listed on page '4L4'.

For this demo, we have run the script based on the 1st 4 JCLs listed begining on page '2A1' (JAR100,JAR200,JGL100,JGL200).


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. mkdir xmvs    <-- make subdir for temp files & final report
     ==========

 #4. mvsfiles5A jcl2 xmvs   <-- execute script to create report
     ====================

 #5. vi xmvs/mvsfiles3      <-- inspect report
     =================

xmvs/mvsfiles3 sample data file trace

  mvsfiles53 - data file trace from MVS JCL - 2012/05/11 18:29:21
  Jobname Step  Program  DDname   MOD Gen Rcsz From To  <--------DSNname-------->
  ================================================================================
 jar100   001   CAR100   CUSTMAS  S                     AR.CUSTOMER.MASTER
 jar100   001   CAR100   NALIST   NCD      133          AR.CUSTOMER.NAMEADRS.LIST100
 jar200   001   SORT     SORTIN   S                     AR.SALES.ITEMS
 jar200   001   SORT     SORTOUT  NP        64     002  &&TEMPSLS
 jar200   002   CAR200   SALEDTL  OP           001      &&TEMPSLS
 jar200   002   CAR200   CUSTMAS  S                     AR.CUSTOMER.MASTER.INDEXED
 jar200   002   CAR200   SALELST  NCD      133          AR.SALES.LIST
 jgl100   001   CGL100   ACCTMAS  S     0               GL.ACCOUNT.MASTER_
 jgl100   001   CGL100   ACTLIST  NCD  +1  133          GL.ACCOUNT.ACNTLIST_
 jgl200   001   SORT     SORTIN   O                     GL.ACCOUNT.TRAN1
 jgl200   001   SORT     SORTOUT  NCD  +1   80     002  GL.ACCOUNT.TRANS_
 jgl200   002   CGL200   GLTRANS  O    +1      001      GL.ACCOUNT.TRANS_
 jgl200   002   CGL200   GLMSOLD  O     0               GL.ACCOUNT.MASTER_
 jgl200   002   CGL200   GLMSNEW  NCD  +1   80          GL.ACCOUNT.MASTER_
 jgl200   002   CGL200   ACTLIST  S    +1               GL.ACCOUNT.ACNTLIST_

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4L2. JCL/COBOL test/demo Cross-References

notes re 'mvsfiles3' report above

  1. Script 'mvsfiles5A' runs several uvcopy jobs & uvsorts, and creates several files in subdir xmvs/... 'mvsfiles3' is the 1st report you would be interested in looking at.

  2. 'mvsfiles3' traces the data files thru multi-step job by showing the 'FROM' origin step & the 'TO' destination step of the data files. This should help you identify the orignal input files required to test the job & distinguish them from the various inter-step files.

  3. 'MOD' codes are the 1st letters from DISP=(New,Keep,Delete), etc. 'Gen' codes are taken from GDG file suffixes (0), (+1), etc, which are replaced by the trailing underscore on the filenames.

  4. 'Rcsz' (record-size) is taken from LRECL on output files or RECSIZE in IEBGENER or IDCAMS. The JCL converter assumes input recsize same as output recsize on SORTs. You need to fix if a SORT changes recsize via OUTREC, etc.

  5. 'mvsfiles5' is the next report (of the 3 worth investigating) - listed below & see notes on the following page.

    xmvs/mvsfiles5 sample data file trace

 jar200   001   SORT     SORTOUT  NP *      64     002  &&TEMPSLS
 jar200   002   CAR200   SALEDTL  OP *    0064 001      &&TEMPSLS
 jar100   001   CAR100   CUSTMAS  S                     AR.CUSTOMER.MASTER
 jar200   002   CAR200   CUSTMAS  S                     AR.CUSTOMER.MASTER.INDEXED
 jar100   001   CAR100   NALIST   NCD*     133          AR.CUSTOMER.NAMEADRS.LIST100
 jar200   001   SORT     SORTIN   S                     AR.SALES.ITEMS
 jar200   002   CAR200   SALELST  NCD*     133          AR.SALES.LIST
 jgl100   001   CGL100   ACTLIST  NCD* +1  133          GL.ACCOUNT.ACNTLIST_
 jgl200   002   CGL200   ACTLIST  S  * +1 0133          GL.ACCOUNT.ACNTLIST_
 jgl100   001   CGL100   ACCTMAS  S     0 0080          GL.ACCOUNT.MASTER_
 jgl200   002   CGL200   GLMSOLD  O     0 0080          GL.ACCOUNT.MASTER_
 jgl200   002   CGL200   GLMSNEW  NCD  +1   80          GL.ACCOUNT.MASTER_
 jgl200   001   SORT     SORTIN   O                     GL.ACCOUNT.TRAN1
 jgl200   001   SORT     SORTOUT  NCD  +1   80     002  GL.ACCOUNT.TRANS_
 jgl200   002   CGL200   GLTRANS  O    +1      001      GL.ACCOUNT.TRANS_

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4L3. JCL/COBOL test/demo Cross-References

notes re 'mvsfiles' reports

  1. 'mvsfiles5' (listed above) has been sorted by filename (right side), so you can see all jobs using each file.

  2. 'mvsfiles6' (listed below) is the final report. It drops filename duplicates, temporary &&files, inter-step files,& inter-job files.

  3. Detection of inter-job files might not be perfect, because it assumes that the jobs are run in sequence by jobname. 'mvsfiles5' above shows the files sorted by filename(major) & jobname(minor). If the 1st line of a filename group is a 'N'ew file, then the entire group is '*' flagged for deletion. and the result is 'mvsfiles6' shown below.

    xmvs/mvsfiles6 sample data file trace

 jar100   001   CAR100   CUSTMAS  S                          AR.CUSTOMER.MASTER
 jar200   002   CAR200   CUSTMAS  S                          AR.CUSTOMER.MASTER.INDEXED
 jar200   001   SORT     SORTIN   S                          AR.SALES.ITEMS
 jgl100   001   CGL100   ACCTMAS  S     0 0080               GL.ACCOUNT.MASTER_
 jgl200   001   SORT     SORTIN   O                          GL.ACCOUNT.TRAN1
  1. In fact our sample report (with our 4 simple jobs) is perfect, you can check back to the listings of the 4 JCLs on pages '2A1' - '2D1'.

  2. If you know that your jobs are run in sequence by jobname, this report should be a big help. You might transfer/convnert these 1st, try running the jobs,& transfer any missing files as required.

  3. The final job 'mvsfiles56' in the script 'mvsfiles5A' creates a script from the xmvs/mvsfiles6 report above. It is named xmvs/mvsfiles7, listed below with suggested execution.
      # mvsfiles7 - copy essential files from $CNVDATA/d2asc/.. to $RUNDATA/data/
      # See www.uvsoftware.ca/mvsjcltest.htm#4L1 - 4L4 2012/05/14 08:41:58
      cp $CNVDATA/d2asc/ar.customer.master  $RUNDATA/data
      cp $CNVDATA/d2asc/ar.customer.master.indexed  $RUNDATA/data
      cp $CNVDATA/d2asc/ar.sales.items  $RUNDATA/data
      cp $CNVDATA/d2asc/gl.account.master_*  $RUNDATA/data
      cp $CNVDATA/d2asc/gl.account.tran1  $RUNDATA/data

 #6. ksh xmvs/mvsfiles7
     ==================
     - execute script, copy essential files from $CNVDATA/d2asc to $RUNDATA/data

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

4L4. JCL/COBOL test/demo Cross-References

mvsfiles5A - determine essential files

 #!/bin/ksh
 # mvsfiles5A - create file trace report from MVS JCL
 #            - by Owen Townsend, Dec10/2011, updt May12/12
 echo "Determine essential input files needing FTP from mainframe"
 jd="$1"; xd="$2"
 if [[ -d "$jd" && -d "$xd" ]]; then :
 else echo "usage: mvsfiles5A jcl2 xmvs"
      echo "       ====================="
      echo " - arg1=subdir of MVS JCL (procs expanded)"
      echo " - arg2=subdir for output tmp files & final report"
      exit 9; fi
 #
 uvcopy mvsfiles51,fild1=$jd,filo1=$xd/mvsfiles0
 #==============================================
 #
 uvsort "fili1=$xd/mvsfiles0,rcs=100,typ=LSTt,filo1=$xd/mvsfiles1,key1=0(8)"
 #==========================================================================
 # sort by jobname only (do not change order of filenames within jobs)
 #
 uvsort "fili1=$xd/mvsfiles1,rcs=100,typ=LST,filo1=$xd/mvsfiles2I,rcs=63\
 ,typ=ISF,isk1=0(54d),key1=0(54),clr=0(64),mvc=0(8)0,mvc=9(45)55,mvc=55(3)9"
 #==========================================================================
 # sort xmvs/mvsfiles1 by jobname+filename & load Indexed file
 #
 uvcopy mvsfiles53,fili1=$xd/mvsfiles1,filr2=$xd/mvsfiles2I,filo1=$xd/mvsfiles3
 #=============================================================================
 #
 uvsort "fili1=xmvs/mvsfiles3,rcs=100,typ=LSTt,filo1=xmvs/mvsfiles4\
 ,key1b=55(30),del1=0(1):0x20"
 #==================================================================
 # sort by filename, drop input blank lines,
 # & insert blank lines between output filename groups
 echo " " >>xmvs/mvsfiles4  # need blank line at EOF
 #
 uvcopy mvsfiles54,fili1=$xd/mvsfiles4,filo1=$xd/mvsfiles5
 #========================================================
 # copy file *flagging files to be dropped (New,Mod,temp files)
 # - insert recsize where absent on lines of filename groups
 #
 uvsort "fili1=xmvs/mvsfiles5,rcs=100,typ=LSTt,filo1=xmvs/mvsfiles6\
 ,key1u1=55(30),key2=0(8),del1=0(1):0x20,del1=36(1):*\
 ,clro=50(40),mvco=b60(40)a55"
 #========================================================================
 # sort by filename, unique key sort keep only 1st record of dup key set
 # - drop blank lines & *flagged lines - if 1st in groupp DISP=New/Mod
 #   or DDname blank, or From step# present, or match table of patterns
 # - clear To step & shift filename over to write in copybook name
 #
 uvcopy mvsfiles56,fili1=xmvs/mvsfiles6,filo1=xmvs/mvsfiles7
 #==========================================================
 # convert final report of essential datafiles
 # into script to copy from $CNVDATA/d2asc/... to $RUNDATA/data/...

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_5. FTP mainframe DATA files to unix/linux

Part 5 Contents


5A1. problems FTP'ing mainframe data files to unix
- FTP ASCII mode - corrections required

5A2. which solution to CR/LF ?
- solutions for zoned signs

5B1. FTP data from Mainframe to Unix/Linux

5B2. FTP ASCII with demo files

5C1. investigate files FTP'd from mainframe
- sales0 - EBCDIC recsize=64

5C2. sales1a - ASCII with CR/LF appended

5D1. correcting signs after FTP ASCII mode
- ftp/sales1a - BEFORE sign correction
- ftp/sales1a - AFTER sign correction

5E1. correcting Record-Length after FTP ASCII mode
- ftp/sales1a - BEFORE record-length correction
- data/sales1a - AFTER record-length correction

5E2. Best of Both Worlds
- data/sales1a - AFTER recsize correct & LF insert

5F1. uvcp file 'typ' codes

5G1. using uvhd TRANSLATE sign command (vs uvcp) to correct zoned signs
- uvhd is a FREE download from http://www.uvsoftware.ca/freestuff.htm

5G2. using uvhd WRITE command (vs uvcp) to change record-length drop CR/LF
 "Best of Both Worlds" - retaining original rec-size, so no program changes
- inserting LF in last byte (if unused) of original rec-size,
  allows us to use the various unix tools (vi,lp,cat,more,etc).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part 5 Contents (continued)


5H1. Detecting corrupted files after FTP
- ftp/sales1x - corrupted file

5H2. Use 'uvhd' to detect corrupted file

5H3. Using uvhd with Text file option 't'

5I1. finding wrong-size records in large files
varstat3 - table summarize record sizes

5J1. correcting wrong-size records
- dropping/separating wrong-size records
- console log from splitfile2

5K1. splitfile2 - listing of uvcopy job to select desired rec-size
5K2. varstat3 - listing of uvcopy job to table summarize record-sizes

5L1. EBCDIC to ASCII Data Conversion allowing packed/binary
- these more complex data conversions not covered in detail here
- references given to other documents with the operating instructions

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5A1. FTP mainframe DATA files to unix/linux

problems FTP'ing mainframe data files to unix

Part 5 will illustrate problems that can occur when FTP'ing mainframe files to unix/linux. And we will offer solutions to these problems using Vancouver Utilities (uvhd & uvcp).

You can FTP files in either ASCII/text mode or in BINARY mode. If you are have files with packed decimal or binary fields, you must FTP them in BINARY mode - because the ASCII/text mode EBCDIC to ASCII translation destroys packed/binary fields. Ascii mode also appends a Carriage-Return & Line-Feed making each record 2 bytes longer than on the mainframe.

Migrating mainframe applications to unix/linux will be easier if you can avoid changing record sizes - because you will not have to change the prgrams. If you FTP'd the files in ASCII mode you would have to change the COBOL programs to match - increasing the record length by 2 bytes (for the added CR/LF) & changing file type from the default 'ORGANIZATION SEQUENTIAL' to 'organization LINE sequential' (for Micro Focus COBOL).

But it is not that simple if you have files with packed/binary fields. These files must be FTP'd in BINARY mode & then selectively translate only the character fields, preserving the packed/binary fields which must be the same for both mainframe & Micro Focus COBOL. Vancouver Utilities has tools which use the COBOL copybooks to automatically generate jobs to translate the pic x fields & preserve (copy as is) the comp-3/comp fields.

Please see 'Part_6' if you need to convert files with packed &/or binary fields.

FTP ASCII mode - corrections required

This Part 5 will focus on FTP ASCII mode & compensating for the file changes caused by FTP ASCII. There are 2 changes that will require correction if you are inputting the files to the same application (COBOL?) as on the mainframe that expects the same record layout.

  1. The records are now 2 bytes longer due to the ASCII mode addition of a Carriage-Return & a Line-Feed on each record. So you will either have to remove the CR/LF or change the programs to allow the CR/LF.

  2. Records that have zoned signs in unpacked numeric fields will need correction from the mainframe zoned sign conventions to the Micro Focus COBOL zoned signed conventions (or convert to separate signs leading or trailing).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5A2. FTP mainframe DATA files to unix/linux

which solution to CR/LF ?

  1. Drop the CR/LF to make the file exactly the same length as on the mainframe & that is expected by the (COBOL?) application.

  2. Modify the COBOL programs, increasing the record length by 2 bytes OR change the file type from 'ORGANIZATION SEQUENTIAL' to 'organzation LINE sequential'.

Leaving the CR/LF on the records & modifying the programs to expect LINE Sequential has advantages. You can then use the various unix tools (vi,lp,etc) to view & print the file. Without the LineFeeds you could use 'uvhd' to inspect the files.

solutions for zoned signs

  1. For files with zoned signs in unpacked numeric fields, you need to convert the mainframe zoned signs to the Micro Focus COBOL conventions.
  1. OR you might convert them to separate signs leading or trailing - If your numeric fields can afford to lose 1 byte of length to avoid having to change record lengths & therefore the application programs.

The following pages will illustrate the FTP problems & the various solutions.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5B1. FTP mainframe data files to unix

FTP data from Mainframe to Unix/Linux


 #1. Login --> your homedir
     =====

 #2. cdd   --> $HOME/$RUNDATA
     ===

 #3. cd data    <-- change into the data subdir
     =======

 #4. ftp xxx.xxx.xxx.xxx   <-- FTP to mainframe IP#
     ===================
 #4a. userid--> .....      <-- enter userid
 #4b. passwd--> .....      <-- enter password
 #4c. ascii                <-- translate EBCDIC to ASCII & insert CR/LF
      ---OR---                 (ascii is usually the default)
 #4c. binary               <-- ensure binary transfer
 #4d. site RDW             <-- required if any variable length files
 #4e. cd ...               <-- change to data files directory ??
 #4f. get 'XXX.XXX.XXX'    <-- get desired data files
 #4g. get '...etc....'       - 'single quotes' may be required

 #5. cdd    <-- change back up to working directory (above data/...)
     ===

On some systems the single quotes are retained & the filename may be UPPER case or lower case depending how we entered the filenames. ON unix we certainly need to remove the single quotes & we may need to change the case. We will show you 2 ways to do this - the 'hard way' & the 'easy' way'.


 #5. mv  \'XXX.XXX.XXX\'  xxx.xxx.xxx   <-- the hard way
     ================================     - see #6. the easy way
     - imagine how awkward this would be if hundreds of files

 #6a. renameQQ data  <-- easy way to remove Quotes from All files in subdir
      =============

 #6b. renameL data   <-- easy way to convert to Lower case (All files in subdir)
      ============

 #6b. renameU data   <-- easy way to convert to UPPER case (All files in subdir)
      ============
Note
  • see Part_6 to convert files with packed/binary fields (must FTP binary)
  • this Part 5 corrects files with no packed/binary (can FTP in ASCII mode)

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5B2. FTP mainframe data files to unix

FTP ASCII with demo files

We can illustrate FTP ASCII problems by FTP'ing the supplied EBCDIC demo file dat1/sales1 within our unix/linux machine - using IP# 127.0.0.1 (localhost).

 /home/uvadm
 :-----dat1          <-- supplied test data files
 :     :-----sales0  <-- EBCDIC fixed length 64 byte records (no LineFeeds)
 :     :               - with zoned signs in unpacked numeric fields
 :     :-----sales1a <-- ASCII fixed length 66 byte records (CR/LF appended)
 :     :               - as sales0 would be if FTP'd from mainframe in ASCII mode
 :     :-----sales1x <-- corrupted file (not all same-size records)
                       - to demo varstat3 detect & splitfile2 to separate
 /home/mvstest1        <-- mvstest1 for user self-training
 /home/userxx          <-- OR setup testdata in userhomedir
 :-----testdata
 :     :-----ftp         - receive files FTP'd from $UV/dat1/...
 :     :-----data        - copy with corrections to $HOME/testdata/data
 :     :     :-----sales0,sales1a,sales1x <-- files copied from $UV/dat1/...

 #1. Login --> your homedir
 #2. cdd   --> $HOME/$RUNDATA

 #3. mkdir ftp        <-- make subdir to receive FTP'd files
                        - see existing subdirs on page '3B2'
 #4. cd ftp           <-- change into subdir to receive FTP'd files

 #5. ftp localhost    <-- FTP within our unix/linux machine
       ---OR---
     ftp 127.0.0.1      - IP# for localhost
     =============
 #5a. userid--> uvadm      <-- to get demo files supplied with VU pkg
 #5b. passwd--> .....      <-- enter password
 #5c. cd dat1              <-- change to demo data files directory
 #5d. ascii                <-- translate EBCDIC to ASCII & insert CR/LF
      binary                 - ascii does not work within a unix system
 #5e. get sales0           <-- get EBCDIC demo file
 #5f. get sales1a          <-- get ASCII version with CR/LF
 #5g. bye

 #6. cdd    <-- change back up to working directory (above data/...)
Note
  • FTP ascii mode is ignored & binary mode forced within unix/linux system
  • so we provide 2 demo files
sales0
  • EBCDIC fixed length 64 byte records (no LineFeeds)
sales1a
  • ASCII fixed length 66 byte records (CR/LF appended)
  • as sales0 would be if FTP'd from mainframe in ASCII mode

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5C1. FTP mainframe data files to unix

investigate files FTP'd from mainframe

After FTP'ing use 'uvhd' to investigate the files & confirm as expected. First determine the record size (default 256 if not sepcified on uvhd command). If omitted uvhd suggests the next lower & next higher recsize multiple that divides evenly into the filesize. Or look for repeating patterns in the data. Or since we FTP'd in ascii mode look for the 1st Linefeed x'0A', quit uvhd,& re-enter the command with correct record-size.

sales0 - EBCDIC recsize=64


 uvhd ftp/sales0 r64a    <-- option r64 for record-size
 ====================      - option 'a' to display char line to ASCII
                             so we can read (zones/digits show EBCDIC)
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             FFFFFF4444FF4FFFFFF4CDFFFFFF44CCDFFF44FFFFFC4FFFFFFF4FFFFFFFFC44
             1301400000210940802095111001008140010000002000000001000000002000
 rec#=1 rsize=64 fptr=0 fsize=1280 rcount=20
             cust#   slm#  date  invoice# product   qty unit-price ext$amount
                      10        20        30        40        50        60
 r#        2 0123456789012345678901234567890123456789012345678901234567890123
          64 130140    21 940802 IN111001  SCR012  00002A 0001001 00002102A
             FFFFFF4444FF4FFFFFF4CDFFFFFF44ECDFFF44FFFFFC4FFFFFFF4FFFFFFFFC44
             1301400000210940802095111001002390120000002100001001000002102100
 rec#=2 rsize=64 fptr=64 fsize=1280 rcount=20

Notes

  1. We show only 1st 2 records (of 20 in demo file).

  2. You can see the data is EBCDIC by coding of zones & digits lines. For example 1st byte '1' is x'F1' (numeric zone x'F_' unique to EBCDIC).

  3. Note that bytes 43 & 61 (units of qty & $amt) have zoned signs. 1st record qty/amt units is '{' x'C0' which is +0 in EBCDIC. 2nd record qty/amt units is 'A' x'C1' which is +1 in EBCDIC. Records 01-10 units are {ABCDEFGHI for +0123456789 Records 11-20 units are {JKLMNOPQR for -0123456789

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5C2. FTP mainframe data files to unix

sales1a - ASCII with CR/LF appended


 uvhd ftp/sales1a r66  <-- option r66 for record-size
 ====================    - omit option 'a' since FTP translated
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             3333332222332333333244333333224443332233333723333333233333333722
             130140000021094080209E1110010081D0010000002B00000001000000002B00
          64 ..
             00
             DA
 rec#=1 rsize=66 fptr=0 fsize=1320 rcount=20
                      10        20        30        40        50        60
 r#        2 0123456789012345678901234567890123456789012345678901234567890123
          66 130140    21 940802 IN111001  SCR012  00002A 0001001 00002102A
             3333332222332333333244333333225453332233333423333333233333333422
             130140000021094080209E111001003320120000002100001001000002102100
          64 ..
             00
             DA
 rec#=2 rsize=66 fptr=66 fsize=1320 rcount=20

Notes

  1. Records are now 66 bytes, default segment size is 64, so we see 2 bytes on the 2nd segment of the vertical hexadecimal display. These 2 bytes are the Cariage-Return x'0D' & Line-Feed x'0A'

  2. You can see the data is ASCII by coding of zones & digits lines. For example 1st byte '1' is x'31' (numeric zone x'3_' unique to ASCII). Also note that the blanks (x'40' in EBCDIC) are now x'20' in ASCII.

  3. Note that the sign bytes 43 & 61 (units of qty & $amt) have been translated to the equivalent characters in ASCII - which are INCORRECT as signs for unix/linux Micro Focus COBOL, where positives have no zones & negatives -01234567890 are pqrstuvwxy x'70' zones.

  4. See next page where we will show you how to correct the signs with uvcp - using instruction 'tras' (translate EBCDIC signs to Ascii signs).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5D1. FTP mainframe data files to unix

correcting zoned signs after FTP ASCII mode


 uvcp "fili1=ftp/sales1a,rcs=66,typ=RST,filo1=data/sales1a,tras=43(1),tras=61(1)"
 ================================================================================

ftp/sales1a - BEFORE sign correction

 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
 130140    21 940802 IN111001  SCR012  00002A 0001001 00002102A
 139923    35 950802 IN111002  CHR001  00002B 0002001 00004402B
 139923    35 950802 IN111002  TAB013  00002C 0003001 00006902C
 139923    35 950807 CR5421    TAB013  00002D 0004001 00009602D
 150825    44 960804 IN1122    HAM001  00002E 0005001 00012502E
 150825    44 960804 IN1122    PLN012  00002F 0006001 00015602F
 201120    44 970807 CR5234    WHIP75  00002G 0007001 00018902G
 223240    65 980816 CR955     HAM001  00002H 0008001 00022402H
 223240    65 980816 IN441     BIT001  00002I 0009001 00026102I
 308685    21 990812 IN6605    SAW001  00001} 0000001 00000001}
 308685    21 990812 IN6605    WID115  00001J 0001001 00001101J
 308685    21 990812 CR8835    TAB013  00001K 0002001 00002401K
 315512    44 000805 IN2251    HAM001  00001L 0003001 00003901L
 315512    44 000805 IN2251    SAW051  00001M 0004001 00005601M
 315512    44 000805 IN2255    WID115  00001N 0005001 00007501N
 400002    85 010812 CR245     HAX129  00001O 0006001 00009601O
 406082    35 020815 IN33001   BBQ001  00001P 0007001 00011901P
 406089    35 020815 IN33001   TAB013  00001Q 0008001 00014401Q
 406082    65 020816 IN441     HAM001  00001R 0009001 00017101R

ftp/sales1a - AFTER sign correction

 130140    21 940802 IN111001  HAM001  000020 0000001 000000020
 130140    21 940802 IN111001  SCR012  000021 0001001 000021021
 139923    35 950802 IN111002  CHR001  000022 0002001 000044022
 139923    35 950802 IN111002  TAB013  000023 0003001 000069023
 139923    35 950807 CR5421    TAB013  000024 0004001 000096024
 150825    44 960804 IN1122    HAM001  000025 0005001 000125025
 150825    44 960804 IN1122    PLN012  000026 0006001 000156026
 201120    44 970807 CR5234    WHIP75  000027 0007001 000189027
 223240    65 980816 CR955     HAM001  000028 0008001 000224028
 223240    65 980816 IN441     BIT001  000029 0009001 000261029
 308685    21 990812 IN6605    SAW001  00001p 0000001 00000001p
 308685    21 990812 IN6605    WID115  00001q 0001001 00001101q
 308685    21 990812 CR8835    TAB013  00001r 0002001 00002401r
 315512    44 000805 IN2251    HAM001  00001s 0003001 00003901s
 315512    44 000805 IN2251    SAW051  00001t 0004001 00005601t
 315512    44 000805 IN2255    WID115  00001u 0005001 00007501u
 400002    85 010812 CR245     HAX129  00001v 0006001 00009601v
 406082    35 020815 IN33001   BBQ001  00001w 0007001 00011901w
 406089    35 020815 IN33001   TAB013  00001x 0008001 00014401x
 406082    65 020816 IN441     HAM001  00001y 0009001 00017101y

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5E1. FTP mainframe data files to unix

correcting Record-Length from FTP ASCII mode

If you decide to retain the same record-size (so you do not have to change the programs), you can drop the appended CR/LF using 'uvcp' as shown below using our demo file sales1a which expanded from 64 to 66 by ASCII FTP.


 uvcp "fili1=ftp/sales1a,rcs=66,typ=RSF,filo1=data/sales1a,rcs=64,typ=RSF"
 =========================================================================

ftp/sales1a - BEFORE record-length correction


 uvhd ftp/sales1a r66 <-- option r66 rec-size from ASCII FTP & BEFORE drop CR/LF
 ====================   - will show only 1st record of 20 in our demo file
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             3333332222332333333244333333224443332233333723333333233333333722
             130140000021094080209E1110010081D0010000002B00000001000000002B00
          64 ..
             00
             DA
 rec#=1 rsize=66 fptr=0 fsize=1320 rcount=20

data/sales1a - AFTER record-length correction


 uvhd data/sales1a r64  <-- option r64 for rec-size AFTER dropping CR/LF
 =====================
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             3333332222332333333244333333224443332233333723333333233333333722
             130140000021094080209E1110010081D0010000002B00000001000000002B00
 rec#=1 rsize=64 fptr=0 fsize=1280 rcount=20

Notes

  1. Restoring the original record-lengths means you do not have to change the programs migrated from the mainframe to unix/linux.

  2. To focus on Record-Length correction, we have omitted the sign-corrections illustrated on the previous page 'tras=43(1),tras=61(1)'. You can combine sign corrections & record-length corrections as required for your files.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5E2. FTP mainframe data files to unix

Best of Both Worlds

Dropping the CR/LF has a disadvantage - you can not use the various unix tools (vi,lp,cat,more,etc) to view & print the records unless the LF is present (the CR is not required for unix/linux systems).

We can keep the LineFeed & the same Record-Length in this case - because there just happens to be 2 unused blanks at the end of our sales1a demo file. The following uvcp specifies output 'typ=RST' (Record Sequential Terminated) which forces a LineFeed into the last byte of 'rcs=64'.


 uvcp "fili1=ftp/sales1a,rcs=66,typ=RSF,filo1=data/sales1a,rcs=64,typ=RST"
 =========================================================================

data/sales1a - AFTER recsize correct & LF insert


 uvhd data/sales1a r64  <-- option r64 for rec-size after dropping CR/LF
 =====================
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             3333332222332333333244333333224443332233333723333333233333333720
             130140000021094080209E1110010081D0010000002B00000001000000002B0A
 rec#=1 rsize=64 fptr=0 fsize=1280 rcount=20

Notes

  1. The only difference from the prior page is that output file type is changed from 'typ=RSF' to 'typ=RST', which forces LF into last byte of rcs=64.

  2. Since the original record-lengths have been maintained you do not have to change the programs migrated from the mainframe to unix/linux.

  3. If desired, you can change COBOL program 'ORGANIZATION RECORD SEQUENTIAL' (default) to 'organization LINE sequential' which will write output files with a LineFeed after the last non-blank to allow you to use the various unix tools (vi,lp,cat,more,etc) to view & print your files.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5F1. FTP mainframe data files to unix

uvcp file 'typ' codes

See all file type codes at uvcp.htm#F1. Here are the more relevant codes:

RSF
  • Record Sequential Fixed (no CR/LF appended)
RST
  • Record Sequential Terminated (LF forced in last byte of recsize stated)
LST
  • Line Sequential Terminated
  • for input files the LF is blanked
  • for output files the LF is appended after the stated record-size
LSTt
  • Line Sequential Terminated with option 't' LF after last non-blank
  • for input files the LF is blanked (same as LST)
  • for output files the LF is appended after the last non-blank
    (record scanned backward to find last non-blank)
ISF
  • Indexed Sequential Fixed
RDWz4

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5G1. FTP mainframe files to unix/linux

using 'uvhd' (vs uvcp) to correct zoned signs

Page '5D1' used 'uvcp' to correct zoned signs from mainframe EBCDIC conventions to unix Micro Focus COBOL conventions (positives {ABCDEFGHI to 0123456789 & negatives }JKLMNOPQR to pqrstuvy).


 uvcp "fili1=ftp/sales1a,rcs=66,typ=RST,filo1=data/sales1a,tras=43(1),tras=61(1)"
 ================================================================================
 - 'uvcp' solution from page '5D1', see 'uvhd' Alternative solution below

If you have not purchased the Vancouver Utilities package, you can do the sign corrections using the 'FREE uvhd' from http://www.uvsoftware.ca/freestuff.htm. Need to enter a separate command for each signed field vs uvcp 1 pass.


 #1. Login mvstest1 or yourself --> your homedir

 #2. cdd --> $HOME/testdata (with subdirs ftp,data at least)

 #3. cp ftp/sales1a data/
     ====================
     - copy FTP'd file to the data/ subdir, since uvhd updates in place
     - vs uvcp which copies the file (as seen above)

 #4. uvhd data/sales1a r66u    <-- option 'r66' for Record-size 66
     ======================      - option 'u' required for Update

 #4a. --> t99s 43(1)    <-- translate mainframe signs to unix Micro Focus COBOL
          ==========      - 't99' Translates ALL records (99 assumes 999999999)
                          - option 's' for Sign correction translate table
                          - '43(1)' identifies the start byte & (length)
                          - the units position of the quantity field

 #4b. --> 1             <-- return to record #1 (in preparation for 2nd field)
          ===

 #4c. --> t99s 61(1)    <-- translate the zoned sign in the units of $amount
          ==========

 #5. head data/sales1a  <-- inspect results
     =================    - see all 20 records Before & After on page '5D1'
                          - but here are 1st 2 & last record Before & After
           1         2         3         4         5         6
 012345678901234567890123456789012345678901234567890123456789012345
 CUST#    SLM  DATE   INV#     PROD#     QTY   PRICE    AMOUNT
 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
 130140    21 940802 IN111001  SCR012  00002A 0001001 00002102A
 406082    65 020816 IN441     HAM001  00001R 0009001 00017101R
    - - - 1st 2 & last records BEFORE above, AFTER below - - -
 130140    21 940802 IN111001  HAM001  000020 0000001 000000020
 130140    21 940802 IN111001  SCR012  000021 0001001 000021021
 406082    65 020816 IN441     HAM001  00001y 0009001 00017101y

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5G2. FTP mainframe files to unix/linux

using 'uvhd' (vs uvcp) to drop CR/LF

Page '5E1' used 'uvcp' to change the record-length - dropping the CR/LF so we would not have to change the programs when migrating from mainframe to unix. You can also change record lengths using the 'FREE uvhd'.

We will use the 'w' (Write) command of uvhd with option 'r' for the desired Record-size. Note that the Write command writes the file out to the tmp/... subdir with a date_time stamp (tmp/sales1a_yymmdd_hhmmssW). You can inspect & if OK - copy back changing the name back to the original name.


 #1. Login mvstest1 or yourself --> your homedir

 #2. cdd --> $HOME/testdata (with subdirs ftp,data at least)

 #3. uvhd data/sales1a r66    <-- option 'r66' for Record-size 66
     =====================

 #3a. --> w99r64    <-- Write all records to tmp/sales1a_yymmdd_hhmmssW
          ======      - 'r64' specifies the new Record-size (dropping CR/LF)

 #4. uvhd tmp/sales1a_yymmdd_hhmmssW r64   <-- inpsect output file
     ===================================

 #5. cp tmp/sales1a_yymmdd_hhmmssW data/sales1a
     ==========================================
     - copy back renaming back to the original name

alternative - inserting LF in last byte original recsize

Here is the "Best of Both Worlds" solution - retaining original record-size, so we don't have to chaneg programs AND inserting a LineFeed in the last byte (if unused) of original rec-size, so we can use unix tools (vi,lp,cat,more,etc).


 #3. uvhd data/sales1a r66    <-- option 'r66' for Record-size 66
     =====================

 #3b. --> w99r63t2   <-- Write all records to tmp/sales1a_yymmdd_hhmmssW
          ========     - option 'r63' specifies new Record-size (dropping CR/LF)
                       - option 't2' appends a LineFeed on rec-size (63+1=64)

 #4. uvhd tmp/sales1a_yymmdd_hhmmssW r64   <-- inpsect output file
     ===================================
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             3333332222332333333244333333224443332233333723333333233333333720
             130140000021094080209E1110010081D0010000002B00000001000000002B0A
 rec#=1 rsize=64 fptr=0 fsize=1280 rcount=20
Note
  • the LineFeed x'0A' is now in byte 63 (0 relative) 64 (1 relative)

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5H1. FTP mainframe files to unix/linux

Detecting corrupted files from FTP

As mentioned earlier, the 1st thing you should do on receiving files via FTP is to investigate with uvhd to confirm as expected - file type & record size. If fixed-length, all records must be the same size & uvhd can check this.

To illustrate, we have provided 'sales1x' which is similar to the previously listed sales1a, but has 5 short records. Here it is:

ftp/sales1x - corrupted file

 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
 130140    21 940802 IN111001  SCR012  00002A 0001001 00002102A
 139923    35 950802 IN111002  CHR001  00002B 0002001 00004402B
 139923    35 950802 IN111002  TAB013  00002C 0003001 00006902C
 139923    35 950807 CR5421    TAB013  00002D 0004001 00009602D
 150825    44 960804 IN1122    HAM001  00002E 0005001 00012502E
 150825    44 960804 IN1122    PLN012  00002F 0006001 00015602F
 201120    44 970807 CR5234    WHIP75  00002G 0007001 00018902G
 223240    65 980816 CR955     HAM001  00002H 0008001
 223240    65 980816 IN441     BIT001  00002I 0009001 00026102I
 308685    21 990812 IN6605    SAW001  00001} 0000001 00000001}
 308685    21 990812 IN6605    WID115  00001J 0001001 00001101J
 308685    21 990812 CR8835    TAB013  00001K
 315512    44 000805 IN2251    HAM001  00001L 0003001 00003901L
 315512    44 000805 IN2251    SAW051  00001M 0004001
 315512    44 000805 IN2255    WID115  00001N 0005001 00007501N
 400002    85 010812 CR245     HAX129  00001O
 406082    35 020815 IN33001   BBQ001  00001P 0007001 00011901P
 406089    35 020815 IN33001   TAB013  00001Q
 406082    65 020816 IN441     HAM001  00001R 0009001 00017101R

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5H2. FTP mainframe files to unix/linux

use uvhd to detect corrupted file

Here are the results of using uvhd on corrupted file ftp/sales1x, which has 5 records shorter than the expected 66 (see listing on previous page).


 uvhd ftp/sales1x r66
 ====================
 records=18 rsize=66 fsize=1236 fsize/rsize(rmndr)=48
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             3333332222332333333244333333224443332233333723333333233333333722
             130140000021094080209E1110010081D0010000002B00000001000000002B00
          64 ..
             00
             DA
 filesize NOT multiple of recsize, 48 bytes remain
 rec#=1 rsize=66 fptr=0 fsize=1236 rcount=18
 If Text file (with LineFeeds),  quit/restart with option 't'
 If Variable (IDXFORMAT3/8,RDW), quit/restart with optn v,or z
 If Fixed length records, change recsize now via command 'R' (R66 current)
 next evenly divisible record sizes lower/higher are --> R12/R103
 OR you may continue (ignoring these warnings) -->
                      10        20        30        40        50        60
 r#        2 0123456789012345678901234567890123456789012345678901234567890123
          66 130140    21 940802 IN111001  SCR012  00002A 0001001 00002102A
             3333332222332333333244333333225453332233333423333333233333333422
             130140000021094080209E111001003320120000002100001001000002102100
          64 ..
             00
             DA
 filesize NOT multiple of recsize, 48 bytes remain
 rec#=2 rsize=66 fptr=66 fsize=1236 rcount=18

Notes

  1. uvhd displays error message "filesize NOT multiple of recsize" & sugegsts the next lower & higher sizes evenly divisible into the file size. For non-corrupted files (all records same size), you can restart with alternate record sizes until you get the right 1 (no error messages).

  2. BUT, that will not help us here when the file has corrupted records (not all same size as expected for fixed-length files).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5H3. FTP mainframe files to unix/linux

using uvhd with Text file option 't'

If you are getting "filesize not multiple of recsize" & you can see LineFeeds x'0A' in the data, then quit & change your fixed size option 'r' to option 't' for Text files (record length detrmined by LineFeed at end of each record).


 uvhd ftp/sales1x t   <-- prior page options 'r66' changed to 't'
 ==================     - option 't' determines recor-size by LineFeeds x'0A'
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             3333332222332333333244333333224443332233333723333333233333333722
             130140000021094080209E1110010081D0010000002B00000001000000002B00
          64 ..
             00
             DA
 rec#=1 rsize=66 fptr=0 fsize=1236 rcount=20
                      10        20        30        40        50        60
 r#        2 0123456789012345678901234567890123456789012345678901234567890123
          66 130140    21 940802 IN111001  SCR012  00002A 0001001 00002102A
             3333332222332333333244333333225453332233333423333333233333333422
             130140000021094080209E111001003320120000002100001001000002102100
          64 ..
             00
             DA
 rec#=2 rsize=66 fptr=66 fsize=1236 rcount=20

Notes

  1. Changing fixed size option 'r66' to option 't' avoids the error messages.

  2. It also avoids getting "off-track" when you browse down the file & encounter the different sized records.

  3. You can still jump to any record# in the file, because option t builds an indexed to know where the start of every record is.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5I1. FTP mainframe files to unix/linux

finding wrong-size records in large files

You might run statistics job 'varstat3' on corrupted files to see how many different record-sizes you have & where the 1st record is of each different size.


 #1. Login mvstest1 or yourself --> your homedir

 #2. cdd --> $HOME/testdata (with subdirs ftp,data at least)

 #3. mkdir stats     <-- make subdir to receive stats report

 #4. uvcopy varstat3,fili1=ftp/sales1x,filo1=stats/sales1x
     =====================================================
     - create record-sizes report in stats/sales1x

 #4a. uvcopy varstat3,fili1=ftp/sales1x  <-- Alternative shorter command
      =================================    - output filename defaults as above

 #5. vi stats/sales1x    <-- inspect report
     ================
 varstat3  2011/11/09_17:01:11  record-sizes in dat1/sales1x
 tbl#0001  tblt1f1 c0(5)
 line#     count  %    1strec#  record-sizes
     1         3  15        13  00045
     2         2  10         9  00053
     3        15  75         1  00065
              20*100             *TOTAL*
  1. You can see there are 3 different record-sizes (45, 53,& 65). Ending LineFeeds not counted in these sizes else they would be 46,54,66.

  2. The '1strec#' of 45 byte records occurs at record# 13 in the file, the 1strec# of 53 byte records is at record# 9 & 1strec of 65 byte records is at record #1.

  3. The report tells you that 3 of the 20 records in the file are 45 bytes long, 2 are 53 bytes,& 15 are 65 bytes (correct).

  4. If you are interested, you can inspect 'varstat3' as shown below: It is 1 of the 800+ pre-programmed jobs supplied with Vancouver Utilities.

      vi $UV/pf/IBM/varstat3
      ======================
  1. uvcopy instruction 'tbl' builds the table you see above, capable of tabling thousands to arguments encountered in any seqeunce & dumping the table in sorted sequence at End Of File.

  2. See listing of uvcopy job varstat3 on page '5K2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5J1. FTP mainframe files to unix/linux

correcting wrong-size records

You might want to correct the wrong size records, if the application programs must have all same sized records, vs changing program files to 'ORGANIZATION LINE SEQUENTIAL", which would read the file correctly.

We can use 'uvcp' with 'rcs=66', input 'typ=LST' & output 'typ=RST' to force all output recors to 66 bytes with the LF in the last byte.


 uvcp "fili1=ftp/sales1x,rcs=66,typ=LST,filo1=data/sales1x,typ=RST"
 ==================================================================

dropping/separating wrong-size records

If you wanted to drop the wrong-size records, you could run the 'splitfile2' uvcopy job, which reads the file & outputs 2 files - 1st with specified record-size, 2nd with all other-sized records (in case you want to inspect).


 uvcopy splitfile2,fili1=ftp/sales1x,uop=r65
 ===========================================

console log from splitfile2

 uop=q1r220  - option defaults
       r220  - select data recsize 220 (+1 LF total 221)
       r2048 - specify any desired record-size, max 2048
 111109:175930:splitfile2: uvcopy ver=20111103 pf=/home/uvadm/pf/demo/splitfile2
 uvcopy LNX L64  license=111103_99V_930630 site=UV_Software
 User OPtion (uop) defaults  = q1r220r65
 -->null to accept or enter/override -->
 111109:175931:splitfile2: EOF fili01 rds=20 size=1236: ftp/sales1x
 111109:175931:splitfile2: EOF filo01 wrts=15 size=990: data/sales1x
 111109:175931:splitfile2: EOF filo02 wrts=5 size=241: tmp/sales1xx

Notes

  1. You can see that the record counts for the 2 files agree with the varstat3 report (shown on the previous page)

  2. In case you are interested, the uvcopy job is listed on the next page. It is 1 of the 800+ pre-programmed jobs supplied with Vancouver Utilities. The uvcopy interpreter finds its jobs (parameter files) via $PFPATH which is defined in the supplied profiles.

 export PFPATH=$PFPATH,$UV/pf/adm,$UV/pf/demo,$UV/pf/util,$UV/pf/IBM
 ===================================================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5K1. FTP mainframe files to unix/linux

splitfile2 - uvcopy job to select desired rec-size

 # splitfile2 - uvcopy job stored at $UV/pf/demo/splitfile2 (in $PFPATH)
 # splitfile2 - split file of text records that should all be 1 record-size
 #            - write 2 output files, 1st file all specified recsize
 #              2nd file for all other recsizes
 #            - a more flexible general purpose job than 'splitfile1'
 #              which hard-coded 1 particular record size
 #
 #              ** sample Op. Instrns. for splitfile2 **
 #
 # uvcopy splitfile2,fili1=d1/filex,filo1=d2/filexok,filo2=d2/filexbad,uop=r220
 # ============================================================================
 # - note 'uop=r220' option to select data recsize 220 (+1 for LF total 221)
 # - may specify I/O filenames on comamnd line (as above)
 #
 # uvcopy splitfile2
 # =================
 # - may omit fili1=...,filo1=...,filo2=... filenames & uop=...
 # - uvcopy will show defaults coded & prompt to enter newnames/new rec-size
 #
 opr='uop=q1r220  - option defaults'
 opr='      r220  - select data recsize 220 (+1 LF total 221)'
 opr='      r2048 - specify any desired record-size, max 2048'
 uop=q1r220   # option defaults (actual vs above opr msgs)
 #            # note option 'r' coded as $uopbr on cmn instruction below
 fili1=?dat1/filex,typ=LST,rcs=2048      # recsize by LF max 2048
 filo1=?dat2/filexok,typ=RST,rcs=2048    # fixed recsize option r, LF last byte
 filo2=?dat2/filexbad,typ=LSTt,rcs=2048  #option t of LSTt drops trailing blanks
 @run
        opn    all
 # begin loop to get/put records until EOF
 # note - get stores recsize in register 'v' ($rv)
 loop   get    fili1,a0       fili1 typ=LST rcs=2048 allows recsize 2048 max
        skp>   eof
        cmn    $rv,$uopbr     recsize = option 'r' ?
        skp!   put2
        add    $rv,1              +1 for LineFeed
 put1   put    filo1,a0($rv2048)  filo1 typ=RST inserts LF last byte option size
        skp    loop
 put2   put    filo2,a0       filo2 typ=LST last nonblank determines recsize
        skp    loop
 #
 # EOF - close files & end job
 eof    cls    all
        eoj

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5K2. FTP mainframe files to unix/linux

varstat3 - uvcopy job to table summarize record-sizes

 # varstat3 - create summary table of record-sizes used in text file
 #          - by Owen Townsend, Oct 19/2011
 #
 # uvcopy varstat3,fili1=data/filename,filo2=stats/filename
 # ==========================================================
 #
 #                  ** sample report **
 #
 # RDWstat1  2006/12/17_18:15:17  record-sizes in d0ebc/E2121656
 # tbl#001 pg#001     -argument-
 # line#  count    %  record-sizes
 #     1  10,552  16  00046
 #     2   4,451   7  00065
 #     3  23,347  37  00066
 #     4     367   0  00068
 #     5  21,010  33  00083
 #       - - - etc - - -
 #    18       3   0  00218
 #    19     441   0  00233
 #    20     813   1  00239
 #        62,115*100   *TOTAL*
 #
 opr='$jobname - create summary table of record-sizes used in text files'
 rop=r1        # option to prompt for report disposition
 fili1=?data/input,rcs=2048,typ=LST
 filo1=?stats/$fili1,typ=LSTt,rcs=128
 @run
        opn     all
 #
 # begin loop to get records & build summary table of recsizes
 # - to be dumped at end of file
 man20  get     fili1,a0                 get next RDW record data
        skp>    eof                      (cc set > at EOF)
        mvn     c0(5),$rv                cnvrt binary recsize to numeric
        tblt1f1 c0(5),'record-sizes'     build table in memory
        skp     man20                    repeat get loop til EOF
 #
 # EOF - close files & end job
 eof    mvfv1   f0(80),'record-sizes in $fili1'
        tbpt1s1 filo1,f0(50)             dump table from memory to file
        cls     all
        eoj

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5L1. DATA conversions for VU JCL demos

EBCDIC to ASCII Data Conversion allowing packed/binary

See MVSJCLtest.htm#Part_6 for the easiest way to convert data files with packed/binary fields. Script 'gencnvD2' generates conversion jobs, automatically from the COBOL copybooks. The following uvcopy jobs & SQL scripts are generated:

  1. EBCDIC to ASCII conversion, retaining the same record layout, so COBOL programs can execute unchanged on the unix/linux systems. Conversion jobs are generated from the COBOL copybooks so pic x fields can be translated from EBCDIC to ASCII, but any packed/binary fields are preserved (would be destroyed if entire record were translated). Also note that any unpacked numeric fields with zoned signs are transalted from the mainframe EBCDIC conventions to Micro Focus ASCII conventions (positives {ABCDEFGHI to 0123456789 & negatives }JKLMNOPQR to pqrstuvy).

  2. 'uvcopy jobs' are also generated to convert data files to '|' pipe delimited all text files for loading database tables. Packed/binary fields are unpacked & edited with separate signs & decimal points suitable for loading database tables.

  3. SQL scripts are also generated to CREATE the database tables.

  4. SQL scripts are also generated to LOAD the database tables.

Script gencnvD2 generates all 4 types of conversion jobs & scripts. You might initially need only the 1st (EBCDIC to ASCII retaining same layout) if you wish to migrate quickly to unix/linux with the fewest changes required. If so, use script 'gencnvA' to generate only the EBCDIC to ASCII job. Later on you might use the jobs/scripts 2,3,4 to convert flat files to database tables.

The data file conversions documented in MVSJCLtest.htm#Part_6 are OK for most mainframe files, but do not allow for more complex files used at some mainframe sites. UV Software does provide solutions for those complex files, which are documented in other manuals.

Below is a comparison of datafile conversion capabilities covered in various UV Software documents:

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

5L2. DATA conversions for VU JCL demos

Conversions Documented in MVSJCLtest Part 6

  1. Simplest & easiest, but adequate for most mainframe data files, EBCDIC to ASCII preserving packed/binary fields.

  2. Complex conversions (such as Multi Record Types & variable length records) are not documented in MVSJCLtest.htm#Part_6.

  3. Simple conversion procedures are made possible by using the copybook name for all generated jobs & by changing the names of the data files to match the copybook names. We can do this since separate subdirs are provided for the various generated jobs & data file types (separate subdirs for EBCDIC,ACII,pipe-delimited).

  4. Original EBCDIC data files are renamed to match the copybook when they are copied into the designated conversion subdir $CNVDATA/d1ebc. After conversion, they are renamed as desired when copied from $CNVDATA/d2asc to $RUNDATA/data for use by the JCL/scripts.

  5. Conversions documented in MVSJCLtest.htm#Part_6 are for 1 file at a time. See below for other methods to handle hundreds or thousands of data files.

    more complex EBCDIC to ASCII conversions

DATAcnv1.htm & MVSDATA.htm cover the more complex data file conversions (such as multi Record Types & variable length records).

You can retain original data file names (without manual renaming) by creating a control file to relate the copybook-name to the various data-file names with that layout. The conversion jobs are also named from the datafile names (vs copybook names, because there could be multiple datafiles per copybook).

All data files may be converted with 1 command, which is important for the several reconversions required during testing & the final 'go live' day.

converting data files to database tables

See SQLconvert.htm for more complete documentation on converting data files to pipe|delimited all text files suitable for loading database tables. Packed/binary fields will be unpacked & edited with decimal points & separate signs suitable for loading database tables. We also generate scripts to create & load database tables. Utility 'sqlcreate1' generates scripts for Oracle. Utility 'sqlcreate2' generates scripts for Microsoft SQL Server.

unpacking all packed/binary fields

Or you might want to unpack all packed/binary fields & retain your COBOL batch programs. See DATAcnv1.htm#4I1 thru 4I4 which documents this procedure. You make up a 2nd copybook for each file removing all 'comp-3's & 'comp's. Then run script 'genrfmA' to generate the data conversion jobs automatically. This conversion could be easy if you have used copybooks for all your data files, but obviously more difficult if you have embedded record layouts in your COBOL programs.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_6 DATA conversions for VU JCL demos

Part 6 - Contents


6A1. Data File Conversion - Overview

6A2. Conversions Documented here in MVSJCLtest
- More complex conversions in MVSJCL.htm
- SQL scripts to create/load tables in SQLconvert.htm

6B1. setup to perform DATA file conversions
- minimal subdirs for these demos
6B2.  script /cnvdatadirs' to create maximum conversion subdirs
6B3.  Summary of subdirs/procedures used to convert DATA files
 Generating jobs to convert EBCDIC to ASCII, preserving packed fields
 Generating jobs to convert to pipe delimited text for loading DB tables
 Generating batch-files to create & load tables
6B4.  Executing conversion jobs on unix/linux
 Executing conversion jobs on Windows Server

6C1. convert VU demo data files - Overview
6C2. use $symbols $UV, $CNVDATA, to allow directories anywhere

6D1. Op Instrns to GENERATE jobs to convert customer master EBCDIC to ASCII
 + convert ASCII to pipe|delimited & back to fixed-field
- sample/demo for ar.customer.master with packed/binary fields
- script 'gencnvD2' generates several uvcopy jobs & scripts from copybook
- script 'gencnvA' generate only the EBCDIC to ASCII conversion job
6D2.  Op Instrns to EXECUTE jobs to convert customer master (as above)

6D3. checking results of custmas conversion
- d1ebc/custmas - EBCDIC input file, displayed via 'uvhd'
  (uvhd is a file investigation utility for files with packed fields)

6D4. d2asc/custmas - investigate ASCII output file
- Notes re ASCII output file

6D5. maps/custmas - COBOL copybook converted to a 'cobmap' (record layout)
- cobmap generated by the 'uvcopy cobmap1' utility

6D6. uvhdcob utility to display data field contents beside copybook field names
- can use on both ASCII & EBCDIC files (with option 'a')

6D7. pfp1/custmas.dat - pipe delimited
- listpipeA - list pipe delimited - with copybook fieldnames
- notes re occurs

6D8. pfx1/custmas - job to convert EBCDIC to ASCII
- notes re EBCDIC to ASCII uvcopy job

6D9. pfp1/custmas - job to create pipe delimited

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

DATA conversions for VU JCL demos

Part 6 - Contents (continued)


6E1. Op Instrns to GENERATE jobs to convert sales detail to EBCDIC to ASCII
 + pipe|delimited, back to fixed-field, create SQL table, load SQL table
- sample/demo for sales detail with unpacked zoned signed fields
6E2.  Op Instrns to EXECUTE jobs to convert sales detail (as above)

6E3. checking results of saledtl conversion
- d1ebc/saledtl - investigate EBCDIC input file
- notes re EBCDIC input file

6E4. d2asc/saledtl - investigate ASCII output file
- Notes re ASCII output file

6E5. maps/custmas - COBOL copybook converted to a 'cobmap' (record layout)
- cobmap generated by the 'uvcopy cobmap1' utility

6E6. uvhdcob utility to display data field contents beside copybook field names
- can use on both ASCII & EBCDIC files (with option 'a')

6E7. pfp1/saledtl.dat - pipe delimited
- listpipeA - list pipe delimited - with copybook fieldnames

6E8. pfx1/saledtl - job to convert EBCDIC to ASCII
- generated by uvdata51 or scripts gencnvA, gencnvD2
- notes re EBCDIC to ASCII uvcopy job

6E9. pfp1/saledtl - job to create pipe delimited
- generated by genpipe1 or scripts genpipeA, gencnvD2
 6E10. pfq1/saledtl - job to convert Pipe|Delimited to Fixed-Field records
      - generated by genfixd1 or scripts genpipeA, gencnvD2
      - also see genrfmA at DATAcnv1.htm#4I1
        to reformat datafiles based on 2 COBOL copybooks

6E11. compare reconverted data file to original to verify conversions

6E12. sqlTC1/saledtl.sql - script to Create DB table

6E13. sqlTL1/saledtl.ctl - script to Load DB table

6F1. uvcpsalesA2E Op. Instrns. - demo conversion ASCII to EBCDIC
- sample/demo for ar.sales.items (NO packed/binary fields)
- uvcp method applies only to all character data files
- NOT for files with packed/binary (must use gencnvE '6G1')

6F2. uvcpsalesA2E - listing of sample script to convert ASCII to EBCDIC

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

DATA conversions for VU JCL demos

Part 6 - Contents (continued)


6G1. Op Instrns - convert customer master file EBCDIC to ASCII
- sample/demo for ar.customer.master with packed/binary fields
- script 'gencnvE' generates uvcopy job from copybook

6G2. pfy1/custmas - listing of generated job to convert EBCDIC to ASCII

6H1. Using a control file to insert datafilenames in conversion jobs
- vs copybooknames used for 1 file at a time conversions
- copies all pfx1/* jobs generated by uvdata51 or gencnvA (6D1 above)
- outputs to pfx2/... replacing copybooknames with datafilenames
  from control file (also changing jobnames to datafilenames)

6H2. Executing all jobs to convert all datafiles (with 1 command)

6H3. Generating & Executing all pipe|delimit jobs via control file

6I1. gencnvD2 - script to generate 4 EBCDIC to ASCII jobs & SQL scripts
gencnvA - generate only the EBCDIC to ASCII conversion job
6I2. gencnvE - script to generate ASCII to EBCDIC Data conversion jobs

must FTP packed/binary files in BINARY mode

This Part 6 assumes you have FTP'd your mainframe files with packed/binary fields in BINARY mode. See FTP instructions on page '5B1'.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6A1. DATA conversions for VU JCL demos

Data File Conversion - Overview

Note that the demo JCL/script executions in Part_3 worked because the demo data files supplied (copied from /home/uvadm/mvstest/testdata/data) had already been converted from the orignal mainframe files (translating pic x fields from EBCDIC to ASCII, but preserving any packed/binary fields).

This Part 6 will document a simple way to perform data file conversions, using script 'gencnvD2', which generates several conversion jobs, automatically from the COBOL copybooks. The following uvcopy jobs & SQL scripts are generated:

  1. EBCDIC to ASCII conversion, retaining the same record layout, so COBOL programs can execute unchanged on the unix/linux systems. Conversion jobs are generated from the COBOL copybooks so pic x fields can be translated from EBCDIC to ASCII, but any packed/binary fields are preserved (would be destroyed if entire record were translated). Also note that any unpacked numeric fields with zoned signs are transalted from the mainframe EBCDIC conventions to Micro Focus ASCII conventions (positives {ABCDEFGHI to 0123456789 & negatives }JKLMNOPQR to pqrstuvy).

  2. 'uvcopy jobs' are also generated to convert data files to '|' pipe delimited all text files for laoding database tables. Packed/binary fields are unpacked & edited with separate signs & decimal points suitable for loading database tables.

  3. SQL scripts are also generated to CREATE the database tables.

  4. SQL scripts are also generated to LOAD the database tables.

Script gencnvD2 generates all 4 types of conversion jobs & scripts. You might initially need only the 1st (EBCDIC to ASCII retaining same layout) if you wish to migrate quickly to unix/linux with the fewest changes required. Use script 'gencnvA' to generate only the EBCDIC to ASCII data conversion job. Later on you might use the jobs/scripts 2,3,4 to convert flat files to database tables.

The data file conversions documented here in MVSJCLtest.htm#Part_6 are OK for most mainframe files, but do not allow for more complex files used at some mainframe sites. UV Software does provide solutions for those complex files, which are documented in other manuals.

Below is a comparison of datafile conversion capabilities covered in various UV Software documents:

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6A2. DATA conversions for VU JCL demos

Conversions Documented here in MVSJCLtest Part 6

  1. Simplest & easiest, but adequate for most mainframe data files, EBCDIC to ASCII preserving packed/binary fields.

  2. Complex conversions (such as Multi Record Types & variable length records) not documented here.

  3. Simple conversion procedures are made possible by using the copybook name for all generated jobs & by changing the names of the data files to match the copybook names. We can do this since separate subdirs are provided for the various generated jobs & data file types (separate subdirs for EBCDIC,ACII,pipe-delimited).

  4. Original EBCDIC data files are renamed to match the copybook when they are copied into the designated conversion subdir $CNVDATA/d1ebc. After conversion, they are renamed as desired when copied from $CNVDATA/d2asc to $RUNDATA/data for use by the JCL/scripts.

  5. Conversions documented here are for 1 file at a time. See below for other methods to handle hundreds or thousands of data files.

    more complex EBCDIC to ASCII conversions

DATAcnv1.htm & MVSDATA.htm cover the more complex data file conversions (such as multi Record Types & variable length records).

You can retain original data file names (without manual renaming) by creating a control file to relate the copybook-name to the various data-file names with that layout. The conversion jobs are also named from the datafile names (vs copybook names, because there could be multiple datafiles per copybook).

All data files may be converted with 1 command, which is important for the several reconversions required during testing & the final 'go live' day.

converting data files to database tables

See SQLconvert.htm for more complete documentation on converting data files to pipe|delimited all text files suitable for loading database tables. Packed/binary fields will be unpacked & edited with decimal points & separate signs suitable for loading database tables. We also generate scripts to create & load database tables. Utility 'sqlcreate1' generates scripts for Oracle. Utility 'sqlcreate2' generates scripts for Microsoft SQL Server.

unpacking all packed/binary fields

Or you might want to unpack all packed/binary fields & retain your COBOL batch programs. See DATAcnv1.htm#4I1 thru 4I4 which documents this procedure. You make up a 2nd copybook for each file removing all 'comp-3's & 'comp's. Then run script 'genrfmA' to generate the data conversion jobs automatically. This conversion could be easy if you have used copybooks for all your data files, but obviously more difficult if you have embedded record layouts in your COBOL programs.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6B1. DATA conversions for VU JCL demos

setup to perform DATA file conversions


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. mkdir cnvdata         <-- make supedir for conversions
     =============

 #3. cd cnvdata            <-- change into superdir
     ==========

 #4. cnvdatadirs           <-- make subdirs for data conversions
     ===========             - see next page --->

minimal subdirs for DATA conversion

 /home/mvstest1 <-- or your homedir
 :-----cnvdata
 :     :-----d1ebc    # EBCDIC files from mainframe for conversion
 :     :-----d2asc    # files converted to ASCII with same record layout
 :     :-----d3ebc    # files converted back to EBCDIC for return to mainframe
 :     :-----d4pipe   # data files converted to '|' pipe delimited format
 :     :-----cpys     # COBOL copybooks
 :     :-----maps     # cobmaps (record layouts) generated from copybooks
 :     :-----pfx1     # uvcopy jobs to convert EBCDIC to ASCII (gen from cobmaps)
 :     :-----pfy1     # optional subdir for ASCII to EBCDIC (script gencnvE)
 :     :-----pfp1     # uvcopy jobs to convert to pipe delimited (from copybooks)
 :     :-----pfq1     # uvcopy jobs to convert Pipe|Delimited to Fixed-Field
 :     :-----sqlTC1   # scripts to CREATE SQL tables (generated from copybooks)
 :     :-----sqlTL1   # scripts to  LOAD  SQL tables (generated from copybooks)

The above are only the essential subdirs we need for the demo conversions here in MVSJCLtest.doc. Script 'cnvdatadirs' makes many more subdirs required for the more complex conversions documented in SQLconvert.htm. See the 'cnvdatadirs' script listed on the next page.

must FTP packed/binary files in BINARY mode

This Part 6 assumes you have FTP'd your mainframe files with packed/binary fields in BINARY mode. See FTP instructions on page '5B1'.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6B2. Setups Required for conversion to pipe|delimited

script to create maximum conversion subdirs

 #!/bin/ksh
 # cnvdatadirs - script to make sub-dirs for data conversions
 #             - see DATAcnv1.doc, MVSDATA.doc,& SQLconvert.doc
 mkdir archive
 mkdir d0ebc    # EBCDIC data files FTP'd from mainframe (variable length RDW)
 mkdir d1ebc    # EBCDIC data files converted to Fixed Length for conversion
 mkdir d2asc    # files converted to ASCII with same record layout
 mkdir d3ebc    # files converted back to EBCDIC for return to mainframe
 mkdir d4pipe   # data files converted to '|' pipe delimited format
 mkdir cpy0     # original copybooks from mainframe (UPPER case)
 mkdir cpy1     # converted lower case (except in quotes), 1-6 & 73-80 cleared
 mkdir cpy2     # copybooks split to separate copybooks for occurs segments
 mkdir cpys     # copied, modified for SQL, then generate maps,pfx1,pfp1,sql
 mkdir ctl      # control files for datafile conversions
 mkdir ftp      # subdir to receive files to be converted (& copybooks)
 mkdir listpipe # subdir to receive 1st 3 pipe|delim recs listed for validation
 mkdir map1     # prelim record layouts from copybooks (start,end,length,type)
 mkdir maps     # final record layouts gen from copybooks (start,end,length,type)
 mkdir pfx1     # uvcopy jobs to convert EBCDIC to ASCII (gen from copybooks)
 mkdir pfx2     # uvcopy jobs completed with datafilenames (vs copybooknames)
 mkdir pfx3     # Ebcdic->Ascii jobs modified for multi R/T if any, execute here
 mkdir pfp1     # uvcopy jobs to convert to pipe delimited (gen by genpipe1)
 mkdir pfq1     # uvcopy jobs to convert Pipe|Delimited to Fixed-Field
 mkdir pfy1     # uvcopy jobs to convert ASCII to EBCDIC
 mkdir pf       # special uvcopy jobs for varlth records, occurs depending, etc
 mkdir sf       # Script Files subdir for misc (as required) scripts
 mkdir sqlTC1   # scripts to CREATE SQL tables (generated from COBOL copybooks)
 mkdir sqlTC2   # sqlTC1 scripts duplicated here - if multi-tables per copybook
 mkdir sqlTL1   # scripts to  LOAD  SQL tables (generated from COBOL copybooks)
 mkdir sqlTL2   # sqlTL1 scripts duplicated here - if multi-tables per copybook
 mkdir stats    # statistics (various summary tables from varstat1,etc)
 mkdir tmp      # temporary miscellaneous intermediate files created by
 mkdir unzip    # unzip files from clients, then move to appropriate subdir
 mkdir zip      # copy files here, then zip files before sending to clients
 exit 0

notes re cnvdatadirs

  1. We will run cnvdatadirs to generate all the subdirs listed above, But (for the demos here in MVSJCLtest.doc), we only need the 9 subdirs listed on the preceding page.

  2. You will need some of the other subdirs, if you later decide to do some of the more extensive conversions documented in MVSDATA.htm or SQLconvert.htm.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6B3. Convert data to pipe | delimited for loading SQL tables

GENERATING jobs to convert DATA files to ASCII

 Mainframe ---> cpy0 -------> cpy1 -----------> cpy2 --------> cpys
           FTP       cleanup     cp/split/rename      copy
                  rename as file
 cpys -------> maps --------> pfx1 [ --------> pfx2 --------> pfx3 ]
      cobmap1       uvdata51       [ uvdata52        cp & vi       ]
                                   [ --------- optional ---------- ]

generating pipe delimit jobs

 cpys -------> maps --------> pfp1 [ --------> pfp2 --------> pfp3 ]
      cobmap1       genpipe1       [ uvdata52        cp & vi       ]
                                   [ --------- optional ---------- ]

generating jobs to convert pipe|delimited to Fixed-field

 cpys -------> maps --------> pfq1 [ --------> pfq2 --------> pfq3 ]
      cobmap1       genfixd1       [ uvdata52        cp & vi       ]
                                   [ --------- optional ---------- ]

generating batch-files to create & load tables

 cpys -----> maps --------> sqlTC1 [-----> sqlTC2 ------> sf/osql_create.bat ]
     cobmap1     sqlcreate2        [ uvdata56      select/vi                 ]
                                   [ ------------- optional ---------------- ]
             maps --------> sqlTL1 [------> sqlTL2 ------> sf/osql_load.bat  ]
                   sqlcreate2      [ uvdata56      select/vi                 ]

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6B4. Convert data to pipe | delimited for loading SQL tables

EXECUTING conversion jobs on unix/linux

                     EBCDIC->ASCII      Pipe|Delimit       Fixed-field
 MAINFRAME ---> d1ebc ----------> d2asc ----------> d4pipe -----------> d5fix
           FTP        uvcopy jobs       uvcopy jobs        uvcopy jobs
         BINARY     gen by uvdata51   gen by genpipe1   gen by genfixd1
 ------------> d4pipe ---------------> SQL Server
 uvcopy jobs          FTP C:\cnvdata\pipe
 gen by genpipe1
 sqlTC1/2 -----------> sf/osql_create.bat ------> SQL Server
          select/vi                         FTP   C:\cnvdata\osql_create.bat
 sqlTL1/2 -----------> sf/osql_load.bat ------> SQL Server
          select/vi                         FTP   C:\cnvdata\osql_load.bat

executing conversion jobs on Windows Server

 sqlTC1/2 -----> C:\cnvdata\sqlTC ----------------> create Tables
           FTP     batch-files     osql_create.bat
                 gen by sqlcreate2
 sqlTL1/2 -----> C:\cnvdata\sqlTL ----------------> load Tables
           FTP     batch-files     osql_load.bat
                 gen by sqlcreate2
Note
  • use sqlTC1 & sqlTL1 if you have only 1 datafile per copybook & names same
  • use sqlTC2 & sqlTL2 if you have multi datafiles per copybook (GDG)
  • must then create control file to relate datafile-names to copybook-names
  • control file used to replicate/rename the 1 script generated from
    the copybook for each datafilename listed in the control-file.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6C1. DATA conversions for VU JCL demos

convert VU demo data files - Overview

Here in part 4, we will convert the 2 data files used in the JCL/scripts listed in Part 2 & executed in Part 3 (customer master & sales detail). We could execute the JCL/scripts in Part 3 because we also supplied the ASCII versions. The EBCDIC versions are supplied as $UV/dat1/custmas0 & $UV/dat1/sales0.

As explained on page '6A2', conversion procedures are simplified by renaming the input data file names to match the copybook names. We can do this since separate subdirs are provided for the EBCDIC datafiles, ASCII datafiles, copybooks,& various generated jobs.

So we will rename data files same as copybook names when we copy datafiles into the conversion subdirs & rename again after conversion when we copy from the conversion subdirs out to $RUNDATA/data for execution.

The copy-in & copy-out comamnds will be as follows for our 1st sample file:


 cp /home/uvadm/dat1/custmas0 /home/mvstest1/cnvdata/d1ebc/custmas
 =================================================================
 Before conversion:
 - copy EBCDIC datafile to conversion subdir renaming same as copybook

 cp /home/mvstest1/cnvdata/d2asc/custmas /home/mvstest1/testdata/data/ar.customer.master
 =======================================================================================
 After conversion:
 - copy ASCII datafile from conversion subdir to $RUNDATA/data
 - renaming as expected by the JCL/scripts
Note
  • these procedures also generate SQL scripts to create & load DB tables
  • BUT, we will not run them here in MVSJCLtest.doc
  • see those instructions at SQLconvert.htm#1G4

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6C2. convert VU demo data files - Overview

use $symbols for directories anywhere

The above assumes that we are converting in demo userid 'mvstest1'. But you may have chosen to perform thse demos in your homedir (by setting up super-dirs testlibs, testdata,& cnvdata & the various subdirs).

The following alternative commands (using $symbols) will work no matter where you choose to convert your data files, because the profiles define RUNLIBS, RUNDATA,& CNVDATA based on $HOME (either /home/mvstest1 or /home/your-userid). The following also allows the Vancouver Utilities to be installed other than in /home/uvadm/.


 cp $UV/dat1/custmas0 $CNVDATA/d1ebc/custmas
 ===========================================
 Before conversion:
 - copy EBCDIC datafile to conversion subdir renaming same as copybook

 cp $CNVDATA/d2asc/custmas $RUNDATA/testdata/data/ar.customer.master
 ===================================================================
 After conversion:
 - copy ASCII datafile from conversion subdir to $RUNDATA/data
 - renaming as expected by the JCL/scripts

GDG files

After converting GDG files, you must rename them using the GDG file naming conventions - appending '_000001' for the 1st generation. For example if custmas were a GDG file the copy command (from conversion subdir to the $RUNDATA subdir) would be:


 cp $CNVDATA/d2asc/custmas $RUNDATA/testdata/data/ar.customer.master_000001
 ==========================================================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D1. Operating Instructions for DATA conversions

Here are the concise operating instructions to GENERATE conversion jobs from copybooks, followed on the next page with instructions to EXECUTE the jobs. These instructions are followed with several pages to illustrate the generated jobs & the expected results of data file conversions.

We suggest you get familiar with these instructions using the 'custmas' or 'saledtl' demo files (as coded below). Then repeat the instructions using one of your own data files.

GENERATE jobs to convert Customer master


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdc --> $HOME/cnvdata  (alias cdc='cd $HOME/cnvdata)

 #3. cp $UV/cobol/cpys/custmas $CNVDATA/cpys/custmas
     ===============================================
     - copy COBOL copybook for customer master to conversion subdir

 #4. cp $UV/dat1/custmas0 $CNVDATA/d1ebc/custmas
     ===========================================
     - copy EBCDIC datafile to the conversion data input subdir
       renaming to match the copybook name

 #5. gencnvD2 custmas   <-- generate 4 conversion jobs & scripts
     ================     - the "generate everything" script
     - creates following files in following subdirs:

 #5a. maps/custmas - cobmap (record layout) used to create folowing jobs
 #5b. pfx1/custmas - uvcopy job to convert EBCDIC to ASCII
 #5c. pfp1/custmas - uvcopy job to convert to pipe delimited to load DB tables
 #5d. pfq1/custmas - uvcopy job to convert pipe delimited to Fixed-field
 #5e. sqlTC1/custmas - SQL script to CREATE database table
 #5f. sqlTL1/custmas - SQL script to LOAD database table

gencnvA alternative to gencnvD2


 #6. gencnvA custmas   <-- generate only the EBCDIC to ASCII conversion job
     ===============     - if you do not need pipe delim & SQL scripts

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D2. Operating Instructions for DATA conversions

EXECUTE jobs to convert Customer master


 #1a. uvcopy pfx1/custmas[,fili1=d1ebc/custmas,filo1=d2asc/custmas]
      =============================================================
      - Execute EBCDIC to ASCII conversion job
      - Input/Output files default as shown above (no need to enter)

 #1b. uvcopy pfx1/custmas   <-- Execute EBCDIC to ASCII conversion
      ===================     - shorter/easier alternative command

 #2a. uvcopy pfp1/custmas[,fili1=d2asc/custmas,filo1=d4pipe/custmas]
      ==============================================================
      - Execute job to convert to pipe delimited all text for loading DB table
      - Input/Output files default as shown above (no need to enter)

 #2b. uvcopy pfp1/custmas   <-- Execute pipe delimit conversion
      ===================     - shorter/easier alternative command

 #3. cp $CNVDATA/d2asc/custmas $RUNDATA/testdata/data/ar.customer.master
     ===================================================================
     - copy ASCII datafile from conversion subdir to $RUNDATA/data
     - renaming as expected by the JCL/scripts
Note
  • also possible to convert Pipe|Delimited back to Fixed-Field records
  • will be illustrated for the 'saledtl' file on page '6E2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D3. DATA conversions for VU JCL demos

checking results of custmas conversion

Investigate the input & output files to ensure conversions performed correctly. You must use uvhd to view datafiles with packed/binary fields such as the customer master.

d1ebc/custmas - investigate EBCDIC input file


 #1. uvhd d1ebc/custmas r256a  <-- investigate the input EBCDIC file
     ========================    - option 'r' specifies Record size
                                 - option 'a' to translate characters to Ascii
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    EVERGREEN MOTORS LTD.    1815 BOWEN ROAD          NANA
             FFFFFF4444CECDCDCCD4DDEDDE4DEC44444FFFF4CDECD4DDCC4444444444DCDC
             130140000055597955504636920334B000018150266550961400000000005151
          64 IMO          BC V9S1H1    250-754-5531 LARRY WRENCH     ...V@...
             CDD4444444444CC4EFEFCF4444FFF6FFF6FFFF4DCDDE4EDCDCC4444401357000
             946000000000023059218100002500754055310319980695538000000246C000
         128 .........W.....-.........X'..f.....m*..................V'...f...
             0000000005300016000000002570063100095000000000000000013570016000
             0C0000C0270D0540C0000C0098D0263C0444C0000C0000C0000C0246D0056C00
         192 .E@...V'........c..............f..............f.C 19950531
             047000570000000088000000001800068000130000000069C4FFFFFFFF444444
             35C0046D0000C0023C0000C0083C0056D0012C0000C0016D3019950531000000
 rec#=1 rsize=256 fptr=0 fsize=8192 rcount=32

notes re EBCDIC input file

  1. uvhd displays data in 'vertical hexadecimal', 64 byte segments on 3 lines (characters, zones,& digits)

  2. Option 'a' translates the character line to ASCII so you can read it. Zones & digits lines show the EBCDIC codes, for example: 1st byte '1' is x'F1' in hex, byte 10 'E' is x'C5'

  3. Note the 24 x 5 byte packed fields from byte 120 to byte 239 First packed field (bytes 120-124) is x'001234567C', displayed as '...V@' on character line (packed values happen to match some chars)

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D4. checking results of customer master conversion

execute EBCDIC to ASCII conversion


 #1b. uvcopy pfx1/custmas  <-- execute job to convert EBCDIC to ASCII
      ===================
Note
  • see concise operating instructions for file conversions on page '6D2'
  • after conversion, you must use 'uvhd' to investigate results
  • can't use 'vi' because data file has packed fields & no LineFeeds

d2asc/custmas - investigate ASCII output file


 #2. uvhd d2asc/custmas r256  <-- investigate the output ASCII file
     =======================    - option 'r' specifies Record size
                                - omit option 'a' (data now ASCII default)
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    EVERGREEN MOTORS LTD.    1815 BOWEN ROAD          NANA
             3333332222454545444244545524542222233332445442544422222222224444
             130140000056527255E0DF4F230C44E0000181502F75E02F140000000000E1E1
          64 IMO          BC V9S1H1    250-754-5531 LARRY WRENCH     ..4V|...
             4442222222222442535343222233323332333324455525544442222201357000
             9DF00000000002306931810000250D754D55310C12290725E38000000246C000
         128 .........W0....`........)X}..f3.....\.................4V}...f...
             0000000005300016000000002570063100095000000000000000013570016000
             0C0000C0270D0540C0000C0098D0263C0444C0000C0000C0000C0246D0056C00
         192 .E|...V}.......................f.....<........f.C 19950531
             0470005700000000880000000018000680001300000000694233333333222222
             35C0046D0000C0023C0000C0083C0056D0012C0000C0016D3019950531000000
 rec#=1 rsize=256 fptr=0 fsize=8192 rcount=32

Notes re ASCII output file

  1. Character fields are now ASCII, zones & digits lines show the ASCII codes, for example: 1st byte '1' is x'31' in hex, byte 10 'E' is x'45', etc

  2. Important to verify that packed fields have been preserved (since trasnaltion would destroy packed values). 1st packed field in 120-124 is still the same x'001234567C', but now displays differently on the character line since the packed values coincide with different characters in the ASCII code set.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D5. checking results of customer master conversion

converting the copybook to a 'cobmap'

Generating the data conversion jobs is based on the COBOL copybooks & the first step is to convert the copybook into a 'cobmap' (a record layout with field start,end,length,& type codes on the right hand side).

Scripts 'gencnvD2' & 'gencnvA' include the 'cobmap1' job, but you could run it separately anytime you want to generate a record layout from a COBOL copybook. Here is an example for the custmas copybook, but you do not need to run it if you have already run gencnvD2 or gencnvA (on page '6D1').


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdc --> $HOME/cnvdata  (alias cdc='cd $HOME/cnvdata)

 #3. uvcopy cobmap1,fili1=cpys/custmas,filo1=maps/custmas
     ====================================================

maps/custmas - cobmap report

 cobmap1  start-end bytes for cobol record fields    201111031219  pg# 0001
 cobol/cpys/custmas                                RCSZ=00256  bgn  end  lth typ
 * custmas - cobol copy book for custmas file
      10 cm-num           pic  9(6).                          0000 0005  006 n  6
      10 cm-delete        pic  x(4).                          0006 0009  004
      10 cm-name          pic  x(25).                         0010 0034  025
      10 cm-adrs          pic  x(25).                         0035 0059  025
      10 cm-city          pic  x(16).                         0060 0075  016
      10 filler001        pic  x.                             0076 0076  001
      10 cm-prov          pic  x(2).                          0077 0078  002
      10 filler002        pic  x.                             0079 0079  001
      10 cm-postal        pic  x(10).                         0080 0089  010
      10 cm-phone         pic  x(12).                         0090 0101  012
      10 cm-contact       pic  x(18).                         0102 0119  018
      10 cm-thisyr-sales  pic  s9(7)v99 comp-3 occurs 12.     0120 0124  005pns 9
      10 cm-lastyr-sales  pic  s9(7)v99 comp-3 occurs 12.     0180 0184  005pns 9
      10 filler003        pic  x(16).                         0240 0255  016
 *RCSZ=00256

Note that the 'cobmaps' are very useful to COBOL shops for many reasons (when you need to know field locations for sorting, verifying data, etc). You may find it convenient to print cobmaps for all copybooks, and mount in a 3 ring binder for easy reference.

Also note that the cobmap is used by the 'uvhdcob' utility which shows the data field contents beside the COBOL copybook fieldnames. See sample on the next page.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D6. checking results of customer master conversion

The 'cobmap' (shown above) is used by the 'uvhdcob' utility that shows the COBOL copybook field-names beside the contents of each field in the data file - either ASCII or EBCDIC (with option 'a').

sample 'uvhdcob' display for custmas


 uvhdcob d2asc/custmas maps/custmas    <-- for ASCII output in subdir d2asc/...
 ==================================

 uvhdcob d1ebc/custmas maps/custmas a  <-- add option 'a' for EBCDIC input file
 ====================================      in subdir d1ebc/...
 rec#       1           occurs  bgn end typ<------ data (hex if typ=p/b) ----->
 001 cm-num                       0    5 n  130140
 002 cm-delete                    6    9
 003 cm-name                     10   34    EVERGREEN MOTORS LTD.
 004 cm-adrs                     35   59    1815 BOWEN ROAD
 005 cm-city                     60   75    NANAIMO
 006 filler001                   76   76
 007 cm-prov                     77   78    BC
 008 filler002                   79   79
 009 cm-postal                   80   89    V9S1H1
 010 cm-phone                    90  101    250-754-5531
 011 cm-contact                 102  119     LARRY WRENCH
 012 cm-thisyr-sales       012  120  124pns 001234567C
 013 cm-lastyr-sales       012  180  184pns 001234567D
 014 filler003                  240  255    C 19950531
 rec#=1 rcount=32 rsize=256 fsize=8192 fptr=0
 k1=HelpPrompts,?=HelpScreens -->

notes re 'occurs' fields

  1. Note the occurs fields 'cm-thisyr-sales' & 'cm-lastyr-sales' - 12 x 5 byte packed fields for this year & last year sales.

  2. By default uvhdcob shows data only for the 1st field of an occurs.

  3. You may use option 'o99' to show data for all occurrences of occurs fields and/or option 'g99' to show all occurrences of 'group' occurs. o99 expands occurs on individual fields (occurs & picture). g99 applies to occurs on a level# above the picture fields. See sample displays at uvhdcob.htm#1C3

 uvhdcob d2asc/custmas maps/custmas o99g99
 =========================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D7. checking results of customer master conversion

pfp1/custmas.dat - check the pipe delimited file


 head pfp1/custmas.dat  <-- display 1st few lines of pipe delimted file
 =====================
 130140||EVERGREEN MOTORS LTD.|1815 BOWEN ROAD|NANAIMO||BC||V9S1H1|250-754-5531| LARRY WRENCH|+12345.67|-12345.67|C 19950531|
 132588||GEECOE GENERATOR SERVICES|UNIT 170 - 2851 SIMPSON|RICHMOND||BC||V6X2R2|604-278-4488| HARRY LIGHT|+46.80|+53.60|A 200304
 139923||JOHNSTONE BOILER & TANKS|1250 EAST PENDER STREET|VANCOUVER||BC||V5L1W1|604-320-1845|GEORGE BROWN|+15.28|+.00|C 19970131
Note
  • pipe delimted outputs could have very long lines
  • uvcopy utility 'listpipe1' & (easier to run) script 'listpipeA'
    will list the fields vertically AND supply the COBOL copybook names.

listpipeA - list pipe delimited - with copybook fieldnames


 listpipeA custmas   <-- list pipe delimited with copybook names
 =================
 listpipe1 - list '|' delimited files (from genpipe1) with copybook fieldnames
 DataFile=d4pipe/custmas.dat, RecSize=00256, RecCount=32
 CopyBook=maps/custmas, DateTime=2011/10/22_06:32:01
 Seq# FieldName       OffSet COBOL picture      DataFieldContents
 DataFile = d4pipe/custmas, Record# = 1 of 32, Fields = 14
 130140||EVERGREEN MOTORS LTD.|1815 BOWEN ROAD|NANAIMO||BC||V9S1H1|250-754-5531|
 LARRY WRENCH|+12345.67|-12345.67|C 19950531|
 001 cm-num                   000 9(6).             130140
 002 cm-delete                006 x(4).
 003 cm-name                  010 x(25).            EVERGREEN MOTORS LTD.
 004 cm-adrs                  035 x(25).            1815 BOWEN ROAD
 005 cm-city                  060 x(16).            NANAIMO
 006 filler001                076 x.
 007 cm-prov                  077 x(2).             BC
 008 filler002                079 x.
 009 cm-postal                080 x(10).            V9S1H1
 010 cm-phone                 090 x(12).            250-754-5531
 011 cm-contact               102 x(18).             LARRY WRENCH
 012 cm-thisyr-sales          120 s9(7)v99 comp-3   +12345.67
 013 cm-lastyr-sales          180 s9(7)v99 comp-3   -12345.67
 014 filler003                240 x(16).            C 19950531

notes re occurs

  1. The 'listpipeA' output is similar to the 'uvhdcob' output shown on the previous page, but the input is the pipe delimited file d4pipe/custmas (vs the actual data file in d2asc/custmas).

  2. Note that only the 1st of the 'occurs 12' fields is listed above. 'occurs' fields are not possible in database tables

  3. If you wanted to convert this file to a database table, you could modify the copybook, changing the occurs fields to 12 separate fields, by appending a sequence# on the fieldname (cm-thisyr-sales-01,02,...12). See more discussion at SQLconvert.htm#1E5.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D8. checking results of customer master conversion

pfx1/custmas - job to convert EBCDIC to ASCII

 # uvcopy job to translate EBCDIC to ASCII, preserve packed, fix zoned signs
 opr='jobname=JOBNAME   - pfx2 name=datafilename'
 opr='copybook=custmas - pfx1 name=copybookname'
 uop=q0,was=a33000b33000
 fili1=?d1ebc/custmas,rcs=00256,typ=RSF
 filo1=?d2asc/custmas,rcs=00256,typ=RSF
 @run
        opn    all
 loop   get    fili1,a0
        skp>   eof
        mvc    b0(00256),a0       move rec to outarea before field prcsng
        tra    b0(00256)          translate entire outarea to ASCII
 #      ---                <-- insert R/T tests here for redefined records
        mvc    b120(60),a120           pns cm-thisyr-sales
        mvc    b180(60),a180           pns cm-lastyr-sales
 put1   put    filo1,b0
        skp    loop
 eof    cls    all
        eoj

notes re EBCDIC to ASCII uvcopy job

  1. Note the 'tra' instruction translates the entire record (which destroys any packed/binary or Zoned signed fields).

  2. But the following 2 'mvc' instructions restore the packed fields, which must be the same on unix for Micro Focus COBOL, as for mainframe COBOL.

  3. This job was executed on page '6D2' as follows:

 #6b. uvcopy pfx1/custmas
      ===================
  1. The Op. Instrns. on page '6D2' instructs you to manually rename the file when you copy from the conversion d2asc/ subdir to the $RUNDATA/data subdir, which is OK for a 1 time conversion of a few files.

  2. BUT, if you had to convert the file on a daily basis, then you could modify the filenames in the uvcopy job as follows:

      fili1=${CNVDATA}/d1ebc/custmas,rcs=00256,typ=RSF
      ================================================
      filo1=${RUNDATA}/data/ar.customer.master,rcs=00256,typ=RSF
      ==========================================================
  1. OR you could write a script, calling the uvcopy job,& specifying the desired filenames on the uvcopy command as follows:
      uvcopy $CNVDATA/pfx1/custmas,fili1=${CNVDATA}/d1ebc/custmas\
                                  ,filo1=${RUNDATA}/data/ar.customer.master
      =====================================================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6D9. checking results of customer master conversion

pfp1/custmas - job to create pipe delimited

 # custmas - uvcopy job to convert EBCDIC/ASCII data to delimited text file
 opr='custmas - uvcopy code generated from copybook: custmas '
 rop=j200000r1  #Run OPtions: increase instrn storage & prompt display output
 was=a33000b33000c999000d33000e33000
 fili1=?d2asc/custmas,rcs=00256,typ=RST
 filo1=?d4pipe/custmas.dat,rcs=9000,typ=LSTtd3  #<-- DOS option d3 for CR/LF
 @run
        opn    all
 loop   get    fili1,a0
        skp>   eof
 # area a input, see 'get' instrn
 # area b translated to ASCII, in case mainframe EBCDIC file (with packed?)
 # area c data fields fixed 100 bytes apart in prep for var | delimit instrn
 # area d output, see 'put' instrn at end
        mvc    b0(00256),a0       move input area a to area b
 ###    tra    b0(00256)          uncomment for EBCDIC input (or option a1)
 #      ---                   <-- & insert instrns from uvdata51 if packed fields
 #      ---                   <-- insert R/T tests if redef records
        mvc    c0(6),b0(6)                          #1 cm-num
        mvc    c100(4),b6(4)                        #2 cm-delete
        mvc    c200(25),b10(25)                     #3 cm-name
        mvc    c300(25),b35(25)                     #4 cm-adrs
        mvc    c400(16),b60(16)                     #5 cm-city
        mvc    c500(1),b76(1)                       #6 filler001
        mvc    c600(2),b77(2)                       #7 cm-prov
        mvc    c700(1),b79(1)                       #8 filler002
        mvc    c800(10),b80(10)                     #9 cm-postal
        mvc    c900(12),b90(12)                     #10 cm-phone
        mvc    c1000(18),b102(18)                   #11 cm-contact
        edta1  c1100(11),a120(5p),'+zzzzzzz.99'     #12 cm-thisyr-sales
        edta1  c1200(11),a180(5p),'+zzzzzzz.99'     #13 cm-lastyr-sales
        mvc    c1300(16),b240(16)                   #14 filler003
        varb1  d0(01400),c0(100),0014,'|'
        trt    d0(01400),$trtchr
        clr    c0(01400),' '
 put1   put    filo1,d0
        skp    loop
 #
 eof    cls    all
        eoj
 @pf2=genpipe1.sub
Note
  • instruction 'varb1' is the most important here
  • inserts '|' delimiter & squeezes out blanks from max 100 byte fields
  • option 'b1' leaves 1 trailing blank to prevent 'null' fields

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E1. Operating Instructions for DATA conversions

GENERATE jobs to convert Sales Detail


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdc --> $HOME/cnvdata  (alias cdc='cd $HOME/cnvdata)

 #3. cp $UV/cobol/cpys/saledtl $CNVDATA/cpys/saledtl
     ===============================================
     - copy COBOL copybook for sales detail to conversion subdir

 #4. cp $UV/dat1/sales0 $CNVDATA/d1ebc/saledtl
     =========================================
     - copy EBCDIC datafile to the conversion data input subdir
       renaming to match the copybook name

 #5. gencnvD2 saledtl   <-- gnerate ALL conversion jobs
     ================     - the "generate everything" script
     - creates following files in following subdirs:

 #5a. maps/saledtl - cobmap (record layout) used to create folowing jobs
 #5b. pfx1/saledtl - uvcopy job to convert EBCDIC to ASCII
 #5c. pfp1/saledtl - uvcopy job to convert to pipe delimited to load DB tables
 #5d. pfq1/saledtl - uvcopy job to convert to Pipe|Delimited to Fixed-Field
 #5e. sqlTC1/saledtl - SQL script to CREATE database table
 #5f. sqlTL1/saledtl - SQL script to LOAD database table

gencnvA alternative to gencnvD2


 #6. gencnvA saledtl   <-- generate only the EBCDIC to ASCII conversion job
     ===============     - if you do not need pipe delimit & SQL scripts

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E2. DATA conversions for VU JCL demos

EXECUTE jobs to convert Sales Detail


 #1a. uvcopy pfx1/saledtl[,fili1=d1ebc/saledtl,filo1=d2asc/saledtl]
      =============================================================
      - Execute EBCDIC to ASCII conversion job
      - Input/Output files default as shown above (no need to enter)

 #1b. uvcopy pfx1/saledtl   <-- Execute EBCDIC to ASCII conversion
      ===================     - shorter/easier alternative command

 #2a. uvcopy pfp1/saledtl[,fili1=d2asc/saledtl,filo1=d4pipe/saledtl]
      ==============================================================
      - Execute job to convert to pipe delimited all text for loading DB table
      - Input/Output files default as shown above (no need to enter)

 #2b. uvcopy pfp1/saledtl   <-- Execute pipe delimit conversion
      ===================     - shorter/easier alternative command

 #3. cp $CNVDATA/d2asc/saledtl $RUNDATA/testdata/data/ar.sales.items
     ===============================================================
     - copy ASCII datafile from conversion subdir to $RUNDATA/data
     - renaming as expected by the JCL/scripts

optional conversion pipe|delimited to Fixed-field

You probably will not need this, but it is possible.


 #4a. uvcopy pfq1/saledtl[,fili1=d4pipe/saledtl,filo1=d5fix/saledtl]
      ==============================================================
      - Execute job to convert Pipe|Delimited back to Fixed-Field records
      - Input/Output files default as shown above (no need to enter)

 #4b. uvcopy pfq1/saledtl   <-- Execute pipe delimit to Fixed-field
      ===================     - shorter/easier alternative command

 #5. uvcmpFA1 d5fix/saledtl d2asc/saledtl r64
     ========================================
     - compare reconverted file to original (to verify conversions)

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E3. DATA conversions for VU JCL demos

checking results of saledtl conversion

Investigate the input & output files to ensure conversions performed correctly. You must use uvhd to view datafiles with packed/binary fields such as the sales detail.

d1ebc/saledtl - investigate EBCDIC input file


 #1. uvhd d1ebc/saledtl r64a  <-- investigate the input EBCDIC file
     =======================    - option 'r' specifies Record size
                                - option 'a' to translate characters to Ascii
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  00002{ 0000001 00000002{
             FFFFFF4444FF4FFFFFF4CDFFFFFF44CCDFFF44FFFFFC4FFFFFFF4FFFFFFFFC44
             1301400000210940802095111001008140010000002000000001000000002000
 rec#=1 rsize=64 fptr=0 fsize=1280 rcount=20
                      10        20        30        40        50        60
 r#        2 0123456789012345678901234567890123456789012345678901234567890123
          64 130140    21 940802 IN111001  SCR012  00002A 0001001 00002102A
             FFFFFF4444FF4FFFFFF4CDFFFFFF44ECDFFF44FFFFFC4FFFFFFF4FFFFFFFFC44
             1301400000210940802095111001002390120000002100001001000002102100
 rec#=2 rsize=64 fptr=64 fsize=1280 rcount=20
                      10        20        30        40        50        60
 r#       20 0123456789012345678901234567890123456789012345678901234567890123
        1216 406082    65 020816 IN441     HAM001  00001R 0009001 00017101R
             FFFFFF4444FF4FFFFFF4CDFFF44444CCDFFF44FFFFFD4FFFFFFF4FFFFFFFFD44
             4060820000650020816095441000008140010000001900009001000017101900
 rec#=20 rsize=64 fptr=1216 fsize=1280 rcount=20

notes re EBCDIC input file

  1. First 2 & last record (of 20) are shown above (as displayed by uvhd)

  2. uvhd displays data in 'vertical hexadecimal', 64 byte segments on 3 lines (characters, zones,& digits)

  3. Note the unpacked zoned signs must be converted from EBCDIC & ASCII. (positives {ABCDEFGHI to 0123456789 & negatives }JKLMNOPQR to pqrstuvy).

  4. So the last bytes of the 3 records above (units/sign byte of the $amount) are: '{', 'A',& 'R', which are +0, +1,& -9.

  5. See the ASCII equivalents on the ASCII record displays below.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E4. checking results of sales detail conversion

d2asc/saledtl - investigate ASCII output file


 #2. uvhd d2asc/saledtl r64  <-- investigate the output ASCII file
     ======================    - option 'r' specifies Record size
                               - omit option 'a' (data now ASCII default)
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 130140    21 940802 IN111001  HAM001  000020 0000001 000000020
             3333332222332333333244333333224443332233333323333333233333333322
             130140000021094080209E1110010081D0010000002000000001000000002000
 rec#=1 rsize=64 fptr=0 fsize=1280 rcount=20
                      10        20        30        40        50        60
 r#        2 0123456789012345678901234567890123456789012345678901234567890123
          64 130140    21 940802 IN111001  SCR012  000021 0001001 000021021
             3333332222332333333244333333225453332233333323333333233333333322
             130140000021094080209E111001003320120000002100001001000002102100
 rec#=2 rsize=64 fptr=64 fsize=1280 rcount=20
                      10        20        30        40        50        60
 r#       20 0123456789012345678901234567890123456789012345678901234567890123
        1216 406082    65 020816 IN441     HAM001  00001y 0009001 00017101y
             3333332222332333333244333222224443332233333723333333233333333722
             406082000065002081609E4410000081D0010000001900009001000017101900
 rec#=20 rsize=64 fptr=1216 fsize=1280 rcount=20

Notes re ASCII output file

  1. There are no packed fields in the sales detail records so the entire record is transalted to ASCII, but the numeric fields with zoned signs are given a special translation to convert the signs from the EBCDIC mainframe conventions to the Micro Focus COBOL conventions used on unix/linux systems. (positives {ABCDEFGHI to 0123456789 & negatives }JKLMNOPQR to pqrstuvy).

  2. Note the last bytes of the 3 records above (units/sign byte of the $amount) were: '{', 'A',& 'R' (+0,+1,-9) in the EBCDIC file on the previous page, BUT are now '0','1',& 'y' in the ASCII file on this page.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E5. checking results of sales detail conversion

converting the copybook to a 'cobmap'

Generating the data conversion jobs is based on the COBOL copybooks & the first step is to convert the copybook into a 'cobmap' (a record layout with field start,end,length,& type codes on the right hand side).

Scripts 'gencnvD2' & 'gencnvA' include the 'cobmap1' job, but you could run it separately anytime you want to generate a record layout from a COBOL copybook. Here is an example for the custmas copybook, but you do not need to run it if you have already run gencnvD2 or gencnvA (on page '6E1').


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdc --> $HOME/cnvdata  (alias cdc='cd $HOME/cnvdata)

 #3. uvcopy cobmap1,fili1=cpys/saledtl,filo1=maps/saledtl
     ====================================================

maps/saledtl - cobmap report

 cobmap1  start-end bytes for cobol record fields    201110050652  pg# 0001
 cobol/cpys/saledtl                                RCSZ=00064  bgn  end  lth typ
 * saledtl.cpy - cobol copy book for sales1 test/demo file
      10 sd-cust       pic  9(6).                             0000 0005  006 n  6
      10 filler001     pic  x(4).                             0006 0009  004
      10 sd-slsmn      pic  9(2).                             0010 0011  002 n  2
      10 filler002     pic  x.                                0012 0012  001
      10 sd-date       pic  9(6).                             0013 0018  006 n  6
      10 filler003     pic  x.                                0019 0019  001
      10 sd-inv        pic  x(8).                             0020 0027  008
      10 filler004     pic  x(2).                             0028 0029  002
      10 sd-prod       pic  x(6).                             0030 0035  006
      10 filler005     pic  x(2).                             0036 0037  002
      10 sd-qty        pic  s9(6).                            0038 0043  006 ns 6
      10 filler006     pic  x.                                0044 0044  001
      10 sd-price      pic  9(5)v99.                          0045 0051  007 n  7
      10 filler007     pic  x.                                0052 0052  001
      10 sd-amount     pic  9(7)v99.                          0053 0061  009 n  9
      10 filler008     pic  x(2).                             0062 0063  002
 *RCSZ=00064

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E6. checking results of sales detail conversion

The 'cobmap' (shown above) is used by the 'uvhdcob' utility that shows the COBOL copybook field-names beside the contents of each field in the data file - either ASCII or EBCDIC (with option 'a').

'uvhdcob' display for d2asc/saledtl


 uvhdcob d2asc/saledtl maps/saledtl    <-- for ASCII output in subdir d2asc/...
 ==================================

 uvhdcob d1ebc/saledtl maps/saledtl a  <-- add option 'a' for EBCDIC input file
 ====================================      in subdir d1ebc/...
 now=20111103:1318 uvhdcob dat1/saledtl
 version=20111008 copybook=cobol/maps/saledtl
 rec#=1 rcount=20 rsize=64 fsize=1280 fptr=0
 rec#       1           occurs  bgn end typ<------ data (hex if typ=p/b) ----->
 001 sd-cust                      0    5 n  130140
 002 filler001                    6    9
 003 sd-slsmn                    10   11 n  21
 004 filler002                   12   12
 005 sd-date                     13   18 n  990802
 006 filler003                   19   19
 007 sd-inv                      20   27    IN111001
 008 filler004                   28   29
 009 sd-prod                     30   35    HAM001
 010 filler005                   36   37
 011 sd-qty                      38   43 ns 000020
 012 filler006                   44   44
 013 sd-price                    45   51 n  0000101
 014 filler007                   52   52
 015 sd-amount                   53   61 n  000002020
 016 filler008                   62   63     .
 rec#=1 rcount=20 rsize=64 fsize=1280 fptr=0
 k1=HelpPrompts,?=HelpScreens -->

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E7. checking results of sales detail conversion

pfp1/saledtl.dat - pipe delimited


 head pfp1/saledtl.dat  <-- display 1st few lines of pipe delimted file
 =====================
 130140||21||940802||IN111001||HAM001||+20||+.01||+.20||
 130140||21||940802||IN111001||SCR012||+21||+10.01||+210.21||
 139923||35||950807||CR5421||TAB013||+24||+40.01||+960.24||
Note
  • pipe delimted outputs could have very long lines
  • uvcopy utility 'listpipe1' & (easier to run) script 'listpipeA'
    will list the fields vertically AND supply the COBOL copybook names.

listpipeA - list pipe delimited - with copybook fieldnames


 listpipeA saledtl   <-- list pipe delimited with copybook names
 =================
 listpipe1 - list '|' delimited files (from genpipe1) with copybook fieldnames
 DataFile=d4pipe/saledtl.dat, RecSize=00064, RecCount=20
 CopyBook=maps/saledtl, DateTime=2011/10/22_11:40:54
 Seq# FieldName       OffSet COBOL picture      DataFieldContents
 DataFile = d4pipe/saledtl, Record# = 1 of 20, Fields = 16
 130140||21||940802||IN111001||HAM001||+20||+.01||+.20||
 001 sd-cust                  000 9(6).             130140
 002 filler001                006 x(4).
 003 sd-slsmn                 010 9(2).             21
 004 filler002                012 x.
 005 sd-date                  013 9(6).             940802
 006 filler003                019 x.
 007 sd-inv                   020 x(8).             IN111001
 008 filler004                028 x(2).
 009 sd-prod                  030 x(6).             HAM001
 010 filler005                036 x(2).
 011 sd-qty                   038 s9(6).            +20
 012 filler006                044 x.
 013 sd-price                 045 9(5)v99.          +.01
 014 filler007                052 x.
 015 sd-amount                053 s9(7)v99.         +.20
 016 filler008                062 x(2).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E8. checking results of sales detail conversion

pfx1/saledtl - job to convert EBCDIC to ASCII

 # uvcopy job to translate EBCDIC to ASCII, preserve packed, fix zoned signs
 opr='jobname=JOBNAME   - pfx2 name=datafilename'
 opr='copybook=saledtl - pfx1 name=copybookname'
 uop=q0,was=a33000b33000
 fili1=?d1ebc/saledtl,rcs=00064,typ=RSF
 filo1=?d2asc/saledtl,rcs=00064,typ=RSF
 @run
        opn    all
 loop   get    fili1,a0
        skp>   eof
        mvc    b0(00064),a0       move rec to outarea before field prcsng
        tra    b0(00064)          translate entire outarea to ASCII
 #      ---                <-- insert R/T tests here for redefined records
        trt    b38(6),$trtsea           ns sd-qty
        trt    b53(9),$trtsea           ns sd-amount
 put1   put    filo1,b0
        skp    loop
 eof    cls    all
        eoj

notes re EBCDIC to ASCII uvcopy job

  1. Note the 'tra' instruction translates the entire record. Translation would destroy any packed/binary fields, but there are none in the sales file.

  2. However there are unpacked numeric fields with zoned signs, which require a special translate to convert from EBCDIC mainframe conventions to the conventions used by Micro Focus COBOL on unix/linux systems. See the discussions of signed fields with the EBCDIC/ASCII uvhd displays on pages '6E3' & '6E4' above. The 2 'trt' instructions perform the sign correction.

  3. This job was executed on page '6E2' as follows:

 #6b. uvcopy pfx1/saledtl
      ===================
  1. The Op. Instrns. on page '6E2' instructs you to manually rename the file when you copy from the conversion d2asc/ subdir to the $RUNDATA/data subdir, which is OK for a 1 time conversion of a few files.

  2. BUT, if you had to convert the file on a daily basis, then you could modify the filenames in the uvcopy job as follows:
      fili1=${CNVDATA}/d1ebc/saledtl,rcs=00256,typ=RSF
      filo1=${RUNDATA}/data/ar.sales.items,rcs=00256,typ=RSF
  1. OR you could write a script, calling the uvcopy job,& specifying the desired filenames on the uvcopy command as follows:
      uvcopy $CNVDATA/pfx1/saledtl,fili1=${CNVDATA}/d1ebc/saledtl\
                                  ,filo1=${RUNDATA}/data/ar.sales.items
      =================================================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E9. checking results of sales detail conversion

pfp1/saledtl - job to create pipe delimited

 # saledtl - uvcopy job to convert EBCDIC/ASCII data to delimited text file
 opr='saledtl - uvcopy code generated from copybook: saledtl '
 rop=j200000r1  #Run OPtions: increase instrn storage & prompt display output
 was=a33000b33000c999000d33000e33000
 fili1=?d2asc/saledtl,rcs=00064,typ=RST
 filo1=?d4pipe/saledtl.dat,rcs=9000,typ=LSTtd3  #<-- DOS option d3 for CR/LF
 @run
        opn    all
 loop   get    fili1,a0
        skp>   eof
 # area a input, see 'get' instrn
 # area b translated to ASCII, in case mainframe EBCDIC file (with packed?)
 # area c data fields fixed 100 bytes apart in prep for var | delimit instrn
 # area d output, see 'put' instrn at end
        mvc    b0(00064),a0       move input area a to area b
 ###    tra    b0(00064)          uncomment for EBCDIC input (or option a1)
 #      ---                   <-- & insert instrns from uvdata51 if packed fields
 #      ---                   <-- insert R/T tests if redef records
        mvc    c0(6),b0(6)                          #1 sd-cust
        mvc    c100(4),b6(4)                        #2 filler001
        mvc    c200(2),b10(2)                       #3 sd-slsmn
        mvc    c300(1),b12(1)                       #4 filler002
        mvc    c400(6),b13(6)                       #5 sd-date
        mvc    c500(1),b19(1)                       #6 filler003
        mvc    c600(8),b20(8)                       #7 sd-inv
        mvc    c700(2),b28(2)                       #8 filler004
        mvc    c800(6),b30(6)                       #9 sd-prod
        mvc    c900(2),b36(2)                       #10 filler005
        edta1  c1000(8),b38(6),'+zzzzzzzzz9'        #11 sd-qty
        mvc    c1100(1),b44(1)                      #12 filler006
        edta1  c1200(9),b45(7),'+zzzzzzz.99'        #13 sd-price
        mvc    c1300(1),b52(1)                      #14 filler007
        edta1  c1400(11),b53(9),'+zzzzzzz.99'       #15 sd-amount
        mvc    c1500(2),b62(2)                      #16 filler008
        varb1  d0(01600),c0(100),0016,'|'
        trt    d0(01600),$trtchr
        clr    c0(01600),' '
 put1   put    filo1,d0
        skp    loop
 #
 eof    cls    all
        eoj
 @pf2=genpipe1.sub
Note
  • instruction 'varb1' is the most important here
  • inserts '|' delimiter & squeezes out blanks from max 100 byte fields
  • option 'b1' leaves 1 trailing blank to prevent 'null' fields

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E10. checking results of sales detail conversion

pfq1/saledtl - convert Pipe|Delimited to Fixed-Field

 # saledtl - uvcopy job to convert EBCDIC/ASCII data to delimited text file
 opr='saledtl - uvcopy code generated from copybook: saledtl '
 opr='uop=q1e0s1 - option defaults'
 opr='      e1   - translate char & unpacked numeric fields to EBCDIC'
 opr='        s1 - convert binary fields to BIG-END (for mainframe)'
 uop=q1e0s1    # option defaults
 was=a33000b33000c999000d33000e33000
 fili1=?d4pipe/saledtl.dat,rcs=9000,typ=LST
 filo1=?d5fix/saledtl,rcs=00064,typ=RSF
 @run
        opn    all
 loop   get    fili1,a0
        skp>   eof
        mvc    b0(00064),a0       move input area a to area b
        fix    c0(100),b0(32000),320,'|'
 #      ---                   <-- insert R/T tests if redef records
        bal    fix1,'d0(6z),c0,sd-cust'
        bal    fix1,'d6(4c),c100,filler001'
        bal    fix1,'d10(2z),c200,sd-slsmn'
        bal    fix1,'d12(1c),c300,filler002'
        bal    fix1,'d13(6z),c400,sd-date'
        bal    fix1,'d19(1c),c500,filler003'
        bal    fix1,'d20(8c),c600,sd-inv'
        bal    fix1,'d28(2c),c700,filler004'
        bal    fix1,'d30(6c),c800,sd-prod'
        bal    fix1,'d36(2c),c900,filler005'
        bal    fix1,'d38(6z),c1000,sd-qty'
        bal    fix1,'d44(1c),c1100,filler006'
        bal    fix1,'d45(7z),c1200,sd-price'
        bal    fix1,'d52(1c),c1300,filler007'
        bal    fix1,'d53(9z),c1400,sd-amount'
        bal    fix1,'d62(2c),c1500,filler008'
 put1   put    filo1,d0
        skp    loop
 #
 eof    cls    all
        eoj
 @pf2=genfixd1.sub

 Execute job as originally shown on page '2E2'
 =============================================

 #2b. uvcopy pfq1/saledtl  <-- execute job
      ===================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E11. checking results of sales detail conversion

compare reconverted data to original

After re-converting the pipe|delimited data to Fixed-Field, we can compare the file to the original fixed-field file to verify our conversions. See the 'uvcmpFA1' data file compare documented at CMPjobs.htm#1F1.


 uvcmpFA1 d5fix/saledtl d2asc/saledtl r64
 ========================================
 uvcmp1 - compare 2 files, print mismatched records, '*' flag diffs
 2012/02/21_07:01:12 uop=q1p30r256s6t500000u3x2y0q1r64
 recsize  reccount   file-size  typ Report=rptcmp/saledtl
 1:   64        20       1,280  RSF  File1=d2asc/saledtl
 2:   64        20       1,280  RSF  File2=d5fix/saledtl
                       1         2         3         4         5         6
 f#record#byte# 0123456789012345678901234567890123456789012345678901234567890123
 ===============================================================================
 1       2    0 130140    21 940802 IN111001  SCR012  000021 0001001 000021021
                3333332222332333333244333333225453332233333323333333233333333322
                130140000021094080209E111001003320120000002100001001000002102100
                                                                         *****
 2       2      130140    21 940802 IN111001  SCR012  000021 0001001 000002102
                3333332222332333333244333333225453332233333323333333233333333322
                130140000021094080209E111001003320120000002100001001000000210200
                                                                         *****
 1      19    0 406082    55 020815 IN33001   TAB013  00001x 0008001 00014401x
                3333332222332333333244333332225443332233333723333333233333333722
                406082000055002081509E330010004120130000001800008001000014401800
                                                                        ** ***
 2      19      406082    55 020815 IN33001   TAB013  00001x 0008001 00001440q
                3333332222332333333244333332225443332233333723333333233333333722
                406082000055002081509E330010004120130000001800008001000001440100
                                                                        ** ***
 ==================== EOF or StopPrint/StopRead count reached  ==============
 F1Count=20, F2Count=20, StopPrint=6, StopRead=500000
 F1Reads=20, MisMatches=5, MisMatsPrinted=5, Recsize=64

We have created some differences in record pairs #2 & #19 to illustrate the comparison reports. See complete compare file doc in CMPjobs.htm.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6E12. checking results of sales detail conversion

sqlTC1/saledtl.sql - script to Create DB table

 /* saledtl.sql - SQL batch file to create a table */
 /*              - generated from COBOL copybook 20111020:201707 */
 /* www.uvsoftware.ca/datacnv1.htm#Part_4 & sqldemo.htm#Part_4 */
 /*                                        */
 /* sqlplus user/pass @sqlTC2/saledtl.sql */
 /* ====================================== */
 /*                                        */
 DROP TABLE saledtl;
 CREATE TABLE saledtl (
 sd_cust                       number   (06)   , --#001 9(6).
 sd_slsmn                      number   (02)   , --#002 9(2).
 sd_date                       number   (06)   , --#003 9(6).
 sd_inv                        char     (0008) , --#004 x(8).
 sd_prod                       char     (0006) , --#005 x(6).
 sd_qty                        number   (06)   , --#006 s9(6).
 sd_price                      number   (07,2) , --#007 9(5)v99.
 sd_amount                     number   (09,2)   --#008 s9(7)v99.
 );
 exit;

6E13. sqlTL1/saledtl.ctl - script to Load DB table

 -- saledtl.ctl - SQL*LOADER control file to load Oracle table
 --              - generated from COBOL copybook 20111020:201707
 -- www.uvsoftware.ca/datacnv1.htm#Part_4 & sqldemo.htm#Part_4
 --
 -- sqlldr user/pass control=sqlTL2/saledtl.ctl
 -- ============================================
 --
 load data infile 'd4pipe/saledtl.dat' into table saledtl
 fields terminated by '|' optionally enclosed by '"'
 (
 sd_cust                       , --number   (06)   , --#001 9(6).
 sd_slsmn                      , --number   (02)   , --#002 9(2).
 sd_date                       , --number   (06)   , --#003 9(6).
 sd_inv                        , --char     (0008) , --#004 x(8).
 sd_prod                       , --char     (0006) , --#005 x(6).
 sd_qty                        , --number   (06)   , --#006 s9(6).
 sd_price                      , --number   (07,2) , --#007 9(5)v99.
 sd_amount                       --number   (09,2)   --#008 s9(7)v99.
 )

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6F1. DATA conversions for VU JCL demos

uvcpsalesA2E - demo ASCII to EBCDIC (no packed/binary)

Here is a sample/demo How to convert ASCII data files back to ASCII for FTP binary back to the mainframe. This is ONLY for files without packed/binary fields. For files with packed/binary, use script gencnvD2 to generate 'uvcopy' jobs from copybooks, so packed/binary preserved, only pic x translated. See gencnvD2 demo for custmas file starting on page '6D1'

This method (for files with no packed/binary) uses Vancouver Utility 'uvcp' to convert ASCII to EBCDIC & convert any zoned signs from Micro Focus unix conventions to mainframe conventions.

This demo assumes the file was originally FTP'd from the mainframe in ASCII text mode which translates EBCDIC to ASCII & appends CR/LF (making the records 2 bytes longer than on the mainframe). This uvcp demo will drop off the CR/LF, restoring the fixed length as on the mainframe.

This demo assumes you have already run the EBCDIC to ASCII conversion demo on page '6E1', which left the ASCII file in $RUNDATA/data/ar.sales.items You can run this reverse demo as follows:


 #1. Login --> $HOME
 #2. cdd --> testdata

 #3a. mkdir sf        <-- make Script Files subdir (if not already present)
 #3b. mkdir ftp2MF    <-- make data output subdir (if not already present)

 #4. cp $UV/sf/demo/uvcpsalesA2E sf
     ==============================
     - copy demo script into testdata/sf/...

 #6. sf/uvcpsalesA2E   <-- execute the script (listed on next page)
     ===============
     - copies data/ar.sales.items to ftp2MF/AR.SALES.ITEMS
       while translating ASCII to EBCDIC & fixing signs

 #7. uvhd ftp2MF/AR.SALES.ITEMS r64a
     ===============================
     - inspect output file (option 'a' shows EBCDIC as ASCII on char line)
     - verical hexadecimal zones & digits lines show EBCDIC codes
     - see uvhd's before & after already listed on pages '6E3' & '6E2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6F2. DATA conversions for VU JCL demos

 #!/bin/ksh
 # uvcpsalesA2E - convert data files from ASCII to EBCDIC
 #              - drop off CR/LF, restore fixed length as on mainframe
 #              - for FTP BINARY back to mainfame
 #              - by Owen Townsend, UV Software, Nov 21/2011
 #
 # This script demos using 'uvcp' to convert ASCII to EBCDIC
 # Only for files with NO packed/binary
 # - for packed/binary, use script gencnvD2 to generate 'uvcopy' jobs
 #   from copybooks, so packed/binary preserved, only pic x translated
 #   see gencnvD2 demo at http://www.uvsoftware.ca/mvsjcltest.htm#6D1
 # See this script demo at http://www.uvsoftware.ca/mvsjcltest.htm#6F1
 # - could run as follows:
 # 1. Login --> $HOME
 # 2. cdd --> testdata
 # 3. mkdir sf          <-- make Script Files subdir (if not already present)
 # 4. mkdir ftp2MF      <-- make data output subdir (if not already present)
 # 5. copy this script into sf/...
 # 6. sf/uvcpsalesA2E   <-- execute the script
 #    ===============
 # 7. uvhd ftp2MF/AR.SALES.ITEMS r64a
 #    ===============================
 #    - inspect output file (option 'a' shows EBCDIC as ASCII on char line)
 #    - verical hexadecimal zones & digits lines show EBCDIC codes
 #
 uvcp "fili1=data/ar.sales.items,rcs=64,typ=RSF\
 ,filo1=ftp2MF/AR.SALES.ITEMS,rcs=64,typ=RSF\
 ,tre=0(64),tres=43(1),tres=61(1)"
 #

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6G1. DATA conversions for VU JCL demos

Op Instrns - convert custmas ASCII to EBCDIC

This is the reverse conversion of page '6D1', in case you need to send files (with packed/binary fields) back to the mainframe.


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdc --> $HOME/cnvdata  (alias cdc='cd $HOME/cnvdata)

 #3. cp $UV/cobol/cpys/custmas $CNVDATA/cpys/custmas
     ===============================================
     - copy COBOL copybook for customer master to conversion subdir
     - already copied on page '6D1'

 #4. gencnvE custmas    <-- generate job to convert ASCII to EBCDIC
     ===============        for pic x fields (preserving packed/binary)
     - creates following files in following subdirs:

 #4a. maps/custmas - cobmap (record layout) used to create folowing jobs
                   - see cobmap already listed on page '6D4'
 #4b. pfy1/custmas - uvcopy job to convert ASCII to EBCDIC
                   - see job listed on page '6G2'

 #5. cp $RUNDATA/testdata/data/ar.customer.master $CNVDATA/d2asc/custmas
     ===================================================================
     - copy ASCII datafile from $RUNDATA/data to $CNVDATA/d2asc
     - renaming as expected by the data conversion job (pfy1/custmas)

 #6a. uvcopy pfy1/custmas[,fili1=d2asc/custmas,filo1=d3ebc/custmas]
      =============================================================
      - convert ASCII to EBCDIC, preserving any packed/binary fields
      - Input/Output files default as shown above (no need to enter)

 #6b. uvcopy pfy1/custmas   <-- Execute ASCII to EBCDIC conversion
      ===================     - shorter/easier alternative command

 #7. uvhd $CNVDATA/d3ebc/custmas r256a
     =================================
     - check results, see EBCDIC display already listed on page '6D2'

 #8.  cp d3ebc/custmas ftp/AR.CUSTOMER.MASTER
      =======================================
      - change name back as expected on maifnrame

 #8. FTP to mainframe
     ================
 #8a. cd ftp
 #8b. ftp xxx.xxx.xxx.xxx
 #8c. binary
 #8d. quote site lrecl=256
 #8e. put AR.CUSTOMER.MASTER
 #8f. bye

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6G2. checking results of customer master conversion

pfy1/custmas - job to convert EBCDIC to ASCII

 # custmas - uvcopy job, ASCII to EBCDIC preserve packed, fix signs
 opr='custmas - uvcopy code generated from copybook: custmas '
 uop=q0
 was=a33000b33000
 fili1=?d2asc/custmas,rcs=00256,typ=RSF
 filo1=?d3ebc/custmas,rcs=00256,typ=RSF
 @run
        opn    all
 loop   get    fili1,a0
        skp>   eof
        mvc    b0(00256),a0       move rec to outarea before field prcsng
        tre    b0(00256)          translate entire outarea to EBCDIC
 #      ---                <-- insert R/T tests here for redefined records
        mvc    b120(60),a120           pns cm-thisyr-sales
        mvc    b180(60),a180           pns cm-lastyr-sales
 put1   put    filo1,b0
        skp    loop
 eof    cls    all
        eoj

notes re ASCII to EBCDIC uvcopy job

  1. Note the 'tre' instruction translates the entire record (which destroys any packed/binary or Zoned signed fields).

  2. But the following 2 'mvc' instructions restore the packed fields, which must be the same on unix for Micro Focus COBOL, as for mainframe COBOL.

  3. This job was executed on page '6G1' as follows:

 #6b. uvcopy pfx1/custmas
      ===================
  1. The Op. Instrns. on page '6G1' instructs you to manually rename the file when you copy from the $RUNDATA/data subdir to the conversion d2asc/ subdir which is OK for a 1 time conversion of a few files.

  2. BUT, if you had to convert the file on a daily basis, then you could modify the filenames in the uvcopy job as follows:

      fili1=${RUNDATA}/data/ar.customer.master,rcs=00256,typ=RSF
      ==========================================================
      filo1=${CNVDATA}/d2asc/custmas,rcs=00256,typ=RSF
      ================================================
  1. OR you could write a script, calling the uvcopy job,& specifying the desired filenames on the uvcopy command as follows:
      uvcopy $CNVDATA/pfy1/custmas,fili1=${RUNDATA}/data/ar.customer.master\
                                  ,filo1=${CNVDATA}/d1ebc/custmas
      =====================================================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6H1. Converting Mainframe DATA to unix/linux/windows

using control file to insert datafilenames vs copybooknames

The advantage is we will not have to change the name of the datafile to match the copybook name. This will also solve the possible problem of having multiple data files using the same copybook.

sample control file

 ar.customer.master         cpy=custmas1  rcs=00256
 gl.account.master_         cpy=acntmstr  rcs=00128
 py.payroll.master          cpy=paymastr  rcs=00256 keys=(0,10n,10,25d)
                                  control-file
 cpys-------->maps---------->pfx1-------------->pfx2----------->pfx3--------->
     cobmap1       uvdata51         uvdata52          copy/edit       execute
             convert copybooks  change copybooknames
               to uvcopy jobs     to datafilenames

 #1a. Login ----> homedir
 #1b. cdc  -----> cnvdata

 #2. vi ctl/ctlfile1     <-- create the control file with vi
     ===============

 #2. uvcopyx cobmap1 cpys maps uop=q0i7p0
     ====================================
     - convert all copybooks to record layouts (cobmaps)

 #3. uvcopyx uvdata51 maps pfx1 uop=q0i7
     ===================================
     - generate uvcopy jobs from cobmaps
     - uvcopy jobs have the same filenames as copybooks
     - copybooknames used for datafilenames on fili1=... & filo1=...

 #4. uvcopy uvdata52,fili1=ctl/ctlfile1,fild2=pfx1,fild3=pfx2,uop=r0s0t0
     ===================================================================
     - insert data filenames into EBCDIC to ASCII conversion jobs
     - see options explained on page '6D4'

 #5. cp pfx2/* pfx3/
     ===============
     - copy all jobs to pfx3/... for execution
     - do this copy all/* 1st time only, else 1 at a time
     - will make any manual changes in pfx3 (for multi record type files)
     - protects our changes in case mass generation is repeated

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6H2. Converting Mainframe DATA to unix/linux/windows

Executing jobs to convert ALL data files

 d0ebc-----------> d1ebc--------------->d2asc------------------>$TESTDATA/data
       rename           EBCDIC->ASCII          copy files to test dirs
       if required     uvcopyxx 'pfx3/*'       cp d2asc/* $TESTDATA/data

 #1a. Login ----> homedir

 #1b. cdc  -----> cnvdata

 #2. uvcopyxx 'pfx3/*'
     =================
     - execute ALL uvcopy jobs in pfx3/... to convert all data files
     - copies all data files from d1ebc/... to d2asc/...
     - translating char fields from EBCDIC to ASCII
     - preserving any packed/binary fields (same as on mainframe)
     - converting any zoned signs from mainframe to Micro Focus conventions
       (pos {ABCDEFGHI ---> 0123456789 & neg }JKLMNOPQR ---> pqrstuvwxy)

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6H3. Converting Mainframe DATA to unix/linux/windows

generating pipe|delimit jobs via control file

                                  control-file
 cpys-------->maps---------->pfx1-------------->pfx2----------->pfx3--------->
     cobmap1       uvdata51         uvdata52          copy/edit       execute
             convert copybooks  change copybooknames
               to uvcopy jobs     to datafilenames

 #1a. Login ----> homedir
 #1b. cdc  -----> cnvdata

 #2. vi ctl/ctlfile1     <-- control file already created above
     ===============         for EBCDIC to ASCII convert

 #3. uvcopyx cobmap1 cpys maps uop=q0i7p0
     ====================================
     - convert copybooks to record layouts
     - already performed above for EBCDIC to ASCII convert

 #4. uvcopyx genpipe1 maps pfx1 uop=q0i7
     ===================================
     - generate uvcopy jobs from cobmaps
     - uvcopy jobs have the same filenames as copybooks
     - copybooknames used for datafilenames on fili1=... & filo1=...

 #5. uvcopy uvdata54,fili1=ctl/ctlfile1,fild2=pfp1,fild3=pfp2,uop=r0s0t0
     ===================================================================
     - insert data filenames into pipe delimit jobs

 #6. cp pfp2/* pfp3/
     ===============
     - copy all jobs to pfp3/... for execution
     - do this copy all/* 1st time only, else 1 at a time
     - will make any manual changes in pfp3 (for multi record type files)
     - protects our changes in case mass generation is repeated

Executing jobs to pipe delimit ALL data files

 d2asc------------------->d4pipe----------------->$TESTDATA/???
      uvcopyxx 'pfp3/*'         copy files to test dirs

 #1a. Login ----> homedir
 #1b. cdc  -----> cnvdata

 #2. uvcopyxx 'pfxp/*'
     =================
     - execute ALL uvcopy jobs in pfp3/... to pipe delimit all data files
     - copies all data files from d2asc/... to d4pipe/...

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6I1. DATA conversions for VU JCL demos

gencnvD2 - generate EBCDIC to ASCII Data Conversions

Here is a listing of the "generate everything" script. If you have Vancouver Utilities installed, you can see it as follows:


 #1. Login uvadm --> /home/uvadm

 #2. vi sf/IBM/gencnvD2    <-- inspect gencnvD2 script
     ==================
 # gencnvD2 - generate conversion jobs for Unix/Linux systems
 #          - cobmap1,uvdata51,genpipe1,sqlload1
 #          - assumes COBOL copybook available in subdir cpys
 #          - by Owen Townsend, Feb 24/2004, update Oct 2011
 #          - see DATAcnv1.doc or www.uvsoftware.ca/datacnv1.htm
 # gencnvD2 - generates for Oracle
 # gencnvD3 - same as gencnvD2, but generates for SQL Server
 #
 #Feb19/12 - added genfixd1 convert pipe|delimited to fixed record
 #
 # gencnvD2 citytax1            <-- example (from DATAcnv1.doc)
 # =================
 #
 f="$1"; r="$2";
 if [[ -f cpys/"$f" && -d maps && -d pfp1 && -d pfq1 && -d sqlTC1 ]]; then :
    else echo "usage:   gencnvD2 filename"
         echo "         ================="
         echo "example: gencnvD2 custmas"
         echo "         ================"
         echo "- arg1 must be a file in subdir cpys/..."
         echo "- must have output subdirs: maps, pfp1, pfq1, sqlTC1, sqlTL1"
         exit 1; fi
 #
 uvcopy cobmap1,fili1=cpys/$f,filo1=maps/$f,uop=q0p0
 #==================================================
 uvcopy uvdata51,fili1=maps/$f,filo1=pfx1/$f,uop=q0
 #=================================================
 uvcopy genpipe1,fili1=maps/$f,filo1=pfp1/$f,uop=q0,rop=r0
 #========================================================
 uvcopy genfixd1,fili1=maps/$f,filo1=pfq1/$f,uop=q0,rop=r0
 #========================================================
 uvcopy sqlcreate1,fili1=maps/$f,filo1=sqlTC1/$f.sql,filo2=sqlTL1/$f.ctl
 #======================================================================
 exit 0
Note
  • script 'gencnvA' is the same as 'gencnvD2' above, BUT
    omits genpipe1, genccnvd2 & sqlcreate1.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

6I2. DATA conversions for VU JCL demos

gencnvE - generate EBCDIC to ASCII Data conversions


 #3. vi sf/IBM/gencnvE    <-- inspect gencnvE script
     =================
 #!/bin/ksh
 # gencnvE - Korn shell script from UVSI stored in: /home/uvadm/sf/IBM/
 # gencnvE - Generate uvcopy job to convert 1 data file ASCII to EBCDIC
 #         - opposite of gencnvA (generates jobs to convert EBCDIC to ASCII)
 #
 # gencnvE must run from conversion superdir containing subdirs cpys,maps,pfy1
 # 1. cpys  - COBOL copybooks
 # 2. maps  - record layouts (cobmaps created from copybooks)
 # 3. pfy1  - generated uvcopy jobs (created from cobmaps)
 #
 # gencnvE script executes 2 uvcopy jobs:
 # 1. cobmap1  - copy cpys to maps, generating record layouts (cobmaps)
 # 2. uvdata31 - generates uvcopy skeleton job from cobmap record layouts
 #
 echo "gencnvE using: cpys,maps,pfy1"
 if [[ ! -f "cpys/$1" ]]
    then
    echo "usage: gencnvE CopyBookName"
    echo "       ===================="
    echo " - arg1 ($1) not found in cpys subdir"
    exit 9; fi
 #
 uvcopy cobmap1,fili1=cpys/$1,filo1=maps/$1,uop=q0i7p0
 #====================================================
 #
 uvcopy uvdata31,fili1=maps/$1,filo1=pfy1/$1,uop=q0i7
 #===================================================
 exit 0

'gencnvE' is the opposite of 'gencnvD2' & omits 'genpipe1' & 'sqlcreate1'. The operating instructions would be similar to gencnvD2 on page '6D1' but you would have to make subdir 'pfy1' to receive the ASCII to EBCDIC job.


 #4a. mkdir pfy1
      ==========

 #5a. gencnvE custmas
      ===============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_7 converting YOUR JCL/COBOL/DATA vs UV Software demo

Part 7 - Contents


7A1. Converting/Testing JCL/COBOL/DATA - 3 scenarios
Part3 - conversions using UV Software demo JCL
- illustrated Operating Instructions
Part7 - concise Op. Instrns. to transfer/convert ALL your JCL/COBOL/DATA
Part8 - select samples of YOUR JCL/COBOL/DATA for POC
- optimize conversions on smaller sample of your JCL/COBOL/DATA

7B1. Home dirs required for JCL conversion & testing
- uvadm, appsadm, mvstest
7B2.  subdirs for LIBRARY (JCL,COBOL,etc) conversions
- can setup in your homedir & copy demo files from /home/uvadm/mvstest/...
7B3.  subdirs for DATA-FILE conversions

7C1. setup user mvstest2 to hold ALL your transferred JCL/COBOL/DATA
- OR use your homedir subdirs testlibs/testdata
- should use separate file system if high volumes & large files

7C2. setup .profile & .kshrc

7D1. Operating Instructions to setup directories for your conversions
- super-directories testlibs & testdata
- setsup subdirs with scripts 'mvslibsdirs' & 'mvsdatadirs'
- copy control files from uvadm with script 'copymvsctls'
- modify JCL converter options file 'jclunixop51'

7D2. Select your JCLs,PROCs,& Parms for your conversion
- from your mainframe to your unix testlibs/jcl0,proc0,parm0
 Select your COBOL programs & copybooks for your conversion
- from your mainframe to your unix testlibs/cbl0,cpy0

7D3. copy DATA for JCL/script your executions
- convert EBCDIC to ASCII as documented in Part_6

7D4. Using a control file to insert datafilenames in conversion jobs
- vs copybooknames used for 1 file at a time conversions
- copies all pfx1/* jobs generated by uvdata51 or gencnvA (6D1 above)
- outputs to pfx2/... replacing copybooknames with datafilenames
  from control file (also changing jobnames to datafilenames)

7D5. Executing DATA conversion jobs to convert all data files to ASCII
- preserving packed/binary fields (would be destroyed by translate)
- optional convert to pipe|delimited text (packed fields unpacked)

7E1. LISTCAT info for JCL & DATA conversion
If possible mainframe LISTCAT reports should be transferred to unix/linux
& converted to a control file to provide datafile info for JCL & DATA file
conversion.

7G1. JCL conversion to Korn shell scripts
- super script 'jcl2ksh51A' performs all steps
- OR 'jcl2ksh53A' for AIX COBOL (vs Micro Focus COBOL)

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part 7 - Contents (continued)


7H1. Converting Mainframe COBOL to Unix/Linux, using scripts:
cnvMF51Ac - convert all COBOL copybooks for Micro Focus COBOL
cnvMF51A - convert all COBOL programs for Micro Focus COBOL
cnvAIXcblAc - convert all COBOL copybooks for AIX COBOL
cnvAIXcblA - convert all COBOL copybooks for AIX COBOL

7H2. Compiling COBOL programs, using scripts:
mfcblA - compile all COBOL programs for Micro Focus COBOL
aixcblA - compile all COBOL programs for AIX COBOL

7J1. cleanup TeraData SQL parameters tdsql0 --> tdsql1 --> tdsqls
- clear 73-80, translate to lower except in quotes

7K1. Select QuikJobs from parms/... to qj0/...
& convert to uvcopy in qjs/...

7K2. Select EasyTrieves from parms/... to ezt0/...
& convert to uvcopy in ezts/...

7L1. Create Cross-References & Statistics (table summary counts) of
JCLs, PROCS, Parms, COBOL programs, copybooks, datafilenames, etc.

7M1. creating the GDG control file by selecting all filenames from JCL
- may edit to specify desired generations for each file

7M2. Alternate/Configurable location for GDG control file

7N1. Execute your JCL/scripts

7O1. Considerations for the "REAL conversion/testing/production"
(vs training & POC).

7P1. Setup directories for the entire set of JCL/COBOL/DATA to be converted
- in large capacity file systems (vs homedirs)
- modify profile RUNLIBS & RUNDATA to point to the new directories

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7A1. converting YOUR JCL/COBOL/DATA vs UV Software demo

Converting/Testing JCL/scripts

 We will present 3 scenarios:
 Part3 - conversions using UV Software demo JCL
       - illustrated Operating Instructions
 Part7 - concise Op. Instrns. to transfer/convert ALL your JCL/COBOL/DATA
 Part8 - select samples of YOUR JCL/COBOL/DATA for POC
       - optimize conversions on smaller sample of your JCL/COBOL/DATA

1. converting UV Software demo JCL/COBOL

Part_3 suggests convert/test in your own homedir, by setting up subdirs testlibs & testdata, OR setup new userid 'mvstest1'. We will use mvstest1, but the documentation is the same if you setup testlibs/testdata in your homedir.

2. transfer ALL your JCL/COBOL to unix & initial convert

Part_7 gives more concise instructions without as many illustrations to transfer ALL your JCL/COBOL/DATA to unix & perform initial conversions. You could do this using subdirs in your homedir, but better to setup in a separate file system with lots of space if you have thousands of files. We suggest setup superdirs ALLtestlibs, ALLtestdata, ALLcnvdata.

The difference here is that you would not want to store your full set of libraries (JCLs,PROCs,Parms,COBOL programs & copybooks) & especially your full set of DATA, in the homedirs. Your full set of libraries & DATA should be stored in separate file-systems with higher capacities than homedirs. This also protects the separate file-systems from possible shortages & corruptions that could affect other file-systems.

The full set of libraries & DATA must also be setup to ensure shared access by all the programmers & operators that will be working on them (vs the homedirs which could have write access restricted to the owners).

3. select small set of JCL/COBOL/DATA for POC

Part_8 documents this procedure to optimize conversions on smaller samples of your JCL/COBOL/DATA before tackling the possible thousands of JCLs/COBOLs. We suggest you setup POC superdirs as POCtestlibs, POCtestdata, POCcnvdata. Update the SYS variable in your profile so cdl,cdd,cdc take you to the POC superdirs vs the ALL superdirs.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7B1. converting YOUR JCL/COBOL/DATA vs UV Software demo

HomeDirs for JCL conversions & testing

Here is a summary of the home directories used for JCL conversion & testing. We are showing only a few subdirs in uvadm & appsadm. See all subdirs in 'mvstest2' on the next page.

 /home/uvadm   <-- Vancouver Utilities home directory
 :               - showing only subdirs/files you need copy for your conversion
 :                   - see all 25 subdirs on page '1A3'
 :-----ctl         <-- control files for JCL/COBOL conversions/executions
 /home/appsadm  <-- Applications Administrator
 :                - showing only subdirs/files you need for your conversion
 :                - see all 15 subdirs on page '1D1'
 :-----ctl              <-- control files
 :-----env              <-- common_profiles customized for site
 :-----log1             <-- console logging files (currently active)
 :     :-----user1        - sub-directoried by user login
 :     :-----.etc.
 :-----log2             <-- console logging files (for current month)
 :     :-----user1
 :     :-----.etc.
 :-----sfun             <-- ksh functions used in converted JCL/scripts
 :                        - jobset51,jobend51,exportgen0,exportgen1,logmsg1,etc
 /home/mvstest1 <-- mvstest1 with demo JCL/data for user self-training
 /home/userxx   <-- or could setup testlibs/testdata in userhomedir
 :-----testlibs    <- sample JCL/COBOL for user self-training
 :     :-----cbl0  - COBOL programs
 :     :-----cpy0  - COBOL copybooks
 :     :-----jcl0   - JCL selected from /home/uvadm/mvstest/testlibs/jcl0
 :     :-----parm0  - Parms
 :     :-----proc0  - PROCs
 :     :------qj0   - QuikJobs selected from parms
 :     :------ezt0  - EasyTrieves selected from parms
 :-----testdata    <- sample DATA files for user self-training
 :     :-----data   - data files selected from /home/uvadm/mvstest/testdata/data

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7B2. converting YOUR JCL/COBOL/DATA vs UV Software demo

subdirs for LIBRARY (JCL,COBOL,etc) conversions

 /home/uvadm/mvstest   <-- test/demo libraries supplied in /home/uvadm/...
 /home/mvstest1        <-- could setup new user & copy from /home/uvadm
 /home/yourhomedir     <-- OR could copy to your homedir
 :-----testlibs
 :     :--MF--cbl0        - COBOL programs ('*' means files present)
 :     :------cbl1        - cleaned up, cols 1-6 & 73-80 cleared, etc
 :     :------cbl2        - cnvMF5 converts mainframe COBOL to MicroFocus COBOL
 :     :------cbl3        - sysin1 converts instream ACCEPTs to READs from a file
 :     :------cbl4        - sysout1 converts DISPLAY on SYSOUT to WRITE to a file
 :     :---ux-cbls        - copy here (standard source library) before compiling
 :     :------cblst       - cobol source listings from compiles
 :     :------cblx        - compiled COBOL programs (.int's)
 :     :--MF--parm0       - control cards & includes (SORT FIELDS, etc)
 :     :------parms       - control cards with 73-80 cleared
 :     :--MF--cpy0        - for COBOL copybooks
 :     :------cpy1        - cleaned up, cols 1-6 & 73-80 cleared, etc
 :     :------cpy2        - cnvMF5 converts mainframe COBOL to MicroFocus COBOL
 :     :---ux-cpys        - copy here (standard copybook library)
 :     :--UV--ctl         - conversion control files (jclunixop51,cobdirectives)
 :     :------errs        - JCL converter writes ERROR reports here
 :     :--MF--jcl0        - demo JCLs supplied
 :     :------jcl1        - intermediate conversion 73-80 cleared
 :     :------jcl2        - PROCs expanded from procs
 :     :------jcl3        - JCLs converted to Korn shell scripts
 :     :---ux-jcls        - copy here manually 1 by 1 during test/debug
 :     :------maps        - 'cobmaps' record layouts generated from copybooks
 :     :------pf          - uvcopy jobs to replace utilities (easytrieve,etc)
 :     :--MF--proc0       - demo PROCs supplied
 :     :------procs       - will be merged with jcl1, output to jcl2
 :     :------qj0         - QuikJobs selected from parms
 :     :------qj1         - QuikJobs cleanup (73-80 cleared, lower cased)
 :     :------qj2         - QuikJobs converted to uvcopy
 :     :------qjs         - copied to execution subdir (protect reconvert)
 :     :------ezt0        - EasyTrieves selected from parms
 :     :------ezt1        - EasyTrieves cleanup (73-80 cleared, lower cased)
 :     :------ezt2        - Easytrieves converted to uvcopy
 :     :------ezts        - copy to Execution subdir (protect recconvert)
 :     :------sf          - for misc scripts you may wish to write
 :     :------tdsql0      - Teradata SQL scripts (create/load tables,etc)
 :     :------tdsql1      - cleaned up, lower cased, some conversions required
 :     :------tdsqls      - JCL/scripts will input from tdsqls
 :     :------tmp         - tmp subdir used by uvsort & various conversions
 :     :------xref        - cross-references (see XREFjobs.htm)
 --MF-- Marks subdirs to receive files from the MainFrame for conversion
        - COBOL programs, copybooks, JCLs, PROCs, Parms,& data
 --UV-- Marks subdirs containing UV Software control files
        - required for control files required for conversions or executions
  ---ux-  marks the outputs of the conversion
          most other subdirs can go away after the conversion is complete

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7B3. converting YOUR JCL/COBOL/DATA vs UV Software demo

Library subdirs required for Production

The previous page illustrated the many library subdirs requiired for conversion There were many because most conversions are multi-stage, but only the final stage subdir is required for production as shown below:

 /p1/apps/             <-- mount point for file system separate from homedirs
 :-----mvsprod         <-- Library superdir for production $RUNLIBS
 :     :------cbls        - COBOL program source
 :     :------cblst       - cobol source listings from compiles
 :     :------cblx        - compiled COBOL programs
 :     :------parms       - SYSIN modules (control cards)
 :     :------cpys        - COBOL copybooks
 :     :------ctl         - control files (cobdirectives,etc)
 :     :------jcls        - JCL/scripts (Korn shells converted from JCLs)
 :     :------pf          - uvcopy jobs to replace misc utilities
 :     :------qjs         - Quick Jobs converted to uvcopy code
 :     :------ezts        - EasyTrieves converted to uvcopy code
 :     :------sf          - for misc scripts for admin, maintenance, etc
 :     :------sqls        - DB2/Oracle scripts to create/load tables
 :     :------tdsqls      - TeraData scripts to create/load tables
 :     :------tmp         - tmp subdir used by uvsort & misc
 :     :------xref        - cross-refs (JCL/scripts,COBOLs,copybooks,etc)

subdirs for DATA conversion

 /home/mvstest       <-- setup & copy files from /home/uvadm/mvstest/cnvdata
 /home/yourhomedir   <-- OR could copy to your homedir
 :-----cnvdata       <-- data conversion superdir $CNVDATA
 :     :-----d1ebc    # EBCDIC files from mainframe for conversion
 :     :-----d2asc    # files converted to ASCII with same record layout
 :     :-----d3ebc    # files converted back to EBCDIC for return to mainframe
 :     :-----d4pipe   # data files converted to '|' pipe delimited format
 :     :-----cpys     # COBOL copybooks
 :     :-----maps     # cobmaps (record layouts) generated from copybooks
 :     :-----pfx1     # uvcopy jobs to convert EBCDIC to ASCII (gen from cobmaps)
 :     :-----pfy1     # optional subdir for ASCII to EBCDIC (script gencnvE)
 :     :-----pfp1     # uvcopy jobs to convert to pipe delimited (from copybooks)
 :     :-----sqlTC1   # scripts to CREATE SQL tables (generated from copybooks)
 :     :-----sqlTL1   # scripts to  LOAD  SQL tables (generated from copybooks)

data subdirs for test/demo executions

 /home/mvstest       <-- setup & copy files from /home/uvadm/mvstest/testdata
 /home/yourhomedir   <-- OR could copy to your homedir
 :-----testdata      <-- data dirs for JCL/script executes $RUNDATA
 :     :--UV--data        - datafiles
 :     :--UV--ctl         - GDG control file
 :     :------joblog      - programmer debug log files
 :     :------jobmsgs     - status msgs from JCL/scripts
 :     :------jobtimes    - job/step times date stamped history files
 :     :------jobtmp      - temporary files for SYSIN instream data
 :     :------sysout      - SYSOUT printer files
 :     :------tmp         - tmp subdir for uvsort & misc use

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7C1. converting YOUR JCL/COBOL/DATA vs UV Software demo

setup mvstest2 or your homedir for Your conversion

You can perform your conversions in mvstest2 or your own homedir. You can omit setting up userid 'mvstest2' if you intend to setup testlibs & testdata subdirs in your homedir.

In either case you MUST HAVE setup user 'appsadm', copied profiles from /home/uvadm/env/... to /home/appsadm/env/..., & modified the profiles as appropriate for your site. See instructions on pages '1D2' - '1D8'.


 #1. login as 'root'

 #2. groupadd apps      <-- setup group 'apps', if not already setup
     =============          (when uvadm & appsadm were setup)

 #3a. useradd -m -g apps -s /bin/bash mvstest2  <-- setup for Linux bash shell
      ========================================

 #3b. useradd -m -g apps -s /bin/ksh mvstest2   <-- setup for Unix Korn shell
      =======================================

 #3c. useradd -m -d /export/home/mvstest2 -g apps -s /bin/ksh mvstest2
      ================================================================
      - must specify '-d ...' homedir option for SUN Solaris

 #3a. passwd mvstest2        <-- setup password desired
      ===============

 #4.  exit     <-- logout from root
      ====

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7C2. converting YOUR JCL/COBOL/DATA vs UV Software demo

setup .profile & .kshrc

Note
  • this must be done for either mvstest2 or your own login userid.

Copy the Vancouver Utilities profile & kshrc from $APPSADM/env/stub_profile and kshrc if not already done by your sysadmin. See listings of stub_profile & kshrc on pages '1C1' & '1C3'. The stub_profile calls the common_profile listed on page '1C2'. You do not copy since it is called from $APPSADM/env/...


 #1a. login mvstest2 --> /home/mvstest2
         ---OR---
 #1b. login yourself --> your homedir

 #2a. cp /home/appsadm/env/stub_profile .profile
      ==========================================
      - if prompted, reply 'y' to overwrite existing .profile

 #2b. cp /home/appsadm/env/stub_profile .bash_profile
      ===============================================
      - alternative for the Bash shell

 #3a. cp /home/appsadm/env/kshrc .kshrc
      =================================
      - if prompted, reply 'y' to overwrite existing .kshrc

 #3b. cp /home/appsadm/env/bashrc .bashrc
      ===================================
      - alternative for the Bash shell
Note
  • Alternatives if you have some profile content to be preserved
  • above #2 & #3 will overwite existing profiles & rc files
  • use cat >> if you have some content you want to preserve

 #2a. cat /home/appsadm/env/stub_profile >>.profile
      =============================================
      - use cat >> to append VU profile on existing profile

 #2b. cat /home/appsadm/env/stub_profile >>.bash_profile
      ==================================================

 #3a. cat /home/appsadm/env/kshrc >>.kshrc
      ====================================

 #3b. cat /home/appsadm/env/bashrc >>.bashrc
      ======================================

 #4. Logout & login to activate new profiles
     =======================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7D1. converting Your JCL/COBOL/DATA vs UV Software demo

Op. Instrns. to convert JCL/COBOL/DATA

These are the concise Operating Instructions without examples & explanations. Please see those in Part_3. You should run the sample conversions in Part_3 (using the UV Software supplied demo files) to get a good understanding of these conversion techniques.

Then you can use these concise operating instructions in Part 7 to convert your JCL/COBOL/DATA for your conversion.

setup directories for Your conversions


 #1. Login mvstest2 --> your /home/mvstest2
     OR Login yourself --> your homedir

 #2a. mkdir testlibs   <-- make superdir for JCL/COBOL subdirs
      ==============     - see testlibs subdirs on page '7B2'

 #2b. mkdir testdata   <-- make superdir for DATA subdirs
      ==============     - see testdata subdirs at bottom of '7B2'

 #3a. cdd     <-- alias cdl='cd $RUNDATA' --> cd testdata
      ===

 #3b. mvsdatadirs  <-- setup 12 DATA subdirs for later execution JCL/scripts
      ===========

 #4a. cdl     <-- alias cdl='cd $RUNLIBS' --> cd testlibs
      ===

 #4b. mvslibsdirs  <-- setup 30 subdirs for JCL & COBOL conversions
      ===========

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7D2. converting Your JCL/COBOL/DATA vs UV Software demo

copy control-files from uvadm


 #5. copymvsctls  <-- script to copy control files from /home/uvadm/ctl
     ===========      to $RUNLIBS/ctl/... & $RUNDATA/ctl

 #5a. l ctl              <-- list ctlfiles copied to $RUNLIBS/ctl/...
      =====
      -rw-rw-r-- 1 mvstest2 apps  3993 Oct 17 09:28 cnvcob5.tbl
      -rw-rw-r-- 1 mvstest2 apps  1989 Oct 17 09:28 cobdirectives
      -rw-rw-r-- 1 mvstest2 apps  2586 Oct 17 09:28 extfh.cfg
      -rw-rw-r-- 1 mvstest2 apps 15337 Oct 17 09:28 jclunixop51

 #5b. l $RUNDATA/ctl     <-- list ctlfiles copied to $RUNLIBS/ctl/...
      ==============
      -rw-rw-r-- 1 mvstest2 apps  156 Oct 17 10:48 gdgctl51_sample
      -rwxrwxr-x 1 mvstest2 apps 1616 Oct 17 09:28 GDGmkdirs

 #6. vi ctl/jclunixop51  <-- modify JCL converter options ?
     ==================    - depending on your conversion requirements
Note
  • see jclunixop51 (options only) listed on page '7F1'
  • see entire file listed at MVSJCL.htm#3E1
  • copymvsctls above copies from /home/uvadm/ctl/jclunixop51
  • also copies jclunixop53 in case of AIX COBOL (vs Micro Focus)

copy Your JCL/COBOL for conversion


 #7a. cp MainFrame_JCLs/... jcl0
      ==========================

 #8a. cp MainFrame_PROCs/... proc0
      ============================

 #9a. cp MainFrame_Parms/... parm0
      ============================

 #10a. cp MainFrame_COBOL_programs/... cbl0
       ====================================

 #11a. cp MainFrame_COBOL_copybooks/... cpy0
       =====================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7D3. converting Your JCL/COBOL/DATA vs UV Software demo

copy DATA for JCL/scripts


 #1. Login mvstest2 --> your /home/mvstest2
     OR Login yourself --> your homedir

 #2. cdc   <-- alias cdc='cd $CNVDATA' --> cd testdata
     ===

 #3. cp MainFrame_DATA_files/... d1ebc
      =================================

 #4. convert your data files EBCDIC to ASCII as per Part_6
Note
  • next few instructions are an over simplification
  • you must follow the instructions in Part_6

 #5. gencnvD2 filename    <-- generate ALL conversion jobs for 1 copybook
     =================
     - the "generate everything" script

 #6. convert EBCDIC datafile to ASCII, preserving any packed/binary fields

 #6b. uvcopy pfx1/filename  <-- Execute EBCDIC to ASCII conversion
      ====================

 #7. convert ASCII datafile to pipe delimited all text for loading DB table

 #7b. uvcopy pfp1/filename  <-- Execute pipe delimit conversion
      ====================

 #8. copy converted datafiles from $CNVDATA/d2asc to $RUNDATA/data

 #8a. cp d2asc/* $RUNDATA/data
      ========================

Notes re DATA files

  1. Demo data files supplied by UV Software were ASCII (no conversion required).

  2. But for you will need to convert your mainframe files from EBCDIC to ASCII (see Part_6).

  3. If packed/binary fields are present, you cannot simply FTP with translate which would destroy packed/binary fields.

  4. You must FTP in binary mode & use the Vancouver Utility conversion methods which generate conversion jobs automatically from the COBOL copybooks. See Part_6.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7D4. Converting Mainframe DATA to unix/linux

using control file to insert datafilenames vs copybooknames

The advantage is we will not have to change the name of the datafile to match the copybook name. This will also solve the possible problem of having multiple data files using the same copybook.

sample control file

 ar.customer.master         cpy=custmas1  rcs=00256
 gl.account.master_         cpy=acntmstr  rcs=00128
 py.payroll.master          cpy=paymastr  rcs=00256 keys=(0,10n,10,25d)
                                  control-file
 cpys-------->maps---------->pfx1-------------->pfx2----------->pfx3--------->
     cobmap1       uvdata51         uvdata52          copy/edit       execute
             convert copybooks  change copybooknames
               to uvcopy jobs     to datafilenames

 #1a. Login ----> homedir
 #1b. cdc  -----> cnvdata

 #2. vi ctl/ctlfile1     <-- create the control file with vi
     ===============

 #2. uvcopyx cobmap1 cpys maps uop=q0i7p0
     ====================================
     - convert all copybooks to record layouts (cobmaps)

 #3. uvcopyx uvdata51 maps pfx1 uop=q0i7
     ===================================
     - generate uvcopy jobs from cobmaps
     - uvcopy jobs have the same filenames as copybooks
     - copybooknames used for datafilenames on fili1=... & filo1=...

 #4. uvcopy uvdata52,fili1=ctl/ctlfile1,fild2=pfx1,fild3=pfx2,uop=r0s0t0
     ===================================================================
     - insert data filenames into EBCDIC to ASCII conversion jobs
     - see options explained on page '6D4'

 #5. cp pfx2/* pfx3/
     ===============
     - copy all jobs to pfx3/... for execution
     - do this copy all/* 1st time only, else 1 at a time
     - will make any manual changes in pfx3 (for multi record type files)
     - protects our changes in case mass generation is repeated

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7D5. Converting Mainframe DATA to unix/linux

Executing jobs to convert ALL data files

 d0ebc-----------> d1ebc--------------->d2asc------------------>$TESTDATA/data
       rename           EBCDIC->ASCII          copy files to test dirs
       if required     uvcopyxx 'pfx3/*'       cp d2asc/* $TESTDATA/data

 #1a. Login ----> homedir

 #1b. cdc  -----> cnvdata

 #2. uvcopyxx 'pfx3/*'
     =================
     - execute ALL uvcopy jobs in pfx3/... to convert all data files
     - copies all data files from d1ebc/... to d2asc/...
     - translating char fields from EBCDIC to ASCII
     - preserving any packed/binary fields (same as on mainframe)
     - converting any zoned signs from mainframe to Micro Focus conventions
       (pos {ABCDEFGHI ---> 0123456789 & neg }JKLMNOPQR ---> pqrstuvwxy)

generating pipe|delimit jobs via control file

Note
  • also possible to generate the pipe|delimit jobs using the control file
  • op. instrns. similar to above, use 'uvdata54' vs 'uvdata52'
  • see complete op. instrns on page '6H3'
                                  control-file
 cpys-------->maps---------->pfx1-------------->pfx2----------->pfx3--------->
     cobmap1       uvdata51         uvdata54          copy/edit       execute
             convert copybooks  change copybooknames
               to uvcopy jobs     to datafilenames

 #5. uvcopy uvdata54,fili1=ctl/ctlfile1,fild2=pfp1,fild3=pfp2,uop=r0s0t0
     ===================================================================
     - insert data filenames into pipe delimit jobs

Executing jobs to pipe delimit ALL data files

 d2asc------------------->d4pipe----------------->$TESTDATA/???
      uvcopyxx 'pfp3/*'         copy files to test dirs

 #2. uvcopyxx 'pfxp/*'
     =================
     - execute ALL uvcopy jobs in pfp3/... to pipe delimit all data files
     - copies all data files from d2asc/... to d4pipe/...

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7E1. LISTCAT info for JCL & DATA conversion

If possible the mainframe LISTCAT reports should be transferred to unix/linux and converted to a control file to provide datafile info for JCL & DATA file conversion. See detailed instructions at MVSDATA.htm#4E1 - 4E5. Here is page 4E5 which allows for multiple LISTCAT files from the mainframe.

Op. Instrns. for Multiple LISTCAT files


 #1. Login mvstest --> /home/mvstest or yourself --> homedir

 #2. cdl  (alias cdl='cd $RUNLIBS') --> /home/mvstest/testlibs

 #3. mkdir cat1 cat2   <-- mkae subdirs for LISTCAT files
     ===============

 #4. FTP multiple LISTCAT files --> cat1/...

 #5. uvcopyx catdata51 cat1 cat2 uop=q0i7
     ====================================
     - extract file info: AVGLRECL, MAXLRECL, RKP, KEYLEN, REC-TOTAL
     - code file info as keywords=... on right side of filename

 #6. uvsort "fili1=cat2/*,rcs=256,typ=LSTt,filo1=ctl/datacat51,key1=0(40),rop=f2"
     ============================================================================
     - sort all LISTCAT files in cat2/... to 1 file for next step

 #7. uvcopy catdata52,fili1=ctl/datacat51,filo2=ctl/datacat52
     ========================================================
     - translate filenames to lower case
     - convert any embedded '$ '#' to '_'s
     - modify GDG (0), (+1), etc to trailing_

 #7a. uvcopy catdata52   <-- same as above, easier to key
      ================     - I/O filenames default as above

 #8.  uvlp18 ctl/datacat52   <-- list LISTCAT extracted info (optional)
      ====================     - 18 cpi fits 132 cols on 8 1/2 wide

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7E2. LISTCAT info for JCL & DATA conversion

combine LISTCAT info with other sources

Note
  • 'ctl/datacat52' will later be combined with other datafile info
  • by the 'jcl2ksh51A' script which does everything re JCL conversion
  • jcl2ksh51A includes script 'jcldata5A' which runs 'uvcopy ctldata53'
    which combines LISTCAT info ctl/datacat52 with other data info files
Note
  • Do not run the ctldata53 shown below
  • shown here only to show you how LISTCAT info combined with other sources

 #9. uvcopy ctldata53,fili1=ctl/datajcl52,fili2=ctl/datacat52,fili3=ctl/dataxl152
     ,fili4=ctl/dataxl252,fili5=ctl/dataedt52,fili6=ctl/datacnv52,filo7=ctl/datactl53
     ============================================================================
     - combine 6 inputs (JCL,LISTCAT,Excel#1,Excel#2,Edited,datacnv)
     - create null files for any sources not available
     - sort files together & drop duplicates on sort output
     - collect significant file info (keyword=...) on right side of filenames

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7F1. JCL/COBOL conversions using Your files

JCL converter control file

Before you run 'jcl2ksh51A', you should review the JCL converter control file. You can see the entire file listed at MVSJCL.htm#3E1. Here are the 1st 100 lines. Line 1 contains several options which you may wish to change.


 vi ctl/jclunixop51   <-- investigate JCL converter control file
 ==================

 jclunixop51:a1b2c0d3e2f3g1i1j0k3l50m4n3o0p0r0s0t1u1v3w0x0y1z0 #<-- options
 #           =================================================
 # jclunixop51:a1b2c0d1e2f3g1i1j7k3l50m4n3o0p1r0s0t1u1v3w0x0y1z0 #Java j7
 #            ==================================================
 # Sears: d1 drop DDNLIB(not LOAD), j7 for Java,
 #        v3 inhibit DELETE via IDCAMS & DISP=(MOD,DELETE) (temp for debug ?)
 #
 # Note - separate file $UV/ctl/jclunixop53 for AIX COBOL vs Micro Focus
 # jclunixop53:a1b2c0d3e2f3g0i1j0k3l50m4n3o0p0r0s0t1u1v0w0x0y1z0 #AIX COBOL g0
 #           ===================================================
 #  a1                           - append 1 on COBOL reserved word DDNAMES
 #    b1                         - generate blank line between steps
 #    b2                         - insert stepctl51 (mandatory as of Feb08/12)
 #      c1                       - program names UPPER case
 #      c2                       - filenames UPPER case (also uop=l2 jcldata52)
 #      c4                       - control card modulenames UPPER case
 #        d1                     - drop DDNAMES that begin/end with LOAD/LIB
 #        d2                     - drop DSNAMES that begin/end with load/lib
 #          e1                   - echo run command to test script w/o programs
 #          e2                   - option '-v' on cp & mv echo to console log
 #            f1                 - copy FTP commands from lib module to instream
 #            f2                 - use FTP option '-u' to inhibit authorization
 #              g0               - create new GDG's in $RUNDATA/subdir/gdgfile_
 #              g1               - new GDGs $JGDG relative move to subdir/ at EOJ
 #              g2               - new GDGs $JGDG absolute $RUNDATA/jobtmp/...
 #                 i1            - use datactl53I Indexed file for recsz,keys,etc
 #                 i0            - will try to load datactl53I into memory table
 #                   j1          - generate cmd line for JAVA (vs COBOL)
 #                   j2          - include -DDDNAME=$DDNAME for each file in step
 #                   j4          - special convert IKJEFT01, see MVSJCL.doc
 #                     k1        - FTP: insert 'open' prior to 1st line if IP#
 #                     k2        - FTP: insert 'user' prior 1st word if not cmd
 #                       l50     - limit SYSIN/SYSTSIN lines shown in script
 #                          m0   - generate exportfile modules original filename
 #                          m1   - redirect modules to $RUNDATA vs $RUNLIBS dflt
 #                          m2   - redirect SYSIN modules to $RUN____/parms/...
 #                          m4   - redirect ALL modules to $RUN____/parms/...
 #                          m8   - show original filename prior to $RUN____/parms
 #                            n0 - unrecognized JCL passed thru as is
 #                            n1 - unrecognized JCL cmntd out with '#?' cols 1-2
 #                            n2 - if any '=' present, convert any ','s to ';'s
 #                            n3 - if n2 & no '=', cmnt out with '#?' cols 1-2
 #                            n4 - convert unrecognized JCL to instream data
 #                          o1   - remove 1st segment of DDName overrides
 #                        p1     - drop 's' on parms (parm,qj,ezt,tdsql,orasql)
 #                      r0       - gen cobrun, executes .int's & allows animation
 #                      r1       - gen runw for .ints NetExpress/Windows
 #                      r2       - assume executable programs either unix/windows
 #                      r4       - assume executables in PATH (progname only)
 #                      r8       - generate 'findexec' Multi-Level program search
 #                      r16      - generate 'unikixvsam $RLX/COBOLX'
 #                      r32      - generate Natural call (natsec batch ...)
 #                    s1         - convert SORT for SYNCSORT (not uvsort)
 #                  t1           - disabled, see TOPNODE table & TOPDIRINSERT
 #                u1             - use uvcp for IEBGENER/IDCAMS REPRO (vs cp)
 #                u2             - use uxcp/uxsort (vs uvcp/uvsort) for IDX3/8
 #              v1               - comment #rm DELETE via IDCAMS DELETE
 #              v2               - comment #rm DELETE via DISP=(OLD/SHR/MOD,DEL)
 #            w1                 - generate 'unikixbld -i -d $KIXDATA/filename'
 #            w2                 - insert $RUNDATA on exportfile/gen for unikix
 #          x#                   - make all indexed output files IDXf# (1,3,4,8)
 #        y1                     - generate oprtr prompt to acknowledge Abterms
 #      z1                       - custom for DST, make topnode $SYMBOL no/sep
 # ----------------------------------------------------------------------------
 # Note re w2 - use sfun/jobset52 if you use w2
 #            - $RUNDATA/... inserted on export JTMP, RPTS,& SYOT
 # ------------------------------------------------------------------------
 # uvadm/ctl/jclunixop51 - control file for MVS JCL to Korn shell converter
 # - must copy/modify to ctl/ subdir where jclunix converter executed
 # ------------------------------------------------------------------------
 # Following lines will be inserted in scripts until :ENDINSERT
 # - except for '# ' comment (col1 '#', col2 ' ' blank)
 # '#!/.......' is 1st line output - usually '#!/bin/ksh' or '#!/bin/ksh93'
 #!/bin/ksh
 export JOBID2=JOBIDX jobid2=jobidx; scriptpath="$0"; args="$*"
 if [[ -z "$JOBID1" ]]; then export JOBID1=$JOBID2; fi
 for arg in $args; do if [[ "$arg" == *=* ]]; then export $arg; fi; done
 integer JCC=0 SCC=0 LCC=0  # init step status return codes
 autoload jobset51 jobset52 jobend51 jobabend51 logmsg1 logmsg2 stepctl51
 autoload exportfile exportgen0 exportgen1 exportgenall exportgenx
 . $APPSADM/env/stub.ini  #<-- for control-M (see notes in env/stub.ini)
 jobset51  # call function for JCL/script initialization
 goto
 S0000=A
 :ENDINSERT: - above non #comment lines inserted at begin output scripts
 # jobset51 (Micro Focus) OR jobset53 (AIX COBOL) inserted at begin each script
 # - sets up job environment: export subdirs, setup printer subdir/date
 # - RUNDATA & RUNLIBS must have been exported (in .profile or in shell)
 # - .profile must "export FPATH=$RUNLIBS/sfun" to find functions
 # - autoload declares functions called by jcl/scripts
 # - stores any restart step# in alias 'goto' (last line inserted above)
 #
 #------------------ general purporse search/replace tables ------------------
 # REPTBL1 - replace any pattern on any INPUT (JCL before conversion to script)
 # - entries must be tidle filled & table ended by a line of all tildes
 # 01-30=search pattern, 31-60=replace pattern, 61-80=qualifier pattern
 #
 :REPTBL1:     search/replace table for input IBM JCL
 oldpattern~~~~~~~~~~~~~~~~~~~~newpattern~~~~~~~~~~~~~~~~~~~~qualifier~~~~~~~~~~~
 .DSN=~~~~~~~~~~~~~~~~~~~~~~~~~.,DSN=~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ----> 1st 100 lines of 250, see entire file listed at MVSJCL.htm#3E1

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7G1. converting Your JCL/COBOL/DATA vs UV Software demo

JCL conversion to Korn shell scripts

Script 'jcl2ksh51A' performs all steps for conversion of all files in the directories of JCLs, PROCs,& Parms. Here is an illustration of the conversions thru several subdirs. Initial subdirs of mainframe files are jcl0,proc0,& parm0. The converted JCL/scripts are in 'jcls' which may read SYSIN files from 'parms'. The intermediate subdirs (jcl1,jcl2,jcl3) may be dropped when conversion is complete & the systems are ready for production.

 proc0 -------> procs    parm0 -------> parms
       cleanup                 cleanup
 jcl0 -------> jcl1 -----------> jcl2 -------------> jcl3 ------------> jcls
      cleanup       PROC expand      convert to ksh      manual copy 1 at a time
                                                         when ready to test each

Script 'jcl2ksh51A' does everything. If you have problems, you might want to use the 'step by step' method to better understand & to detect errors sooner. See MVSJCL.htm#4K1 thru 4K5.

'jcl2ksh51A' was also run in Part_3 & the console log was listed starting at page '3E3'. Note the prompts & replies. I have === underlined the prompt replies you should make.


 #1. jcl2ksh51A all    <-- convert ALL JCL thru all steps, as illustrated below
     ==============      - reply null (take default) at all prompts
                         - or reply 'y' for prompts that demand a y/n response

control file prompt 'I' or 'E' response

If the LISTCAT info from the mainframe was converted into control file ctl/datacat52 (as on page '7E1') you should reply 'E' (vs 'I') to the "create control file prompt". 'I' would Init all control file components and 'E' accepts Existing control files. You would have to init any control files not present. Easiest was is to run once with 'I' then recopy ctl/datacat52 & rerun with 'E' response.

Alternative for AIX COBOL


 #1a. jcl2ksh53A all
      ==============

Use 'jcl2ksh53A' vs 'jcl2ksh51A' if the JCL being converted is intended to execute AIX COBOL vs Micro Focus COBOL. For AIX COBOL, we generate a call to the linked program vs the .int for Micro Focus. The GDG file handler is different for AIX, some file types require a TYPE- prefix on the exportfile.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7H1. converting Your JCL/COBOL/DATA vs UV Software demo

Converting Mainframe COBOL to Unix/Linux

'cnvMF51Ac' will perform all steps of the copybook conversion & 'cnvMF51A' will perform all steps of the COBOL program conversion. Here is an illustration of the conversion steps from inital subdirs (cbl0 & cpy0) thru intermediate subdirs to the final results in cpys & cbls.

 cpy0 ---------> cpy1 ---------> cpy2 ----------> cpys
       cleanup         convert         copy(cp)
 cbl0-------->cbl1-------->cbl2------->cbl3------->cbl4------->cbls-------->cblx
      cleanup      convert      sysin1     sysout1       copy       compile
                               |--------optional-------|

 #1. cnvMF51Ac all <-- convert copybooks thru all steps, as illustrated above
     ============   - reply null (take defaults) or reply 'y' if y/n demanded

 #2. cnvMF51A all  <-- convert COBOL programs thru all steps, as illustrated above
     ===========    - reply null (take defaults) or reply 'y' if y/n demanded
                    - 1 exception, reply 'n' when asked to run 'cobfil55'

If problems occur, you should use the 'step by step' method which is documented at MVSCOBOL.htm#1D1 thru 1D3, because you will be better able to detect & fix any problems that may occur.

Alternative for AIX COBOL


 #1a. cnvAIXcblAc all <-- convert copybooks for AIX COBOL
      ===============

 #2a. cnvAIXcblA all  <-- convert COBOL programs for AIX COBOL
      ==============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7H2. converting Your JCL/COBOL/DATA vs UV Software demo

compiling the COBOL programs

Script 'mfcblA' is provided to compile all programs in the COBOL source subdir 'cbls' (using copybooks in 'cpys'), storing compiled executable programs in 'cblx'. Here is the commands & the console log from compiling the your COBOL programs.


 #1. cp cbl2/* cbls  <-- copy all converted COBOL programs to COBOL source dir
     ==============    - initial convert/compile only
                       - don't do on reconvert if you need to save some cbls/...

 #2. mfcblA all      <-- compile all programs for Micro Focus COBOL
     ==========          input from subdir cbls, output to cblx:
                         (.int, .idy, .err,& .cbl copy for animation)
                       - If problems see MVSCOBOL.htm#1D4 for more information.

 #3. mfcbl1 program.cbl  <-- compile any 1 program  for Micro Fcus COBOL
     ==================      from cbls/... to cblx/...

Alternative for AIX COBOL


 #2a. aixcblA all          <-- compile ALL programs for AIX COBOL
      ===========

 #3a. aixcbl1 program.cbl  <-- compile any 1 program for AIX COBOL
      ===================

compile called programs & archive for linking AIX COBOL

The compile scripts for Micro Focus compile only to a .int (interpretive) vs linked to an executable. Any called programs will be handled OK at execution time.

But the scripts for AIX COBOL do compile & link to an executable. Any called programs must be archived and provided to the AIX compile/link step. See documentation at page '8I3'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7H3. converting Your JCL/COBOL/DATA vs UV Software demo

compile failure analysis


 #4. mismatch1 cbls cblx   <-- display list of failing programs
     ===================

'mismatch1' is a general purpose script that can be used in many situations. We know there should be an output in cblx/... for each input in cbls/... The inputs have suffix .cbls & the output executables have no suffix, but the 'mismatch1' script removes the input suffix & looks for the base filename in the output subdir. For Micro Focus we would specify arg3 '.int' which is the suffix in the output subdir for Micro Focus.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7J1. converting Your JCL/COBOL/DATA vs UV Software demo

cleanup TeraData SQL parameters

Some sites may have Databases such as TeraData & the SQL parameters (load tables, unload tables, etc) were maintained in separate libraries on the mainframe & will also be on unix/linux.

TeraData uses 3 programs (BTQMAIN/bteq, FASTLOAD,& MLOAD). FASTLOAD parms needed a modification for DDNAME=INFILE. The unix version of FASTLOAD required any 'DECIMAL' fields to be converted to 'varchar' with length = digits+decimals+2 A uvcopy job 'TDFLcnv1' was written to handle this in Jan 2012.

cleanup tdsql0 --> tdsql1 --> tdsqls


 #1. mkdir tdsql0 tdsql1 tdsqls tdsql1FL tdsqlsFL
     ============================================
     - make subdirs required for TeraData parms conversions

 #2. copy mainframe TeraData SQLs into tdsql0/...

 #3. uvcopyx cleanup tdsql0 tdsql1 uop=q0i7g8n5t1
     ============================================
     - g8 clears 73-80, n5 renames as 1st .node in lower case
       & t1 translates contents to lower case except in quotes

 #4. uvcopyx TDcnv2 tdsql1 tdsqls uop=q0i7
     =====================================
     - convert all TD parms .goto/.label with numeric prefix
     - will then select FASTLOAD parms, modify,& overwrite in tdsqls/...

 #5. uvcopy scand1,fild1=tdsqls,fild2=tdsql1FL,arg1=ddname=,uop=q0w1
     ===============================================================
     - select FASTLOAD parms to separate subdir tdsql1FL/...
       via pattern 'ddname=' known to be unique to FASTLOAD parms

 #6. uvcopyx TDFLcnv1 tdsql1FL tdsqlsFL uop=q0i7
     ===========================================
     - special conversion for FASTLOAD parms
     - convert DECIMAL(9,2) to varchar(13), etc

 #7. cp tdsqlsFL/* tdsqls
     ====================
     - copy converted FASTLOAD parms to subdir used by JCL/scripts

In addition to converting DECIMAL to varchar, the FASYLOAD parms require another change, which cannot be performed ONCE at conversion time, but must be performed dynamically when the JCL/scripts are executed.

The unix version of FASTLOAD does not expand 'ddname=INFILE' to the actual datafilename & the JCL converter has been modified to handle this. Must be handled dynamically at run time (vs conversion time) because the INFILE could be a GDG file.

A uvcopy job 'ddnamex1' was written to handle this. It is called before each fastload in the converted JCL/scripts.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7K1. Preparations to Execute JCL/COBOL

select QuikJobs from parms & convert to uvcopy

       select QuikJobs      cleanup        convert          copy
 parms --------------> qj0 ---------> qj1 ---------> qj2 -----------------> qjs
          qjselect1         cleanup       quikjob2       (protect reconvert)

 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. uvcopy qjselect1,fild1=parms,fild2=qj0
     ======================================
     - select QuikJob modules to separate library

 #4. uvcopyx cleanup qj0 qj1 uop=q0i7g8n5t1
     ======================================
     - clear 73-80, lowercase, rename as 1st node lower (to match JCL)

 #5. uvcopyx quikjob2 qj1 qj2 uop=q0i7
     =================================
     - convert QuikJob code to uvcopy code

 #6. cp  qj2/*  qjs
     ==============
     - copy to execution subdir (JCL/scripts call from qjs/...)
     - make any manual changes in qjs/... (not qj2)
     - protects edited jobs from mass reconverts

7K2. select EasyTrieves from parms & convert to uvcopy

       select EasyTrieves      cleanup         convert         copy
 parms -----------------> ezt0 -------> ezt1 ----------> ezt2 --------> ezts
          ezselect1            cleanup        ez2uvcopy          cp

 #3. uvcopy ezselect1,fild1=parms,fild2=ezt0
     ======================================
     - select easytrieve jobs from parms to separate subdir ezt0

 #4. uvcopyx cleanup ezt0 ezt1 uop=q0i7g8n5t1
     ========================================
     - clear 73-80, lowercase, rename as 1st node lower (to match JCL)

 #5. uvcopyx ez2uvcopy ezt1 ezt2 uop=q0i7
     ====================================
     - convert all easytrieves to ezt2/...

 #6. cp ezt2/* ezts/
     ===============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7L1. JCL/COBOL test/demo Cross-References

create Cross-References & Statistics

See Part_4 for the full documentation, including sample reports which will give you an understanding of how useful these reports will be during your conversion.

xrefall - create all JCL/COBOL cross-refs


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. xrefall cbls jcl3 ksh    <-- create all cross-ref reports
     =====================
Note
  • see sample crossref reports in Part_4.

create stats, table summary counts of JCLs,programs,etc


 #3. mkdir stats         <-- make subdir for reports
     ===========

 #4. uvcopy statmvsjcl1  <-- create stat reports for MVS JCL
     ==================

 #5. uvcopy statksh1     <-- create stat reports from Korn shell scripts
     ===============

 #6. uvcopy statcbl1     <-- create stat reports from COBOL programs
     ===============

 #7. vi stats/*          <-- view stat reports
     ==========

 #8. uvlpd12 stats       <-- print all reports
     =============           OR print only desired reports
                           - most stats/reports short
                           - BUT, filename reports could be very long
Note
  • see sample crossref reports on page '4J1'.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7M1. Preparations to Execute Your JCL/COBOL

creating the gdgctl file

Before you can execute any JCL/scripts, you must create the GDG control file. 'ctl/gdgctl51I' is an Indexed file that is accessed by GDG functions (exportgen0, exportgen1,& gdgupab1) to supply the number of generations for each data file & also to record a history of the last 14 accesses or errors).

Please study MVSJCL.htm#Part_5 for complete details. Here is the minimum instructions with few explanations.

Utility job 'jcldata56' will read all JCL/scripts, extract all filenames & sort with data reduction to 1 line per unique filename. The output file is then reformatted into the gdgctl layout & loaded into the Indexed file by 'gdgload1'.

You must have already converted the JCL since this job reads the converted scripts from subdir jcl3/... (vs original mainframe jcl0/...)


 #1. login mvstest2 --> /usr/home/mvstest2
          --- OR ---
 #1a. login --> your homedir

 #2. cdl     <-- alias cdl='cd $RUNLIBS' --> cd testlibs
     ===

 #3. uvcopy jcldata56,fild1=jcl3,filo2=ctl/datafiles56
     =================================================
     --> no need to enter this long command, see short alternative below:

 #3a. uvcopy jcldata56   <-- same as above (files default as shown above)
      ================     - sample output shown below

 #5. cp ctl/datafiles56 $RUNDATA/ctl/gdgctl51
     ========================================
     - copy/rename from $RUNLIBS/ctl to $RUNDATA/ctl
Note
  • GDG control files in $RUNDATA to allow multiple $RUNDATA's

 #6. cdd  (alias cdd='cd $RUNDATA') --> /home/mvstest/testdata
     ===

 #7. vi ctl/gdgctl51    <-- edit to modify no of generations as desired
     ===============

 #8. uvcopy gdgload1,fili1=ctl/gdgctl51,filo1=ctl/gdgctl51I
     ======================================================
     - load Indexed file to supply file info to JCL converter

 #8a. uvcopy gdgload1   <-- same but easier (files default as shown above)
      ===============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7M2. Preparations to Execute Your JCL/COBOL

Alternate location for GDG control file

The location of the GDG control file is determined by the common_profile (stored at /home/appsadm/env/common_profile & called by .profile or .bash_profile). Here are lines 61-64 of $APPSADM/env/common_profile.

 export GDGCTL=$RUNDATA/ctl       #<-- default location
 # export GDGCTL=$APPSADM/ctl     #<-- could change to this ?
 #Mar14/12 - allow gdgctl51I.dat/.idx & GDGmkdirs to be located anywhere
 # - vs $RUNDATA/ctl, see doc at www.uvsoftware.ca/mvsjcltest.htm#3I1 &/or 7M1

If you have multiple RUNDATA directories you might want to activate 'export GDGCTL=$APPSADM/ctl' & #comment out 'export GDGCTL=$RUNDATA/ctl' so you would have only 1 GDG control file vs multiple.

If you followed the instructions on the page above, you could now copy the GDG control files to $APPSADM as follows (assuming you are in $RUNDATA).


 #1. cp ctl/gdgctl51* $APPSADM/ctl
     =============================
     - GDG control file created/edited on page '3I1' or '7M1'

 #2. cp ctl/GDGmkdirs $APPSADM/ctl
     =============================
     - script to make GDG subdirs in $RUNDATA/jobtmp/GDG
     - previously copied to $RUNDATA/ctl by copymvsctls on page '3D1' or '7D2'

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7N1. Executing Your JCL/COBOL

Execute JCL/scripts


 #1. login mvstest2 --> /home/mvstest2
          --- OR ---
 #1a. login --> your homedir

 #2. cdd   --> $RUNDATA ($HOME/testdata), alias cdd='cd $RUNDATA'
     ===

copy scripts from converter outdir to execution dir


 #3a. cp jcl3/yourjob.ksh jcls <-- copy just 1 script to execution subdir jcls/
      ========================
      --> OR copy ALL as follows:

 #3b. cp jcl3/* jcls  <-- copy All converted scripts to execution subdir jcls/
      ==============    - OK here for VU test/demo, NOT for "real conversion"

You should NOT copy all jcl3/* jcls/ for your "real conversion" project. For your real conversion project, you should copy 1 script at a time when you ready to start test/debug on each script. This is an easy way to keep track of your progress (jcls/... are debugged, jcl3/... not yet)

Another reason NOT to copy all jcl3/* jcls/ when JCL/scripts re-converted:

You might copy all jcl3/* to jcls/ since would be a limited number, But should not do for your real conversion project.

Note
  • we recommend you execute the scripts from the testdata DATA subdir
  • so you can easily inspect the output reports

 #4. joblog yourjob.ksh    <-- run scripts collecting logs in joblog/...
     ==================

 #5. vi joblog/yourjob.ksh  <-- inspect log files
     =====================    - see sample log files at '3L1' +

 #6. l data      <-- list data subdir to see outputs
     ======

 #7. uvhd data/yourdatafile r999
     ===========================
     - use uvhd to inspect datafiles without LineFeeds
       & with packed/binary fields

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7O1. MVS JCL Conversion Go Ahead

Considerations for "real conversion" vs POC

Part3
  • conversions using UV Software demo JCL
  • illustrated Operating Instructions
Part7
  • concise Op. Instrns. to transfer/convert ALL your JCL/COBOL/DATA
Part8
  • select samples of YOUR JCL/COBOL/DATA for POC
  • optimize conversions on smaller sample of your JCL/COBOL/DATA

Overview of Conversion & Testing plans

  1. UV Software has completed the Vancouver Utilities training course.

  2. Conversion team members have a login on the Unix/Linux system, and have performed the test/demo/training conversions/executions in their homedirs ($HOME/testlibs & $HOME/testdata) or /home/mvstest1/testlibs & /home/mvstest1/testdata).

  3. User 'mvstest1' was used to convert/execute a sample set of JCL's selected from UV Software supplied demo JCL (in /home/uvadm/mvstest/testlibs/jcl0/). Converting & executing these supplied samples will helped you get familiar with the conversion procedures & your results were compared to those listed in Part_3.

  4. Use '/home/mvstest1/testlibs' if the POC team is working together. Could use $HOME/testlibs if team members want to work independently for initial self-training & to get familiar with the conversion & testing procedures.

  5. User 'mvstest2' to receive ALL your JCL/COBOL/DATA from mainframe to unix & store in /home/mvstest2/ALLtestlibs/jcl0,proc0,parm0,cbl0,cpy0 & convert to jcls,procs,parms,cbls,cpys, and compile to cblx. Store DATA files in /home/mvstest2/ALLcnvdata/d1ebc for convert to d2asc.

  6. If high volumes & large files use a file system bigger than /home allows. Might be a good idea to separate libraries & data since data much bigger. For example might use /p1/apps/ALLtestlibs & /p2/apps/ALLtestdata. '/p1' & '/p2' would be separate file systems with lots of capacity, especially /p2 for the data files which can be very large at many sites.

  7. Select a set of JCL for a POC or Phase 1 conversion of a small set of JCL/COBOL/DATA. Setup superdirs POCtestlibs, POCtestdata, POCcnvdata. See Part_8 for automated methods of selecting required PROCs, PARMs, COBOL programs & copybooks using crossreferences from the selected set of JCLs.

  8. Use experience in converting small set to optimize the conversions for the larger sets to come.

  9. Note that for real conversion, it is important that all programmers work on the 1 common set of testlibs/JCL & not in their homedirs (unless possibly each programmer works on a different system).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Considerations for "real conversion" vs POC

  1. During testing, each programmer can still have his own set of testdata, so his test files are not modified by other programmers running their tests. $RUNDATA can define the data superdir in the programmers homedir, but $RUNLIBS would define the common set of JCL/COBOL libraries to prevent multiple versions of JCL/programs.

  2. Note that this flexibility of using different sets of testlibs & testdata is achieved by defining environmental variables RUNLIBS & RUNDATA in the profiles of the various programmers, for example:
      export RUNLIBS=$HOME/testlibs
      export RUNDATA=$HOME/testdata
                       --- or ---
      export RUNLIBS=/home/mvstest1/testlibs
      export RUNDATA=/home/mvstest1/testdata
                       --- or ---
      export RUNLIBS=/p1/apps/testlibs
      export RUNDATA=/p2/apps/testdata
  1. For later production, we will copy JCL/script libraries & data files to the production machine & change the names of testlibs & testdata to 'prodlibs' & 'proddata'. We will then change the definitions of RUNLIBS/RUNDATA in operator profiles & appsadm profile for cron jobs to:
      export RUNLIBS=/p1/apps/prodlibs
      export RUNDATA=/p2/apps/proddata
  1. Using $RUNLIBS & $RUNDATA in profiles & in function jobset51 (called on line 10 of all converted JCL/scripts) mean that you never have to modify the JCL/scripts when used by different programmers or between test & production environments.

  2. We assume All JCL/PROCs/Parms (& COBOL programs & copybooks) have been transferred to unix/linux & stored somewhere accessible to team members (might be /home/mvstest2/testlibsALL/jcl0,proc0,parm0). If very large, team members might copy subsets/subsystems to /home/mvstest2/testlibs/jcl0,proc0,parm0 or to their homedirs $HOME/testlibs/jcl0,proc0,parm0.

  3. We assume enough DATA has been transferred to test a few JCLs selected for the initial training exercise or POC. The DATA files might be stored in /home/mvstest2/testdata/data/... or $HOME/testdata/data. If data files are very large they should not be in homedirs, but rather in a separate file system (such as /p2/apps/testdata/data).

  4. Note that initial JCL/script testing will probably discover problems in the JCL conversion (unique to the site), that can be corrected. Then we can re-convert all JCL to greatly reduce any manual changes that might be required in the vast majority of JCL/scripts yet to be tested.

  5. Conversion Team members can make a valuable contribution by discovering conversion problems & suggesting conversion enhancements to UV Software.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Considerations for "real conversion" vs POC

  1. Team-members can continue to have their own set of testdata in their homedir/testdata/... to avoid conflicts while testing. Note that the data superdir is defined by environmental-variable 'RUNDATA' in .profile.

      export RUNDATA=$HOME/testdata           <-- for individual training/testing
      =============================
      export RUNDATA=/home/mvstest2/testdata  <-- for later serious testing
      ======================================
  1. You should have a clear understanding of the JCL conversion subdirs.
 jcl0 ------> jcl1 ----------> jcl2 -------------> jcl3 ------------> jcls
      cleanup      PROC expand      convert to ksh      manual copy 1 at a time
                                                        just before test/debug
  1. We convert all JCL automatically from original mainframe JCL in jcl0/... thru to jcl3/... Team members should copy JCL/scripts 1 at a time manually from jcl3/ to jcls/ just before ready to test/debug each JCL/script.

  2. This allows us to automatically reconvert the vast majority of the JCL as team members discover problems & suggest improvements that can be made to the JCL converter, without losing any extensive editing made to the JCL/scripts in jcls/...

  3. Note that converted scripts are executed from jcls/... which is in the PATH defined in the profiles, for example:

      export PATH=$PATH:$RUNLIBS/jcls
      ===============================
  1. Using $RUNLIBS makes it easy to change our execution library from homedirs to a common library, as explained above without ever having to modify JCL/scripts for different directories (or production vs test).
Note
  • Please re-read & understand this overview/plan before proceeding to the
    real conversion.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7P1. MVS JCL Conversion Go Ahead

Modify RUNLIBS & RUNDATA in profiles

The supplied stub_profile (copied to user profiles in their homedirs) defines RUNLIBS/RUNDATA as follows:


 export RUNLIBS=$HOME/testlibs
 #============================
 export RUNDATA=$HOME/testdata
 #============================

These definitions work well for the JCL conversion test/demo & training, but you should modify for your real conversions depending on where you plan to store your complete set of JCLs, COBOLs, & Data files. For example:

export RUNLIBS=/p1/apps/testlibs <-- in programmer profiles export RUNDATA=/p1/apps/testdata

export RUNLIBS=/p2/apps/prodlibs <-- in operator profiles export RUNDATA=/p2/apps/proddata

copy 'stub' profiles to homedirs

If desired, you could setup master copies of the stub_profile for programmers & operators & copy them to the homedir of your programmers & operators, renaming as .bash_profile for bash (or .profile for ksh).


 #13a. cp env/stub_profile_test /home/prgmr1/.bash_profile
       ===================================================
       ... etc for other programmers ...

 #13b. cp env/stub_profile_prod /home/oper1/.bash_profile
       ==================================================
       ... etc for other operators ...

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

7P2. MVS JCL Conversion Go Ahead

copy .bashrc/.kshrc to homedirs


 #14. cp env/bashrc /home/user1/.bashrc
      =================================
 #14a. cp env/kshrc /home/user1/.kshrc
       ===============================
      ... etc for other users (programmers & operators) ...

.bashrc/.kshrc should be copied to the homedirs of any programmers & operators who might use 'console logging' (see ADMjobs.htm#Part_6). Console logging is activated by uncommenting the 'script' command at the end of the profile. 'script' is another level of the shell which causes any 'aliases' & 'umask' in the profile to be lost.

See .bashrc/.kshrc listed at ADMjobs.htm#1C3. It contains the same aliases & umask as the common_profile (listed at ADMjobs.htm#1C2).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_8 converting YOUR JCL/COBOL/DATA for POC & Go Ahead

Part 8 - Contents


8A1. JCL/COBOL POC select/convert
- selected JCL/COBOL/DATA to be copied to 'POC2' dirs

8A2. max complement of testlibs subdirs for conversion

8A3. Problems selecting/converting files
- Plans for selecting/converting files

8B1. Setups to convert selected POC JCL/COBOL

8B2. copy/modify control files for JCL & COBOL conversion

8B3. search/replace table for AIX COBOL

8C1. why initially select converted jcl3 & cbls vs jcl0 & cbl0 ?

8C2. initially select converted jcl3 & cbls for crossrefs

8D1. create script to select COBOL programs required
- sample crossref: COBOL programs called by JCL/scripts
- xref2cp1 - create selection script from crossref

8D2. output script to select cbls programs
- execute script to select desired cbls programs

8E1. run xrefall & generate all scripts to select '0' components
- generate all copy/select scripts
- notes re xef2cpA

8E2. generated scripts to select all components

8E3. execute scripts to select all components
- console log from runall sf

8E4. list selected files

8E5. xref2cpA - generate all copy/selects from crossrefs

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part 8 - Contents (continued)


8H1. JCL conversion to Korn shell scripts

8I1. Converting Mainframe COBOL to Unix/Linux
- for Micro Focus COBOL
- Alternative for AIX COBOL

8I2. Compiling the COBOL programs
- for Micro Focus COBOL
- Alternative for AIX COBOL

8I3. Compile called programs & archive for linking AIX COBOL
- create script to select all called programs
  using crossref of called programs vs calling programs

8I4. Create script to select copybooks
- compile POC2 programs & link with called program archive
- determine AIX compile failures

8I5. AIX compile failure analysis.
- table summary of Error codes & descriptions

8J1. create Cross-References & Statistics
- xrefall - create all JCL/COBOL cross-refs
- create stats, table summary counts of JCLs,programs,etc

8L1. recreate LISTCAT control file ctl/datacat52 and
re-convert JCL with reply 'E' accept Existing control files

8M1. determine DATA-FILEs required for POC2 tests
- sample crossref: DATA FILEs & calling JCLs

8M2. output script to select DATA-FILEs
- DUPLICATES due to new GDGs created in $JGDG tmpdirs

8N1. create the GDG control file
- isolate/fix TeraData SQL parameters
- select QuikJobs from parms & convert to uvcopy
- select EasyTrieves from parms & convert to uvcopy

8O1. Execute POC scripts
- copy scripts from converter outdir to execution dir

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8A1. MVS JCL/COBOL/DATA conversion

JCL/COBOL POC select/convert

Most conversions should begin with a POC (Proof Of Concept) conversion, or it might be a phase1 conversion of a subset of the JCL/COBOL/DATA that we wish to convert & prove it works before we move on to the entire project.

We will assume that All the JCL/COBOL/DATA has been transferred from the mainframe to unix/linux & is stored in the following directories:

 /home/mvstest    <-- userid mvstest to store files or could be
 :     :              wherever RUNLIBS/RUNDATA/CNVDATA defined in profiles
 :-----ALLtestlibs  <-- ALL JCL/COBOL transferred from mainframe
 :     :-----cbl0     - COBOL programs
 :     :-----cpy0     - COBOL copybooks
 :     :-----jcl0     - JCL
 :     :-----parm0    - Parms (SYSIN modules)
 :     :-----proc0    - PROCs
 :     :
 :-----ALLcnvdata   <-- DATA files
 :     :-----d1ebc    - EBCDIC data files (FTP binary)
 :     :-----d2asc    - will convert to ASCII here
 :     :
 :-----ALLtestdata  <-- sample DATA files for user self-training
 :     :-----data     - copy converted files here for testing

selected JCL/COBOL/DATA to be copied to 'POC2' dirs

 :-----POC2testlibs  <-- ALL JCL/COBOL transferred from mainframe
 :     :-----cbl0      - COBOL programs
 :     :-----cpy0      - COBOL copybooks
 :     :-----jcl0      - JCL
 :     :-----parm0     - Parms (SYSIN modules)
 :     :-----proc0     - PROCs
 :     :
 :-----POC2cnvdata   <-- DATA files
 :     :-----d1ebc     - EBCDIC data files (FTP binary)
 :     :-----d2asc     - will convert to ASCII here
 :     :
 :-----POC2testdata   <-- sample DATA files for user self-training
 :     :-----data       - copy converted files here for testing

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8A2. JCL/COBOL POC select/convert

max complement of testlibs subdirs for conversion

 /home/mvstest         <--- setup user mvstest for testlibs, or use your homedir
 :     :                    or could be anywhere defined by $RUNLIBS in profile
 :-----POC2testlibs    <--- POC2 selected set JCL/COBOL/DATA for Proof of Concept
 :     :--MF--cbl0        - COBOL programs ('*' means files present)
 :     :------cbl1        - cleaned up, cols 1-6 & 73-80 cleared, etc
 :     :------cbl2        - cnvMF5 converts mainframe COBOL to MicroFocus COBOL
 :     :------cbl3        - sysin1 converts instream ACCEPTs to READs from a file
 :     :------cbl4        - sysout1 converts DISPLAY on SYSOUT to WRITE to a file
 :     :---ux-cbls        - copy here (standard source library) before compiling
 :     :------cblst       - cobol source listings from compiles
 :     :------cblx        - compiled COBOL programs (.int's)
 :     :--MF--parm0       - control cards & includes (SORT FIELDS, etc)
 :     :------parms       - control cards with 73-80 cleared
 :     :--MF--cpy0        - for COBOL copybooks
 :     :------cpy1        - cleaned up, cols 1-6 & 73-80 cleared, etc
 :     :------cpy2        - cnvMF5 converts mainframe COBOL to MicroFocus COBOL
 :     :---ux-cpys        - copy here (standard copybook library)
 :     :--UV--ctl         - conversion control files (jclunixop51,cobdirectives)
 :     :------errs        - JCL converter writes ERROR reports here
 :     :--MF--jcl0        - POC JCLs supplied
 :     :------jcl1        - intermediate conversion 73-80 cleared
 :     :------jcl2        - PROCs expanded from procs
 :     :------jcl3        - JCLs converted to Korn shell scripts
 :     :---ux-jcls        - copy here manually 1 by 1 during test/debug
 :     :------maps        - 'cobmaps' record layouts generated from copybooks
 :     :------pf          - uvcopy jobs to replace utilities (easytrieve,etc)
 :     :--MF--proc0       - POC PROCs supplied
 :     :------procs       - will be merged with jcl1, output to jcl2
 :     :------qj0         - QuikJobs selected from parms
 :     :------qj1         - QuikJobs cleanup (73-80 cleared, lower cased)
 :     :------qj2         - QuikJobs converted to uvcopy
 :     :------qjs         - copied to execution subdir (protect reconvert)
 :     :------ezt0        - EasyTrieves selected from parms
 :     :------ezt1        - EasyTrieves cleanup (73-80 cleared, lower cased)
 :     :------ezt2        - Easytrieves converted to uvcopy
 :     :------ezts        - copy to Execution subdir (protect recconvert)
 :     :------sf          - for misc scripts you may wish to write
 :     :------sql0        - SQL scripts (create/load tables,etc)
 :     :------sql1        - cleaned up, lower cased, some conversions required
 :     :------sqls        - JCL/scripts will input from sqls
 :     :------tmp         - tmp subdir used by uvsort & various conversions
 :     :------xref        - cross-references
 --MF-- Marks subdirs to receive files from the MainFrame for conversion
        - COBOL programs, copybooks, JCLs, PROCs, Parms,& data
 --UV-- Marks subdirs containing UV Software control files
        - required for control files required for conversions or executions
  ---ux-  marks the outputs of the conversion
          most other subdirs can go away after the conversion is complete

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8A3. JCL/COBOL POC select/convert

Problems selecting/converting files

  1. We will assume all COBOL progams, copybooks, JCL, Procs,& Parms have been FTP'd text mode (converts to ASCII).

  2. Data files must be FTP'd binary, but are not usually transferred yet. The plan is to determine the data files required for POC/Phase1 and to transfer & convert only those files at this time.

  3. For the POC/Phase1 project, we will define a set of JCL to be included and then select all other required components.

  4. The BIG PROBLEM is how to determine the other components required and the Vancouver Utilities provides the solution - based on the cross-references we can run from the JCL & subsequently the COBOL.

    Plans for selecting/converting files

  5. This assumes that the mainframe JCL/COBOL/DATA has been transferred & stored as shown above in superdirs (ALLtestlibs, ALLtestdata,& ALLcnvdata).

  6. Setup new superdirs for the JCL/COBOL/DATA desired for the POC/Phase1/etc. We will call these: POC2testlibs, POC2testdata,& POC2cnvdata.

  7. Update the SYS prefix of testlibs,testdata,cnvdata in your .profile. See line 31 in the profile listed on page '1C1'. export SYS="POC2" #<-- prefix for testlibs,testdata,& cnvdata Then logoff & back on to make it effective

  8. We will be selecting components for POC2testlibs/... from ALLtestlibs/... We want to select JCLs from ALLtestlibs/jcl0/..., COBOLs from cbl0/... etc It is better if you have already converted ALLtestlibs/jcl0 to jcl3 & all COBOL to cbls, so we can initially select the already converted jcl3 & cbls, and run 'xrefall jcl3 cbls'. Cross-references based on converted jcl & cobol is more reliable for generating the scripts to copy all components.

  9. We will then use the cross-refs to generate the scripts to copy all original mainframe components to jcl0,proc0,parm0,cbl0,cpy0 so we can reconvert all. This allows us to make improvements to the JCL & COBOL conversions & test them on our small POC subset.

  10. Selecting the JCL is easy, could do manually from the list of desired JCLs or make a script & run it. The Vancouver Utilities has a uvcopy job 'mksfcp1' that will create a script of 'cp' commands from a simple list of names. The I/O directories are given as arguments to the mkfscp1 generation job.

  11. Selecting the required COBOLs could be very difficult, but we have another uvcopy job 'xref2cp1' that reads the crossref xref/xkshprog2 & creates a script of 'cp's to copy from ALLtestlibs/cbl0/... to POC2testlibs/cbl0/...

  12. If we had already converted ALL copybooks, Procs,& Parms, we could just copy all files over from cpys, procs,& parms, but we can also generate scripts to copy only those used by the JCLs or the COBOL programs.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8B1. JCL/COBOL POC select/convert

Setups to convert selected POC JCL/COBOL

Please refer back to the directory diagrams on page '8A1'. We assume you already have transferred ALL the JCL/COBOL into /home/mvstest/ALLtestlibs and now want to setup alternate testlibs for a selected set (POC,Phase1,etc). We will call this 'POC2'.


 #1. Login mvstest --> /home/mvstest
     OR Login yourself --> your homedir

 #2a. mkdir POC2testlibs   <-- make superdir for JCL/COBOL subdirs
      ==================
 #2b. mkdir POC2testdata   <-- make superdir for DATA subdirs
      ==================
 #2c. mkdir POC2cnvdata    <-- make superdir for DATA conversion subdiirs
      ==================

 #3a. vi .bash_profile     <-- edit profile (bash-shell/linux)
      ================
 #3b. vi .profile          <-- edit profile (Korn-shell/unix)
      ===========            - add following 'export's
      export SYS="POC2"    <-- see profile listed on page '1C1'
      export ATL=/home/mvstest/ALLtestlibs
      export ATD=/home/mvstest/ALLtestdata
      export ACD=/home/mvstest/ALLcnvdata
Note
  • above exports allow us to use $ATL, $ATD, $ACD in the scripts
    to copy components 'FROM' ALLtest... $RUNLIBS, $RUNDATA,& $CNVDATA
    can only be used for the 'TO' subdirs

 #3c. Logoff/Logon to make profile change effective

 #4a. cdl          <-- alias cdl='cd $RUNLIBS' --> cd POC2testlibs
      ===
 #4b. mvslibsdirs  <-- setup 30 subdirs for JCL & COBOL conversions
      ===========

 #5a. cdd          <-- alias cdl='cd $RUNDATA' --> cd POC2testdata
      ===
 #5b. mvsdatadirs  <-- setup 12 DATA subdirs for later execution JCL/scripts
      ===========

 #6a. cdc          <-- alias cdl='cd $CNVDATA' --> cd POC2cnvdata
      ===
 #6b. mvsdatadirs  <-- setup 12 DATA subdirs for later execution JCL/scripts
      ===========

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8B2. JCL/COBOL POC select/convert

copy/modify control files for JCL & COBOL conversion


 #1. Login mvstest --> /home/mvstest
     OR Login yourself --> your homedir

 #2. cdl            <-- change back to $RUNLIBS (POC2testlibs)
     ===

 #3. copymvsctls    <-- script to copy control files from /home/uvadm/ctl
     ===========        to $RUNLIBS/ctl/... & $RUNDATA/ctl
                        (see script at $UV/sf/IBM/copymvsctls)
Note
  • If you have already performed JCL/COBOL conversions in ALLtestlibs
  • then copy the control files from ALLtestlibs
  • may have already modified to optimize conversions

 #3a. export ATL=/home/mvstest/ALLtestlibs
      ====================================
      - setup short $SYMBOL to minimize many following copy commands

 #3b. cp $ATL/ctl/* ctl  <-- copy control files (if already optimized)
      =================      (alternative to #3 above)

 #4. l ctl        <-- inspect files copied by copymvsctls
     =======        - jclunixop51,53,cnvcob5.tbl,aixcblrw.tbl,etc

 #5.  vi ctl/jclunixop51   <-- JCL converter options (Micro Focus COBOL)
      ==================

 jclunixop51:a1b2c0d3e2f3g1i1j0k3l20m4n3o0p0r0s0t1u1w0x0y1z0 #Micro Focus
 ===========================================================
 - options on 1st line of 250 line file
 - see option descriptions at MVSJCLtest.htm#3E2

 #5a. vi ctl/jclunixop53   <-- JCL converter options (AIX COBOL version)
      ==================

 jclunixop53:a1b2c0d3e2f3g0i1j0k3l50m4n3o0p0r0s0t1u1v0w0x0y1z0 #AIX COBOL
 =============================================================

 #6. vi ctl/cnvcob5.tbl    <-- COBOL converter control file (Micro Focus)
     ==================      - search/replace table to fix reserved word use
     - see file listed at MVSCOBOL.htm#5B2

 #6a. vi ctl/aixcblrw.tbl  <-- COBOL converter control file (AIX COBOL)
      ===================
      - see search/replace table for AIX COBOL listed on the next page

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8B3. JCL/COBOL POC select/convert

search/replace table for AIX COBOL

 # aixcblrw.tbl - search/replace table for cobol convert job cnvAIXcbl
 #              - AIX COBOL Reserved Word search/replace table
 # also see unixwork3.cpy & unixproc3.cpy at www.uvsoftware.ca/mvscobol.htm#2E1
 # modify or add to this table depending on site requirements
 # to change words that are now reserved in Unix/Linux AIX COBOL compiler
 # trailing ';' in search pattern matches a blank,period,comma,or semicolon
 # 01-30 - search pattern (ended by 1st tilde)
 # 31-60 - replacement pattern (ended by 1st tilde)
 # 61-80 - optional qualifier (61 '=' present, '!' not present, '~' not used)
 #       - qualifier optional, if present it must be on same line as search
 #
  examine ~~~~~~~~~~~~~~~~~~~~~ inspect ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  transform ~~~~~~~~~~~~~~~~~~~ inspect ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  values ~~~~~~~~~~~~~~~~~~~~~~ value ~~~~~~~~~~~~~~~~~~~~~~~= pic ~~~~~~~~~~~~~~
  02  null ~~~~~~~~~~~~~~~~~~~~ 02  null1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  new-page;~~~~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= after ~~~~~~~~~~~~
  top-of-page;~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= after ~~~~~~~~~~~~
  top-of-form;~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= after ~~~~~~~~~~~~
  page-top;~~~~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= after ~~~~~~~~~~~~
  hof;~~~~~~~~~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= after ~~~~~~~~~~~~
  new-page;~~~~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= before ~~~~~~~~~~~
  top-of-page;~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= before ~~~~~~~~~~~
  top-of-form;~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= before ~~~~~~~~~~~
  page-top;~~~~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= before ~~~~~~~~~~~
  hof;~~~~~~~~~~~~~~~~~~~~~~~~~ page;~~~~~~~~~~~~~~~~~~~~~~~~= before ~~~~~~~~~~~
  date written~~~~~~~~~~~~~~~~~ date-written~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  date compiled~~~~~~~~~~~~~~~~ date-compiled~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  suppress.~~~~~~~~~~~~~~~~~~~~. *>suppress.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  initialize ~~~~~~~~~~~~~~~~~~ initialize1 ~~~~~~~~~~~~~~~~~= pic ~~~~~~~~~~~~~~
  move initialize ~~~~~~~~~~~~~ move initialize1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1. There are 2 different search/replace table for Micro Focus & AIX COBOL, but actually the entries depend more on the particular site COBOL coding habits than whether Micro Focus or AIX COBOL.

  2. The idea is to perform the mass compiles (aixcblA instructions later below), analyze the errors (uvcopy cnvaixerrs1),& then modify the search/replace table to fix most prevalent errors.

  3. Alternatively, you might request UV Software to modify the COBOL scrubber if the desired change can not be made via the search/replace table.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8C1. JCL/COBOL POC select/convert

why initial select converted jcl3 & cbls vs jcl0 & cbl0

The plan is to use the JCL crossref to determine the COBOL programs required for our POC2testlibs subset of ALLtestlibs. We cannot use jcl0 to determine COBOL programs required because jcl0 does not have PROCs expanded, so we would miss many COBOL programs called by PROCs.

We could use jcl2 which has PROCs expanded, but even better to use the converted jcl3 because it is better for the crossrefs & can be used for parms crossrefs (jcl2 can not).

This assumes that we have already converted ALL JCL & COBOL as documented in Part_7, so we can copy selected JCL/scripts from ALLtestlibs/jcl3/... to POC2testlibs/jcl3/... and selected COBOL programs from ALLtestlibs/cbls/... to POC2testlibs/cbls.

We will use utility 'mksfcp1' to reformat a list of JCL filenames into a script of 'cp' commands. It will prompt for from & to subdirs if not speccified as arg1 & arg2. It also prompts for options such as uop=t2u2/t1u1 for UPPER/lower case filenames if not specified on command line.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8C2. JCL/COBOL POC select/convert

initial select converted jcl3 & cbls for crossrefs

This assume we have already transferred from the mainframe, all available components to ALLtestlibs/jcl0,proc0,parm0,cbl0,cpy0, and converted to ALLtestlibs/jcl3,procs,parms,cbls,cpys. So we can now select desired POC components from ALLtestlibs/... to POC2testlibs/...


 #1. Login mvstest --> /home/mvstest (or yourself --> homedir)

 #2. cdl           <-- change to $RUNLIBS (POC2testlibs)
     ===

 #3. vi ctl/poc2jcl   <-- edit list of filenames to be copied
     ===============
      JAR100.JCL     <-- sample list of filenames
      JAR200.JCL
      JGL100.JCL
      JGL200.JCL
Note
  • When keying the list of JCLs required, the case & extension
    do not matter, since 'mksfcp1' has options to modify.
  • options 'uop=t1u1' convert to lower case
  • 'arg3=.ksh,arg4=.ksh' change extensions from '.JCL' to '.ksh'
    as required fro JCL/scripts in jcl3/...

 #4. uvcopy 'mksfcp1,fili1=ctl/poc2jcl,filo1=sf/selpoc2jcl3
             ,arg1=$ATL/jcl3,arg2=jcl3,arg3=.ksh,arg4=.ksh,uop=t1u1'
     ===============================================================
     - enclose command in single quotes so $ATL expanded later at run time
     - sample output script sf/mksfcp1 listed below:
      # sf/selpoc2jcl3 - script to copy files from $ATL/jcl3 to jcl3
      #    - using filenames from: ctl/poc2jcl
      #    - created by mksfcp1 at: UV_Software on: 2012/05/14
      cp $ATL/jcl3/jar100.ksh  jcl3
      cp $ATL/jcl3/jar200.ksh  jcl3
      cp $ATL/jcl3/jgl100.ksh  jcl3
      cp $ATL/jcl3/jgl200.ksh  jcl3

 #5. ksh sf/selpoc2jcl3   <-- execute script created above
     ==================

 #5a. l jcl0    <-- check files copied as expected
      =======     - note UPPER case filenames in jcl0/...
      -rwxrwxr-x 1 mvstest apps 2056 May 14 20:28 jar100.ksh
      -rwxrwxr-x 1 mvstest apps 3314 May 14 20:28 jar200.ksh
      -rwxrwxr-x 1 mvstest apps 2442 May 14 20:28 jgl100.ksh
      -rwxrwxr-x 1 mvstest apps 3827 May 14 20:28 jgl200.ksh

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8D1. JCL/COBOL POC select/convert

create script to select COBOL programs required

As previously explained, we will initially select the already converted COBOL programs from ALLtestlibs/cbls/... to POC2testlibs/cbls/... because the converted versions are a better basis for the cross-references from which we will create scripts to copy all the original mainframe components '0' suffixes (cbl0,cpy0,jcl0,proc0,parm0).

We will use the converted JCL/script cross-reference (created from jcl3/...) as the basis to create a script to select the required COBOL programs, because the converted JCL/scripts have PROCs expanded so we can see all COBOL programs.


 #1. Login mvstest --> /home/mvstest (or yourself --> your homedir)

 #2. cdl           <-- change to $RUNLIBS (POC2testlibs)
     ===

 #3. xkshprog2 jcl3   <-- run cross-ref COBOL programs & calling JCLs
     ==============     - using jcl2 (vs jcl0 on later re-run)

sample crossref: COBOL programs called by JCL/scripts

  xkshprog2 ** crossref to show all ksh SCRIPTS executing each PROGRAM **
  Keyword=progid:program  Exclude=~~ Include=~~ Skip=  page#  1
  Directory=/home/mvstest/POC2testlibs/jcl3 Options=q1a16b16c4e0d0g0h1j0l1p0s2w1a16b16c4d8j4l1
  =======================================================2012/05/15_10:48:03
 *car100           jar100.ksh
 *car200           jar200.ksh
 *cgl100           jgl100.ksh
 *cgl200           jgl200.ksh
 *sort_2           jar200.ksh      jgl200.ksh
  **TotalWords: 5, TotalFiles=6, TotalRefs: 6
 ***Total Missing Programs 5 ***

xref2cp1 - create selection script from crossref


 #4. uvcopy 'xref2cp1,fili1=xref/xkshprog2,filo1=sf/selpoc2cbls
             ,arg1=$ATL/cbls,arg2=cbls,arg3=.cbl,arg4=.cbl,uop=t1u1'
     ===============================================================
     - converts COBOL/JCL cross-ref into script to copy COBOL programs
       from ALLtestlibs/cbls/... to POC2testlibs/cbls/...
     - use single quotes to delay $ATL expansion until script run
Note
  • crossref omits suffix from COBOL programs, but files in cbls/* have .cbl
    SO: we need 'arg3=.cbl,arg4=.cbl'
  • 'uop=t1u1' converts filenames to lower case, unnecessary here since
    crossrefs are already lower case
  • see generated copy/select script on the next page -->

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8D2. JCL/COBOL POC select/convert

output script to select cbls programs

 # sf/selpoc2cbls - script to copy files from $ATL/cbls to cbls
 # - created from xref/xkshprog2 by xref2cp1 at: UV_Software on: 2012/05/15
 cp $ATL/cbls/car100.cbl       cbls
 cp $ATL/cbls/car200.cbl       cbls
 cp $ATL/cbls/cgl100.cbl       cbls
 cp $ATL/cbls/cgl200.cbl       cbls
 cp $ATL/cbls/sort.cbl         cbls
Note
  • xref2cp1 creates 'cp' commands for SORT,etc as well as COBOL
  • but will not matter since they will not be found

execute script to select desired cbls programs

Script sf/selpoc2cbls was created above by utility 'xref2cp1' with input from crossref report xref/xmvsprog2 (COBOL programs used by selected JCLs).


 #5. ksh sf/selpoc2cbls   <-- execute script to select desired cbls programs
     ==================

 #5a. l cbls              <-- list results
      ======
      -rw-rw-r-- 1 mvstest apps 1995 May 15 11:00 car100.cbl
      -rw-rw-r-- 1 mvstest apps 2720 May 15 11:00 car200.cbl
      -rw-rw-r-- 1 mvstest apps 2123 May 15 11:00 cgl100.cbl
      -rw-rw-r-- 1 mvstest apps 2521 May 15 11:00 cgl200.cbl

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8E1. JCL/COBOL POC select/convert

run xrefall & generate all scripts to select '0' components

We have selected the converted JCL/scripts from ALLtestlibs/jcl3/... & the converted COBOL programs from ALLtestlibs/cbls/... so we can now run 'xrefall' to generate all cross-references, from which we can generate all the scripts to select the original mainframe components from jcl0,proc0,parm0,cbl0,cpy0.


 #1. Login mvstest --> /home/mvstest (or yourself --> your homedir)

 #2. cdl           <-- change to $RUNLIBS (POC2testlibs)
     ===

 #3. xrefall cbls jcl3 ksh  <-- create all cross-refs in xref/...
     =====================

 #3a. ls xref               <-- list outputs from xrefall
      =======
      xcobcall1 xcobcall2 xcobcopy1 xcobcopy2 xcobfile2 xkshfile1 xkshfile2
      xkshparm1 xkshparm2 xkshproc1 xkshproc2 xkshprog1 xkshprog2

generate all copy/select scripts


 #4. xref2cpA all   <-- super-script to generate all copy/select scripts
     ============

 #4a. ls sf                 <-- list outputs from xref2cpA
      =======
      selpoc2cbl0 selpoc2cpy0 selpoc2data1 selpoc2jcl0 selpoc2parm0 selpoc2proc0

notes re xef2cpA

  1. 'xref2cpA' contains multiple 'xref2cp1' commands to generate copy/select scripts for jcl0,proc0,parm0,cbl0,cpy0,& data. See the script listed on page '8E5'.

  2. You could manually run the various commands separately if you need to modify some of the arguments or observe outputs as they happen.

  3. You can execute all the generated scripts with 1 command 'runall sf' or run the selection scripts separately as desired.
Note
  • see generated scripts on the next page --------->
  • see generated script executions 2 pages ahead -->
  • see generating script xref2cpA 3 pages ahead --->

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8E2. JCL/COBOL POC select/convert

generated scripts to select all components


 #5. more sf/*   <-- display all scripts generated by xref2cpA
     =========

# sf/selpoc2cbl0 - script to copy files from /home/mvstest/testlibs/cbl0 to cbl0 # - created from xref/xkshprog2 by xref2cp1 at: UV_Software on: 2012/05/15 cp /home/mvstest/testlibs/cbl0/CAR100.CBL cbl0 cp /home/mvstest/testlibs/cbl0/CAR200.CBL cbl0 cp /home/mvstest/testlibs/cbl0/CGL100.CBL cbl0 cp /home/mvstest/testlibs/cbl0/CGL200.CBL cbl0 cp /home/mvstest/testlibs/cbl0/SORT.CBL cbl0

# sf/selpoc2cpy0 - script to copy files from /home/mvstest/testlibs/cpy0 to cpy0 # - created from xref/xcobcopy2 by xref2cp1 at: UV_Software on: 2012/05/15 cp /home/mvstest/testlibs/cpy0/CUSTMAS.CPY cpy0 cp /home/mvstest/testlibs/cpy0/SALEDTL.CPY cpy0 cp /home/mvstest/testlibs/cpy0/SDLINE.CPY cpy0 cp /home/mvstest/testlibs/cpy0/STLINE.CPY cpy0

 # sf/selpoc2data1 - script to copy files from /home/mvstest/testdata/data to /home/mvstest/POC2testd
 # - created from xref/xkshfile2 by xref2cp1 at: UV_Software on: 2012/05/15
 cp /home/mvstest/testdata/data/gl.account.acntlist_*   /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/gl.account.master_*     /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/gl.account.trans_*      /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/pgl200s1                /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/ar.customer.master      /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/ar.customer.master.indexed /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/ar.customer.nameadrs.list100 /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/ar.sales.items          /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/ar.sales.list           /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/gl.account.master_*     /home/mvstest/POC2testdata/data
 cp /home/mvstest/testdata/data/gl.account.tran1        /home/mvstest/POC2testdata/data
 # sf/selpoc2jcl0 - script to copy files from /home/mvstest/testlibs/jcl0 to jcl0
 #    - using filenames from: ctl/poc2jcl
 #    - created by mksfcp1 at: UV_Software on: 2012/05/15
 cp /home/mvstest/testlibs/jcl0/JAR100.JCL  jcl0
 cp /home/mvstest/testlibs/jcl0/JAR200.JCL  jcl0
 cp /home/mvstest/testlibs/jcl0/JGL100.JCL  jcl0
 cp /home/mvstest/testlibs/jcl0/JGL200.JCL  jcl0
 # sf/selpoc2parm0 - script to copy files from /home/mvstest/testlibs/parm0 to parm0
 # - created from xref/xkshparm2 by xref2cp1 at: UV_Software on: 2012/05/15
 cp /home/mvstest/testlibs/parm0/PGL200S1 parm0
 # sf/selpoc2proc0 - script to copy files from /home/mvstest/testlibs/proc0 to proc0
 # - created from xref/xkshproc2 by xref2cp1 at: UV_Software on: 2012/05/15
 cp /home/mvstest/testlibs/proc0/PGL100.PROC proc0
 cp /home/mvstest/testlibs/proc0/PGL200.PROC proc0

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8E3. JCL/COBOL POC select/convert

execute scripts to select all components

We have generated superscript 'selpoc2A' to select all original mainframe components from jcl0,proc0,parm0,cbl0,cpy0. We can execute as follows:


 #1. Login mvstest --> /home/mvstest (or yourself --> your homedir)

 #2. cdl             <-- change to $RUNLIBS (POC2testlibs)
     ===

 #3. chmod 775 sf/*  <-- set execute permissions on generated scripts
     ==============

 #4. runall sf       <-- execute all scripts to select all desired components
     =========

console log from runall sf

      script# 1: sf/selpoc2cbl0
      cp: cannot stat `/home/mvstest/testlibs/cbl0/SORT.CBL': No such file or directory
      script# 2: sf/selpoc2cpy0
      script# 3: sf/selpoc2data1
      cp: cannot stat `/home/mvstest/testdata/data/pgl200s1': No such file or directory
      cp: cannot stat `/home/mvstest/testdata/data/ar.customer.master.indexed':
                       No such file or directory
      script# 4: sf/selpoc2jcl0
      script# 5: sf/selpoc2parm0
      script# 6: sf/selpoc2proc0
      6 scripts executed from sf

Notes

  1. Please relate the console log to the scripts listed on the previous page.

  2. 'runall' displays the name of each script found in the subdir & executed

  3. Since the 'cp' comamnds in the scripts are silent, the only other displays we see are ERROR messages for files not found

  4. The errmsg for SORT.CBL not found is expected & can be ignored because the script generated to copy COBOL programs makes a 'cp' for all programs, and so tries to copy the various utility programs as well as the COBOL programs.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8E4. JCL/COBOL POC select/convert

list selected files

Since we know the copy/select script output subdirs have suffix '0' (cbl0, cpy0, jcl0, parm0, proc0), we can list all selected/copied files as follows:


 #5. ls *0
     ======
      cbl0:
      -rw-rw-r-- 1 mvstest apps 3476 May 15 16:57 CAR100.CBL
      -rw-rw-r-- 1 mvstest apps 4424 May 15 16:57 CAR200.CBL
      -rw-rw-r-- 1 mvstest apps 3871 May 15 16:57 CGL100.CBL
      -rw-rw-r-- 1 mvstest apps 4424 May 15 16:57 CGL200.CBL
      cpy0:
      -rw-rw-r-- 1 mvstest apps 1273 May 15 16:57 CUSTMAS.CPY
      -rw-rw-r-- 1 mvstest apps 1360 May 15 16:57 SALEDTL.CPY
      -rw-rw-r-- 1 mvstest apps 1501 May 15 16:57 SDLINE.CPY
      -rw-rw-r-- 1 mvstest apps  553 May 15 16:57 STLINE.CPY
      jcl0:
      -rw-rw-r-- 1 mvstest apps  648 May 15 16:57 JAR100.JCL
      -rw-rw-r-- 1 mvstest apps 1539 May 15 16:57 JAR200.JCL
      -rw-rw-r-- 1 mvstest apps  243 May 15 16:57 JGL100.JCL
      -rw-rw-r-- 1 mvstest apps  324 May 15 16:57 JGL200.JCL
      parm0:
      -rw-rw-r-- 1 mvstest apps 81 May 15 16:57 PGL200S1
      proc0:
      -rw-rw-r-- 1 mvstest apps  648 May 15 16:57 PGL100.PROC
      -rw-rw-r-- 1 mvstest apps 1215 May 15 16:57 PGL200.PROC

The data files are in POC2testdata/data & we can list as follows:


 #6. l $RUNDATA/data    <-- list datafiles selected by sf/selpoc2data1
     ================
 -rw-rw-r-- 1 mvstest apps  8192 May 15 16:57 ar.customer.master
 -rw-rw-r-- 1 mvstest apps  2858 May 15 16:57 ar.customer.nameadrs.list100
 -rw-rw-r-- 1 mvstest apps  1280 May 15 16:57 ar.sales.items
 -rw-rw-r-- 1 mvstest apps  1521 May 15 16:57 ar.sales.list
 -rw-rw-r-- 1 mvstest apps  7303 May 15 16:57 gl.account.acntlist_000001
 -rw-rw-r-- 1 mvstest apps 13952 May 15 16:57 gl.account.master_000001
 -rw-rw-r-- 1 mvstest apps  1600 May 15 16:57 gl.account.tran1
 -rw-rw-r-- 1 mvstest apps  1600 May 15 16:57 gl.account.trans_000001
 -rw-rw-r-- 1 mvstest apps  1600 May 15 16:57 gl.account.trans_000002
Note
  • see more info about data file select on page '8M1'.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8E5. JCL/COBOL POC select/convert

xref2cpA - generate all copy/selects from crossrefs

This is the super-script that generated the POC copy/select scripts you see listed on page '8E2'.

 # xref2cpA - super-script to generate scripts to select mainframe components
 #          - by Owen Townsend, UV Software, May 15/2012
 #
 # - based on a list of desired JCLs for a POC or next phase of conversion
 # - cross-refs of JCL/scripts & COBOL programs used to generate selection scripts
 # - copy/select files from ALLtestlibs/jcl0/... to POC2testlibs/jcl0/...
 # - etc for subdirs jcl0,proc0,parm0,cbl0,cpy0
 #
 if [[ "$1" != "all" ]]; then
    echo "usage: xef2cpA all"
    echo "       ==========="
    echo "- must enter arg1 all"
    exit 9; fi
 #
 export UVCOPYROP=q0i31r0
 #=======================
 # inhibit prompts
 #
 uvcopy "mksfcp1,fili1=ctl/poc2jcl,filo1=sf/selpoc2jcl0,arg1=$ATL/jcl0\
 ,arg2=jcl0,arg3=.JCL,arg4=.JCL,uop=t2u2"
 #====================================================================
 #
 uvcopy "xref2cp1,fili1=xref/xkshproc2,filo1=sf/selpoc2proc0,arg1=$ATL/proc0\
 ,arg2=proc0,arg3=.PROC,arg4=.PROC,uop=t2u2"
 #==========================================================================
 #
 uvcopy "xref2cp1,fili1=xref/xkshparm2,filo1=sf/selpoc2parm0,arg1=$ATL/parm0\
 ,arg2=parm0,uop=t2u2"
 #==========================================================================
 #
 uvcopy "xref2cp1,fili1=xref/xkshprog2,filo1=sf/selpoc2cbl0,arg1=$ATL/cbl0\
 ,arg2=cbl0,arg3=.CBL,arg4=.CBL,uop=t2u2"
 #========================================================================
 #
 uvcopy "xref2cp1,fili1=xref/xcobcopy2,filo1=sf/selpoc2cpy0,arg1=$ATL/cpy0\
 ,arg2=cpy0,arg3=.CPY,arg4=.CPY,uop=t2u2"
 #========================================================================
 #
 uvcopy "xref2cp1,fili1=xref/xkshfile2,filo1=sf/selpoc2data1,arg1=$ATD/data\
 ,arg2=$RUNDATA/data,uop=d2f1g1b55"
 #========================================================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8H1. JCL/COBOL conversions using Your POC files

JCL conversion to Korn shell scripts

Script 'jcl2ksh51A' performs all steps for conversion of all files in the directories of JCLs, PROCs,& Parms. Here is an illustration of the conversions thru several subdirs. Initial subdirs of mainframe files are jcl0,proc0,& parm0. The converted JCL/scripts are in 'jcls' which may read SYSIN files from 'parms'. The intermediate subdirs (jcl1,jcl2,jcl3) may be dropped when conversion is complete & the systems are ready for production.

 proc0 -------> procs    parm0 -------> parms
       cleanup                 cleanup
 jcl0 -------> jcl1 -----------> jcl2 -------------> jcl3 ------------> jcls
      cleanup       PROC expand      convert to ksh      manual copy 1 at a time
                                                         when ready to test each

Script 'jcl2ksh51A' does everything. If you have problems, you might want to use the 'step by step' method to better understand & to detect errors sooner. See MVSJCL.htm#4K1 thru 4K5.

For this POC2 conversion of selected JCLs from the Part 7 ALLtestlibs, we already copied the control files over from ALLtestlibs/ctl to POC2testlibs. See creation in Part 7 (including LISTCAT info) & copy over on page '8B2'.


 #1. jcl2ksh51A all    <-- convert ALL JCL thru all steps, as illustrated below
     ==============      - reply null (take default) at all prompts
                         - or reply 'y' for prompts that demand a y/n response
Note
  • see the console log listed starting at page '3E3'
  • note the prompts & requesting replies
  • I have === underlined the prompt replies you should make

Alternative for AIX COBOL


 #1a. jcl2ksh53A all
      ==============

Use 'jcl2ksh53A' vs 'jcl2ksh51A' if the JCL being converted is intended to execute AIX COBOL vs Micro Focus COBOL. For AIX COBOL, we generate a call to the linked program vs the .int for Micro Focus. The GDG file handler is different for AIX, some file types require a TYPE- prefix on the exportfile.

repeat JCL conversion if LISTCAT available

If LISTCAT was available, you should rerun the JCL conversion including control file ctl/datacat52 (created from mainframe LISTCAT on page '7E1'). On the 1st run above reply 'I' to INIT all control files, then rerun 'catdata52' (#7a on page '7E1') & the rerun jcl2ksh51A or jcl2ksh53A and reply 'E' (accept Existing control files).

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8I1. JCL/COBOL conversions using Your POC files

Converting Mainframe COBOL to Unix/Linux

'cnvMF51Ac' will perform all steps of the copybook conversion & 'cnvMF51A' will perform all steps of the COBOL program conversion. Here is an illustration of the conversion steps from inital subdirs (cbl0 & cpy0) thru intermediate subdirs to the final results in cpys & cbls.

 cpy0 ---------> cpy1 ---------> cpy2 ----------> cpys
       cleanup         convert         copy(cp)
 cbl0-------->cbl1-------->cbl2------->cbl3------->cbl4------->cbls-------->cblx
      cleanup      convert      sysin1     sysout1       copy       compile
                               |--------optional-------|

 #1. cnvMF51Ac all <-- convert copybooks thru all steps, as illustrated above
     ============   - reply null (take defaults) or reply 'y' if y/n demanded

 #2. cnvMF51A all  <-- convert COBOL programs thru all steps, as illustrated above
     ===========    - reply null (take defaults) or reply 'y' if y/n demanded
                    - 1 exception, reply 'n' when asked to run 'cobfil55'

If problems occur, you should use the 'step by step' method which is documented at MVSCOBOL.htm#1D1 thru 1D3, because you will be better able to detect & fix any problems that may occur.

Note
  • see console log on page '3F2' for prompt responses.

Alternative for AIX COBOL


 #1a. cnvAIXcblAc all <-- convert copybooks for AIX COBOL
      ===============

 #2a. cnvAIXcblA all  <-- convert COBOL programs for AIX COBOL
      ==============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8I2. JCL/COBOL conversions using Your POC files

compiling the COBOL programs

Script 'mfcblA' is provided to compile all programs in the COBOL source subdir 'cbls' (using copybooks in 'cpys'), storing compiled executable programs in 'cblx'. Here is the commands & the console log from compiling the POC COBOL programs.


 #1. cp cbl2/* cbls  <-- copy all converted COBOL programs to COBOL source dir
     ==============    - initial convert/compile only
                       - don't do on reconvert if you need to save some cbls/...

 #2. mfcblA all      <-- compile all programs for Micro Focus COBOL
     ==========          input from subdir cbls, output to cblx:
                         (.int, .idy, .err,& .cbl copy for animation)
                       - If problems see MVSCOBOL.htm#1D4 for more information.

 #3. mfcbl1 program.cbl  <-- compile any 1 program  for Micro Fcus COBOL
     ==================      from cbls/... to cblx/...
Note
  • see console log on page '3F4' for prompt responses.

Alternative for AIX COBOL


 #2a. aixcblA all          <-- compile ALL programs for AIX COBOL
      ===========

 #3a. aixcbl1 program.cbl  <-- compile any 1 program for AIX COBOL
      ===================
Note
  • any programs calling sub-programs will FAIL at this point
  • we need to create an archive of called programs to link with programs
    that call sub-programs
  • see page '8I3' to select/compile/archive all called sub-programs

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8I3. JCL/COBOL conversions using Your POC files

compile called programs & archive for linking AIX COBOL

Compile scripts for Micro Focus compile only to a .int (interpretive) vs linked to an executable. Any called programs will be handled OK at execution time. But the scripts for AIX COBOL do compile & link to an executable. Any called programs must be archived and provided to the AIX compile/link step.

create script to select all called programs

We can create a script to select all called programs from 'xcobcall2' (called program crossref). We will select these to a separate subdir 'cblsubs'. We then compile using special script 'aixcblAsub' which compiles all programs to '.o' objects in cblsubo/... & then archives into lib/cblsubs.a.


 #1. Login mvstest --> /home/mvstest (or yourself --> homedir)

 #2. cdl         <-- change to $RUNLIBS (POC2testlibs)
     ===

 #3a. mkdir cblsubs   <-- subdir for selected called program source
      =============
 #3b. mkdir cblsubo   <-- subdir for selected called program objects
      =============
 #3c. mkdir lib       <-- subdir for library archive of objects
      =========         - 'cblsubs.a'

 #4. xcobcall2 cbls   <-- run cross-ref copybboks & calling programs
     ==============     - can omit if you have run 'xrefall'

sample crossref: called programs vs calling programs

  xcobcall2 ** crossref to show all PROGRAMS calling each CALLED-PROGRAM **
  Keyword=call  Exclude=~~ Include=~~ Skip=  page#  1
  Directory=/home/mvstest/testlibs/cbls Options=q1a16b16c4e0d0j0l0s2w1a16b16c4e3l1q0i7
  =======================================================2011/11/05_16:33:26
  cbl_toupper_2    nameadrs1.cbl_2
  getparm_2        car130.cbl      car140.cbl
  **TotalWords: 2, TotalFiles=3, TotalRefs: 4

 #5. uvcopy 'xref2cp1,fili1=xref/xcobcall2,filo1=sf/selpoc2subs
             ,arg1=$ATL/cbls,arg2=cblsubs,arg3=.cbl,arg4=.cbl'
     ==========================================================
     - converts called program cross-ref into script to select called programs
       from ALLtestlibs/cbls/... to POC2testlibs/cblsubs/...

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8I4. JCL/COBOL conversions using Your POC files

output script to select called programs

# sf/selpoc2subs - script to copy files from $ATL/cbls to cblsubs # - created from xref/xcobcall2 by xref2cp1 at: UV_Software on: 2012/05/10 cp $ATL/cbls/cbl_toupper cblsubs cp $ATL/cbls/getparm cblsubs


 #6. ksh sf/selpoc2subs   <-- execute script to select called programs
     ==================

 #6a. l cblsubs           <-- check called programs selected
      =========

compile called programs & archive for linking AIX COBOL

Instructions above created a script (from the called program crossref) to select all called programs into separate subdir 'cblsubs'. We will now compile using special script 'aixcblAsub' which compiles all programs to '.o' objects in cblsubo/... & then archives into lib/cblsubs.a.


 #6. aixcblAsub all   <-- compile called programs & archive
     ==============

compile POC2 programs & link with called program archive


 #7. aixcblA all          <-- compile ALL programs for AIX COBOL
     ===========

determine AIX compile failures


 #8. mismatch1 cbls cblx   <-- display list of failing programs
     ===================

'mismatch1' is a general purpose script that can be used in many situations. We know there should be an output in cblx/... for each input in cbls/... The inputs have suffix .cbls & the output executables have no suffix, but the 'mismatch1' script removes the input suffix & looks for the base filename in the output subdir. For Micro Focus we would specify arg3 '.int' which is the suffix in the output subdir for Micro Focus.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8I5. JCL/COBOL conversions using Your POC files

AIX compile failure analysis

uvcopy job 'aixcblerrs1' reads all the '.err' files created by the compile script 'aixcblA' (or 'aixcblAsub') & creates 4 reports in subdir errs/...

  1. cblerrs1.rpt - all errors selected from all .err files (in filename seq)
  2. cblerrs2.rpt - all errors sorted by ERROR code (E,I,S,U,W) & description
  3. cblerrs3.sum - limits no of each err code & dscrptn to 10 lines (option)
  4. cblerrs4.tbl - table summary counts of each err code & description - sample below, could run job to select errs with count > 10

 #9. uvcopy aixcblerrs1
     ==================

sample output#4 - table summary of Err-Codes & Dscrptns

 aixcblerrs1  2012/04/18_07:58:23  summary table of Error-Codes & Descriptions
 tbl#0001  tblt1f7 b0(48)
 line#     count  %    1strec#  Err-Code Description
     1         1   5        22  E file contained no data record
     2         1   5         8  E literal exceeded length specified the definiti
     3         2  10        22  E should not begin area was processed as if foun
     4         1   5        22  S clause found a entry for file clause discarded
     5         1   5        22  S clause missing invalid the entry for file
     6         1   5         8  S found the statement was not
     7         1   5        22  S invalid skipped the next verb
     8         1   5         8  S library cpys/dfhbllds cpy not found
     9         1   5        22  S library cpys/l cpy not found
    10         2  10        22  S mnemonicname statement specified for file
    11         1   5        22  S not defined as dataname
    12         2  10         8  S not defined as dataname statement
    13         2  10        13  S not defined as dataname statement discarded
    14         2  10        22  S statement found the compiler option not effect
              19*100             *TOTAL*

 #10. uvcopy tbldrop1,fili1=errs/cblerrs4.tbl,filo1=tmp/cblerrs4.tbl
      ==============================================================

 #10a. vi tmp/cblerrs4.tbl    <-- view high count errors
       ===================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8J1. JCL/COBOL test/demo Cross-References

create Cross-References & Statistics

See Part_4 for the full documentation, including sample reports which will give you an understanding of how useful these reports will be during your conversion.

xrefall - create all JCL/COBOL cross-refs


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. xrefall cbls jcl3 ksh    <-- create all cross-ref reports
     =====================
Note
  • see sample crossref reports in Part_4.

create stats, table summary counts of JCLs,programs,etc


 #3. mkdir stats          <-- make subdir for reports
     ===========

 #4. uvcopy statmvsjcl1   <-- create stat reports from MVS JCL
     ==================

 #5. uvcopy statksh1      <-- create stat reports from Korn shell scripts
     ===============

 #6. uvcopy statcbl1      <-- create stat reports from COBOL programs
     ===============

 #7. vi stats/*           <-- view stat reports
     ==========

 #8. uvlpd12 stats        <-- print all reports
     =============            OR print only desired reports
                            - most stats/reports short
                            - BUT, filename reports could be very long
Note
  • see sample crossref reports on page '4J1'.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8L1. JCL/COBOL POC select/convert

repeat JCL conversion if LISTCAT available

If LISTCAT was available, you should rerun the JCL conversion including control file ctl/datacat52 (created from mainframe LISTCAT on page '7E1'). The LISTCAT info will improve the JCL conversion because it supplies record sizes & file types to the JCL converter.

On the 1st run on page '8H1' we replied 'I' to INIT all control files, which would clear ctl/datacat52 (originally created on page '7E1'). We can easily recreate it as shown below, then reconvert the JCL, replying 'E' to accept Existing control files.

recreate LISTCAT control file ctl/datacat52


 #7. uvcopy catdata52,fili1=ctl/datacat51,filo2=ctl/datacat52
     ========================================================
     - recreate control file (wiped by reply 'I' on 1st jcl2ksh51A/jcl2ksh53A

 #7a. uvcopy catdata52   <-- same as above, easier to key
      ================     - I/O filenames default as above

reconvert JCL to include LISTCAT info


 #1. jcl2ksh51A all    <-- convert ALL JCL thru all steps, as illustrated below
     ==============      - reply null (take default) at all prompts
                         - reply 'y' to prompts that demand a y/n response
                         - reply 'E' to prompt for control file Init or Existing

 #1a. jcl2ksh53A all   <-- Alternative for AIX COBOL
      ==============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8M1. JCL/COBOL POC select/convert

determine DATA-FILEs required for POC2 tests

Data file conversion was documented in Part_6 & we will assume that the data files required for the POC2 JCL/scripts can be copied from $CNVDATA/d2asc/...


 #1. Login mvstest --> /home/mvstest (or yourself --> homedir)
 #2. cdl         <-- change to $RUNLIBS (POC2testlibs)
     ===

 #3. xkshfile2 jcl3   <-- run cross-ref FILEs & calling JCLs
     ==============

sample crossref: DATA FILEs & calling JCLs

 xkshfile2 ** crossref to show all ksh SCRIPTs using each DATAFILE **
 Keyword=exportfile:exportgen  Exclude=autoload:JTMP:SYOT Include=~~ Skip=~~ page#  1
 Directory=/home/mvstest/POC2testlibs/jcl3 Options=q1a16b16c4e0d0g0h1j0l1p0s2w1a50b14c2g1j4w2q0i7
 =======================================================2012/05/13_21:06:47
 $jgdg/data/gl.account.acntlist_                    jgl100.ksh
 $jgdg/data/gl.account.master_                      jgl200.ksh
 $jgdg/data/gl.account.trans__2                     jgl200.ksh_2
 $runlibs/parms/parm200s                            jar200.ksh
 $runlibs/parms/pgl200s1                            jgl200.ksh
 data/ar.customer.master                            jar100.ksh
 data/ar.customer.master.indexed                    jar200.ksh
 data/ar.customer.nameadrs.list100                  jar100.ksh
 data/ar.sales.items                                jar200.ksh
 data/ar.sales.list                                 jar200.ksh
 data/gl.account.master__2                          jgl100.ksh    jgl200.ksh
 data/gl.account.tran1                              jgl200.ksh
 **TotalWords: 12, TotalFiles=13, TotalRefs: 14

 #4. uvcopy 'xref2cp1,fili1=xref/xkshfile2,filo1=sf/selpoc2data1
                     ,arg1=$ATD/d2asc,arg2=$RUNDATA/data,uop=b55d2f1g1'
     ==================================================================
     - converts DATA FILE cross-ref into script to select desired FILEs
       from ALLtestdata/data/... to POC2testdata/data/...
       (will 'export ATD=/home/mvstest/ALLtestdata' before executing script)
     - note options 'uop=b55d2f1g1': b55 aligns output subdir at byte 50
       option d2 - drops filenames containing '.aix' & '.path'
       option f1 - drops subdirs on datafilenames from file crossrefs
                 - JGDG/ & data/ from crossref omitted
       option g1 - appends '*' on GDG files (ID by trailing underscore '_')
Note
  • see output script listed on the next page
  • problem re duplicate filenames due to new GDGs created in $JGDG tmpdirs

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8M2. JCL/COBOL POC select/convert

output script to select DATA-FILEs

 # sf/selpoc2data1 - script to copy files from $ATD/data to $RUNDATA/data
 # - created from xref/xkshfile2 by xref2cp1 at: UV_Software on: 2012/05/14
 cp $ATD/data/gl.account.acntlist_*                $RUNDATA/data
 cp $ATD/data/gl.account.master_*                  $RUNDATA/data
 cp $ATD/data/gl.account.trans_*                   $RUNDATA/data
 cp $ATD/data/parm200s                             $RUNDATA/data
 cp $ATD/data/pgl200s1                             $RUNDATA/data
 cp $ATD/data/ar.customer.master                   $RUNDATA/data
 cp $ATD/data/ar.customer.master.indexed           $RUNDATA/data
 cp $ATD/data/ar.customer.nameadrs.list100         $RUNDATA/data
 cp $ATD/data/ar.sales.items                       $RUNDATA/data
 cp $ATD/data/ar.sales.list                        $RUNDATA/data
 cp $ATD/data/gl.account.master_*                  $RUNDATA/data
 cp $ATD/data/gl.account.tran1                     $RUNDATA/data

DUPLICATES due to new GDGs created in $JGDG tmpdirs

Note the duplicates in selpoc2data1 script above - caused by dropping the subdirs from new generations of GDG files created in temp subdir $JGDG/data/... We can simply SORT with UNIQUE output file option as follows:


 #5. sort -u -o sf/selpoc2data2 sf/selproc2data1
     ===========================================
      - we appended a '1' on initial script sf/selpoc2data1 created by xref2cp1
      - on unique sort output we append a '2' (will execute the '2' script)
 # sf/selpoc2data1 - script to copy files from $ATD/data to $RUNDATA/data
 # - created from xref/xkshfile2 by xref2cp1 at: UV_Software on: 2012/05/14
 cp $ATD/data/ar.customer.master.indexed           $RUNDATA/data
 cp $ATD/data/ar.customer.master                   $RUNDATA/data
 cp $ATD/data/ar.customer.nameadrs.list100         $RUNDATA/data
 cp $ATD/data/ar.sales.items                       $RUNDATA/data
 cp $ATD/data/ar.sales.list                        $RUNDATA/data
 cp $ATD/data/gl.account.acntlist_*                $RUNDATA/data
 cp $ATD/data/gl.account.master_*                  $RUNDATA/data
 cp $ATD/data/gl.account.tran1                     $RUNDATA/data
 cp $ATD/data/gl.account.trans_*                   $RUNDATA/data
 cp $ATD/data/parm200s                             $RUNDATA/data
 cp $ATD/data/pgl200s1                             $RUNDATA/data

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8M3. JCL/COBOL POC select/convert

execute script to select DATA-FILEs


 #6a. export ATD=/home/mvstest/ALLtestdata
      ===================================
      - define $ATD used in script, assumed to be source of our POC files

 #6b. export RUNDATA=/home/mvstest/POC2testdata
      =========================================
     - will copy to $RUNDATA (already defined in profile

 #7. ksh sf/selpoc2data2   <-- execute script to select desired Data-Files
     ===================

 #7a. l $RUNDATA/data      <-- check FILEs selected
      ===============
      -rw-rw-r-- 1 mvstest apps  8192 May 14 15:56 ar.customer.master
      -rw-rw-r-- 1 mvstest apps  2858 May 14 15:56 ar.customer.nameadrs.list100
      -rw-rw-r-- 1 mvstest apps  1280 May 14 15:56 ar.sales.items
      -rw-rw-r-- 1 mvstest apps  1521 May 14 15:56 ar.sales.list
      -rw-rw-r-- 1 mvstest apps  7303 May 14 15:56 gl.account.acntlist_000001
      -rw-rw-r-- 1 mvstest apps 13952 May 14 15:56 gl.account.master_000001
      -rw-rw-r-- 1 mvstest apps 13952 May 14 15:56 gl.account.master_000002
      -rw-rw-r-- 1 mvstest apps  1600 May 14 15:56 gl.account.tran1
      -rw-rw-r-- 1 mvstest apps  1600 May 14 15:56 gl.account.trans_000001
      -rw-rw-r-- 1 mvstest apps  1600 May 14 15:56 gl.account.trans_000002
      -rw-rw-r-- 1 mvstest apps  1600 May 14 15:56 gl.account.trans_000003
Note
  • script gets NOFIND on 'cp's for parms, but wont matter, since they
    are accessed from $RUNLIBS/parms/... (not $RUNDATA/data/...)
  • script gets NOFIND on 'cp's for Indexed files, best to modify 'cp's
    for Indexed files to a 'uvcp' or 'uvsort' to create Indexed output

mvsfiles5A alternative select DATA-FILEs

See mvsfiles5A on page '4L1' for an alternative method of selecting data-files for our POC set of selected JCLs. mvsfiles5A analyzes the MVS JCL to determine the essential input files to a set of JCLs (dropping inter-step & inter-job files assuming that jobs are run in order of jobanme).

mvsfiles5A creates a script to copy files from ALLcnvdata/d2asc (files converted from mainframe) vs ALLtestdata (files used in testing prior testing).

mvsfiles5A should be run 1st to determine the datafiles that need to be transferred from the mainframe to $CNVDATA/d1ebc, converted to $CNVDATA/d2asc, and copied to ALLtestdata/data. Then run selpoc2data2 to select POC datafiles from ALLtestdata/data to POC2testdata/data.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8N1. Preparations to Execute JCL/COBOL POC

Here are other preparations that must be performed before you can execute the JCL/scripts for the POC2 selected set of JCLs, PROCs, COBOL programs, COBOL copybooks, PARMs,& DATA-files.

We have already adequately documented these procedures in Part_3 &/or Part-7 so we will give you a link back to those procedures.

create the GDG control file

Create the GDG control file - see MVSJCLtest.htm#3I1 (in this doc). Also see MVSJCL.htm#Part_5 for complete details about GDG files.

isolate/fix TeraData SQL parameters

Some sites may have Databases such as TeraData & the SQL parameters (load tables, unload tables, etc) were maintained in separate libraries on the mainframe & will also be on unix/linux.

TeraData uses 3 programs (BTQMAIN/bteq, FASTLOAD,& MLOAD). FASTLOAD parms needed a modification for DDNAME=INFILE. The unix version of FASTLOAD required any 'DECIMAL' fields to be converted to 'varchar' with length = digits+decimals+2 A uvcopy job 'TDFLcnv1' was written to handle this in Jan 2012.

See instructions at MVSJCLtest.htm#3E4

select QuikJobs from parms & convert to uvcopy

QuikJobs will be in the parms/... library. We will use utility 'qjselect1' to select them into a separate library qj0/... for conversion to uvcopy in qjs/...

       select QuikJobs      cleanup        convert          copy
 parms --------------> qj0 ---------> qj1 ---------> qj2 -----------------> qjs
          qjselect1         cleanup       quikjob2       (protect reconvert)

See instructions at MVSJCLtest.htm#3G1

select EasyTrieves from parms & convert to uvcopy

EasyTrieves will be in the parms/.. library. We will use utility 'ezselect1' to select them into a separate library ezt0/.. for conversion to uvcopy in ezts/..

       select EasyTrieves      cleanup         convert         copy
 parms -----------------> ezt0 -------> ezt1 ----------> ezt2 --------> ezts
          ezselect1            cleanup        ez2uvcopy          cp

See instructions at MVSJCLtest.htm#3G2

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

8O1. JCL/COBOL executions using Your POC files

Execute POC scripts


 #1. login mvstest2 --> /home/mvstest2
          --- OR ---
 #1a. login --> your homedir

 #2. cdd   --> $RUNDATA ($HOME/testdata), alias cdd='cd $RUNDATA'
     ===

copy scripts from converter outdir to execution dir


 #3a. cp jcl3/yourjob.ksh jcls <-- copy just 1 script to execution subdir jcls/
      ========================
      --> OR copy ALL as follows:

 #3b. cp jcl3/* jcls  <-- copy All converted scripts to execution subdir jcls/
      ==============    - OK here for VU test/demo, NOT for "real conversion"

You should NOT copy all jcl3/* jcls/ for your "real conversion" project. For your real conversion project, you should copy 1 script at a time when you ready to start test/debug on each script. This is an easy way to keep track of your progress (jcls/... are debugged, jcl3/... not yet)

Another reason NOT to copy all jcl3/* jcls/ when JCL/scripts re-converted:

You might copy all POC jcl3/* to jcls/ since would be a limited number, But should not do for your real conversion project.

Note
  • we recommend you execute the scripts from the testdata DATA subdir
  • so you can easily inspect the output reports

 #4. joblog yourjob.ksh    <-- run scripts collecting logs in joblog/...
     ==================

 #5. vi joblog/yourjob.ksh  <-- inspect log files
     =====================    - see test/demos starting on page '3L1'

 #6. l data      <-- list data subdir to see outputs
     ======

 #7. uvhd data/yourdatafile r999
     ===========================
     - use uvhd to inspect datafiles without LineFeeds
       & with packed/binary fields

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_9. MVS JCL test/demo conversions

Part 9 - Mainframe Utility Conversions


9A1. Mainframe utility conversions - Overview
- converting 3rd party utilities such as QuikJob & EasyTrieve
  (vs integrated utilities such as SORT,IDCAMS,IEBGENER,etc)

9B1. QuikJob conversion to uvcopy
- sample quikjob code & uvcopy equivalent

9C1. EasyTrieve conversion to uvcopy or uvcp
- sample easytrieve code & uvcopy or uvcp equivalent

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

9A1. Mainframe Utility Conversions

Mainframe Utility Conversions - Overview

Part 9 will discuss converting 3rd party utilities such as QuikJob & EasyTrieve that may have significant code in library modules vs instream JCL. The code for these utilities needs to be converted separately from the JCL/scripts which call the converted code.

Part 9 will not discuss Integrated utilities such as SORT,IDCAMS,IEBGENER,etc, that are converted directly by the JCL converter. These utilities are simpler and can usually be understood by looking at the JCL & converted scripts.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

9B1. Mainframe Utility Conversions

converting QuikJob to uvcopy

We have already listed a sample JCL calling QuikJob (& converted script) on page '2I1'. But, the JCL/script listings do not show the QuikJob code (or converted equivalent) because the code is in separate library modules called by the JCL/script.

We showed the QuikJob conversion instructions on page '3G1':


 #3. uvcopy qjselect1,fild1=parms,fild2=qj0
     ======================================
     - select quikjobs from parms to separate subdir qj0

 #4. uvcopyx cleanup qj0 qj1 uop=q0i7g8n5t1
     ======================================
     - clear 73-80, lowercase, rename as 1st node lower (to match JCL)

 #5. uvcopyx quikjob2 qj1 qj2 uop=q0i7
     =================================
     - convert QuikJob code to uvcopy code

 #6. cp qj2/* qjs
     ============
     - copy to execution subdir (JCL/scripts call from qjs/...)

sample QuikJob code

 * QJTLIST1 - QUIKJOB TO PRINT CUSTOMER MASTER TELEPHONE LIST
 *          - TO DEMO QUIKJOB CONVERSION, OCT 2011, OWEN TOWNSEND
 *
 FILE INF  DTF=MIRAM,BKSZ=2560,RCSZ=256,KEYS=NO,LFD=SYSUT1
 EQU  CM-NUMBER    INF1-6
 EQU  CM-NAME      INF11-35
 EQU  CM-PHONE     INF91-102
 EQU  CM-CONTACT   INF103-120
 *
    HDR 1A  $JOBNAM$  CUSTOMER MASTER TELEPHONE LIST  $IPLDAT$
    HDR 2A  CUST#   COMPANY-NAME               TELEPHONE     CONTACT-NAME
 *
 EQU  TL-NUMBER       PRT1-6
 EQU  TL-NAME         PRT9-33
 EQU  TL-PHONE        PRT36-47
 EQU  TL-CONTACT      PRT50-68
 *
 1000 GET INF ATEND 9999
      MOVE CM-NUMBER   TO TL-NUMBER
      MOVE CM-NAME     TO TL-NAME
      MOVE CM-PHONE    TO TL-PHONE
      MOVE CM-CONTACT  TO TL-CONTACT
      PRINT
      GO TO 1000
 *
 9999 GOTO  EOJ
      END

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

9B2. Mainframe Utility Conversions

quikjob converted to uvcopy code

 #qjs/qjtlist1 - quikjob2 (ver:20111103) convert to uvcopy on: 20111105
 was=i8000q48000s8000t100000
 fili1=${SYSUT1},rcs=0256,typ=RSF
 filo1=${SYSPRINT},rcs=0256,typ=LSTt
 #* qjtlist1 - quikjob to print customer master telephone list
 #*          - to demo quikjob conversion, oct 2011, owen townsend
 #*
 lodc1=qq0(48)
 $cm-number                     =a0(6)     #equ cm-number inf1-6
 $cm-name                       =a10(25)   #equ cm-name inf11-35
 $cm-phone                      =a90(12)   #equ cm-phone inf91-102
 $cm-contact                    =a102(18)  #equ cm-contact inf103-120
 #*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 #*
 lodv3c1=hh0(200)
  $jobname   customer master telephone list  $date
  cust#   company-name               telephone     contact-name
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 lodc1=qq0(48)
 $tl-number                     =p0(6)     #equ tl-number prt1-6
 $tl-name                       =p8(25)    #equ tl-name prt9-33
 $tl-phone                      =p35(12)   #equ tl-phone prt36-47
 $tl-contact                    =p49(19)   #equ tl-contact prt50-68
 #*
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 @run
        opn    all                    open files
        clr    t0(100000),'~'         clear table to all tildes
        wtb    filo1,h0(200),h0(200)  dump headings to outfile
 #
 tag1000 get    fili1,a0                   # 1000 get inf atend 9999
         skp>   tag9999
         mvc    $tl-number,$cm-number      # move cm-number to tl-number
         mvc    $tl-name,$cm-name          # move cm-name to tl-name
         mvc    $tl-phone,$cm-phone        # move cm-phone to tl-phone
         mvc    $tl-contact,$cm-contact    # move cm-contact to tl-contact
         putb   filo1,p0                   # print
         skp    tag1000                    # goto 1000
 #*
 tag9999 skp    tageoj                     # 9999 goto eoj
 tageoj cls    all
        eoj

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

9B3. Mainframe Utility Conversions

Executing JCL/script calling quikjob/uvcopy

We have already executed the JCL/script calling this quikjob/uvcopy at '3M9':


 #9. qjtlist.ksh   <-- execute JCL/script calling quikjob/uvcopy
     ===========

The JCL/script was listed on page '2I1' & note the uvcopy call to the converted code module 'qjtlist1' (on line 26) as follows:


 #3----------------------------------------
 uvcopy $QJS/qjtlist1
 #4----------------------------------------

'QJS' is defined in the 'jobset51' function as follows:


 export QJS=$RUNLIBS/qjs
 =======================

'jobset51' is the JCL/script setup function called on line 10 of all converted scripts. You can see a listing at MVSJCL.htm#5K1. 'QJS' is defined on line 62.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

9C1. Mainframe Utility Conversions

converting EasyTrieve to uvcopy

We have already listed a sample JCL calling EasyTrieve (& converted script) on page '2J1'. But, the JCL/script listings do not show the EasyTrieve code (or converted equivalent) because the code is in separate library modules called by the JCL/script. We showed the EasyTrieve conversion instructions on page '3G2':

sample EasyTrieve code

 * EZTLIST1 - CREATE CUSTOMER TELEPHONE LIST
 *          - cust#, name, tel#, contact
 *          - demo EasyTrieve conversion to uvcopy
 *          - by Owen Townsend, Oct 2011
 FILE CUSTMAS SYS004 F(256)
 CUS-REC           1   256   A
 CUS-NO            1     6   N
 CUS-NAME         11    25   A
 CUS-ADRS         36    25   A
 CUS-CITY         61    17   A
 CUS-PROV         78    02   A
 CUS-POSTAL       81    10   A
 CUS-TEL          91    12   A
 CUS-CONTACT     103    18   A
 *
 FILE EZTLIST SYSLST F(80)
 TEL-REC           1    80   A
 TEL-CUSNO         1     6   N
 TEL-NAME          9    25   A
 TEL-NUM          36    12   A
 TEL-CONTACT      50    68   A
 REC-COUNT         W     5   N
 *
 JOB INPUT CUSTMAS FINISH CUSTEOF
 MOVE SPACES   TO TEL-REC
 MOVE CUS-NO   TO TEL-CUSNO
 MOVE CUS-NAME TO TEL-NAME
 MOVE CUS-TEL  TO TEL-NUM
 MOVE CUS-CONTACT  TO TEL-CONTACT
 ADD 1 TO REC-COUNT
 PUT EZTLIST
 *
 CUSTEOF. PROC
 DISPLAY 'TOTAL RECORDS' REC-COUNT
 END-PROC

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

9C2. Mainframe Utility Conversions

EasyTrieve converted to uvcopy code

 # eztlist1 - uvcopy job converted from EasyTrieve by Vancouver Utilities
 #         - ez2uvcopy run on 2011/10/28_11:07:16 at UV_Software
 #
 # See www.uvsoftware.ca/eztrvetc.htm OR www.uvsoftware.ca/mvsjcltest.htm
 # - using sample job 'eztlist1':
 # 1. uvcopy ez2uvcopy,fili1=ezt0/EZTLIST1,filo1=ezts/eztlist1 #<-- convert
 # 2. export CUSTMAS=data/ar.customer.master   <-- test file for eztlist1
 # 3. export EZTLIST=data/ar.customer.eztlist  <-- output report file
 # 4. uvcopy eztlist1   <-- run job using exports
 #                        - OR, specify filenames on cmd line as follows:
 # 4a. uvcopy eztlist1,fili1=data/ar.customer.master,filo2=data/ar.customer.eztlist
 #
 # Some jobs may require manual changes:
 # 1. insert record-size on fili1=...,etc if FB(...) not coded on FILE stmtns
 # 2. check 'fineof' label on EOF PROCs, 1st PROC assumed to be EOF for fili1
 # 3. change Packed fields to unpacked if used for DISPLAY msgs
 # 4. change typ=RSF to typ=LSTt (insert LineFeeds) on output report files
 #
 was=a8192b8192c8192d8192e8192f8192g8192h8192q24000s8192  #<-- set area memories
 #* eztlist1 - create customer telephone list
 #* - cust#, name, tel#, contact
 #* - demo easytrieve conversion to uvcopy
 #* - by owen townsend, oct 2011
 #FILE CUSTMAS SYS004 F(256)
 fili1=?${CUSTMAS},rcs=00256,typ=RSF
 #FILE EZTLIST SYSLST F(80)
 filo2=?${EZTLIST},rcs=00080,typ=LSTt
 #job input custmas finish custeof
 lodc1=q0(48)
 $cus-rec                         =a0(256c)
 $cus-no                          =a0(6z)
 $cus-name                        =a10(25c)
 $cus-adrs                        =a35(25c)
 $cus-city                        =a60(17c)
 $cus-prov                        =a77(2c)
 $cus-postal                      =a80(10c)
 $cus-tel                         =a90(12c)
 $cus-contact                     =a102(18c)
 $tel-rec                         =b0(80c)
 $tel-cusno                       =b0(6z)
 $tel-name                        =b8(25c)
 $tel-num                         =b35(12c)
 $tel-contact                     =b49(68c)
 $rec-count                       =s0(5z)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

 @run
         opn    all
 loop    get    fili1,a0            get next record
         skp>   custeof
         add    $ca1,1              count records in file
         clr    $tel-rec,' '
         mvf    $tel-cusno,$cus-no
         mvf    $tel-name,$cus-name
         mvf    $tel-num,$cus-tel
         mvf    $tel-contact,$cus-contact
         add    $rec-count,1
         put    filo2,b0
         skp    loop
 #
 # begin PROC, proc name may be target of FILE FINISH EOF...
 custeof   nop
         msgv1 '  TOTAL_RECORDS  $rec-count'
         skp    fineof
 #NB - 'skp fineof' inserted at END-PROC, 1st PROC often used for FINISH/EOF
 #   - modify as required for this easytrieve
 #
 # subrtns generated at end converted code & called by 'bal's
 # hdr - subrtn to print page headings
 hdr     mvfv1  h0(100),'$jobname $fili1 $datetime'
         putb   filo2,h0
         ret=
 #
 # EOF - 'fineof' label, 1st PROC assumed to be EOF for fili1
 fineof  cls    all
         eoj

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

9C3. Mainframe Utility Conversions

Executing JCL/script calling EasyTrieve/uvcopy

We have already executed JCL/script calling this EasyTrieve/uvcopy at '3M10':


 #10. eztlist.ksh   <-- execute JCL/script calling EasyTrieve/uvcopy
      ===========

The JCL/script was listed on page '2J1' & note the uvcopy call to the converted code module 'eztlist1' (on line 26) as follows:


 #3----------------------------------------
 uvcopy $EZTS/eztlist1
 #4----------------------------------------

'EZTS' is defined in the 'jobset51' function as follows:


 export EZTS=$RUNLIBS/ezts
 =========================

'jobset51' is the JCL/script setup function called on line 10 of all converted scripts. You can see a listing at MVSJCL.htm#5K1. 'EZTS' defined on line 63.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_10. Test procedures for MVS JCL conversions

Part 10 control-M Contents

 10A1. control-M overview.
      'stub.ini' & 'common.ini' replace stub_profile & common_profile

10B1. control-M directories to execute each system

10C1. listing of stub.ini

10D1. listing of common.ini

10E1. transfer Test system to control-M production
10E2. mass change jcls stub.ini to xpp.ini
10E3. create jcls.zip/ctl.zip for transfer to control-M
10E4. setup for new system on control_M production
10E5. setup control subdirs & FTP jcls.zip/ctl.zip
 10F1. Options for reruns under control-M
      - START=restart-step#
      - RECOVERGDG=y/n
Note
  • this Part 10 Control-M was documented for 1 particular site
  • not general purpose doc as for prior parts
  • will need customization at each site

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10A1. Test procedures for MVS JCL conversions

control-M Overview

For control-M, UV Software provides 'stub.ini' & 'common.ini', to replace the profiles when JCL/scripts scheduled by control-M. Control-M can not use the profiles which setup $RUNDATA & $RUNLIBS for programmers & live operators.

'stub.ini' is called on line 9 of all converted JCL/scripts. Note that 'stub.ini' is changed to 'system.ini' (xwo.ini, xpp.ini, etc) to match the the system to which this JCL/script belongs. Here is a sample line 9 call:


 . $APPSADM/env/xwo.ini
 ======================

The stub.ini's export the RUNDATA & RUNLIBS locations for that system, and call $APPSADM/env/common.ini to setup the PATHs to scripts & DATA.

Note that the line 9 call to 'stub.ini' does not interfere with programmer testing of the same JCL/scripts (no changes required) because programmer profiles export TESTPROD=T (Testing), whereas control-M profile exports TESTPROD=P (Production). stub.ini tests $TESTPROD & does nothing if TESTPROD=T.


 export TESTPROD=T000   <-- developer's profile (line 23)
 ====================

 export TESTPROD=P000   <-- control-M .profile for Production
 ====================     - BUT use test dirs on C:D WinServer

 export TESTPROD=P100   <-- control-M .profile for Production
 ====================     - AND use production dirs on C:D WinServer

Note that the JCL converter creates 2 file definitions for Connect:Direct output files on the WinServer. Here is sample from xwod002.ksh page '2F2'

if [[ "$TESTPROD" == P1* ]] then exportfile OUTFILE "E:\CDDATA\GAS\QRTLYUSF.TXT" else exportfile OUTFILE "H:\CDDATA4\OSTEST\USER_$LOGNAME\QRTLYUSF.TXT" fi

Developers must setup a folder with their userid on the WinServer. In this example, map drive H: to \\OMRSNA020 & insert your userid for $LOGNAME


 \\OMRSNA020\CDDATA4\OSTEST\USER_$LOGNAME\QRTLYUSF.TXT
 =====================================================

 H:\CDDATA4\OSTEST\USER_$LOGNAME\QRTLYUSF.TXT
 ============================================

 H:\CDDATA4\OSTEST\USER_xy35068\QRTLYUSF.TXT
 ===========================================

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10B1. control-M

Control-M subdirs required

 /c01/apps/bt00108/xwo/control
 :-----audit
 :-----callout
 :-----cmlog
 :-----ctl
 :-----data
 :-----docs
 :-----joblog
 :-----jobmsgs
 :     :-----110114
 :-----jobtmp
 :     :-----XWOA003
 :     :     :-----GDG
 :     :     :     :-----data
 :     :     XWO...etc...
 :-----obslog
 :     :-----110114
 :-----scripts
 :-----sysout
 :     :-----XWOA003
 :     :-----XWO...etc...
 :-----tmp

Notes

  1. Control-M will be run under userid bt00108

  2. 'stub.ini' (xwo.ini, listed on the next page) is called on line 9 of all converted JCL/scritps to define RUNLIBS & RUNDATA as follows:

      export RUNLIBS=/c01/apps/bt00108/xwo/control
      ============================================
      export RUNDATA=/c01/apps/bt00108/xwo/control
      ============================================
  1. JCL/scripts call function 'jobset51' which setup a subdir in jobtmp/... (using the jobname) to hold new generations of GDG files. New GDGs will be restored to control/data/... by function 'jobend51' which is called at normal EOJ. The new GDGs are not restored if the job terminates Abnormally which allows you to simply rerun the job.

  2. Failed jobs can be rescheduled with arguments for restart step# & recover GDG files y/n. For example 'xwo002.ksh START=S0020 RECOVERGDG=y'

  3. Re jobmsgs/yymmdd/... job status (job/step begin/end) msgs are collected in files named as yymmdd_hhmmss_JOBNAME. The file is also written to $APPSADM/jobmsgs.

  4. Re obslog/yymmdd/... Object Star logfiles are written to files named as JOBNAME_step#_hhmmss.

  5. Re SYSOUT/JOBNAME/... for COBOL programs that display upon SYSOUT.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10C1. control-M

listing of stub.ini

 # stub.ini - .ini file to define RUNDATA/RUNLIBS for for control-M
 #            (vs programmers who use stub_profile & common_profile)
 #          - by Owen Townsend, created Feb 2010, modified Feb 2011
 # - this is the master template stored at /usr/home/appsadm/env/stub.ini
 # - you must copy/rename/modify for various systems, XWO for example:
 #
 # 1. cd $APPSADM                  <-- change to /usr/home/appsadm/
 #    ===========
 # 2. cp env/stub.ini env/xwo.ini  <-- copy template for new system
 #    ===========================
 # 3. vi env/xwo.ini                <-- modify as follows:
 #    ==============
 # 3a. Change name at top (#comment only, but important to prevent confusion)
 #     for this example, change 'stub.ini' to 'xwo.ini'
 # 3b. Change name on RUNDATA & RUNLIBS definition near end of this stub.ini
 #     see export RUNDATA=... & export RUNLIBS=...
 #
 # 4. cdl  <-- return to your $RUNLIBS (/usr/home/xy35068/testlibsXWO example)
 #
 # 5. vi ctl/jclunixop51    <-- update JCL converter control file
 #    ==================      - was copied from $UV/ctl by 'copymvsctls'
 #    line 71 call stub.ini file (see xwo.ini example below)
 #
 # 6. convert the subsystem JCL to scripts jcl0->jcl1->jcl2->jcl3->jcls
 #
 # 7. when debugged, copy jcls/* to control-M scripts/... for example:
 #    cp jcls/* zacomup104:/c01/apps/bt00108/xwo/control/scripts/
 #
 #                   ** 1st 10 lines JCL/scripts **
 #
 #001 #!/bin/ksh
 #002 ##XWOA003 JOB WO1000F1,LOAD,CLASS=S,MSGCLASS=P,REGION=0M
 #003 export JOBID2=XWOA003; scriptpath="$0"; args="$*"
 #004 if [[ -z "$JOBID1" ]]; then export JOBID1=$JOBID2; fi
 #005 for arg in $args; do if [[ "$arg" == *=* ]]; then export $arg; fi; done
 #006 integer JCC=0 SCC=0 LCC=0  # init step status return codes
 #007 autoload jobset51 jobset52 jobend51 jobabend51 logmsg1 logmsg2 stepctl51
 #008 autoload exportfile exportgen0 exportgen1 exportgenall exportgenx
 #009 . $APPSADM/env/xwo.ini  #<-- ensure stub.ini changed to correct system.ini
 #010 jobset51  # call function for JCL/script initialization
 #
 # - JCL converter inserts 1st 10 lines of output scripts from lines 64-72
 #   of ctl/jclunixop51, before executing the JCL converter for each system,
 #   line 71 must be changed from stub.ini to xwo.ini, or whatever (xpp,xpt,etc)
 #
 #071 . $APPSADM/env/stub.ini  #<-- ensure stub.ini changed to correct system.ini
 #071 . $APPSADM/env/xwo.ini   #<-- stub.ini changed to xwo.ini (matching JCL)
 #    =======================
 #

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

 #                 ** control-M profile defs required **
 #
 # export TESTPROD=P000              - control-M P000, developers T000
 # ====================
 # export APPSADM=/usr/home/appsadm  - for scripts to find this stub.ini
 # ================================    (see near end this file)
 # export UV=/usr/home/uvadm
 # =========================
 #
 # $APPSADM/env/...ini files... <-- .ini files stored here
 # $APPSADM/env/xwo.ini         <-- .ini file for testing
 # $APPSADM/env/???.ini         <-- various systems (other than xwo ?)
 # $APPSADM/env/common.ini      <-- common file called by all stub.ini files
 #
 # common.ini - defines items common to all systems (PATHs to libraries)
 # - called near end of this file (after RUNDATA & RUNLIBS defined)
 # - saves duplications, easier maintenance
 # - see exact coding in $APPSADM/common.ini
 #
 #------------------------------------------------------------------
 #
 # For programmer conversion & testing, the .ini is ignored so he can
 # convert & test in testlibs/testdata vs production ctontrol/...
 # and no JCL/scripts need be changed when copied to production
 #
 # export TESTPROD=P000    <-- for production under control-M
 # ====================        or operator manual commands
 # - must be coded in control-M & operator profiles for production
 # - .ini file will be activated to point to production libs/data
 #   for the system to which the particular JCL/script belongs
 #
 # export TESTPROD=T000    <-- for programmer conversion & testing
 # ====================
 # - coded in programmer profile for conversion & testing
 # - disables the .ini file defs for RUNLIBS/RUNDATA
 # - RUNLIBS/RUNDATA in programmer profile will define testlibs/testdata
 # - programmers do not need to access different sets of libs/data during
 #   one login session (can modify profile, logoff/logon for next system)
 #
 # test for Production (by control-M) or Test (by developer)
 #
 if [[ "$TESTPROD" == P* ]]; then
    export RUNDATA=/c01/apps/bt00108/xwo/control
    #===========================================
    export RUNLIBS=/c01/apps/bt00108/xwo/control
    #===========================================
    . $APPSADM/env/common.ini
    #========================
 fi
 return 0
 #

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10D1. control-M

listing of common.ini

 # common.ini - called by various stub.ini files
 #            - for operators & control-M
 #              (vs programmers who use stub_profile & common_profile)
 #            - by Owen Townsend, 1st developed Feb 2010
 #            - .ini files & profiles stored in /usr/home/appsadm/env
 #
 # stub.ini - master template stored at /usr/home/appsadm/env/stub.ini
 #          - copy & rename for system (example: xwo.ini)
 #          - stub.ini must define RUNDATA/RUNLIBS for desired system
 #
 # xwo.ini  - sample .ini file for 'xwo' system
 # ___.ini  - define RUNDATA & RUNLIBS for the target system
 #          - stub.ini calls this common.ini to define libraries
 #            PATH to scripts based on $RUNLIBS
 #
 #            ** essential subdirs in $RUNLIBS & $RUNDATA **
 #
 # Developers require following subdirs n their separate $RUNLIBS & $RUNDATA
 # - using example for xy35068 & XWO system:
 #
 # export RUNLIBS=/usr/home/xy35068/testlibsXWO/
 #       $RUNLIBS/jcls/...     <-- converted JCL/scripts
 #       $RUNLIBS/scripts/...    - renamed for control_M
 #       $RUNLIBS/cblx/...     <-- any executable COBOL programs ?
 #
 # export RUNDATA=/usr/home/xy35068/testdataXWO/
 #       $RUNDATA/ctl/gdgctl51 <-- GDG control file (generations)
 #       $RUNDATA/jobtmp/...   <-- temp files & new GDGs created during run
 #       $RUNDATA/jobmsgs/...  <-- job progress status msgs
 #       $RUNDATA/obslog/...   <-- Object Star logs subdir by day
 #       $RUNDATA/sysout/...   <-- SYSOUT files from COBOL DISPLAYs
 #       $RUNDATA/tmp/...      <-- used by sort for merge files
 #
 # Above subdirs are combined for control-M, for XWO on zactomup104:
 #
 # export RUNLIBS=/c01/apps/bt00108/xwo/control
 # ============================================
 # export RUNDATA=/c01/apps/bt00108/xwo/control
 # ============================================
 #
 #                 ** control-M profile defs required **
 #
 # export TESTPROD=P000              (developers have TESTPROD=T000)
 # ====================
 # export APPSADM=/usr/home/appsadm  - for scripts to find this stub.ini
 # ================================    (see near end this file)
 # export UV=/usr/home/uvadm         - for Vancouver Utilities
 # =========================
 #

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

 # Verify that critical environmental variables have been defined
 # (by stub_profile or this common_profile)
 if [[ "$UV" = "" || "$APPSADM" = "" ]]; then
    echo "UV=$UV or APPSADM=$APPSADM not defined"
    echo "- enter to exit"; read $reply; exit 99; fi
 if [[ "$RUNLIBS" = "" || "$RUNDATA" = "" ]]; then
    echo "RUNLIBS=$RUNLIBS or RUNDATA=$RUNDATA not defined"
    echo "- enter to exit"; read $reply; exit 99; fi
 #
 # define PATHs common to all systems & all .ini files)
 #Oct2010 - example
 export PATH=/usr/bin:/usr/sbin
 export PATH=$PATH:$RUNLIBS/scripts:$RUNLIBS/jcls
 # - converted JCL in scripts/ subdir for control-M & jcls/ for developers
 #
 export PATH=$PATH:$UV/bin:          #<-- path to uvsort,uvcp,etc
 export PATH=$PATH:$UV/sf/adm:$UV/sf/demo:$UV/sf/util:$UV/sf/IBM
 #
 # uvcopy interpreter finds Parameter Files via $PFPATH
 export PFPATH=$UV/pf/adm:$UV/pf/demo:$UV/pf/util:$UV/pf/IBM
 export PFPATH=$PFPATH:$RUNLIBS/pf
 export PFPATH=$PFPATH:$APPSADM/pf
 #
 export FPATH=$APPSADM/sfun    #<-- ksh functions used by JCL/scripts
 #
 export LOGMSGACK=n    # disable ACK option in logmsg2 in JCL/scripts
 #
 # define path to COBOL programs, COBOL programs should not use PATH
 # - because mainframe JCL/scripts & COBOL programs could have same names
 export RLX=$RUNLIBS/cblx      #<-- path for loading COBOL programs
 #
 # For Micro Focus COBOL Server Express
 # export COBDIR=/usr/lib/cobol
 # export PATH=$PATH:$COBDIR/bin
 # export LD_LIBRARY_PATH=$COBDIR/lib:$LD_LIBRARY_PATH
 # export LANG=en_US                   # fix animator display carets vs data
 # export EXTFH=$RUNLIBS/ctl/extfh.cfg # file handler configuration
 #
 # Indexed file extension controls for Vancouver Utilities
 export ISDATEXT=".dat" # .dat/.idx Indexed files for uvsort,uvcopy,uvcp,etc
 #                      # uvsort,etc read/write .dat on typ=ISF data partition
 #                      # COBOL equivalent is 'IDXNAMETYPE=2' in $EXTFH/extfh.cfg
 #
 # printer destinations for VU laser printing scripts
 export UVLPDEST="-dricoh"     # default dest for uvlp(uvlist) scripts at 1 site
 export UVLPOPTN="-onobanner"  # for unix/linux (SFU does not allow)
 #-------------------------------------------------------------------------
 #
 #                     ** For Object Star **
 #
 export HURON=/usr/home/objstar/tibco/osb
 export HURONDIR=$HURON/database/huron.dir
 export OS_ROOT=$HURON
 export PATH=$PATH:$HURON/bin:/d01/work
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HURON/sharedlib
 ulimit -n 8000
 # modify OBSDOB depending on server 101=OSXD,120=OSXF,104=OSXP
 export OBSDOB=OSXD
 # Object Star userid,password,library (temporary userid/passwd for test)
 export OBSUSER="U=CT04819"
 export OBSPASS="P=CS00144"
 export OBSLIB="L=CT04819"
 # see 'osBatch' command in JCL/scripts as follows:
 # osBatch dob=$OBSDOB EE=BATCH SEA=L R=.... BROWSE DSDIR=$RUNDATA\
 # $OBSUSER $OBSPASS $OBSLIB\
 # SESSIONLOG=$RUNDATA/obslog/$OBSDAY/${JOBID1}_${JSTEP}_$(date +%y%m%d_%H%M%S)
 # setup OBSLOGDIR this code also in jobset51 in case user login past midnight
 export OBSLOGDIR=$RUNDATA/obslog/$(date +%y%m%d)
 if [[ -d $RUNDATA/obslog ]]; then
    if [[ ! -d $OBSLOGDIR ]]; then mkdir $OBSLOGDIR; fi
 fi
 #-------------------------------------------------------------------------
 #
 #                   ** For Connect:Direct **
 #
 export CDNDM=/usr/home/cdadmin/cdunix/ndm
 export PATH=$PATH:$CDNDM/bin
 export NDMAPICFG=$CDNDM/cfg/cliapi/ndmapi.cfg
 export CDOPTNS="-x"
 # $CDOPTNS inserted on 'direct' command in JCL/scripts
 # '-x' shows command in stdout, might chg to '-n' to inhibit CD stdout
 export CDSERVER=CD.ZAOMNT02
 #Nov14/10 - connect:direct template at end of ctl/jclunixop51 has;
 # 'process snode=$CDSERVER' to allow prgmr test & oprtr production
 # by changing profile above, without changing JCL/scripts
 #Feb2011 - changed to using different directory on windows CD server
 # JCL/scripts define C:D output files twice & use 1 of P/T files
 # - depending on $TESTPROD (def in stub.ini) P/T for Production/Testing
 #
 #-------------------------------------------------------------------------
 #
 # Misc Recommended items
 # umask 002 for permissions 775 on directories & 664 on files
 # - so operator or control-M would not need to have root provileges
 # operators working on common set of dirs/files
 # must have umask 002 & be in the same group ('apps' used for testing)
 umask 002                     # permissions 775 dirs, 664 files
 set -o ignoreeof              # disallow logoff via ctl D (use exit)
 HOST1=$(uname -n)             # add to PS1 prompt if desired
 export PS1='<@$HOST1:$LOGNAME:$PWD> '
 export EDITOR=vi              # for Korn shell history
 export VISUAL=vi              # for Korn shell history
 export HISTSIZE=1000;         # Korn shell history file size
 #-------------------------------------------------------------------------
 # alias commands to prompt for overwrite (highly recommended)
 # alias rm='rm -i'              # confirm removes
 # alias mv='mv -i'              # confirm renames
 # alias cp='cp -i'              # confirm copy overwrites
 # alias l='ls -l'               # save keystrokes
 #-------------------------------------------------------------------------

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10E1. setup control-M on production machine

transfer Test system to control-M production

Assume you have completed testing a system (such as XWO or XPP) on the development machine and you are now ready to transfer to the production machine to run under control-M. Here are sample instructions for XPP:

We assume you have setup testlibsXPP & testdataXPP in your homedir as documented on page '4E2'. Note instruction #5 on page 4E2 is:


 #5. copymvsctls   <-- copy control files from $UV/ctl to ctl/... here
     ===========

 #6. vi ctl/jclunixop51           <-- we should have had this edit
     ==================               to change line 71 as follows:
 71a--> . $APPSADM/env/stub.ini   <-- original from $UV/ctl/jclunixop51
        =======================
 71b--> . $APPSADM/env/xpp.ini    <-- change to sub-system ID
        =======================

If this was missed on original setup & testing, you could change now & reconvert the JCL as follows. But this assumes that you did not have to make any manual changes in the converted JCL.

If you did make considerable changes, then better to perform a "mass change" as documented on the next page (using sed & runsed1 or uvcopy rep1d).

change stub.ini to xpp.ini & reconvert


 #1. Login --> your homedir with testlibsXPP & testdataXPP

 #2. cdl  --> testlibsXPP
     ===

 #3. vi ctl/jclunixop51           <-- we should have had this edit
     ==================               to change line 71 as follows:
 71a--> . $APPSADM/env/stub.ini   <-- original from $UV/ctl/jclunixop51
        =======================
 71b--> . $APPSADM/env/xpp.ini    <-- change to sub-system ID
        =======================

 #4. jclxx51 jcl2 jcl3     <-- reconvert JCL to ksh scripts
     =================

 #5. cp jcl3/* jcls        <-- copy to jcls (live subdir in $PATH)
     ==============

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10E2. setup control-M on production machine

mass change jcls stub.ini to xpp.ini

Here is a "mass change" alternative to the above re-convert which assumed (unrealistically) that no JCL/script changes were required during testing & debugging.


 #1. Login --> your homedir with testlibsXPP & testdataXPP

 #2. cdl  --> testlibsXPP
     ===

 #3. mkdir jcls_fixed
     ================
Note
  • 'runsed1' is a script (supplied in $UV/sf/util/runsed1)
  • will prompt for 'sed' commands, enter ctl-D to end prompts
  • will copy all files from arg1 subdir to arg2 subdir
    while executing the sed command(s)

 #4. runsed1 jcls jcls_fixed
     =======================
     --> s/stub.ini/xpp.ini/g  <-- enter sed command at prompt
     --> ctl-D                 <-- control-D to end prompts

 #5. vi jcls_fixed/*      <-- might spot check change as desired
     ===============

 #6. alldiff2 jcls jcls_fixed   <-- better way to check differences
     ========================

 #6a. more tmp/jcls_fixed.dif   <-- inspect diff report
      =======================     - sample (partial) report below
      9c9
      < . $APPSADM/env/xwo.ini  #<-- must change stub.ini to xwo.ini,xpp.ini,etc
      ---
      > . $APPSADM/env/xpp.ini  #<-- must change stub.ini to xpp.ini,xpp.ini,etc
      diff file# 8 - jcls/... vs jcls_fixed/xwoa003.ksh
      9c9
      < . $APPSADM/env/xwo.ini  #<-- must change stub.ini to xwo.ini,xpp.ini,etc
      ---
      > . $APPSADM/env/xpp.ini  #<-- must change stub.ini to xpp.ini,xpp.ini,etc
      diff file# 9 - jcls/... vs jcls_fixed/xwoa0100.ksh
      13 different of 13 files compared jcls to jcls_fixed

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10E3. setup control-M on production machine

create jcls.zip/ctl.zip for transfer to control-M

We now assume your jcls/* or jcls_fixed/* have the proper system.ini on line 9 of all converted scripts, and we are finally ready to transfer the JCL/scripts to the production machine to run under control-M. Here are sample instructions for XPP:

We will create jcls.zip & ctl.zip in your homedir on the development machine. Then we will login on the control-M production machine & do the FTP.


 #1. Login on development machine --> your homedir

 #2. cdl  --> testlibsXPP
     ===

 #3. cd jcls    <-- change into jcls/files to be zipped
     =======

 #4. zip -r ../../jcls.zip .
     =======================
     - create zip file 2 levels up in your homedir

 #5. cdd  --> testdataXPP
     ===

 #6. cd ctl     <-- change into ctl/files to be zipped
     =======

 #7. zip -r ../../ctl.zip .
     ======================
     - create zip file 2 levels up in your homedir

 #8. exit
     ====

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10E4. setup control-M on production machine

setup for new system on control_M production

Different systems (XWO,XPP,etc) will run under different userids on the priduction machine. XWO ran under bt00108. We assume that XPP will run under bt00109, that it has been setup,& you have the password.

Note that the home directory should be /c01/apps/bt00109 and not /usr/home/bt00109.


 #1. Login bt00109  --> /c01/apps/bt00109
     =============

 #2. cp $APPSADM/env/stub_profile .profile
     =====================================
     - copy .profile

 #3. vi .profile  <-- change RUNLIBS/RUNDATA as follows:
     ===========
      export RUNLIBS=$HOME/$runlibs  <-- original (line 61)
      export RUNDATA=$HOME/$rundata
      export RUNLIBS=/c01/apps/bt00109/xpp/control  <-- new
      export RUNDATA=/c01/apps/bt00109/xpp/control  <-- same

 #4. logoff & logon to make profile changes effective

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10E5. setup control-M on production machine

setup control subdirs & FTP jcls.zip/ctl.zip


 #1. Login bt00109  --> /c01/apps/bt00109
     =============

 #2. cdd  --> /c01/apps/bt00109/xpp/control
     ===

 #3. controlMdirs   <-- script to setup subdirs for control-M
     ============     - see page '10B1'

 #4. ftp 10.109.2.132   <-- to FTP from development
     ================
 #4a. userid--> ...     <-- for your homedir on development
 #4b. passwd--> ...       - jcls.zip & ctl.zip stored above
 #4c. --> binary        <-- ensure binary file transfer
 #4d. --> get jcls.zip
 #4e. --> get ctl.zip
 #4f. bye

 #5a. mv jcls.zip scripts
      ===================
 #5b. mv ctls.zip ctl
      ===================

 #6a. cd scripts
      ==========
 #6b. unzip jcls.zip
      ==============
 #6c. rm jcls.zip
      ===========
 #6d. cdd
      ====

 #7a. cd ctl
      ==========
 #7b. unzip ctl.zip
      ==============
 #7c. rm ctl.zip
      ===========
 #7d. cdd
      ====

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

10F1. control-M

                    ** Options for reruns under control-M *8

The JCL/scripts allow 2 arguments to control restart runs. Using xwod002.ksh as an example:


 xwod002.ksh     <-- normal execution (all steps)
 ===========

 xwod002.ksh start=S0020   <-- restart at step 2
 =======================

 xwod002.ksh start=S0020 recovergdg=n  <-- restart at step 2 & do Not recover
 ====================================      GDG files from jobtmp/GDG to data/

 xwod002.ksh start=S0020 recovergdg=y  <-- restart at step 2 & Yes do recover
 ====================================      GDG files from jobtmp/GDG to data/

See xwod002.ksh listed on page '2C2'. Step 1 is a Connect:Direct to copy a file from the WinServer up to a GDG file on unix ($RUNDATA/jobtmp/GDG/...).

Step 2 is an Object Star step that inputs that file from the WinServer.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

Part_11 JCL/COBOL/DATA Conversion Aids

Note
  • the conversion aids are a separate document
  • CNVaids.htm is intended to be shared by JCL, COBOL,& DATA conversions
  • references below are all links into the common shared CNVaids.htm
  • right click on links to open in new tab, so you dont lose your origin

CNVaids.doc - Contents by Part#

CNVaids.htm#Part_0 Introduction & Overview

CNVaids.htm#Part_1 General Purpose aids, using Unix/Linux utilities

CNVaids.htm#Part_2 General Purpose aids using Vancouver Utilities

CNVaids.htm#Part_3 Cross-References for COBOL & JCL

xcobcopy2
  • shows all programs using each 'copy'book
xcobcall2
  • shows all programs 'call'ing each program
xkshfile2
  • shows all JCL/ksh/scripts using each data-file
xkshprog2
  • shows all JCL/ksh/scripts executing each program
xkshproc2
  • shows all JCL/ksh/scripts executing each PROC
xkshparm2
  • shows all JCL/ksh/scripts referencing each SYSIN/PARM

CNVaids.htm#Part_4 Table Summaries & Statistics

statallmvs1
  • table summaries of COBOL, MVS JCL,& Korn shell scripts
statallvse1
  • same, but for VSE JCL
statmvsjcl1
  • table summarize programs & top-nodes used in all JCLs
statksh1
  • table summarize programs & top-nodes used in all JCL/scripts
statlogin1
  • create table summary report of user logins by month & userid.
table2
  • general purpose table summary by any argument & acum 2 fields
table3d
  • table summary via 'key-word', preceding a 'target-word'.
tblexts1
  • table summary counts of file extensions in a subdir
recsizes1
  • create summary table of record-sizes in a text file

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

JCL/COBOL/DATA Conversion/Test/Debug Aids

CNVaids.doc - Contents by Part# (continued)

CNVaids.htm#Part_5 COBOL Aids

CNVaids.htm#Part_6 JCL/script Test/Debug aids

CNVaids.htm#Part_7 Data file investigation/manipulation aids

CNVaids.htm#Part_8 uvcopy

acum1
  • accumulate any 1 field in any datafile
  • hash total to prove file validity after conversions
    or to get a 2nd opinion when COBOL reports look suspicious
cmrpt1
  • customer master sales report for test file dat1/custmas1
    (used to demo both acum1 above & selectf1 below)

CNVaids.htm#Part_9 Aids & Tips for users new to Unix/Linux

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

JCL/COBOL/DATA Conversion/Test/Debug Aids

CNVaids.doc - Overview

CNVaids.htm is intended to make you aware of the many conversion, testing, & debugging aids supplied by the Vancouver Utilities, that should help you to convert mainframes to unix/linux.

I believe you will find many of these aids essential to the success of your conversion, testing,& debugging.

These aids were originally in several documents (MVSJCL,MVSCOBOL,MVSDATA,etc). In January 2008, this separate document (CNVaids) was created to avoid the duplications in the original documents, which now have links to this document.

Many of these aids are illustrated using supplied test/demo files & you can run many of these once you have installed the Vancouver Utilities. These 'practice sessions' will help you when you start working on your own conversions of JCL, COBOL,& DATA files.

The intention in CNVaids.htm is to give you a short introduction to the various utilities available, and then give you a link to the complete documentation which could be in various other books.

Most Valuable Aids

As explained above, the intention of this Part_11 in MVSJCLtest.doc is to refer you to other documents in Vancouver utilities that may assist you in testing/debugging your JCL/sscripts.

BUT, the following pages will illustrate examples of a few of the most valuable aids that we think may help you the most.

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

11A1. Mainframe Conversion Test/Debug Aids

diff - Unix/Linux file comparison

'diff' is a truly marvelous utility supplied with Unix/Linux systems. Diff works only with text files containing LineFeeds. For files without LFs (& maybe with packed/binary fields), please see the 'uvcmp' utilities on page '11B1'.

You can use diff to compare any 2 text files with linefeeds - data files, printer files, programs, scripts, etc. You might use diff to verify program changes - save the current output file, change the program, rerun, use diff to compare the output before the change & after the change - to confirm that the differences are due to the changes intended & that there are no other unexpected differences.

diff example - verify program changes

I often use diff to confirm the changes I make to my conversion utilities. Here is an example that you can run based on the JCL/script 'jgl300.ksh' listed on page '2E1' & executed on page '3M5'.

We will change JCL converter option 'u1' to 'u0' & use 'diff' to see the results (1st save current output scripts before modifying option & rerunning).

Option 'u1' converts IEBGENER & IDCAMS to 'uvcp', and 'u0' converts IEBGENER & IDCAMS to 'cp'. See the JCL converter control file options on page '3E1' or in the file $RUNLIBS/ctl/jclunixop51.


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdl --> $HOME/testlibs (alias cdl='cd $HOME/testlibs)

 #3. jclxx51 jcl2 jcl3    <-- convert all JCL to scripts
     =================      - with existing option 'u1' (for uvcp)

 #4. vi ctl/jclunixop51   <-- change 1st line option 'u1' to 'u0' (for cp)
     ==================

 #5a. mv jcl3 jcl3.old    <-- save scripts with u1/uvcp by renaming subdir
      ================
 #5b. mkdir jcl3          <-- make new subdir to receive outputs for 'u0' option
      ==========

 #6. jclxx51 jcl2 jcl3    <-- RE-convert all JCL to scripts
     =================      - with changed option 'u0' (for cp)

 #7. diff jcl3.old/jgl300.ksh jcl3/jgl300.ksh
     ========================================
     - run diff, see report listed on next page:

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

11A2. Mainframe Conversion Test/Debug Aids

diff example - verify option change


 #7. diff jcl3.old/jgl300.ksh jcl3/jgl300.ksh  <-- run diff on old & new scripts
     ========================================    - report lsited below:
      27c27,29
      < uvcp "fili1=$SYSUT1,typ=RSF,rcs=80,filo1=$SYSUT2,typ=RSF,rcs=80"
      ---
      > cp -v $SYSUT1 $SYSUT2
      53c55
      < uvcp "fili1=$TEMPGLM,typ=RSF,rcs=80,filo1=$ACNTMAS,typ=RSF,rcs=80";
      ---
      > cp -v $TEMPGLM $ACNTMAS

script 'alldiff2' alternative to 'diff' utility

In cases such as this where I have reconverted the entire directory of JCL/scripts, I use script 'alldiff2' that repeats 'diff' for every pair of matching filenames in the old & new subdirs, And saves the report in tmp/...

In this case I was using alldiff2 to confirm the changes resulting from changing JCL converter option 'u1' (use 'uvcp' to copy files) to 'u0' (use 'cp').


 #8. alldiff2 jcl3.old jcl3  <-- run 'alldiff2' compare all files in 2 subdirs
     ======================

 #9. vi tmp/jcl3.dif         <-- inspect dif report (written to tmp/... subdir)
     ===============
      27c27,29
      < uvcp "fili1=$SYSUT1,typ=RSF,rcs=80,filo1=$SYSUT2,typ=RSF,rcs=80"
      ---
      > cp -v $SYSUT1 $SYSUT2
      53c55
      < uvcp "fili1=$TEMPGLM,typ=RSF,rcs=80,filo1=$ACNTMAS,typ=RSF,rcs=80";
      ---
      > cp -v $TEMPGLM $ACNTMAS
      diff file# 7 - jcl3.old/... vs jcl3/jgl300.ksh
      28c28,30
      < uvcp "fili1=$SYSUT1,typ=RSF,rcs=80,filo1=$SYSUT2,typ=RSF,rcs=80"
      ---
      > cp -v $SYSUT1 $SYSUT2
      55c57
      < uvcp "fili1=$TEMPGLM,typ=RSF,rcs=80,filo1=$ACNTMAS,typ=RSF,rcs=80";
      ---
      > cp -v $TEMPGLM $ACNTMAS
      diff file# 8 - jcl3.old/... vs jcl3/jgl320.ksh
      2 different of 10 files compared jcl3.old to jcl3

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

11B1. Mainframe Conversion Test/Debug Aids

uvcmp... data file comparison

As mentioned above, 'diff' is a marvelous utility, but does not work for files without lineFeeds & with packed/binary fields present. For these files UV Software provides the 'uvcmp' utilities - uvcopy jobs uvcmp1,2,3 & several scripts uvcmpFA1, uvcmpFE1, etc to make the uvcopy jobs easier to run.

Here is an example you can run using JCL/script 'jgl200' (listed on page '2D1' & executed on page '3M4'). jgl200 updates the account.master file with a transaction file while copying to a new output file. Since the account.master file is a GDG file, it is easy to compare the old & new master files without having to save the input file.


 #1. Login mvstest1 --> /home/mvstest1
     or Login yourself --> your homedir

 #2. cdd --> $HOME/testdata (alias cdd='cd $HOME/testdata)

 #3. joblog jgl200.ksh     <-- execute account.master update
     =================       - see joblog listed on page '3M4'

 #4. l data         <-- list data/... subdir after execution
     ======
      -rw-rw-r-- 1 mvstest1 apps 13952 Oct 18 15:11 gl.account.master_000001
      -rw-rw-r-- 1 mvstest1 apps 13952 Dec 13 11:31 gl.account.master_000002
      -rw-rw-r-- 1 mvstest1 apps  1600 Oct 18 15:11 gl.account.tran1
      -rw-rw-r-- 1 mvstest1 apps  1600 Oct 18 15:11 gl.account.trans_000001

 #5. mkdir rptcmp    <-- make subdir for comparison report
     ============        (if not already present)

 #6. uvcmpFA1 data/gl.account.master_000001 data/gl.account.master_000002 r128
     =========================================================================
     - compare the before & after update files, 'r128' specifies the record-size
     - may omit option 'r' on the command line & specify when prompted
     - writes difference report to rptcmp/gl.account.master_000001
       (ie - named same as 1st file compared)

Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

11B1. Mainframe Conversion Test/Debug Aids

demo uvcmpFA1 - file compare


 #7. vi rptcmp/gl.account.master_000001   <-- inspect difference report
     ==================================     - 1st 2 record pairs listed below:
 uvcmp1 - compare 2 files, print mismatched records, '*' flag diffs
 2011/12/13_11:32:34 uop=q1p30r256s6t500000u3x2y0q1r128
 recsize  reccount   file-size  typ Report=rptcmp/gl.account.master_000001
 1:  128       109      13,952  RSF  File1=data/gl.account.master_000001
 2:  128       109      13,952  RSF  File2=data/gl.account.master_000002
                       1         2         3         4         5         6
 f#record#byte# 0123456789012345678901234567890123456789012345678901234567890123
 ===============================================================================
 1       1    0  11100       11100Royal Bank Lynn Valley        ....b.20090131
                2333332222222333335676624666247662566667222222220010683333333322
                0111000000000111002F91C021EB0C9EE061CC590000000000972C2009013100
                                                                        ******
 2       1       11100       11100Royal Bank Lynn Valley        ....b.20111213
                2333332222222333335676624666247662566667222222220010683333333322
                0111000000000111002F91C021EB0C9EE061CC590000000000972C2011121300
                                                                        ******
                           - - - 5 record pairs omitted - - -
 ==================== EOF or StopPrint/StopRead count reached  ==============
 F1Count=109, F2Count=109, StopPrint=6, StopRead=500000
 F1Reads=109, MisMatches=109, MisMatsPrinted=6, Recsize=128

Notes re file compare

  1. 'uvcmpFA1' compares 2 ASCII files. See 'uvcmpFE1' to compare EBCDIC files. These assume record pairs & do not allow for inserted or deleted records. See uvcmpFAI2 & uvcmpFEI2 to allow for inserted & deleted records. See complete 'uvcmp' documentation at CMPjobs.htm.

  2. Mismatched record pairs are shown in vertical hexadecimal & differences highlight with '*'s. As you can see from the EOF statistics/counts all 109 records mismatch because the run date is inserted in all records.

  3. The StopPrint option default is 6, but I have removed the other 5 pairs to save space.

  4. The record size is 128, but only the 1st 64 bytes are shown because there was no difference in the last 64 byte segment. This feature dramatically reduces the size of difference reports when you have large records.

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    Permuted Index of Keywords from ** Headings **

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    1D5 $appsadm: modify $APPSADM/common_profile
    8M2 $jgdg: DUPLICATES due to new GDGs created in $JGDG tmpdirs
    6C2 $symbols: use $symbols for directories anywhere

    1C1 .bash_profile: stub_profile (.profile or .bash_profile)
    1D8 .bashrc: copy .bashrc/.kshrc to homedirs
    7P2 .bashrc: copy .bashrc/.kshrc to homedirs
    1D8 .kshrc: copy .bashrc/.kshrc to homedirs
    3C2 .kshrc: setup .profile & .kshrc
    7C2 .kshrc: setup .profile & .kshrc
    7P2 .kshrc: copy .bashrc/.kshrc to homedirs
    1C1 .profile: stub_profile (.profile or .bash_profile)
    3C2 .profile: setup .profile & .kshrc
    7C2 .profile: setup .profile & .kshrc

    1A1 Account: setup uvadm Vancouver Utilities admin account
    3O7 Activated: execute job with jobstop activated
    3N1 Activating: Activating Console-Logging
    1D6 Additional: optional changes to stub profiles
    1A1 Admin: setup uvadm Vancouver Utilities admin account
    1D1 Administrator: setup appsadm - Application Administrator
    1B3 Advantages: Advantages of stub_profile,& common_profile
    3B5 Advantages: of working above subdirs
    3E1 Aix: Alternative for AIX COBOL
    3F1 Aix: Alternative for AIX COBOL
    7G1 Aix: Alternative for AIX COBOL
    7H1 Aix: Alternative for AIX COBOL
    7H2 Aix: Alternative for AIX COBOL
    7H2 Aix: compile called programs & archive for linking AIX COBOL
    8B3 Aix: search/replace table for AIX COBOL
    8H1 Aix: Alternative for AIX COBOL
    8I1 Aix: Alternative for AIX COBOL
    8I2 Aix: Alternative for AIX COBOL
    8I3 Aix: compile called programs & archive for linking AIX COBOL
    8I4 Aix: compile called programs & archive for linking AIX COBOL
    8I4 Aix: determine AIX compile failures
    8I5 Aix: AIX compile failure analysis
    11A2 Alldiff2: script 'alldiff2' alternative to 'diff' utility
    5L1 Allowing: EBCDIC to ASCII Data Conversion allowing packed/binary
    7H3 Analysis: compile failure analysis
    8I5 Analysis: AIX compile failure analysis
    6C2 Anywhere: use $symbols for directories anywhere
    5C2 Appended: sales1a - ASCII with CR/LF appended
    1D1 Application: setup appsadm - Application Administrator
    1D1 Appsadm: vs uvadm
    1D1 Appsadm: setup appsadm - Application Administrator
    1D2 Appsadm: Create 'appsadm'
    1D3 Appsadm: Alternate directories for uvadm & appsadm
    1D3 Appsadm: Setup 'appsadm'
    1D4 Appsadm: modify /home/appsadm/stub_profile
    3M8 Appsadm: mailsmtp.log - IEBGENER/SMTP to appsadm
    7H2 Archive: compile called programs & archive for linking AIX COBOL
    8I3 Archive: compile called programs & archive for linking AIX COBOL
    8I4 Archive: compile POC2 programs & link with called program archive
    8I4 Archive: compile called programs & archive for linking AIX COBOL
    1B2 Are: Profiles are vital for Unix/Linux
    5A1 Ascii: FTP ASCII mode - corrections required
    5B2 Ascii: FTP ASCII with demo files
    5C2 Ascii: sales1a - ASCII with CR/LF appended
    5D1 Ascii: correcting zoned signs after FTP ASCII mode
    5E1 Ascii: correcting Record-Length from FTP ASCII mode
    5L1 Ascii: EBCDIC to ASCII Data Conversion allowing packed/binary
    5L2 Ascii: more complex EBCDIC to ASCII conversions
    6A2 Ascii: more complex EBCDIC to ASCII conversions
    6B3 Ascii: GENERATING jobs to convert DATA files to ASCII
    6D4 Ascii: Notes re ASCII output file
    6D4 Ascii: d2asc/custmas - investigate ASCII output file
    6D4 Ascii: execute EBCDIC to ASCII conversion
    6D8 Ascii: notes re EBCDIC to ASCII uvcopy job
    6D8 Ascii: pfx1/custmas - job to convert EBCDIC to ASCII
    6E4 Ascii: Notes re ASCII output file
    6E4 Ascii: d2asc/saledtl - investigate ASCII output file
    6E8 Ascii: notes re EBCDIC to ASCII uvcopy job
    6E8 Ascii: pfx1/saledtl - job to convert EBCDIC to ASCII
    6F1 Ascii: uvcpsalesA2E - demo ASCII to EBCDIC (no packed/binary)
    6G1 Ascii: Op Instrns - convert custmas ASCII to EBCDIC
    6G2 Ascii: notes re ASCII to EBCDIC uvcopy job
    6G2 Ascii: pfy1/custmas - job to convert EBCDIC to ASCII
    6I1 Ascii: gencnvD2 - generate EBCDIC to ASCII Data Conversions
    6I2 Ascii: gencnvE - generate EBCDIC to ASCII Data conversions
    8H1 Available: repeat JCL conversion if LISTCAT available
    8L1 Available: repeat JCL conversion if LISTCAT available

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    6B3 Batch-files: generating batch-files to create & load tables
    5E2 Best: Best of Both Worlds
    5L1 Binary: EBCDIC to ASCII Data Conversion allowing packed/binary
    5L2 Binary: unpacking all packed/binary fields
    6A2 Binary: unpacking all packed/binary fields
    6B1 Binary: must FTP packed/binary files in BINARY mode
    6B1 Binary: must FTP packed/binary files in BINARY mode
    6F1 Binary: uvcpsalesA2E - demo ASCII to EBCDIC (no packed/binary)
    5E2 Both: Best of Both Worlds
    5G2 Byte: alternative - inserting LF in last byte original recsize

    1C2 Called: common_profile - called by stub_profile
    7H2 Called: compile called programs & archive for linking AIX COBOL
    8D1 Called: sample crossref COBOL programs called by JCL/scripts
    8I3 Called: compile called programs & archive for linking AIX COBOL
    8I3 Called: create script to select all called programs
    8I3 Called: sample crossref called programs vs calling programs
    8I4 Called: compile POC2 programs & link with called program archive
    8I4 Called: compile called programs & archive for linking AIX COBOL
    8I4 Called: output script to select called programs
    8I3 Calling: sample crossref called programs vs calling programs
    8M1 Calling: sample crossref DATA FILEs & calling JCLs
    9B3 Calling: Executing JCL/script calling quikjob/uvcopy
    9C3 Calling: Executing JCL/script calling EasyTrieve/uvcopy
    8C1 Cbl0: why initial select converted jcl3 & cbls vs jcl0 & cbl0
    8C1 Cbls: why initial select converted jcl3 & cbls vs jcl0 & cbl0
    8C2 Cbls: initial select converted jcl3 & cbls for crossrefs
    8D2 Cbls: execute script to select desired cbls programs
    8D2 Cbls: output script to select cbls programs
    4K1 Cbls_copybooks: 4K1. cbls_copybooks - copybooks used by all programs
    4K1 Cbls_orgtypes: 4K2. cbls_ORGtypes - file ORGANIZATION types
    3O6 Check: new GDG files
    6D7 Check: pfp1/custmas.dat - check the pipe delimited file
    6D3 Checking: results of custmas conversion
    6E3 Checking: results of saledtl conversion
    3J1 Cleanup: TeraData SQL parameters
    3J1 Cleanup: tdsql0 --> tdsql1 --> tdsqls
    7J1 Cleanup: TeraData SQL parameters
    7J1 Cleanup: tdsql0 --> tdsql1 --> tdsqls
    1E2 Cnvdata: RUNLIBS, RUNDATA,& CNVDATA - Concepts
    6B2 Cnvdatadirs: notes re cnvdatadirs
    6D5 Cobmap: converting the copybook to a 'cobmap'
    6D5 Cobmap: maps/custmas - cobmap report
    6E5 Cobmap: converting the copybook to a 'cobmap'
    6E5 Cobmap: maps/saledtl - cobmap report
    3A1 Cobol: 1. converting UV Software demo JCL/COBOL
    3A1 Cobol: 2. transfer ALL your JCL/COBOL to unix & initial convert
    3A1 Cobol: 3. select small set of JCL/COBOL/DATA for POC
    3D3 Cobol: copy COBOL copybooks for conversion demo
    3D3 Cobol: copy COBOL programs for conversion demo
    3E1 Cobol: Alternative for AIX COBOL
    3F1 Cobol: Alternative for AIX COBOL
    3F1 Cobol: Converting Mainframe COBOL to Unix/Linux
    3F1 Cobol: script to perform all COBOL conversion steps
    3F3 Cobol: console log from COBOL program conversion
    3F4 Cobol: compiling the COBOL programs
    3F4 Cobol: console log from compiling COBOL programs
    3H1 Cobol: xrefall - create all JCL/COBOL cross-refs
    3M1 Cobol: jar100.log - 1 step COBOL
    3M2 Cobol: jar200.log - SORT + COBOL
    3M3 Cobol: jgl100.log - GDG files with COBOL
    3M4 Cobol: jgl200.log - GDG files + SORT + COBOL
    4A1 Cobol: xrefall - create all JCL/COBOL cross-refs
    4H1 Cobol: COBOL Files Report
    7A1 Cobol: 1. converting UV Software demo JCL/COBOL
    7A1 Cobol: 2. transfer ALL your JCL/COBOL to unix & initial convert
    7A1 Cobol: 3. select small set of JCL/COBOL/DATA for POC
    7B2 Cobol: subdirs for LIBRARY (JCL,COBOL,etc) conversions
    7D1 Cobol: Op. Instrns. to convert JCL/COBOL/DATA
    7D2 Cobol: copy Your JCL/COBOL for conversion
    7G1 Cobol: Alternative for AIX COBOL
    7H1 Cobol: Alternative for AIX COBOL
    7H1 Cobol: Converting Mainframe COBOL to Unix/Linux
    7H2 Cobol: Alternative for AIX COBOL
    7H2 Cobol: compile called programs & archive for linking AIX COBOL
    7H2 Cobol: compiling the COBOL programs
    7L1 Cobol: xrefall - create all JCL/COBOL cross-refs
    8A1 Cobol: JCL/COBOL POC select/convert
    8A1 Cobol: selected JCL/COBOL/DATA to be copied to 'POC2' dirs
    8B1 Cobol: Setups to convert selected POC JCL/COBOL
    8B2 Cobol: copy/modify control files for JCL & COBOL conversion
    8B3 Cobol: search/replace table for AIX COBOL
    8D1 Cobol: create script to select COBOL programs required
    8D1 Cobol: sample crossref COBOL programs called by JCL/scripts
    8H1 Cobol: Alternative for AIX COBOL
    8I1 Cobol: Alternative for AIX COBOL
    8I1 Cobol: Converting Mainframe COBOL to Unix/Linux
    8I2 Cobol: Alternative for AIX COBOL
    8I2 Cobol: compiling the COBOL programs
    8I3 Cobol: compile called programs & archive for linking AIX COBOL
    8I4 Cobol: compile called programs & archive for linking AIX COBOL
    8J1 Cobol: xrefall - create all JCL/COBOL cross-refs
    7E2 Combine: LISTCAT info with other sources
    3O3 Comment: #comment/replace 3rd party utilities
    3O3 Commented: option to convert DELETEs to #commented '#rm's
    10D1 Common.ini: listing of common.ini
    1C3 Common.ini: control-M stub.ini & common.ini
    1B2 Common_profile:
    1B3 Common_profile: Advantages of stub_profile,& common_profile
    1C2 Common_profile: - called by stub_profile
    1D5 Common_profile: modify $APPSADM/common_profile
    11B1 Compare: Notes re file compare
    11B1 Compare: demo uvcmpFA1 - file compare
    6E11 Compare: reconverted data to original
    11A1 Comparison: diff - Unix/Linux file comparison
    11B1 Comparison: uvcmp... data file comparison
    7H2 Compile: called programs & archive for linking AIX COBOL
    7H3 Compile: failure analysis
    8I3 Compile: called programs & archive for linking AIX COBOL
    8I4 Compile: POC2 programs & link with called program archive
    8I4 Compile: called programs & archive for linking AIX COBOL
    8I4 Compile: determine AIX compile failures
    8I5 Compile: AIX compile failure analysis
    1A2 Compiling: Vancouver Utility C Programs
    3F4 Compiling: the COBOL programs
    3F4 Compiling: console log from compiling COBOL programs
    7H2 Compiling: the COBOL programs
    8I2 Compiling: the COBOL programs
    8A2 Complement: max complement of testlibs subdirs for conversion
    8E1 Components: run xrefall & generate all scripts to select '0' components
    8E2 Components: generated scripts to select all components
    8E3 Components: execute scripts to select all components
    1E2 Concepts: RUNLIBS, RUNDATA,& CNVDATA - Concepts
    3M5 Cond: jgl300.log - IEBGENER + IDCAMS + COND
    7O1 Considerations: Considerations for "real conversion" vs POC
    3E3 Console: log from jcl2ksh51A
    3F2 Console: log from copybook conversion
    3F3 Console: log from COBOL program conversion
    3F4 Console: log from compiling COBOL programs
    3I2 Console: log from generating GDG control file
    3K2 Console: log from executing jar100.ksh
    3L1 Console: Notes re Console Logging
    5J1 Console: log from splitfile2
    8E3 Console: log from runall sf
    3L1 Console-logging: Console-Logging & Job-Logging
    3N1 Console-logging: Activating Console-Logging
    10E5 Control: setup control subdirs & FTP jcls.zip/ctl.zip
    3E1 Control: JCL converter control file
    3I2 Control: Alternate location for GDG control file
    3I2 Control: console log from generating GDG control file
    6H1 Control: sample control file
    6H1 Control: using control file to insert datafilenames vs copybooknames
    6H3 Control: generating pipe|delimit jobs via control file
    7D4 Control: sample control file
    7D4 Control: using control file to insert datafilenames vs copybooknames
    7D5 Control: generating pipe|delimit jobs via control file
    7F1 Control: JCL converter control file
    7G1 Control: file prompt 'I' or 'E' response
    7M2 Control: Alternate location for GDG control file
    8B2 Control: copy/modify control files for JCL & COBOL conversion
    8L1 Control: recreate LISTCAT control file ctl/datacat52
    8N1 Control: create the GDG control file
    7D2 Control-files: copy control-files from uvadm
    10A1 Control-m: control-M Overview
    10B1 Control-m: Control-M subdirs required
    10E1 Control-m: transfer Test system to control-M production
    10E3 Control-m: create jcls.zip/ctl.zip for transfer to control-M
    1C3 Control-m: control-M stub.ini & common.ini
    10E4 Control_m: setup for new system on control_M production
    3E1 Converter: JCL converter control file
    7F1 Converter: JCL converter control file
    7N1 Converter: copy scripts from converter outdir to execution dir
    8O1 Converter: copy scripts from converter outdir to execution dir
    8A1 Copied: selected JCL/COBOL/DATA to be copied to 'POC2' dirs
    1D7 Copy: #13. copy 'stub' profiles to homedirs
    1D8 Copy: .bashrc/.kshrc to homedirs
    3D2 Copy: JCLs for conversion demo
    3D2 Copy: PROCs for conversion demo
    3D2 Copy: Parms for conversion demo
    3D3 Copy: COBOL copybooks for conversion demo
    3D3 Copy: COBOL programs for conversion demo
    3D4 Copy: DATA for JCL/script demos
    7D2 Copy: Your JCL/COBOL for conversion
    7D2 Copy: control-files from uvadm
    7D3 Copy: DATA for JCL/scripts
    7N1 Copy: scripts from converter outdir to execution dir
    7P1 Copy: 'stub' profiles to homedirs
    7P2 Copy: .bashrc/.kshrc to homedirs
    8B2 Copy: copy/modify control files for JCL & COBOL conversion
    8E1 Copy: generate all copy/select scripts
    8E5 Copy: xref2cpA - generate all copy/selects from crossrefs
    8O1 Copy: scripts from converter outdir to execution dir
    3F2 Copybook: console log from copybook conversion
    4F1 Copybook: 4F2. xcobcopy2 - all programs using each copybook
    6D5 Copybook: converting the copybook to a 'cobmap'
    6D7 Copybook: listpipeA - list pipe delimited - with copybook fieldnames
    6E5 Copybook: converting the copybook to a 'cobmap'
    6E7 Copybook: listpipeA - list pipe delimited - with copybook fieldnames
    6H1 Copybooknames: using control file to insert datafilenames vs copybooknames
    7D4 Copybooknames: using control file to insert datafilenames vs copybooknames
    3D3 Copybooks: copy COBOL copybooks for conversion demo
    4F1 Copybooks: 4F1. xcobcopy1 - all copybooks used in each program
    4K1 Copybooks: 4K1. cbls_copybooks - copybooks used by all programs
    5E2 Correct: data/sales1a - AFTER recsize correct & LF insert
    5G1 Correct: using 'uvhd' (vs uvcp) to correct zoned signs
    5D1 Correcting: zoned signs after FTP ASCII mode
    5E1 Correcting: Record-Length from FTP ASCII mode
    5J1 Correcting: wrong-size records
    5D1 Correction: ftp/sales1a - AFTER sign correction
    5D1 Correction: ftp/sales1a - BEFORE sign correction
    5E1 Correction: data/sales1a - AFTER record-length correction
    5E1 Correction: ftp/sales1a - BEFORE record-length correction
    5A1 Corrections: FTP ASCII mode - corrections required
    5H1 Corrupted: Detecting corrupted files from FTP
    5H1 Corrupted: ftp/sales1x - corrupted file
    5H2 Corrupted: use uvhd to detect corrupted file
    3H1 Counts: create stats, table summary counts of JCLs,programs,etc
    4A1 Counts: statistics (table summary counts)
    7L1 Counts: create stats, table summary counts of JCLs,programs,etc
    8J1 Counts: create stats, table summary counts of JCLs,programs,etc
    1C4 Cron: permissions vital for nightly cron jobs
    3H1 Cross-references: create Cross-References & Statistics
    7L1 Cross-references: create Cross-References & Statistics
    8J1 Cross-references: create Cross-References & Statistics
    3H1 Cross-refs: xrefall - create all JCL/COBOL cross-refs
    4A1 Cross-refs: xrefall - create all JCL/COBOL cross-refs
    7L1 Cross-refs: xrefall - create all JCL/COBOL cross-refs
    8J1 Cross-refs: xrefall - create all JCL/COBOL cross-refs
    8D1 Crossref: sample crossref COBOL programs called by JCL/scripts
    8D1 Crossref: xref2cp1 - create selection script from crossref
    8I3 Crossref: sample crossref called programs vs calling programs
    8M1 Crossref: sample crossref DATA FILEs & calling JCLs
    4A2 Crossrefs: xrefallparm - extra crossrefs for parms
    4A2 Crossrefs: xrefalltdsql - crossrefs for TeraData SQLs
    8C2 Crossrefs: initial select converted jcl3 & cbls for crossrefs
    8E5 Crossrefs: xref2cpA - generate all copy/selects from crossrefs
    8L1 Ctl: recreate LISTCAT control file ctl/datacat52
    10E3 Ctl.zip: create jcls.zip/ctl.zip for transfer to control-M
    10E5 Ctl.zip: setup control subdirs & FTP jcls.zip/ctl.zip
    6D3 Custmas: checking results of custmas conversion
    6D3 Custmas: d1ebc/custmas - investigate EBCDIC input file
    6D4 Custmas: d2asc/custmas - investigate ASCII output file
    6D5 Custmas: maps/custmas - cobmap report
    6D6 Custmas: sample 'uvhdcob' display for custmas
    6D8 Custmas: pfx1/custmas - job to convert EBCDIC to ASCII
    6D9 Custmas: pfp1/custmas - job to create pipe delimited
    6G1 Custmas: Op Instrns - convert custmas ASCII to EBCDIC
    6G2 Custmas: pfy1/custmas - job to convert EBCDIC to ASCII
    6D7 Custmas.dat: pfp1/custmas.dat - check the pipe delimited file
    6D1 Customer: GENERATE jobs to convert Customer master
    6D2 Customer: EXECUTE jobs to convert Customer master

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    6D3 D1ebc: d1ebc/custmas - investigate EBCDIC input file
    6E3 D1ebc: d1ebc/saledtl - investigate EBCDIC input file
    6D4 D2asc: d2asc/custmas - investigate ASCII output file
    6E4 D2asc: d2asc/saledtl - investigate ASCII output file
    6E6 D2asc: 'uvhdcob' display for d2asc/saledtl
    11B1 Data: uvcmp... data file comparison
    1B3 Data: RUNLIBS & RUNDATA determine PATHs to programs/scripts & data
    3A1 Data: 3. select small set of JCL/COBOL/DATA for POC
    3B3 Data: subdirs for test/demo executions
    3B3 Data: subdirs for DATA conversion
    3D4 Data: Notes re DATA files
    3D4 Data: copy DATA for JCL/script demos
    3O1 Data: file debug strategies
    4L1 Data: mvsfiles5A - data file trace in MVS JCL
    4L1 Data: xmvs/mvsfiles3 sample data file trace
    4L2 Data: xmvs/mvsfiles5 sample data file trace
    4L3 Data: xmvs/mvsfiles6 sample data file trace
    5A1 Data: problems FTP'ing mainframe data files to unix
    5B1 Data: FTP data from Mainframe to Unix/Linux
    5E1 Data: data/sales1a - AFTER record-length correction
    5E2 Data: data/sales1a - AFTER recsize correct & LF insert
    5L1 Data: EBCDIC to ASCII Data Conversion allowing packed/binary
    5L2 Data: converting data files to database tables
    6A1 Data: Data File Conversion - Overview
    6A2 Data: converting data files to database tables
    6B1 Data: minimal subdirs for DATA conversion
    6B1 Data: setup to perform DATA file conversions
    6B3 Data: GENERATING jobs to convert DATA files to ASCII
    6C1 Data: convert VU demo data files - Overview
    6E11 Data: compare reconverted data to original
    6H2 Data: Executing jobs to convert ALL data files
    6H3 Data: Executing jobs to pipe delimit ALL data files
    6I1 Data: gencnvD2 - generate EBCDIC to ASCII Data Conversions
    6I2 Data: gencnvE - generate EBCDIC to ASCII Data conversions
    7A1 Data: 3. select small set of JCL/COBOL/DATA for POC
    7B3 Data: subdirs for test/demo executions
    7B3 Data: subdirs for DATA conversion
    7D1 Data: Op. Instrns. to convert JCL/COBOL/DATA
    7D3 Data: Notes re DATA files
    7D3 Data: copy DATA for JCL/scripts
    7D5 Data: Executing jobs to convert ALL data files
    7D5 Data: Executing jobs to pipe delimit ALL data files
    8A1 Data: selected JCL/COBOL/DATA to be copied to 'POC2' dirs
    8M1 Data: sample crossref DATA FILEs & calling JCLs
    4B2 Data-file: xkshfile2 - scripts using each data-file
    3O4 Data-files: prepare data-files for debug
    8M1 Data-files: determine DATA-FILEs required for POC2 tests
    8M2 Data-files: output script to select DATA-FILEs
    8M3 Data-files: execute script to select DATA-FILEs
    8M3 Data-files: mvsfiles5A alternative select DATA-FILEs
    5L2 Database: converting data files to database tables
    6A2 Database: converting data files to database tables
    8L1 Datacat52: recreate LISTCAT control file ctl/datacat52
    6H1 Datafilenames: using control file to insert datafilenames vs copybooknames
    7D4 Datafilenames: using control file to insert datafilenames vs copybooknames
    4B1 Datafiles: xkshfile1 - list datafiles in each script
    3B4 Debug: test/debug tips for difficult jobs
    3O1 Debug: Test/debug JCL/scripts
    3O1 Debug: data file debug strategies
    3O2 Debug: modify JCL/script for test/debug
    3O4 Debug: prepare data-files for debug
    3O5 Debug: test/debug executions
    3O3 Deletes: option to convert DELETEs to #commented '#rm's
    6B3 Delimit: generating pipe delimit jobs
    6H3 Delimit: Executing jobs to pipe delimit ALL data files
    7D5 Delimit: Executing jobs to pipe delimit ALL data files
    6D7 Delimited: listpipeA - list pipe delimited - with copybook fieldnames
    6D7 Delimited: pfp1/custmas.dat - check the pipe delimited file
    6D9 Delimited: pfp1/custmas - job to create pipe delimited
    6E7 Delimited: listpipeA - list pipe delimited - with copybook fieldnames
    6E7 Delimited: pfp1/saledtl.dat - pipe delimited
    6E9 Delimited: pfp1/saledtl - job to create pipe delimited
    11B1 Demo: uvcmpFA1 - file compare
    3A1 Demo: 1. converting UV Software demo JCL/COBOL
    3B2 Demo: test/demo LIBRARIES supplied by UV Software
    3B3 Demo: data subdirs for test/demo executions
    3B4 Demo: test/demo JCL conversion in mvstest1 or your homedir
    3D1 Demo: setup directories for demo conversions
    3D2 Demo: copy JCLs for conversion demo
    3D2 Demo: copy PROCs for conversion demo
    3D2 Demo: copy Parms for conversion demo
    3D3 Demo: copy COBOL copybooks for conversion demo
    3D3 Demo: copy COBOL programs for conversion demo
    3K1 Demo: Executing test/demo sample scripts
    3K1 Demo: execute jar100.ksh demo script
    3M0 Demo: executing other demo JCL/scripts
    5B2 Demo: FTP ASCII with demo files
    6C1 Demo: convert VU demo data files - Overview
    6F1 Demo: uvcpsalesA2E - demo ASCII to EBCDIC (no packed/binary)
    7A1 Demo: 1. converting UV Software demo JCL/COBOL
    7B3 Demo: data subdirs for test/demo executions
    3D4 Demos: copy DATA for JCL/script demos
    5K1 Desired: splitfile2 - uvcopy job to select desired rec-size
    8D2 Desired: execute script to select desired cbls programs
    6E1 Detail: GENERATE jobs to convert Sales Detail
    6E2 Detail: EXECUTE jobs to convert Sales Detail
    5H2 Detect: use uvhd to detect corrupted file
    5H1 Detecting: Detecting corrupted files from FTP
    11A1 Diff: - Unix/Linux file comparison
    11A1 Diff: example - verify program changes
    11A2 Diff: example - verify option change
    11A2 Diff: script 'alldiff2' alternative to 'diff' utility
    3B4 Difficult: test/debug tips for difficult jobs
    7N1 Dir: copy scripts from converter outdir to execution dir
    8O1 Dir: copy scripts from converter outdir to execution dir
    1C4 Directories: permissions directories 775 & files 664
    1D3 Directories: Alternate directories for uvadm & appsadm
    1F1 Directories: for RUNLIBS & RUNDATA
    3D1 Directories: setup directories for demo conversions
    6C2 Directories: use $symbols for directories anywhere
    7D1 Directories: setup directories for Your conversions
    1A3 Directory: uvadm - Vancouver Utility home directory
    1E1 Directory: Directory & File-Design - Principles
    3B5 Directory: stay in the 'working directory'
    8A1 Dirs: selected JCL/COBOL/DATA to be copied to 'POC2' dirs
    6D6 Display: sample 'uvhdcob' display for custmas
    6E6 Display: 'uvhdcob' display for d2asc/saledtl
    5L2 Documented: Conversions Documented in MVSJCLtest Part 6
    6A2 Documented: Conversions Documented here in MVSJCLtest Part 6
    1A1 Download: Download/Install Vancouver Utilities
    5G2 Drop: using 'uvhd' (vs uvcp) to drop CR/LF
    5J1 Dropping: dropping/separating wrong-size records
    8I5 Dscrptns: sample output#4 - table summary of Err-Codes & Dscrptns
    8M2 Due: DUPLICATES due to new GDGs created in $JGDG tmpdirs
    8M2 Duplicates: DUPLICATES due to new GDGs created in $JGDG tmpdirs

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    3G2 Easytrieve: 3G2. select EasyTrieve from parms & convert to uvcopy
    3M10 Easytrieve: eztlist.log - EasyTrieve to uvcopy
    9C1 Easytrieve: converting EasyTrieve to uvcopy
    9C1 Easytrieve: sample EasyTrieve code
    9C2 Easytrieve: EasyTrieve converted to uvcopy code
    9C3 Easytrieve: Executing JCL/script calling EasyTrieve/uvcopy
    7K1 Easytrieves: 7K2. select EasyTrieves from parms & convert to uvcopy
    8N1 Easytrieves: select EasyTrieves from parms & convert to uvcopy
    5C1 Ebcdic: sales0 - EBCDIC recsize=64
    5L1 Ebcdic: EBCDIC to ASCII Data Conversion allowing packed/binary
    5L2 Ebcdic: more complex EBCDIC to ASCII conversions
    6A2 Ebcdic: more complex EBCDIC to ASCII conversions
    6D3 Ebcdic: d1ebc/custmas - investigate EBCDIC input file
    6D3 Ebcdic: notes re EBCDIC input file
    6D4 Ebcdic: execute EBCDIC to ASCII conversion
    6D8 Ebcdic: notes re EBCDIC to ASCII uvcopy job
    6D8 Ebcdic: pfx1/custmas - job to convert EBCDIC to ASCII
    6E3 Ebcdic: d1ebc/saledtl - investigate EBCDIC input file
    6E3 Ebcdic: notes re EBCDIC input file
    6E8 Ebcdic: notes re EBCDIC to ASCII uvcopy job
    6E8 Ebcdic: pfx1/saledtl - job to convert EBCDIC to ASCII
    6F1 Ebcdic: uvcpsalesA2E - demo ASCII to EBCDIC (no packed/binary)
    6G1 Ebcdic: Op Instrns - convert custmas ASCII to EBCDIC
    6G2 Ebcdic: notes re ASCII to EBCDIC uvcopy job
    6G2 Ebcdic: pfy1/custmas - job to convert EBCDIC to ASCII
    6I1 Ebcdic: gencnvD2 - generate EBCDIC to ASCII Data Conversions
    6I2 Ebcdic: gencnvE - generate EBCDIC to ASCII Data conversions
    3M6 Else: jgl320.log - IEBGENER + IDCAMS + IF/THEN/ELSE
    1B1 Env: 'profiles' provided in /home/uvadm/env
    8I5 Err-codes: sample output#4 - table summary of Err-Codes & Dscrptns
    4L4 Essential: mvsfiles5A - determine essential files
    11A1 Example: diff example - verify program changes
    11A2 Example: diff example - verify option change
    3K1 Execute: jar100.ksh demo script
    3O7 Execute: job with jobstop activated
    6D2 Execute: EXECUTE jobs to convert Customer master
    6D4 Execute: EBCDIC to ASCII conversion
    6E2 Execute: EXECUTE jobs to convert Sales Detail
    7N1 Execute: Execute JCL/scripts
    8D2 Execute: script to select desired cbls programs
    8E3 Execute: scripts to select all components
    8M3 Execute: script to select DATA-FILEs
    8O1 Execute: Execute POC scripts
    4D1 Executed: xkshproc1 - all PROCs executed in each script
    4E1 Executed: 4E1. xkshprog1 - programs executed in each script
    4J1 Executed: 4J1. jcl3_programs - programs executed by scripts
    3K1 Executing: Executing test/demo sample scripts
    3K2 Executing: console log from executing jar100.ksh
    3M0 Executing: other demo JCL/scripts
    4D1 Executing: 4D2. xkshproc2 - all scripts executing each PROC
    4E2 Executing: xkshprog2 - all scripts executing each program
    6B4 Executing: EXECUTING conversion jobs on unix/linux
    6B4 Executing: conversion jobs on Windows Server
    6H2 Executing: Executing jobs to convert ALL data files
    6H3 Executing: Executing jobs to pipe delimit ALL data files
    7D5 Executing: Executing jobs to convert ALL data files
    7D5 Executing: Executing jobs to pipe delimit ALL data files
    9B3 Executing: Executing JCL/script calling quikjob/uvcopy
    9C3 Executing: Executing JCL/script calling EasyTrieve/uvcopy
    7N1 Execution: copy scripts from converter outdir to execution dir
    8O1 Execution: copy scripts from converter outdir to execution dir
    3B3 Executions: data subdirs for test/demo executions
    3O5 Executions: test/debug executions
    7B3 Executions: data subdirs for test/demo executions
    4J1 Exportgens: 4J2. jcl3_exportfiles(nonGDG) & exportgens(GDGs)
    4G1 External-file: 4G1. xcobfile2 - all PROGRAMS using each external-file
    4A2 Extra: xrefallparm - extra crossrefs for parms
    3M10 Eztlist: sample output
    2J1 Eztlist.jcl: EZTLIST.jcl
    2J1 Eztlist.ksh:
    3M10 Eztlist.log: - EasyTrieve to uvcopy

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    3P2 Failure: RERUN after failure WITHOUT RESTART
    3P3 Failure: RERUN after failure WITH RESTART
    7H3 Failure: compile failure analysis
    8I5 Failure: AIX compile failure analysis
    8I4 Failures: determine AIX compile failures
    6D7 Fieldnames: listpipeA - list pipe delimited - with copybook fieldnames
    6E7 Fieldnames: listpipeA - list pipe delimited - with copybook fieldnames
    5L2 Fields: unpacking all packed/binary fields
    6A2 Fields: unpacking all packed/binary fields
    6D6 Fields: notes re 'occurs' fields
    1E1 File-design: Directory & File-Design - Principles
    4J4 Filenames: 4J4. jcl3_filenames - all filenames in ksh/scripts
    5I1 Finding: wrong-size records in large files
    8N1 Fix: isolate/fix TeraData SQL parameters
    6B3 Fixed-field: generating jobs to convert pipe|delimited to Fixed-field
    6E10 Fixed-field: pfq1/saledtl - convert Pipe|Delimited to Fixed-Field
    6E2 Fixed-field: optional conversion pipe|delimited to Fixed-field
    10E5 Ftp: setup control subdirs & FTP jcls.zip/ctl.zip
    3M7 Ftp: ftpput1.log - FTP (to same machine)
    5A1 Ftp: FTP ASCII mode - corrections required
    5A1 Ftp: problems FTP'ing mainframe data files to unix
    5B1 Ftp: FTP data from Mainframe to Unix/Linux
    5B2 Ftp: FTP ASCII with demo files
    5C1 Ftp: investigate files FTP'd from mainframe
    5D1 Ftp: correcting zoned signs after FTP ASCII mode
    5D1 Ftp: ftp/sales1a - AFTER sign correction
    5D1 Ftp: ftp/sales1a - BEFORE sign correction
    5E1 Ftp: correcting Record-Length from FTP ASCII mode
    5E1 Ftp: ftp/sales1a - BEFORE record-length correction
    5H1 Ftp: Detecting corrupted files from FTP
    5H1 Ftp: ftp/sales1x - corrupted file
    6B1 Ftp: must FTP packed/binary files in BINARY mode
    2G1 Ftpput1.jcl: FTPPUT1.jcl
    2G1 Ftpput1.ksh: 2G2. ftpput1.ksh
    3M7 Ftpput1.ksh: Notes re 'ftpput1.ksh'
    3M7 Ftpput1.log: - FTP (to same machine)

    3I2 Gdg: Alternate location for GDG control file
    3I2 Gdg: console log from generating GDG control file
    3M3 Gdg: jgl100.log - GDG files with COBOL
    3M4 Gdg: jgl200.log - GDG files + SORT + COBOL
    3O6 Gdg: check new GDG files
    3P1 Gdg: GDG files & step Restart
    6C2 Gdg: GDG files
    7M2 Gdg: Alternate location for GDG control file
    8N1 Gdg: create the GDG control file
    3I1 Gdgctl: creating the gdgctl file
    7M1 Gdgctl: creating the gdgctl file
    4J1 Gdgs: 4J2. jcl3_exportfiles(nonGDG) & exportgens(GDGs)
    8M2 Gdgs: DUPLICATES due to new GDGs created in $JGDG tmpdirs
    6D1 Gencnva: gencnvA alternative to gencnvD2
    6E1 Gencnva: gencnvA alternative to gencnvD2
    6D1 Gencnvd2: gencnvA alternative to gencnvD2
    6E1 Gencnvd2: gencnvA alternative to gencnvD2
    6I1 Gencnvd2: gencnvD2 - generate EBCDIC to ASCII Data Conversions
    6I2 Gencnve: gencnvE - generate EBCDIC to ASCII Data conversions
    6D1 Generate: GENERATE jobs to convert Customer master
    6E1 Generate: GENERATE jobs to convert Sales Detail
    6I1 Generate: gencnvD2 - generate EBCDIC to ASCII Data Conversions
    6I2 Generate: gencnvE - generate EBCDIC to ASCII Data conversions
    8E1 Generate: all copy/select scripts
    8E1 Generate: run xrefall & generate all scripts to select '0' components
    8E5 Generate: xref2cpA - generate all copy/selects from crossrefs
    8E2 Generated: scripts to select all components
    3I2 Generating: console log from generating GDG control file
    6B3 Generating: GENERATING jobs to convert DATA files to ASCII
    6B3 Generating: batch-files to create & load tables
    6B3 Generating: jobs to convert pipe|delimited to Fixed-field
    6B3 Generating: pipe delimit jobs
    6H3 Generating: pipe|delimit jobs via control file
    7D5 Generating: pipe|delimit jobs via control file

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    6A2 Here: Conversions Documented here in MVSJCLtest Part 6
    1A3 Home: uvadm - Vancouver Utility home directory
    1B1 Home: 'profiles' provided in /home/uvadm/env
    1D4 Home: modify /home/appsadm/stub_profile
    3B4 Homedir: test/demo JCL conversion in mvstest1 or your homedir
    3B4 Homedir: testdata in mvstest1 or your homedir
    7C1 Homedir: setup mvstest2 or your homedir for Your conversion
    1D7 Homedirs: #13. copy 'stub' profiles to homedirs
    1D8 Homedirs: copy .bashrc/.kshrc to homedirs
    3B1 Homedirs: HomeDirs for JCL conversions & testing
    7B1 Homedirs: HomeDirs for JCL conversions & testing
    7P1 Homedirs: copy 'stub' profiles to homedirs
    7P2 Homedirs: copy .bashrc/.kshrc to homedirs

    3M5 Idcams: jgl300.log - IEBGENER + IDCAMS + COND
    3M6 Idcams: jgl320.log - IEBGENER + IDCAMS + IF/THEN/ELSE
    3M5 Iebgener: jgl300.log - IEBGENER + IDCAMS + COND
    3M6 Iebgener: jgl320.log - IEBGENER + IDCAMS + IF/THEN/ELSE
    3M8 Iebgener: mailsmtp.log - IEBGENER/SMTP to appsadm
    8L1 Include: reconvert JCL to include LISTCAT info
    7E2 Info: combine LISTCAT info with other sources
    8L1 Info: reconvert JCL to include LISTCAT info
    5A1 Ing: problems FTP'ing mainframe data files to unix
    5E2 Insert: data/sales1a - AFTER recsize correct & LF insert
    6H1 Insert: using control file to insert datafilenames vs copybooknames
    7D4 Insert: using control file to insert datafilenames vs copybooknames
    5G2 Inserting: alternative - inserting LF in last byte original recsize
    1A1 Install: Download/Install Vancouver Utilities
    1A1 Install: Install Vancouver Utilities - short version
    6G1 Instrns: Op Instrns - convert custmas ASCII to EBCDIC
    4I1 Instrns.: OP. Instrns. for statksh1 & statcbl1
    7D1 Instrns.: Op. Instrns. to convert JCL/COBOL/DATA
    7E1 Instrns.: Op. Instrns. for Multiple LISTCAT files
    5C1 Investigate: files FTP'd from mainframe
    6D3 Investigate: d1ebc/custmas - investigate EBCDIC input file
    6D4 Investigate: d2asc/custmas - investigate ASCII output file
    6E3 Investigate: d1ebc/saledtl - investigate EBCDIC input file
    6E4 Investigate: d2asc/saledtl - investigate ASCII output file
    8N1 Isolate: isolate/fix TeraData SQL parameters

    2A1 Jar100.jcl: JAR100.jcl
    2A1 Jar100.ksh: 2A2. jar100.ksh
    3K1 Jar100.ksh: execute jar100.ksh demo script
    3K2 Jar100.ksh: console log from executing jar100.ksh
    3L2 Jar100.ksh: re-execute jar100.ksh with job-logging
    3M1 Jar100.ksh: Notes re 'jar100.ksh'
    3L2 Jar100.log: joblog/jar100.log
    3M1 Jar100.log: - 1 step COBOL
    2B1 Jar200.jcl: JAR200.jcl
    2B1 Jar200.ksh: 2B2. jar200.ksh
    3M2 Jar200.ksh: Notes re 'jar200.ksh'
    3M2 Jar200.log: - SORT + COBOL
    3E3 Jcl2ksh51a: console log from jcl2ksh51A
    4J1 Jcl3_exportfiles: 4J2. jcl3_exportfiles(nonGDG) & exportgens(GDGs)
    4J4 Jcl3_filenames: 4J4. jcl3_filenames - all filenames in ksh/scripts
    4J2 Jcl3_parms: 4J3. jcl3_parms SYSIN/PARM libarary modules
    4J1 Jcl3_programs: 4J1. jcl3_programs - programs executed by scripts
    10E3 Jcls.zip: create jcls.zip/ctl.zip for transfer to control-M
    10E5 Jcls.zip: setup control subdirs & FTP jcls.zip/ctl.zip
    2C1 Jgl100.jcl: JGL100.jcl
    2C1 Jgl100.jcl:
    3M3 Jgl100.ksh: Notes re 'jgl100.ksh'
    3M3 Jgl100.log: - GDG files with COBOL
    2D1 Jgl200.jcl: JGL200.jcl
    2D1 Jgl200.ksh: 2D2. jgl200.ksh
    3M4 Jgl200.ksh: Notes re 'jgl200.ksh'
    3M4 Jgl200.log: - GDG files + SORT + COBOL
    2E1 Jgl300.jcl: JGL300.jcl
    2E1 Jgl300.ksh: 2E2. jgl300.ksh
    3M5 Jgl300.ksh: Notes re 'jgl300.ksh'
    3M5 Jgl300.log: - IEBGENER + IDCAMS + COND
    2F1 Jgl320.jcl: JGL320.jcl
    2F1 Jgl320.ksh: 2F2. jgl320.ksh
    3M6 Jgl320.ksh: Notes re 'jgl320.ksh'
    3M6 Jgl320.log: - IEBGENER + IDCAMS + IF/THEN/ELSE
    3L1 Job-logging: Console-Logging & Job-Logging
    3L2 Job-logging: Job-Logging
    3L2 Job-logging: re-execute jar100.ksh with job-logging
    3L2 Joblog: joblog/jar100.log
    3O6 Jobstop: - pause at each step
    3O7 Jobstop: execute job with jobstop activated

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    3E1 Korn: JCL conversion to Korn shell scripts
    7G1 Korn: JCL conversion to Korn shell scripts
    8H1 Korn: JCL conversion to Korn shell scripts
    4J4 Ksh: 4J4. jcl3_filenames - all filenames in ksh/scripts

    5I1 Large: finding wrong-size records in large files
    4J2 Libarary: 4J3. jcl3_parms SYSIN/PARM libarary modules
    3B2 Libraries: test/demo LIBRARIES supplied by UV Software
    3B3 Library: Library subdirs required for Production
    7B2 Library: subdirs for LIBRARY (JCL,COBOL,etc) conversions
    7B3 Library: Library subdirs required for Production
    8I4 Link: compile POC2 programs & link with called program archive
    7H2 Linking: compile called programs & archive for linking AIX COBOL
    8I3 Linking: compile called programs & archive for linking AIX COBOL
    8I4 Linking: compile called programs & archive for linking AIX COBOL
    11A1 Linux: diff - Unix/Linux file comparison
    1B2 Linux: Profiles are vital for Unix/Linux
    3F1 Linux: Converting Mainframe COBOL to Unix/Linux
    5B1 Linux: FTP data from Mainframe to Unix/Linux
    6B4 Linux: EXECUTING conversion jobs on unix/linux
    7H1 Linux: Converting Mainframe COBOL to Unix/Linux
    8I1 Linux: Converting Mainframe COBOL to Unix/Linux
    4B1 List: xkshfile1 - list datafiles in each script
    6D7 List: listpipeA - list pipe delimited - with copybook fieldnames
    6E7 List: listpipeA - list pipe delimited - with copybook fieldnames
    8E4 List: selected files
    7E1 Listcat: Op. Instrns. for Multiple LISTCAT files
    7E2 Listcat: combine LISTCAT info with other sources
    8H1 Listcat: repeat JCL conversion if LISTCAT available
    8L1 Listcat: reconvert JCL to include LISTCAT info
    8L1 Listcat: recreate LISTCAT control file ctl/datacat52
    8L1 Listcat: repeat JCL conversion if LISTCAT available
    10C1 Listing: of stub.ini
    10D1 Listing: of common.ini
    6D7 Listpipea: listpipeA - list pipe delimited - with copybook fieldnames
    6E7 Listpipea: listpipeA - list pipe delimited - with copybook fieldnames
    6B3 Load: generating batch-files to create & load tables
    6E12 Load: 6E13. sqlTL1/saledtl.ctl - script to Load DB table
    3I2 Location: Alternate location for GDG control file
    7M2 Location: Alternate location for GDG control file
    3E3 Log: console log from jcl2ksh51A
    3F2 Log: console log from copybook conversion
    3F3 Log: console log from COBOL program conversion
    3F4 Log: console log from compiling COBOL programs
    3I2 Log: console log from generating GDG control file
    3K2 Log: console log from executing jar100.ksh
    5J1 Log: console log from splitfile2
    8E3 Log: console log from runall sf
    3L1 Logging: Notes re Console Logging

    3M7 Machine: ftpput1.log - FTP (to same machine)
    2H1 Mailsmtp.jcl: MAILSMTP.jcl
    2H1 Mailsmtp.ksh: 2H2. mailsmtp.ksh
    3M8 Mailsmtp.ksh: Notes re 'mailsmtp.ksh'
    3M8 Mailsmtp.log: - IEBGENER/SMTP to appsadm
    3F1 Mainframe: Converting Mainframe COBOL to Unix/Linux
    5A1 Mainframe: problems FTP'ing mainframe data files to unix
    5B1 Mainframe: FTP data from Mainframe to Unix/Linux
    5C1 Mainframe: investigate files FTP'd from mainframe
    7H1 Mainframe: Converting Mainframe COBOL to Unix/Linux
    8I1 Mainframe: Converting Mainframe COBOL to Unix/Linux
    9A1 Mainframe: Mainframe Utility Conversions - Overview
    6D5 Maps: maps/custmas - cobmap report
    6E5 Maps: maps/saledtl - cobmap report
    6D1 Master: GENERATE jobs to convert Customer master
    6D2 Master: EXECUTE jobs to convert Customer master
    8A2 Max: complement of testlibs subdirs for conversion
    6B2 Maximum: script to create maximum conversion subdirs
    6B1 Minimal: subdirs for DATA conversion
    5A1 Mode: FTP ASCII mode - corrections required
    5D1 Mode: correcting zoned signs after FTP ASCII mode
    5E1 Mode: correcting Record-Length from FTP ASCII mode
    6B1 Mode: must FTP packed/binary files in BINARY mode
    1D4 Modify: /home/appsadm/stub_profile
    1D5 Modify: $APPSADM/common_profile
    1D7 Modify: #12. Modify RUNLIBS & RUNDATA in _test & _prod stubs
    3O2 Modify: JCL/script for test/debug
    7P1 Modify: Modify RUNLIBS & RUNDATA in profiles
    8B2 Modify: copy/modify control files for JCL & COBOL conversion
    4J2 Modules: 4J3. jcl3_parms SYSIN/PARM libarary modules
    6B1 Must: FTP packed/binary files in BINARY mode
    4L1 Mvs: mvsfiles5A - data file trace in MVS JCL
    4L3 Mvsfiles: notes re 'mvsfiles' reports
    4L1 Mvsfiles3: xmvs/mvsfiles3 sample data file trace
    4L2 Mvsfiles3: notes re 'mvsfiles3' report above
    4L2 Mvsfiles5: xmvs/mvsfiles5 sample data file trace
    4L1 Mvsfiles5a: mvsfiles5A - data file trace in MVS JCL
    4L4 Mvsfiles5a: mvsfiles5A - determine essential files
    8M3 Mvsfiles5a: mvsfiles5A alternative select DATA-FILEs
    4L3 Mvsfiles6: xmvs/mvsfiles6 sample data file trace
    5L2 Mvsjcltest: Conversions Documented in MVSJCLtest Part 6
    6A2 Mvsjcltest: Conversions Documented here in MVSJCLtest Part 6
    3B4 Mvstest1: test/demo JCL conversion in mvstest1 or your homedir
    3B4 Mvstest1: testdata in mvstest1 or your homedir
    3C1 Mvstest1: setup user mvstest1 & profile
    7C1 Mvstest2: setup mvstest2 or your homedir for Your conversion

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    10E4 New: setup for new system on control_M production
    3O6 New: check new GDG files
    8M2 New: DUPLICATES due to new GDGs created in $JGDG tmpdirs
    1C4 Nightly: permissions vital for nightly cron jobs
    4J1 Nongdg: 4J2. jcl3_exportfiles(nonGDG) & exportgens(GDGs)

    6D6 Occurs: notes re 'occurs' fields
    6D7 Occurs: notes re occurs
    4I1 Op.: OP. Instrns. for statksh1 & statcbl1
    7D1 Op.: Op. Instrns. to convert JCL/COBOL/DATA
    7E1 Op.: Op. Instrns. for Multiple LISTCAT files
    11A2 Option: diff example - verify option change
    3O3 Option: to convert DELETEs to #commented '#rm's
    3O7 Option: to specify stop step
    5H3 Option: using uvhd with Text file option 't'
    1D6 Optional: additional optional changes to stub profiles
    6E2 Optional: conversion pipe|delimited to Fixed-field
    4K1 Organization: 4K2. cbls_ORGtypes - file ORGANIZATION types
    7N1 Outdir: copy scripts from converter outdir to execution dir
    8O1 Outdir: copy scripts from converter outdir to execution dir
    10A1 Overview: control-M Overview
    6A1 Overview: Data File Conversion - Overview
    6C1 Overview: convert VU demo data files - Overview
    7O1 Overview: Overview of Conversion & Testing plans
    9A1 Overview: Mainframe Utility Conversions - Overview

    5L1 Packed: EBCDIC to ASCII Data Conversion allowing packed/binary
    5L2 Packed: unpacking all packed/binary fields
    6A2 Packed: unpacking all packed/binary fields
    6B1 Packed: must FTP packed/binary files in BINARY mode
    6F1 Packed: uvcpsalesA2E - demo ASCII to EBCDIC (no packed/binary)
    3J1 Parameters: cleanup TeraData SQL parameters
    7J1 Parameters: cleanup TeraData SQL parameters
    8N1 Parameters: isolate/fix TeraData SQL parameters
    4C1 Parm: 4C2. xkshparm2 - all scripts using each PARM
    4J2 Parm: 4J3. jcl3_parms SYSIN/PARM libarary modules
    3D2 Parms: copy Parms for conversion demo
    3E2 Parms: subdirs/files to convert JCLs/PROCs/Parms
    3G1 Parms: select QuikJobs from parms & convert to uvcopy
    3G2 Parms: 3G2. select EasyTrieve from parms & convert to uvcopy
    4A2 Parms: xrefallparm - extra crossrefs for parms
    4C1 Parms: 4C1. xkshparm1 - all PARMs in each script
    7K1 Parms: 7K2. select EasyTrieves from parms & convert to uvcopy
    7K1 Parms: select QuikJobs from parms & convert to uvcopy
    8N1 Parms: select EasyTrieves from parms & convert to uvcopy
    8N1 Parms: select QuikJobs from parms & convert to uvcopy
    5L2 Part: Conversions Documented in MVSJCLtest Part 6
    6A2 Part: Conversions Documented here in MVSJCLtest Part 6
    3O3 Party: #comment/replace 3rd party utilities
    1B3 Paths: RUNLIBS & RUNDATA determine PATHs to programs/scripts & data
    3O6 Pause: jobstop - pause at each step
    3F1 Perform: script to perform all COBOL conversion steps
    6B1 Perform: setup to perform DATA file conversions
    1C4 Permissions: vital for nightly cron jobs
    1C4 Permissions: directories 775 & files 664
    6D7 Pfp1: pfp1/custmas.dat - check the pipe delimited file
    6D9 Pfp1: pfp1/custmas - job to create pipe delimited
    6E7 Pfp1: pfp1/saledtl.dat - pipe delimited
    6E9 Pfp1: pfp1/saledtl - job to create pipe delimited
    6E10 Pfq1: pfq1/saledtl - convert Pipe|Delimited to Fixed-Field
    6D8 Pfx1: pfx1/custmas - job to convert EBCDIC to ASCII
    6E8 Pfx1: pfx1/saledtl - job to convert EBCDIC to ASCII
    6G2 Pfy1: pfy1/custmas - job to convert EBCDIC to ASCII
    2C1 Pgl100.proc: PGL100.proc
    6B3 Pipe: generating pipe delimit jobs
    6D7 Pipe: listpipeA - list pipe delimited - with copybook fieldnames
    6D7 Pipe: pfp1/custmas.dat - check the pipe delimited file
    6D9 Pipe: pfp1/custmas - job to create pipe delimited
    6E7 Pipe: listpipeA - list pipe delimited - with copybook fieldnames
    6E7 Pipe: pfp1/saledtl.dat - pipe delimited
    6E9 Pipe: pfp1/saledtl - job to create pipe delimited
    6H3 Pipe: Executing jobs to pipe delimit ALL data files
    7D5 Pipe: Executing jobs to pipe delimit ALL data files
    6H3 Pipe|delimit: generating pipe|delimit jobs via control file
    7D5 Pipe|delimit: generating pipe|delimit jobs via control file
    6B3 Pipe|delimited: generating jobs to convert pipe|delimited to Fixed-field
    6E10 Pipe|delimited: pfq1/saledtl - convert Pipe|Delimited to Fixed-Field
    6E2 Pipe|delimited: optional conversion pipe|delimited to Fixed-field
    7O1 Plans: Overview of Conversion & Testing plans
    8A3 Plans: Plans for selecting/converting files
    3A1 Poc: 3. select small set of JCL/COBOL/DATA for POC
    7A1 Poc: 3. select small set of JCL/COBOL/DATA for POC
    7O1 Poc: Considerations for "real conversion" vs POC
    8A1 Poc: JCL/COBOL POC select/convert
    8B1 Poc: Setups to convert selected POC JCL/COBOL
    8O1 Poc: Execute POC scripts
    8A1 Poc2: selected JCL/COBOL/DATA to be copied to 'POC2' dirs
    8I4 Poc2: compile POC2 programs & link with called program archive
    8M1 Poc2: determine DATA-FILEs required for POC2 tests
    3O4 Prepare: data-files for debug
    1E1 Principles: Directory & File-Design - Principles
    5A1 Problems: FTP'ing mainframe data files to unix
    8A3 Problems: Problems selecting/converting files
    4D1 Proc: 4D2. xkshproc2 - all scripts executing each PROC
    3D2 Procs: copy PROCs for conversion demo
    3E2 Procs: subdirs/files to convert JCLs/PROCs/Parms
    4D1 Procs: xkshproc1 - all PROCs executed in each script
    1F1 Proddata: RUNLIBS/RUNDATA = testlibs/testdata OR prodlibs/proddata
    1F1 Prodlibs: RUNLIBS/RUNDATA = testlibs/testdata OR prodlibs/proddata
    10E1 Production: transfer Test system to control-M production
    10E4 Production: setup for new system on control_M production
    3B3 Production: Library subdirs required for Production
    7B3 Production: Library subdirs required for Production
    1A2 Profile: setup profile for uvadm
    1C0 Profile: Profile Summary
    3C1 Profile: setup user mvstest1 & profile
    1B1 Profiles: 'profiles' provided in /home/uvadm/env
    1B2 Profiles: Profiles are vital for Unix/Linux
    1D6 Profiles: additional optional changes to stub profiles
    1D7 Profiles: #13. copy 'stub' profiles to homedirs
    7P1 Profiles: Modify RUNLIBS & RUNDATA in profiles
    7P1 Profiles: copy 'stub' profiles to homedirs
    11A1 Program: diff example - verify program changes
    3F3 Program: console log from COBOL program conversion
    4E2 Program: xkshprog2 - all scripts executing each program
    4F1 Program: 4F1. xcobcopy1 - all copybooks used in each program
    8I4 Program: compile POC2 programs & link with called program archive
    1A2 Programs: compiling Vancouver Utility C Programs
    1B3 Programs: RUNLIBS & RUNDATA determine PATHs to programs/scripts & data
    3D3 Programs: copy COBOL programs for conversion demo
    3F4 Programs: compiling the COBOL programs
    3F4 Programs: console log from compiling COBOL programs
    3H1 Programs: create stats, table summary counts of JCLs,programs,etc
    4E1 Programs: 4E1. xkshprog1 - programs executed in each script
    4F1 Programs: 4F2. xcobcopy2 - all programs using each copybook
    4G1 Programs: 4G1. xcobfile2 - all PROGRAMS using each external-file
    4J1 Programs: 4J1. jcl3_programs - programs executed by scripts
    4K1 Programs: 4K1. cbls_copybooks - copybooks used by all programs
    7H2 Programs: compile called programs & archive for linking AIX COBOL
    7H2 Programs: compiling the COBOL programs
    7L1 Programs: create stats, table summary counts of JCLs,programs,etc
    8D1 Programs: create script to select COBOL programs required
    8D1 Programs: sample crossref COBOL programs called by JCL/scripts
    8D2 Programs: execute script to select desired cbls programs
    8D2 Programs: output script to select cbls programs
    8I2 Programs: compiling the COBOL programs
    8I3 Programs: compile called programs & archive for linking AIX COBOL
    8I3 Programs: create script to select all called programs
    8I3 Programs: sample crossref called programs vs calling programs
    8I3 Programs: sample crossref called programs vs calling programs
    8I4 Programs: compile POC2 programs & link with called program archive
    8I4 Programs: compile called programs & archive for linking AIX COBOL
    8I4 Programs: output script to select called programs
    8J1 Programs: create stats, table summary counts of JCLs,programs,etc
    7G1 Prompt: control file prompt 'I' or 'E' response
    1B1 Provided: 'profiles' provided in /home/uvadm/env

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    3M9 Qjtlist: sample output
    2I1 Qjtlist.jcl: QJTLIST.jcl
    2I1 Qjtlist.ksh: 2I2. qjtlist.ksh
    3M9 Qjtlist.log: - QuikJob to uvcopy
    3M9 Quikjob: qjtlist.log - QuikJob to uvcopy
    9B1 Quikjob: converting QuikJob to uvcopy
    9B1 Quikjob: sample QuikJob code
    9B2 Quikjob: converted to uvcopy code
    9B3 Quikjob: Executing JCL/script calling quikjob/uvcopy
    3G1 Quikjobs: select QuikJobs from parms & convert to uvcopy
    7K1 Quikjobs: select QuikJobs from parms & convert to uvcopy
    8N1 Quikjobs: select QuikJobs from parms & convert to uvcopy

    3O3 Re-convert: JCL/scripts
    3L2 Re-execute: jar100.ksh with job-logging
    7O1 Real: Considerations for "real conversion" vs POC
    5K1 Rec-size: splitfile2 - uvcopy job to select desired rec-size
    10E1 Reconvert: change stub.ini to xpp.ini & reconvert
    8L1 Reconvert: JCL to include LISTCAT info
    6E11 Reconverted: compare reconverted data to original
    5E1 Record-length: correcting Record-Length from FTP ASCII mode
    5E1 Record-length: data/sales1a - AFTER record-length correction
    5E1 Record-length: ftp/sales1a - BEFORE record-length correction
    5K2 Record-sizes: varstat3 - uvcopy job to table summarize record-sizes
    5I1 Records: finding wrong-size records in large files
    5J1 Records: correcting wrong-size records
    5J1 Records: dropping/separating wrong-size records
    8L1 Recreate: LISTCAT control file ctl/datacat52
    5E2 Recsize: data/sales1a - AFTER recsize correct & LF insert
    5G2 Recsize: alternative - inserting LF in last byte original recsize
    5C1 Recsize=64: sales0 - EBCDIC recsize=64
    8H1 Repeat: JCL conversion if LISTCAT available
    8L1 Repeat: JCL conversion if LISTCAT available
    3O3 Replace: #comment/replace 3rd party utilities
    8B3 Replace: search/replace table for AIX COBOL
    3P2 Rerun: RERUN after failure WITHOUT RESTART
    3P3 Rerun: RERUN after failure WITH RESTART
    3P3 Rerun: note re rerun with or without restart
    7G1 Response: control file prompt 'I' or 'E' response
    3O8 Restart: job restart & job stop
    3P1 Restart: GDG files & step Restart
    3P2 Restart: RERUN after failure WITHOUT RESTART
    3P3 Restart: RERUN after failure WITH RESTART
    3P3 Restart: note re rerun with or without restart
    6D3 Results: checking results of custmas conversion
    6E3 Results: checking results of saledtl conversion
    8E1 Run: xrefall & generate all scripts to select '0' components
    8E3 Runall: console log from runall sf
    1B3 Rundata: RUNLIBS & RUNDATA determine PATHs to programs/scripts & data
    1D7 Rundata: #12. Modify RUNLIBS & RUNDATA in _test & _prod stubs
    1E1 Rundata: RUNLIBS & RUNDATA
    1E2 Rundata: RUNLIBS, RUNDATA,& CNVDATA - Concepts
    1F1 Rundata: RUNLIBS/RUNDATA = testlibs/testdata OR prodlibs/proddata
    1F1 Rundata: directories for RUNLIBS & RUNDATA
    7P1 Rundata: Modify RUNLIBS & RUNDATA in profiles
    1B3 Runlibs: RUNLIBS & RUNDATA determine PATHs to programs/scripts & data
    1D7 Runlibs: #12. Modify RUNLIBS & RUNDATA in _test & _prod stubs
    1E1 Runlibs: RUNLIBS & RUNDATA
    1E2 Runlibs: RUNLIBS, RUNDATA,& CNVDATA - Concepts
    1F1 Runlibs: RUNLIBS/RUNDATA = testlibs/testdata OR prodlibs/proddata
    1F1 Runlibs: directories for RUNLIBS & RUNDATA
    7P1 Runlibs: Modify RUNLIBS & RUNDATA in profiles

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    6E10 Saledtl: pfq1/saledtl - convert Pipe|Delimited to Fixed-Field
    6E3 Saledtl: checking results of saledtl conversion
    6E3 Saledtl: d1ebc/saledtl - investigate EBCDIC input file
    6E4 Saledtl: d2asc/saledtl - investigate ASCII output file
    6E5 Saledtl: maps/saledtl - cobmap report
    6E6 Saledtl: 'uvhdcob' display for d2asc/saledtl
    6E8 Saledtl: pfx1/saledtl - job to convert EBCDIC to ASCII
    6E9 Saledtl: pfp1/saledtl - job to create pipe delimited
    6E12 Saledtl.ctl: 6E13. sqlTL1/saledtl.ctl - script to Load DB table
    6E7 Saledtl.dat: pfp1/saledtl.dat - pipe delimited
    6E12 Saledtl.sql: sqlTC1/saledtl.sql - script to Create DB table
    6E1 Sales: GENERATE jobs to convert Sales Detail
    6E2 Sales: EXECUTE jobs to convert Sales Detail
    5C1 Sales0: - EBCDIC recsize=64
    5C2 Sales1a: - ASCII with CR/LF appended
    5D1 Sales1a: ftp/sales1a - AFTER sign correction
    5D1 Sales1a: ftp/sales1a - BEFORE sign correction
    5E1 Sales1a: data/sales1a - AFTER record-length correction
    5E1 Sales1a: ftp/sales1a - BEFORE record-length correction
    5E2 Sales1a: data/sales1a - AFTER recsize correct & LF insert
    5H1 Sales1x: ftp/sales1x - corrupted file
    3M7 Same: ftpput1.log - FTP (to same machine)
    3K1 Sample: Executing test/demo sample scripts
    3M10 Sample: eztlist sample output
    3M9 Sample: qjtlist sample output
    4L1 Sample: xmvs/mvsfiles3 sample data file trace
    4L2 Sample: xmvs/mvsfiles5 sample data file trace
    4L3 Sample: xmvs/mvsfiles6 sample data file trace
    6D6 Sample: 'uvhdcob' display for custmas
    6H1 Sample: control file
    7D4 Sample: control file
    8D1 Sample: crossref COBOL programs called by JCL/scripts
    8I3 Sample: crossref called programs vs calling programs
    8I5 Sample: output#4 - table summary of Err-Codes & Dscrptns
    8M1 Sample: crossref DATA FILEs & calling JCLs
    9B1 Sample: QuikJob code
    9C1 Sample: EasyTrieve code
    8B3 Search: search/replace table for AIX COBOL
    3A1 Select: 3. select small set of JCL/COBOL/DATA for POC
    3G1 Select: QuikJobs from parms & convert to uvcopy
    3G2 Select: 3G2. select EasyTrieve from parms & convert to uvcopy
    5K1 Select: splitfile2 - uvcopy job to select desired rec-size
    7A1 Select: 3. select small set of JCL/COBOL/DATA for POC
    7K1 Select: 7K2. select EasyTrieves from parms & convert to uvcopy
    7K1 Select: QuikJobs from parms & convert to uvcopy
    8A1 Select: JCL/COBOL POC select/convert
    8C1 Select: why initial select converted jcl3 & cbls vs jcl0 & cbl0
    8C2 Select: initial select converted jcl3 & cbls for crossrefs
    8D1 Select: create script to select COBOL programs required
    8D2 Select: execute script to select desired cbls programs
    8D2 Select: output script to select cbls programs
    8E1 Select: generate all copy/select scripts
    8E1 Select: run xrefall & generate all scripts to select '0' components
    8E2 Select: generated scripts to select all components
    8E3 Select: execute scripts to select all components
    8I3 Select: create script to select all called programs
    8I4 Select: output script to select called programs
    8M2 Select: output script to select DATA-FILEs
    8M3 Select: execute script to select DATA-FILEs
    8M3 Select: mvsfiles5A alternative select DATA-FILEs
    8N1 Select: EasyTrieves from parms & convert to uvcopy
    8N1 Select: QuikJobs from parms & convert to uvcopy
    8A1 Selected: JCL/COBOL/DATA to be copied to 'POC2' dirs
    8B1 Selected: Setups to convert selected POC JCL/COBOL
    8E4 Selected: list selected files
    8A3 Selecting: Plans for selecting/converting files
    8A3 Selecting: Problems selecting/converting files
    8D1 Selection: xref2cp1 - create selection script from crossref
    8E5 Selects: xref2cpA - generate all copy/selects from crossrefs
    5J1 Separating: dropping/separating wrong-size records
    6B4 Server: executing conversion jobs on Windows Server
    3A1 Set: 3. select small set of JCL/COBOL/DATA for POC
    7A1 Set: 3. select small set of JCL/COBOL/DATA for POC
    10E4 Setup: for new system on control_M production
    10E5 Setup: control subdirs & FTP jcls.zip/ctl.zip
    1A1 Setup: uvadm Vancouver Utilities admin account
    1A2 Setup: profile for uvadm
    1D1 Setup: appsadm - Application Administrator
    1D3 Setup: Setup 'appsadm'
    3C1 Setup: user mvstest1 & profile
    3C2 Setup: .profile & .kshrc
    3D1 Setup: directories for demo conversions
    6B1 Setup: to perform DATA file conversions
    7C1 Setup: mvstest2 or your homedir for Your conversion
    7C2 Setup: .profile & .kshrc
    7D1 Setup: directories for Your conversions
    8B1 Setups: Setups to convert selected POC JCL/COBOL
    3E1 Shell: JCL conversion to Korn shell scripts
    7G1 Shell: JCL conversion to Korn shell scripts
    8H1 Shell: JCL conversion to Korn shell scripts
    1A1 Short: Install Vancouver Utilities - short version
    5D1 Sign: ftp/sales1a - AFTER sign correction
    5D1 Sign: ftp/sales1a - BEFORE sign correction
    5A2 Signs: solutions for zoned signs
    5D1 Signs: correcting zoned signs after FTP ASCII mode
    5G1 Signs: using 'uvhd' (vs uvcp) to correct zoned signs
    3A1 Small: 3. select small set of JCL/COBOL/DATA for POC
    7A1 Small: 3. select small set of JCL/COBOL/DATA for POC
    3M8 Smtp: mailsmtp.log - IEBGENER/SMTP to appsadm
    3A1 Software: 1. converting UV Software demo JCL/COBOL
    3B2 Software: test/demo LIBRARIES supplied by UV Software
    7A1 Software: 1. converting UV Software demo JCL/COBOL
    5A2 Solution: which solution to CR/LF ?
    5A2 Solutions: for zoned signs
    3M2 Sort: jar200.log - SORT + COBOL
    3M4 Sort: jgl200.log - GDG files + SORT + COBOL
    7E2 Sources: combine LISTCAT info with other sources
    3O7 Specify: option to specify stop step
    5J1 Splitfile2: console log from splitfile2
    5K1 Splitfile2: - uvcopy job to select desired rec-size
    3J1 Sql: cleanup TeraData SQL parameters
    7J1 Sql: cleanup TeraData SQL parameters
    8N1 Sql: isolate/fix TeraData SQL parameters
    4A2 Sqls: xrefalltdsql - crossrefs for TeraData SQLs
    6E12 Sqltc1: sqlTC1/saledtl.sql - script to Create DB table
    6E12 Sqltl1: 6E13. sqlTL1/saledtl.ctl - script to Load DB table
    4I1 Statcbl1: OP. Instrns. for statksh1 & statcbl1
    3H1 Statistics: create Cross-References & Statistics
    4A1 Statistics: (table summary counts)
    4I1 Statistics: JCL/script Statistics (table-summaries)
    7L1 Statistics: create Cross-References & Statistics
    8J1 Statistics: create Cross-References & Statistics
    4I1 Statksh1: OP. Instrns. for statksh1 & statcbl1
    3H1 Stats: create stats, table summary counts of JCLs,programs,etc
    7L1 Stats: create stats, table summary counts of JCLs,programs,etc
    8J1 Stats: create stats, table summary counts of JCLs,programs,etc
    3B5 Stay: in the 'working directory'
    3M1 Step: jar100.log - 1 step COBOL
    3O6 Step: jobstop - pause at each step
    3O7 Step: option to specify stop step
    3P1 Step: GDG files & step Restart
    3F1 Steps: script to perform all COBOL conversion steps
    3O7 Stop: option to specify stop step
    3O8 Stop: job restart & job stop
    3O1 Strategies: data file debug strategies
    1D6 Stub: additional optional changes to stub profiles
    1D7 Stub: #13. copy 'stub' profiles to homedirs
    7P1 Stub: copy 'stub' profiles to homedirs
    10C1 Stub.ini: listing of stub.ini
    10E1 Stub.ini: change stub.ini to xpp.ini & reconvert
    10E2 Stub.ini: mass change jcls stub.ini to xpp.ini
    1C3 Stub.ini: control-M stub.ini & common.ini
    1B2 Stub_profile:
    1B3 Stub_profile: Advantages of stub_profile,& common_profile
    1C1 Stub_profile: (.profile or .bash_profile)
    1C2 Stub_profile: common_profile - called by stub_profile
    1D4 Stub_profile: modify /home/appsadm/stub_profile
    1D6 Stub_profile: #11. create _test & _prod versions of stub_profile
    1D7 Stubs: #12. Modify RUNLIBS & RUNDATA in _test & _prod stubs
    10B1 Subdirs: Control-M subdirs required
    10E5 Subdirs: setup control subdirs & FTP jcls.zip/ctl.zip
    3B3 Subdirs: Library subdirs required for Production
    3B3 Subdirs: data subdirs for test/demo executions
    3B3 Subdirs: for DATA conversion
    3B5 Subdirs: advantages of working above subdirs
    3E2 Subdirs: subdirs/files to convert JCLs/PROCs/Parms
    3O1 Subdirs: testdata subdirs
    6B1 Subdirs: minimal subdirs for DATA conversion
    6B2 Subdirs: script to create maximum conversion subdirs
    7B2 Subdirs: for LIBRARY (JCL,COBOL,etc) conversions
    7B3 Subdirs: Library subdirs required for Production
    7B3 Subdirs: data subdirs for test/demo executions
    7B3 Subdirs: for DATA conversion
    8A2 Subdirs: max complement of testlibs subdirs for conversion
    5K2 Summarize: varstat3 - uvcopy job to table summarize record-sizes
    1C0 Summary: Profile Summary
    3H1 Summary: create stats, table summary counts of JCLs,programs,etc
    4A1 Summary: statistics (table summary counts)
    7L1 Summary: create stats, table summary counts of JCLs,programs,etc
    8I5 Summary: sample output#4 - table summary of Err-Codes & Dscrptns
    8J1 Summary: create stats, table summary counts of JCLs,programs,etc
    3B2 Supplied: test/demo LIBRARIES supplied by UV Software
    4J2 Sysin: 4J3. jcl3_parms SYSIN/PARM libarary modules
    10E1 System: transfer Test system to control-M production
    10E4 System: setup for new system on control_M production

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    3H1 Table: create stats, table summary counts of JCLs,programs,etc
    4A1 Table: statistics (table summary counts)
    5K2 Table: varstat3 - uvcopy job to table summarize record-sizes
    6E12 Table: 6E13. sqlTL1/saledtl.ctl - script to Load DB table
    6E12 Table: sqlTC1/saledtl.sql - script to Create DB table
    7L1 Table: create stats, table summary counts of JCLs,programs,etc
    8B3 Table: search/replace table for AIX COBOL
    8I5 Table: sample output#4 - table summary of Err-Codes & Dscrptns
    8J1 Table: create stats, table summary counts of JCLs,programs,etc
    4I1 Table-summaries: JCL/script Statistics (table-summaries)
    5L2 Tables: converting data files to database tables
    6A2 Tables: converting data files to database tables
    6B3 Tables: generating batch-files to create & load tables
    3J1 Tdsql0: cleanup tdsql0 --> tdsql1 --> tdsqls
    7J1 Tdsql0: cleanup tdsql0 --> tdsql1 --> tdsqls
    3J1 Tdsql1: cleanup tdsql0 --> tdsql1 --> tdsqls
    7J1 Tdsql1: cleanup tdsql0 --> tdsql1 --> tdsqls
    3J1 Tdsqls: cleanup tdsql0 --> tdsql1 --> tdsqls
    7J1 Tdsqls: cleanup tdsql0 --> tdsql1 --> tdsqls
    3J1 Teradata: cleanup TeraData SQL parameters
    4A2 Teradata: xrefalltdsql - crossrefs for TeraData SQLs
    7J1 Teradata: cleanup TeraData SQL parameters
    8N1 Teradata: isolate/fix TeraData SQL parameters
    10E1 Test: transfer Test system to control-M production
    3B2 Test: test/demo LIBRARIES supplied by UV Software
    3B3 Test: data subdirs for test/demo executions
    3B4 Test: test/debug tips for difficult jobs
    3B4 Test: test/demo JCL conversion in mvstest1 or your homedir
    3K1 Test: Executing test/demo sample scripts
    3O1 Test: Test/debug JCL/scripts
    3O2 Test: modify JCL/script for test/debug
    3O5 Test: test/debug executions
    7B3 Test: data subdirs for test/demo executions
    1F1 Testdata: RUNLIBS/RUNDATA = testlibs/testdata OR prodlibs/proddata
    3B4 Testdata: in mvstest1 or your homedir
    3O1 Testdata: subdirs
    3B1 Testing: HomeDirs for JCL conversions & testing
    7A1 Testing: Converting/Testing JCL/scripts
    7B1 Testing: HomeDirs for JCL conversions & testing
    7O1 Testing: Overview of Conversion & Testing plans
    1F1 Testlibs: RUNLIBS/RUNDATA = testlibs/testdata OR prodlibs/proddata
    8A2 Testlibs: max complement of testlibs subdirs for conversion
    8M1 Tests: determine DATA-FILEs required for POC2 tests
    5H3 Text: using uvhd with Text file option 't'
    3B4 Tips: test/debug tips for difficult jobs
    8M2 Tmpdirs: DUPLICATES due to new GDGs created in $JGDG tmpdirs
    4L1 Trace: mvsfiles5A - data file trace in MVS JCL
    4L1 Trace: xmvs/mvsfiles3 sample data file trace
    4L2 Trace: xmvs/mvsfiles5 sample data file trace
    4L3 Trace: xmvs/mvsfiles6 sample data file trace
    10E1 Transfer: Test system to control-M production
    10E3 Transfer: create jcls.zip/ctl.zip for transfer to control-M
    3A1 Transfer: 2. transfer ALL your JCL/COBOL to unix & initial convert
    7A1 Transfer: 2. transfer ALL your JCL/COBOL to unix & initial convert
    5F1 Typ: uvcp file 'typ' codes
    4K1 Types: 4K2. cbls_ORGtypes - file ORGANIZATION types

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    11A1 Unix: diff - Unix/Linux file comparison
    1B2 Unix: Profiles are vital for Unix/Linux
    3A1 Unix: 2. transfer ALL your JCL/COBOL to unix & initial convert
    3F1 Unix: Converting Mainframe COBOL to Unix/Linux
    5A1 Unix: problems FTP'ing mainframe data files to unix
    5B1 Unix: FTP data from Mainframe to Unix/Linux
    6B4 Unix: EXECUTING conversion jobs on unix/linux
    7A1 Unix: 2. transfer ALL your JCL/COBOL to unix & initial convert
    7H1 Unix: Converting Mainframe COBOL to Unix/Linux
    8I1 Unix: Converting Mainframe COBOL to Unix/Linux
    5L2 Unpacking: all packed/binary fields
    6A2 Unpacking: all packed/binary fields
    3C1 User: setup user mvstest1 & profile
    1A1 Utilities: Download/Install Vancouver Utilities
    1A1 Utilities: Install Vancouver Utilities - short version
    1A1 Utilities: setup uvadm Vancouver Utilities admin account
    3O3 Utilities: #comment/replace 3rd party utilities
    11A2 Utility: script 'alldiff2' alternative to 'diff' utility
    1A2 Utility: compiling Vancouver Utility C Programs
    1A3 Utility: uvadm - Vancouver Utility home directory
    9A1 Utility: Mainframe Utility Conversions - Overview
    1A1 Uvadm: setup uvadm Vancouver Utilities admin account
    1A2 Uvadm: setup profile for uvadm
    1A3 Uvadm: - Vancouver Utility home directory
    1B1 Uvadm: 'profiles' provided in /home/uvadm/env
    1D1 Uvadm: appsadm vs uvadm
    1D3 Uvadm: Alternate directories for uvadm & appsadm
    7D2 Uvadm: copy control-files from uvadm
    11B1 Uvcmp...: data file comparison
    11B1 Uvcmpfa1: demo uvcmpFA1 - file compare
    3G1 Uvcopy: select QuikJobs from parms & convert to uvcopy
    3G2 Uvcopy: 3G2. select EasyTrieve from parms & convert to uvcopy
    3M10 Uvcopy: eztlist.log - EasyTrieve to uvcopy
    3M9 Uvcopy: qjtlist.log - QuikJob to uvcopy
    5K1 Uvcopy: splitfile2 - uvcopy job to select desired rec-size
    5K2 Uvcopy: varstat3 - uvcopy job to table summarize record-sizes
    6D8 Uvcopy: notes re EBCDIC to ASCII uvcopy job
    6E8 Uvcopy: notes re EBCDIC to ASCII uvcopy job
    6G2 Uvcopy: notes re ASCII to EBCDIC uvcopy job
    7K1 Uvcopy: 7K2. select EasyTrieves from parms & convert to uvcopy
    7K1 Uvcopy: select QuikJobs from parms & convert to uvcopy
    8N1 Uvcopy: select EasyTrieves from parms & convert to uvcopy
    8N1 Uvcopy: select QuikJobs from parms & convert to uvcopy
    9B1 Uvcopy: converting QuikJob to uvcopy
    9B2 Uvcopy: quikjob converted to uvcopy code
    9B3 Uvcopy: Executing JCL/script calling quikjob/uvcopy
    9C1 Uvcopy: converting EasyTrieve to uvcopy
    9C2 Uvcopy: EasyTrieve converted to uvcopy code
    9C3 Uvcopy: Executing JCL/script calling EasyTrieve/uvcopy
    5F1 Uvcp: file 'typ' codes
    5G1 Uvcp: using 'uvhd' (vs uvcp) to correct zoned signs
    5G2 Uvcp: using 'uvhd' (vs uvcp) to drop CR/LF
    6F1 Uvcpsalesa2e: uvcpsalesA2E - demo ASCII to EBCDIC (no packed/binary)
    5G1 Uvhd: using 'uvhd' (vs uvcp) to correct zoned signs
    5G2 Uvhd: using 'uvhd' (vs uvcp) to drop CR/LF
    5H2 Uvhd: use uvhd to detect corrupted file
    5H3 Uvhd: using uvhd with Text file option 't'
    6D6 Uvhdcob: sample 'uvhdcob' display for custmas
    6E6 Uvhdcob: 'uvhdcob' display for d2asc/saledtl

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    1A1 Vancouver: Download/Install Vancouver Utilities
    1A1 Vancouver: Install Vancouver Utilities - short version
    1A1 Vancouver: setup uvadm Vancouver Utilities admin account
    1A2 Vancouver: compiling Vancouver Utility C Programs
    1A3 Vancouver: uvadm - Vancouver Utility home directory
    5K2 Varstat3: - uvcopy job to table summarize record-sizes
    11A1 Verify: diff example - verify program changes
    11A2 Verify: diff example - verify option change
    1A1 Version: Install Vancouver Utilities - short version
    1D6 Versions: #11. create _test & _prod versions of stub_profile
    1B2 Vital: Profiles are vital for Unix/Linux
    1C4 Vital: permissions vital for nightly cron jobs

    5A2 Which: solution to CR/LF ?
    6B4 Windows: executing conversion jobs on Windows Server
    3P2 Without: RERUN after failure WITHOUT RESTART
    3P3 Without: note re rerun with or without restart
    3B5 Working: advantages of working above subdirs
    3B5 Working: stay in the 'working directory'
    5E2 Worlds: Best of Both Worlds
    5I1 Wrong-size: finding wrong-size records in large files
    5J1 Wrong-size: correcting wrong-size records
    5J1 Wrong-size: dropping/separating wrong-size records

    4F1 Xcobcopy1: 4F1. xcobcopy1 - all copybooks used in each program
    4F1 Xcobcopy2: 4F2. xcobcopy2 - all programs using each copybook
    4G1 Xcobfile2: 4G1. xcobfile2 - all PROGRAMS using each external-file
    8E1 Xef2cpa: notes re xef2cpA
    4B1 Xkshfile1: - list datafiles in each script
    4B2 Xkshfile2: - scripts using each data-file
    4C1 Xkshparm1: 4C1. xkshparm1 - all PARMs in each script
    4C1 Xkshparm2: 4C2. xkshparm2 - all scripts using each PARM
    4D1 Xkshproc1: - all PROCs executed in each script
    4D1 Xkshproc2: 4D2. xkshproc2 - all scripts executing each PROC
    4E1 Xkshprog1: 4E1. xkshprog1 - programs executed in each script
    4E2 Xkshprog2: - all scripts executing each program
    4L1 Xmvs: xmvs/mvsfiles3 sample data file trace
    4L2 Xmvs: xmvs/mvsfiles5 sample data file trace
    4L3 Xmvs: xmvs/mvsfiles6 sample data file trace
    10E1 Xpp.ini: change stub.ini to xpp.ini & reconvert
    10E2 Xpp.ini: mass change jcls stub.ini to xpp.ini
    8D1 Xref2cp1: - create selection script from crossref
    8E5 Xref2cpa: xref2cpA - generate all copy/selects from crossrefs
    3H1 Xrefall: - create all JCL/COBOL cross-refs
    4A1 Xrefall: - create all JCL/COBOL cross-refs
    7L1 Xrefall: - create all JCL/COBOL cross-refs
    8E1 Xrefall: run xrefall & generate all scripts to select '0' components
    8J1 Xrefall: - create all JCL/COBOL cross-refs
    4A2 Xrefallparm: - extra crossrefs for parms
    4A2 Xrefalltdsql: - crossrefs for TeraData SQLs

    5A2 Zoned: solutions for zoned signs
    5D1 Zoned: correcting zoned signs after FTP ASCII mode
    5G1 Zoned: using 'uvhd' (vs uvcp) to correct zoned signs

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    1D6 _prod: #11. create _test & _prod versions of stub_profile
    1D7 _prod: #12. Modify RUNLIBS & RUNDATA in _test & _prod stubs
    1D6 _test: #11. create _test & _prod versions of stub_profile
    1D7 _test: #12. Modify RUNLIBS & RUNDATA in _test & _prod stubs

    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

    Goto:   Begin this doc End this doc Index this doc Contents this library UVSI Home-Page

    Visitor Counters for ThisYear and LastYear

    ThisYear=000797   (J=209,F=159,M=140,A=169,M=120,J=0,J=0,A=0,S=0,O=0,N=0,D=0)
    LastYear=000373   (J=0,F=0,M=0,A=0,M=0,J=0,J=0,A=0,S=0,O=121,N=138,D=114)