| 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
| 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
| 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
| 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 |
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
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:
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
export RUNLIBS=/p1/apps/prodlibs
export RUNDATA=/p2/apps/proddata
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
export RUNDATA=$HOME/testdata <-- for individual training/testing
=============================
export RUNDATA=/home/mvstest2/testdata <-- for later serious testing
======================================
jcl0 ------> jcl1 ----------> jcl2 -------------> jcl3 ------------> jcls
cleanup PROC expand convert to ksh manual copy 1 at a time
just before test/debug
export PATH=$PATH:$RUNLIBS/jcls
===============================
| Note |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
| 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
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).
#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)
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
#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.
#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
/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
/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/...
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
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).
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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:
The benefits of this system are HUGE:
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
| 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
# 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
# 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
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
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.
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
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 |
|
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
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
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
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
| Note |
|
#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
#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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
===================================
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
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
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
#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
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
| Note |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 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
| 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 |
| 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. |
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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)
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
#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
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)
| Note |
|
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 |
|
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
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
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 |
|
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
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 |
|
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
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)
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
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 /*
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 |
|
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
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)
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 |
|
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
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 /*
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
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 /*
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
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
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 |
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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 |
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
| 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
| 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 |
| 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
| 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
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.
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).
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
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
/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
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)
/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)
/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
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)
/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
| dataMF/... |
|
| data_bkup/... |
|
| data/... |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 ===================
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
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
| Note |
|
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 |
|
#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
#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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#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
=====================================================
#8a. cp /home/uvadm/mvstest/testlibs/proc0/PGL100.proc proc0
=======================================================
#8b. cp /home/uvadm/mvstest/testlibs/proc0/PGL200.proc proc0
=======================================================
#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
#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
====================================================
#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
#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
================================
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
#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.
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
<@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
#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 |
|
<@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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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.
'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.
#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
#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
<@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
#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
<@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
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.
<@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
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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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.
#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 |
|
#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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
#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
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'
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
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.
#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
#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.
#4. cdd --> $RUNDATA ($HOME/testdata), alias cdd='cd $RUNDATA'
===
| Note |
|
#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
<@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
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.
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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:
#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)
========================
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
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 |
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#1. joblog jar100.ksh
=================
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
uvhd data/ar.customer.master r256
=================================
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
#2. joblog jar200.ksh
=================
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
uvhd jobtmp/JAR200/__tempsls r64
================================
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
#3. joblog jgl100.ksh
=================
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
vi data/gl.account.acntlist_000001
==================================
- should match the report shown at MVSJCL.htm#1T7
exportgen0 0 ACCTMAS data/gl.account.master_
============================================
exportgen1 +1 ACTLIST $JGDG/data/gl.account.acntlist_
=====================================================
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#4. joblog jgl200.ksh
=================
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#5. joblog jgl300.ksh
=================
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#6. joblog jgl320.ksh
=================
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#7. joblog ftpput1.ksh
==================
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#8. joblog mailsmtp.ksh
===================
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#9. joblog qjtlist.ksh
==================
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
vi data/ar.custmas.tellist
==========================
- 1st few lines shown below
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 |
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#10. joblog eztlist.ksh
==================
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
vi data/ar.custmas.eztlist
==========================
- 1st few lines shown below
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 |
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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).
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
| dataMF/... |
|
| data_bkup/... |
|
| data/... |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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' ===========================
#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/...
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
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
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
#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/...
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
#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
========================
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
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
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
#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
#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
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
| 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
#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
=====================
#4. uvcopy statksh1 <-- create stat reports from Korn shell scripts
===============
#5. uvcopy statcbl1 <-- create stat reports from COBOL programs
===============
| Note |
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
`xrefall`above creates reports `xkshparm1` & `xkshparm2`. which is sufficient for most sites. `xrefallparm`creates additional crossrefs as follows:
| xkshparmjps1/2 |
|
| xkshparmjp1/2 |
|
| xkshparmp1/2 |
|
| xkshparmp1 |
|
| xkshparmp2 |
|
'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 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 |
|
| xkshtdsql2 |
|
#3. xrefalltdsql step4
==================
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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
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
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
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
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
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
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
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
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
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
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
| statmvsjcl1 |
|
| 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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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*
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*
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
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
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*
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
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
=================
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
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
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
# 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
#!/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
| 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
| 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
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.
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.
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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.
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
#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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
| sales0 |
|
| sales1a |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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.
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
uvcp "fili1=ftp/sales1a,rcs=66,typ=RST,filo1=data/sales1a,tras=43(1),tras=61(1)" ================================================================================
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
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
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" =========================================================================
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
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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" =========================================================================
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
See all file type codes at uvcp.htm#F1. Here are the more relevant codes:
| RSF |
|
| RST |
|
| LST |
|
| LSTt |
|
| ISF |
|
| RDWz4 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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
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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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:
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
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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*
vi $UV/pf/IBM/varstat3
======================
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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" ==================================================================
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 ===========================================
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
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
# 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
# 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
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:
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
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.
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.
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
| 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
| 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
| 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 |
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
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:
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
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.
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.
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
#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 --->
/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.
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
#!/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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 ---------- ]
cpys -------> maps --------> pfp1 [ --------> pfp2 --------> pfp3 ]
cobmap1 genpipe1 [ uvdata52 cp & vi ]
[ --------- optional ---------- ]
cpys -------> maps --------> pfq1 [ --------> pfq2 --------> pfq3 ]
cobmap1 genfixd1 [ uvdata52 cp & vi ]
[ --------- optional ---------- ]
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
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
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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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
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.
#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
#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
#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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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.
#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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#1b. uvcopy pfx1/custmas <-- execute job to convert EBCDIC to ASCII
===================
| Note |
|
#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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
====================================================
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
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 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 -->
uvhdcob d2asc/custmas maps/custmas o99g99 =========================================
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
# 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
#6b. uvcopy pfx1/custmas
===================
fili1=${CNVDATA}/d1ebc/custmas,rcs=00256,typ=RSF
================================================
filo1=${RUNDATA}/data/ar.customer.master,rcs=00256,typ=RSF
==========================================================
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
# 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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#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
#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
#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
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
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.
#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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
====================================================
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
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 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
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 |
|
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
# 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
#6b. uvcopy pfx1/saledtl
===================
fili1=${CNVDATA}/d1ebc/saledtl,rcs=00256,typ=RSF
filo1=${RUNDATA}/data/ar.sales.items,rcs=00256,typ=RSF
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
# 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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
# 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
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
/* 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;
-- 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
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
#!/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
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
# 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
#6b. uvcopy pfx1/custmas
===================
fili1=${RUNDATA}/data/ar.customer.master,rcs=00256,typ=RSF
==========================================================
filo1=${CNVDATA}/d2asc/custmas,rcs=00256,typ=RSF
================================================
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
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.
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
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
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
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
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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#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
| 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
| 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
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
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.
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).
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
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
/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
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)
/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)
/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
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
| Note |
|
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 |
|
#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
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.
#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
#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 |
|
#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
#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 |
|
#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
========================
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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.
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
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)
| Note |
|
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
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
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.
#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
| Note |
|
| Note |
|
#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
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
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
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.
#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
'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.
#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
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/...
#2a. aixcblA all <-- compile ALL programs for AIX COBOL
===========
#3a. aixcbl1 program.cbl <-- compile any 1 program for 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
#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
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.
#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
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
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
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.
#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 |
|
#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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
#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
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
#1. login mvstest2 --> /home/mvstest2
--- OR ---
#1a. login --> your homedir
#2. cdd --> $RUNDATA ($HOME/testdata), alias cdd='cd $RUNDATA'
===
#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 |
|
#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
| Part3 |
|
| Part7 |
|
| Part8 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
export RUNLIBS=/p1/apps/prodlibs
export RUNDATA=/p2/apps/proddata
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
export RUNDATA=$HOME/testdata <-- for individual training/testing
=============================
export RUNDATA=/home/mvstest2/testdata <-- for later serious testing
======================================
jcl0 ------> jcl1 ----------> jcl2 -------------> jcl3 ------------> jcls
cleanup PROC expand convert to ksh manual copy 1 at a time
just before test/debug
export PATH=$PATH:$RUNLIBS/jcls
===============================
| Note |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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
#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
| 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
| 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
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
:-----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
/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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
#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
#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 |
|
#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
# 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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 |
|
#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
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)
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 ***
#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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
# 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 |
|
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
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
#4. xref2cpA all <-- super-script to generate all copy/select scripts
============
#4a. ls sf <-- list outputs from xref2cpA
=======
selpoc2cbl0 selpoc2cpy0 selpoc2data1 selpoc2jcl0 selpoc2parm0 selpoc2proc0
| Note |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
#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
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
=========
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
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
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 |
|
#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.
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
'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 |
|
#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
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 |
|
#2a. aixcblA all <-- compile ALL programs for AIX COBOL
===========
#3a. aixcbl1 program.cbl <-- compile any 1 program for AIX COBOL
===================
| Note |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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.
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'
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
# 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
=========
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
==============
#7. aixcblA all <-- compile ALL programs for AIX COBOL
===========
#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
uvcopy job 'aixcblerrs1' reads all the '.err' files created by the compile script 'aixcblA' (or 'aixcblAsub') & creates 4 reports in subdir errs/...
#9. uvcopy aixcblerrs1
==================
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
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.
#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 |
|
#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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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.
#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
#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
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
==============
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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
# 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
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
#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 |
|
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
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 - see MVSJCLtest.htm#3I1 (in this doc). Also see MVSJCL.htm#Part_5 for complete details about GDG files.
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
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
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
#1. login mvstest2 --> /home/mvstest2
--- OR ---
#1a. login --> your homedir
#2. cdd --> $RUNDATA ($HOME/testdata), alias cdd='cd $RUNDATA'
===
#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 |
|
#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
| 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
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
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/...)
* 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
#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
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
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':
* 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
# 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
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
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 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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
/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
export RUNLIBS=/c01/apps/bt00108/xwo/control
============================================
export RUNDATA=/c01/apps/bt00108/xwo/control
============================================
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
# 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
# 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
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).
#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
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 |
|
#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
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
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
#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
** 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
| Note |
|
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 |
|
| xcobcall2 |
|
| xkshfile2 |
|
| xkshprog2 |
|
| xkshproc2 |
|
| xkshparm2 |
|
CNVaids.htm#Part_4 Table Summaries & Statistics
| statallmvs1 |
|
| statallvse1 |
|
| statmvsjcl1 |
|
| statksh1 |
|
| statlogin1 |
|
| table2 |
|
| table3d |
|
| tblexts1 |
|
| recsizes1 |
|
Goto: Begin this doc , End this doc , Index this doc , Contents this library , UVSI Home-Page
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 |
|
| cmrpt1 |
|
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
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.
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
'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.
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
#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
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
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
#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
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
| 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