Version Control for Vancouver Utilities

This section describes the significant changes to each new release. The update descriptions will appear in reverse order - most recent at the front and oldest at the back (old entries dropped after 3 years).

COPYRIGHT 1993-2009 UV Software Inc. All rights reserved - Worldwide. Please see license agreements in the price list section uvprices.htm. Please see installation instructions in section install.htm.

Note that references to documentation sections with suffix ".doc" are text files. These are automatically converted to HTML for the website. Any UPPER case names are converted to lower case & the extension ".doc" is converted to ".htm". For example versions.doc is converted to versions.htm and MVSJCL.doc is converted to mvsjcl.htm.

             Owen Townsend       Tel: 604-980-5434
             UV Software Inc.    Fax: 604-980-5404
             4667 Hoskins Rd.    Eml: owen@uvsoftware.ca
             North Vancouver,    Web: http://www.uvsoftware.ca
             BC, Canada, V7K2R3

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

09V11. version 200911 - November 2009

emailing cron job ERRORS to managers at home

Unix/Linux sites commonly use 'cron' to schedule unattended batch processing jobs at night. But if critical errors occur, you might want to email an error indication to application managers at home.

We now provide a script 'ssmtp1' based on the open source 'ssmtp' package. You can call this script at critical points in your JCL/scripts. Note that all scripts converted from the original mainframe JCL have a common 'Terminated Abnormally' point at the end of each JCL/script as follows:

      S9900=A
      logmsg2 "ERR: Terminated Abnormally,JCC=$JCC,Step=$JSTEP" RV ACK
 -->  ssmtp1  "$JOBID Terminated Abnormally, step=$JSTEP, ERRcode=$JCC"
      ==================================================================
      jobabend51
      exit $JCC

You can use http://www.rpmfind.net to find the appropriate ssmtp package for your Operating System. I downloaded & installed the version for my Red Hat Enterprise as follows:


 rpm -ivh ssmtp-2.61.11.9.fc11.x86_64.rpm
 ========================================
 - stores 'ssmtp' executable in /usr/sbin/ssmtp
 - stores config file in /etc/ssmtp/ssmtp.conf

The config file for ssmtp is much simpler than for the full featured mail & sendmail system. Here is the config file I used for my testing. Note that I setup a 'gmail' account as a gateway to any email address on the internet.

 # /etc/ssmtp.conf - config file for 'sSMTP' (alternative to mail/sendmail)
 root=postmaster
 mailhub=smtp.gmail.com:587
 UseSTARTTLS=YES
 AuthUser=owen.townsend88@gmail.com
 AuthPass=owen1234     # password changed
 See ssmtp/ssmtp1 setup begining at: http://www.uvsoftware.ca/admjobs.htm#8Q1.

ssmtp vs mail/sendmail

We do not want our implementation of 'ssmtp' to interfere with mail & sendmail. 'mail' (user interface) passes the mail to 'sendmail' (transport agent), which (without special configuration), delivers the mail ONLY to other login user accounts on the local unix/linux system, and NOT to the internet.

Some ssmtp setups show you how to disable 'sendmail' & have 'mail' call 'ssmtp'. But we need the standard mail/sendmail to deliver console logs from cron jobs to appsadm, as described at: http://www.uvsoftware.ca/admjobs.htm#5I1. Or, see August 2009 below (in these version enhancement descriptions).

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

09V10. version 200910 - October 2009

capturing logs by mail from cron jobs

Job scheduling is documented at: http://www.uvsoftware.ca/admjobs.htm#Part_5. We have now extended the documentation to illustrate how you can capture the console messages from cron jobs into date/time stamped files.

When jobs (JCL/scripts) are scheduled by 'cron', the console messages are 'mailed' to the owner of the 'crontab' file used to schedule the cron jobs (since there is no login screen to display the messages).

We recommend setting up an applications administrator account 'appsadm', who will own the crontab files stored in /home/appsadm/sf/... This will avoid any confusion with the several other cron jobs owned by 'root'.

If you have scheduled cron jobs to run overnight, you can login as 'appsadm' and read your 'mail' to see if any errors occurred in the nightly processing.

But, it would be nice if we could capture the 'mailed' console messages into date/time stamped files, in case we forget to read & save the mail each morning. We do this by scheduling another script to run after the nightly processing jobs. This script 'read's the 'mail' & 'save's it into date/time stamped files stored in /home/appsadm/cronlog2/...

These procedures are illustrated at: http://www.uvsoftware.ca/admjobs.htm#5I1.

'cron mail logs' vs 'logged in user logs'

Note that we already had a system for capturing 'console logs' from logged in operators who are running JCL/scripts interactively. This system provides mainframe applications converted to Unix/linux with functionality similar to the builtin console logging system provided by mainframes. See documentation at: http://www.uvsoftware.ca/admjobs.htm#Part_6.

The logged in user message collection is started by inserting the unix/linux 'script' command at the end of the user profile & specifying a date/time stamped file to collect the messages in /home/appsadm/log1/userxx/yymmdd_HHMMSS. See suggested profile at: http://www.uvsoftware.ca/admjobs.htm#1C2.

Note that the raw script files contain a lot of screen control characters that make them difficult to view or print. The profiles provided run a 'logfix' script to scrub the console logs.

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

09V06. version 200906 - June 2009

Micro Focus COBOL SCREEN program demo

'nameadrs1.cbl' is a Name & Address Data Entry program that illustrates the powerful screen display/accept capabilities provided with Micro Focus COBOL. If you have installed the Vancouver Utilities, you will find 'nameadrs1.cbl' at /home/uvadm/cobol/cbls/nameadrs1.cbl. If you do not have Vancouver Utilities, you may download the demo program from http://www.uvsoftware.ca/nameadrs1.cbl.

This is significant news for mainframe sites migrating to Unix/Linux. If the mainframe applications are mostly 'batch' with just a few online CICS programs, you can use Micro Focus screen programs to replace the few CICS programs.

Of course if you have a lot of online/CICS programs, you would use the Micro Focus 'MTO' option (Mainframe Terminal Option) to emulate CICS on Unix/Linux.

Micro Focus also provide 'JES' (JCL Emulation), but most migrations will be better served by converting the JCL to Korn shell or Perl scripts, because it is difficult to insert Unix/Linux commands/scripts into JCL. The JCL emulator only runs COBOL and the expected mainframe utilities, which means you have to write a COBOL program to call any desired Unix/Linux command/script.

When you convert the JCL to Korn shell or Perl scripts, you can easily integrate any Unix/Linux commands, scripts, & the vast array of open systems software available.

Micro Focus COBOL Accept/Display Documentation

Please see 'Character User Interfaces' at:


 http://supportline.microfocus.com/Documentation/books/sx51/sx51indx.
 =========================================================================

There are a few demo programs provided in $COBDIR/demo/..., but none as realistic as the 'nameadrs1.cbl' demonstrated and listed on the website at http://www.uvsoftware.ca/mvcobol.htm#Part_7

    ********************************************************************
    *                                                                  *
    *                 ** Name & Address Entry Screen **                *
    *                                                                  *
    *    Telephone: [ 6049805434   ]                                   *
    *    Name:      [ TOWNSEND, OWEN                 ] (Last, First)   *
    *    Address1:  [ 4667 HOSKINS RD.               ]                 *
    *    Address2:  [                                ]                 *
    *    City:      [ NORTH VANCOUVER                ]                 *
    *    State:     [ BC                             ]                 *
    *    Zip:       [ V7K2R3                                           *
    *                                                                  *
    *    Message:                                                      *
    *                                                                  *
    *    Command---> ______________________________ <---               *
    *    a=add,c=change,d=delete,n=next,p=prior,b=Blankscreen,q=quit   *
    *                                                                  *
    ********************************************************************

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

09V05. version 200905 - May 2009

COBOL access to MySQL DataBase via ODBC

This is something that several customers and prospects have been asking for. Now we can convert mainframe COBOL applications with Embedded SQL statements to unix/linux using MySQL databases.

You do not need the Vancouver Utilities package to perform the test/demos described at http://www.uvsoftware.ca/sqldemo.htm#Part_6.

You can download the demo files & programs to test COBOL/ODBC/MySQL at your site. All components can be free downloads from uvsoftware.ca, opencobol.org, unixODBC.org, and MySQL.com. I have not yet tested with OpenCOBOL. I use and recommend Micro Focus COBOL for mainframe conversions.

The UV Software site gives you the step by step procedures to download and install all components required. I suggest you start with MySQL.

http://www.uvsoftware.ca/sqldemo.htm#Part_1 gives you instructions to download, install, and test MySQL. UV software provides a delimited file 'cust1.txt' that you can load into a table for interactive SQL Query testing in Part_1. In Part_6 we will use the cust1 table to test COBOL access via ODBC.

Getting Open Source software components to work together is often difficult and I think you will benefit from my experiences. See the problems & solutions at http://www.uvsoftware.ca/sqldemo.htm#6G2.

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

09V03. version 200903 - March 2009

genacum2 - generate jobs to accum ALL numeric fields

'genacum2' is a Vancouver Utility to generate uvcopy jobs to accumulate all numeric fields (packed/zoned/binary) in any data file. The jobs are generated automatically from the 'cobmap' record layout (which is generated from the COBOL copybook).

sample cobmap - custmas1

 cobmap1  start-end bytes for cobol record fields    200902200736  pg# 0001
 cpys/custmas1.cpy                                 RCSZ=00256  bgn  end  lth typ
 * custmas1 - cobol copy book for custmas1 file (see uvtrain.
      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(44).                         0076 0119  001
      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

Generate uvcopy job to acum all numeric fields


 #1. uvcopy genacum2,fili1=maps/custmas1,filo1=pfa1/custmas1,uop=f0
     ==============================================================
     - convert cobmap to uvcopy job to accumulate All numeric fields

 #2. uvcopy pfa1/custmas1     <-- execute job to add all numeric fields custmas1
     ====================

sample report

 genacum2  RCSZ=00256 DataFile=d2asc/custmas1
 2009/02/26_09:22:03  copybook=cpys/custmas1.cpy
 line# Field-Name                 occurs start lth type         field-total
    1  cm-num                             0005 006  n            7,259,353
    2  cm-thisyr-sales                12  0124 005 pns           99,697.93
    3  cm-lastyr-sales                12  0184 005 pns           45,440.85
          Record count        32 **      Hash-Total             21,773,231 **

Notes

  1. These reports might be used to verify data conversions, or any time you want a 2nd opinion on suspicious COBOL report totals.

  2. See complete details at http://www.uvsoftware.ca/datacnv1.htm#8F1

  3. Above instructions generate 1 job for 1 datafile. See DATAcnv1.htm#8F5 for instructions to generate acum jobs for ALL datafiles.

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

09V02. version 200902 - February 2009 (1 of 3)

'verify' command added to 'uvhdcob'

uvhdcob displays data file field contents beside the copybook fieldnames. See complete documentation at uvhdcob.htm.

In Jan 2009, we added the 'v' command to verify character, numeric,& packed data fields. Verify searches the file for unprintable characters in pic x fields, and invalid digits or signs in unpacked or packed numeric fields.

uvhdcob - test/demo 'verify' command


 #1. cd /home/uvadm   <-- change to uvadm for test files
     ==============

 #2. uvhdcob dat1/cm1_testuvhdcob cobol/maps/custmas1 <-- uvhdcob on demo file
     ================================================     (intentional BAD data)
     - uvhdcob displays 1st record (not shown here) & prompts for command

 #2a. --> v  <-- search & Verify character,numeric,& packed fields
      ============================================================

response to search/verify command

 rec#      10 fieldname occurs  bgn end typ<------ data (hex if typ=p/b) ----->
 001 cm-num                       0   5 n  15468X      313534363858      <-BadN
 002 cm-delete                    6   9
 003 cm-name                     10  34    TAURUS RESOURCES
 004 cm-adrs                     35  59    1110 - 625 HOWE STREET
 005 cm-city                     60  75    VANCOUVER
 006 filler001                   76  76
 007 cm-prov                     77  78    B.          42EE              <-BadC
 008 filler002                   79  79
 009 cm-postal                   80  89    V6C2T6
 010 cm-phone                    90 101    604 685 8565
 011 cm-contact                 102 119    MEL RAHAL
 012 cm-thisyr-sales       012  120 124pns EE0123456C            <-- Bad Packed
 013 cm-lastyr-sales       012  180 184pns 000000000C
 014 filler003                  240 255    C 19980331
      v --> 10 recs verified, 4 ERRs found in rec# 10, 1st at byte# 0
      2 packed & 1 numeric bad signs/digits, 1 unprintables in char fields

--> vv <-- continue Verify

  1. Note flags on right hand side '<-BadN', '<-BadC', '<-- Bad Packed'

  2. cm-num '15468X' flagged because 'X' is non-numeric. Hex representation x'313534363858' is shown in case of unprintables.

  3. cm-prov 'B.' is shown in hex as x'42EE' (the '.' is actually x'EE').

  4. cm-thisyr-sales is shown as x'EE0123456C' (1st 2 digits x'EE' invalid).

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

version 200902 - February 2009 (2 of 3)

genverify1 - generate jobs to Verify Packed/Numeric Fields

Verifying Numeric & Packed fields is the best way to detect any discrepancy between the copybook layouts & the actual data - especially effective for files with packed fields, where the unique sign codes must be in the last byte of each packed field.

Why do we need 'genverify1' if we can use uvhdcob ? - because uvhdcob displays & verifies ONLY the 1st field of any OCCURS. uvhdcob would not be conclusive for files such as custmas1 which has occurs 12 for this year & last year sales.

See complete doc for 'genverify1' at DATAcnv1.htm#8D1 thru 8E3. Here is the genverify report for the dat1/cm_testuvhdcob file used for the uvhdcob test/demo on the previous page.

genverify1 report for dat1/cm_testuvhdcob


 lth(p=packed)   hex-representation   numeric-data rec# occurs# field-name
 =================================================================
 06                    313534363858          15468X 010 cm-num
 05p                     EE0123456C                 010 01 cm-thisyr-sales
 05p-                    E01234567D                 010 12 cm-lastyr-sales
 06                    323334335858          2343XX 020 cm-num
 05p                     EE0012345C                 020 03 cm-thisyr-sales
 05p                     1E2E3E4E5E                 020 01 cm-lastyr-sales
 05p                     00000000EE                 020 12 cm-lastyr-sales
  1. Compare the errors reported here by the genverify job to those reported by uvhdcob on the previous page.

  2. genverify reports errors in rec# 010 occurs# 12 & in rec# 020 occurs 03 & 12 which were missed by uvhdcob since it only verifies the 1st field of occurs.

  3. genverify1 generates a 'uvcopy job' from the COBOL copybook record layout. See the job that created the above report at DATAcnv1.htm#8E3

  4. genverify1 jobs are based on the 'vnf' instruction (recently added to uvcopy) - see uvcopy3.htm#vnf.

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

version 200902 - February 2009 (3 of 3)

CMPjobs enhanced

The Vancouver Utility comparison jobs CMPjobs.htm have had major enhancements. Comparisons for Variable length files (RDW & IDXFORMAT) are now faster & easier.

In the past we used scripts to first convert the variable length to fixed length for the 'uvcmp1' comparison job. We have developed 2 new jobs (uvcmp2 & uvcmp3), that compare the variable length files directly.

uvcmp2
  • compares variable length RDW files directly
    (no need to 1st convert to fixed length for uvcmp1)
  • use via new script uvcmpRDW1 to minimize keystrokes
  • documented in CMPjobs.htm#Part_2
uvcmp3
  • compares variable length IDXFORMAT files directly
    (no need to 1st convert to fixed length for uvcmp1)
  • use via new script uvcmpIDX81 to minimize keystrokes
  • documented in CMPjobs.htm#Part_3

Note that we have changed the name of (& combined) the RDW variable length compare scripts from uvcmpVA1 (ASCII) & uvcmpVE1 (EBCDIC) to 'uvcmpRDW1'. The combined script uses optin 'y0' for ASCII & 'y1' for EBCDIC.

We have added a new option 'u2' to minimize the reports to displaying/printing only the 64 byte segments that mismatch. This is a huge space saver for sites that have large records.

Here are all options from CMPjobs.htm#2D2 (see sample report on 2D3).

 uop=q1a0b0c0d0e0f0g0h0p30r8192s8t500000u3x2y0  - option defaults
       a#              - dsplcmnt to exclude field #1
       b#              - length   to exclude field #1
         c#            - dsplcmnt to exclude field #2
         d#            - length   to exclude field #2
           e#          - dsplcmnt to exclude field #3
           f#          - length   to exclude field #3
             g#        - dsplcmnt to exclude field #4
             h#        - length   to exclude field #4
               n0      - print column scale only at begin report
               n1      - print column scale for each record mismatch pair
                p30    - line# to test overflow at begin record only
                  r8192- record size (largest RDW recsize, default 8192)
                s8     - StopPrint count, after s# mismatched records
              t500000  - StopRead count, after s# mismats, else read to EOF
            u1         - stop print at last segment with mismatch
            u2         - inhibit printing all matching segments after 1st
          x#           - hex or char print (x1 char, x2 hex, x0 auto)
        y0             - do NOT translate, file already ASCII, default(y0)
        y1             - translate char lines to ASCII (for EBCDIC files)
      z2               - RDWz2 2 byte RDW recsize prefixes (vs RDWz4 dflt)
 User OPtion (uop) defaults  = q1p30r8192s8t500000u3x2y0
 -->null to accept or enter/override -->

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

09V01. version 200901 - January 2009 (1 of 2)

acum1 - accumulate any 1 field in any datafile

'acum1' is a pre-programmed 'uvcopy job' to accumulate any 1 field in any 1 file for any use desired (might be for a hash total to prove file validity after conversions, or to get a 2nd opinion when COBOL reports look suspicious).

'acum1' will prompt for file-name, file-type, field dsplcmnt, length,& type, with an option to crossfoot a specified number of consecutive same-size fields.

Here is a sample command for the customer master file used for the uvhdcob demo in January 2009 (2 pages ahead).


 uvcopy acum1,fili1=dat1/custmas1,uop=a120b5c12d2e2f0r256
 ========================================================
 - see options described below

console log (option prompts)

 acum1 - acum any field for hash total, etc
 file type options: LST(text), RSF(fixed,default), RDWz4, RDWz2, ISF, IDXf8
 uop=a0b0c1d0e0f0r0  - default options
     a0              - field dsplcmnt (zero relative)
       b0            - field length (must specify)
         c1          - cross-foot number of fields
         c12         - example for 12 months sales
            d0       - field type numeric unpacked
            d1       - field type binary
            d2       - field type packed
              e0     - edit 0 decimals
              e2     - edit 2 decimals
                f0   - ASCII file
                f1   - EBCDIC file
                  r0 - recsize if typ=RSF
 User OPtion (uop) defaults  = q1a0b0c1d0e0f0r0
 -->null to accept or enter/override -->

sample report from acum1

      ====================================================================
      acum1: dsplcmnt 120, length 5, occurs 12, recsize 256: dat1/custmas1
      field total-->          99,697.93  records=          32
      ====================================================================

See the full documentation for 'acum1' at UVjobs.htm#T1 thru T4.

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

version 200901 - January 2009 (2 of 2)

selectf1 - select records depending on field value

'selectf1' is a uvcopy pre-programmed job to select records from any file depending on the value in any specified field <=> 2 specified values. Two specified values allows you to select a range of values in any 1 field. There is an option to crossfoot contiguous same size fields for the test value.

Here is a sample command to select sales records with this-year sales over $50.00 OR less than -50.00. See the customer master file used for the uvhdcob demo in January 2009 (on the next page).


 uvcopy selectf1,fili1=dat1/custmas1,uop=a120b5c12f0,arg1='>5000',arg2='|<-5000'
 ===============================================================================

console log - options prompt

 uop=a0b0c1d0e0f0r0  - default options
     a0              - field dsplcmnt (zero relative)
       b0            - field length (must specify)
         c1          - cross-foot number of fields
         c12         - example for 12 months sales
            d0       - field type numeric unpacked
            d1       - field type binary
            d2       - field type packed
                f0   - ASCII file
                f1   - EBCDIC file
                  r0 - recsize if typ=RSF
 uop=a120b5c12d2f0   - EX: field dsp 120, lth 5, packed(c2), ASCII(f0)
 arg1='>500',arg2='|<-500' <-- select recs > 5.00 OR <-5.00 in 120(5p)
 arg1='=0',arg2='_'        <-- select records with thisyr sales zero
           arg2='&/|'        - else 1st byte must be &/| AND/OR
           arg2='&/|</=/>'          2nd byte must be <=>
 15 records selected via >50000 & |<-50000
 090221:153134:selectf1: EOF fili01 rds=32 size=8192: dat1/custmas1
 090221:153134:selectf1: EOF filo01 wrts=15 size=3840: tmp/dat1_custmas1_sel

notes re command line options

  1. Options a&b 'a120b5' specify the field start byte & length.

  2. Option c 'c12' specifies any crossfooting for multi same size fields (12 for 12 months sales fields).

  3. Option 'd2' specifies packed, option 'f0' for ASCII (vs f1 for EBCDIC).

  4. arg1='>5000' specifies the value at 120(5p) must be > $50.00.

  5. arg2='|<-5000' specifies OR the value must be < -50.00

  6. arg2='&<10000' could specify AND value must be < $100.00

See the full documentation for 'selectf1' at UVjobs.htm#V1 thru V4.

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

08V12. version 200812 - December 2008

Pro-COBOL EXEC SQL API to Oracle DB

We have added Part 5 to http://www.uvsoftware.ca/sqldemo.htm#Part_5 to illustrate Pro*COBOL 'EXEC SQL' interface to Oracle database.

We document the procedures to download Oracle & install server & client. We list 2 sample COBOL programs to load/unload a database table. We also show the script to run procob32 & compile with Micro Focus COBOL server express.

If desired, you can download the demo programs & compile scripts as documented at sqldemo.htm#5A1.

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

08V11. version 200811 - November 2008

MySQL DataBase Tutorial & Test/Demo

SQLdemo.htm or http://www.uvsoftware.ca/sqldemo.htm gives you the step by step procedures to download the MySQL software from www.mysql.com, and setup a testing directory with demo files that you can download from www.uvsoftware.ca.

The test files from UV Software are much more realistic than the 'pet' table used in the MySQL reference manual tutorial. 'customer1.txt' & 'sales1.txt' are "delimited","text","files" for loading database tables 'ar.customer1' & 'ar.sales1'.

The UV Software tutorial then guides you thru the various SQL commands (CREATE tables, LOAD tables, SELECT from, etc). Since our demo tables have a common customer number field, you can perform a 'JOIN' to select sales1 items matching the customers in the customer1 table.

You do NOT need the Vancouver Utilities software package to perform the tutorials in Part 1. But in Part_2, I will demonstrate how the 'uvcopy' utility can help any SQL site to create the "delimited","files" required to load SQL database tables.

MySQL C-API sample programs

SQLdemo.htm#Part_3 lists 2 sample C-API to SQL programs & documents the procedures to download, compile, & execute them using the demo files/tables described above. If you are a C programmer, I think you will appreciate these samples.

uycopy API for DataBase/Table access

A new version of uvcopy, 'uycopy' was created to provide access to SQL DataBase tables. It had to be a separate version (from uvcopy) because it requires the SQL C-API libraries for compilation at sites with an SQL DataBase installed.

'uycopy' adds file 'typ=DBT' to define a DataBase Table & environmental variables (DBhost1, DBuser1, DBpass1) for connection to the DataBase. Please see the loadsales1/unloadsales1 sample jobs listed in SQLdemo.htm#Part_2.

SQL Book References

  1. Managing & Using MySQL by Reese,Yarger,King,& Williams - O'Reilly 2nd edition 2002 (good book for beginners)

  2. MySQL Reference Manual by Monty Wienius & David Axmark - O'Reilly 1st edition 2002 (good for C programmers)


    3. 'http://downloads.mysql.com/docs/refman-5.1-en.pdf'
    - complete documentation for MySQL (2200 pages)
    - our guide to download .rpm files, install,& perform the 'pet' tutorials

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

08V10. version 200810 - October 2008

On-site Conversion Training Plan

The 'On-site Conversion Training Plan' has been enhanced. Here is the mainframe conversion training plan, but also see the general purpose Vancouver Utilities training plans at http://www.uvsoftware.ca/uvprices.htm#I1 - I10.

UV Software recommends a 4 or 5 week on-site visit to train the conversion team in using the Vancouver Utilities to convert mainframe JCL, COBOL,& DATA to Korn shell scripts, Micro Focus COBOL,& ASCII data files for Unix/Linux systems.

  1. Study sample conversions of JCL to Korn shell scripts. See demo JCL/scripts listed at http://www.uvsoftware.ca/mvsjcl.htm#Part_1.

  2. Perform sample conversions, execute scripts using supplied test data files, and comapre to expected outputs.

  3. It is vital to understand the Vancouver Utility profiles & functions that support the execution of converted scripts. See http://www.uvsoftware.ca/admjobs.htm.

  4. Using the Vancouver 'Data Utilities' (uvsort,uvcp,uvhd,uvcopy,uvlist,etc) that replace various mainframe utilities (SORT,IDCAMS,DITTO,Easytrieve,etc). 'uvhd' is the first utility that students need to learn - to investigate & verify conversions of mainframe data files with packed/binary fields.

  5. Rather than teach the Vancouver 'Data Utilities' in isolation, we will teach them when the need arises, during our conversion & execution of the JCL/COBOL test/demo jobs. For a summary of the utilities most useful to conversions, please see http://www.uvsoftware.ca/cnvaids.htm.

  6. After the sample conversions & executions in MVSJCL.htm#Part_1, we will begin conversion of the 'customer' JCL, COBOL,& DATA, following the step by step guide in http://www.uvsoftware.ca/mvsjcl.htm#Part_4.

  7. The mass conversion scripts make it easy to quickly convert all mainframe JCL and COBOL files. The Vancouver Utilties also make it easy to generate the 'DATA' conversion jobs (from COBOL copybooks), but executing them takes much longer than for JCL & COBOL, because the DATA files are usually much larger, and they first have to be transferred from the mainframe.

  8. Our initial objective is to convert enough data files to allow us to begin testing some JCL/scripts & COBOL programs. Then we will assign each team member a JCL/script to be tested & the results compared to the mainframe.

  9. It usually takes 2 or 3 weeks to get to this point (where we can begin testing). The team members can now work independently testing their assigned systems & consulting with the UV Software instructor as required.

  10. For the remaining 2 or 3 weeks that UV Software is onsite, we usually meet in the classroom for only 2 hours a day (1PM-3PM suggested) to discuss common problems & continue training on the utilities that are relevant to the site (file maintenance, Easytrieve conversions, etc).

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

08V09. version 200809 - September 2008

Profiles are vital for Unix/Linux

The profiles supplied with the Vancouver Utilities have been further enhanced and are now better explained at ADMjobs.htm#1B2. You can see them listed on pages ADMjobs.htm#1C1 thru 1C5. Here is a short summary & the advantages.

The profiles supplied with the Vancouver Utilties are split into 3 parts (common_defines, stub_profile,& common_profile).

'common_defines' defines locations of TESTLIBS/TESTDATA & PRODLIBS/PRODDATA.

The user's 'stub_profile' (renamed .profile for ksh or .bash_profile for bash), defines RUNLIBS/RUNDATA as TESTLIBS/TESTDATA for programmers or PRODLIBS/PRODDATA for operators.

The 'common_profile' then defines the various 'PATH's using $RUNLIBS For example: export PATH=$PATH:$RUNLIBS/jcls (converted JCL/scripts).

JCL/scripts address data-files relative to $RUNDATA, since the JCL converter inserted common function 'jobset51' at the begining to 'cd $RUNDATA'. See sample JCL conversions at MVSJCL.htm#1C1.

Advantages of common_defines, stub_profile,& common_profile

The benefits of this system are HUGE:

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

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

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

  4. Testing & Production are usually on different machines, but this system also provides great flexibility for both testing & production.

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

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

  7. The system administrator (appsadm) can make changes in 1 place to affect all users vs having to update profiles in all user homedirs. Actually I should have said 2 places (common_defines & common_profile).

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

  9. Programmers have the flexibility required. They can select different sets of testdata using $symbols defined in common_defines (by the sysadmin).

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

08V08. version 200808 - August 2008

GDG file reporting enhanced

Generation file reporting has been enhanced on console logs & history entries have been increased to record the last 30 actions. We will illustrate only the recent enhancements here in versions.htm for August 2008.

See the previous GDG enhancements in versions.doc for June 2007, or the complete GDG system documented at http://uvsoftware.ca/mvsjcl.htm#Part_5.

The June 2007 enhancements ensured that new generations were not committed until successful EOJ. New generations are created in jobtmp/subdirs & moved back to their original/subdirs at Normal EOJ.

Reporting of GDG file commitments (or NOT if ABterm) has been improved as illustrated below using test/demo job jgl200.ksh (listing at mvsjcl.htm#1F3). We will show only the end of the console log for an ABterm & then the complete console log for the rerun.

1st run console log - ABterm lines only

 080922:131311:JGL200: ERR: step#S0020 cgl200 abterm 99
 080922:131311:JGL200: ERR: Terminated Abnormally,JCC=99,StepsExec=2,Last=S0020 y/n?
 080922:131313:JGL200: ERR: GDG files NOT moved from jobtmp/subdirs to /home/mvstest/testdata/subdirs
 080922:131313:JGL200: - can rerun OK, since GDGs not added to RUNDATA/subdirs
 080922:131313:JGL200: - OR restart at abterm step & reply y to move prompt
 080922:131313:JGL200: ERR: jobtmp/JGL200/GDG/gl/files NOT moved to $RUNDATA/gl/ listed below:
                       gl/account.master_000005
                       gl/account.trans_000006

console log for rerun (after ABterm)

 080922:131346:JGL200: Begin Job=JGL200
 080922:131346:JGL200: WARN: files exist in jobtmp/GDG subdirs (from prior Abterm ERR?)
 080922:131346:JGL200: ---- files in jobtmp/JGL200/GDG/*/* listed below:
                       jobtmp/JGL200/GDG/gl/account.master_000005
                       jobtmp/JGL200/GDG/gl/account.trans_000006
 080922:131346:JGL200: jobtmp/GDG/subdir/files must be moved/removed before run starts
 080922:131346:JGL200: y = move back to $RUNDATA/GDG/subdirs - restart from step# ?
 080922:131346:JGL200: n = do NOT move back (will erase) - rerun from begining ?
 080922:131349:JGL200: Begin Step S0010 sort (#1)
 080922:131349:JGL200: file: SORTIN=gl/account.tran1 bytes=1600
 080922:131349:JGL200: gen+1: SORTOUT=jobtmp/JGL200/GDG/gl/account.trans_000006 gens=18
 080922:131349:JGL200: file: SYSIN=gl/parms/pgl200s1 bytes=
 080922:131349:JGL200: file: SYSIN=/home/mvstest/testlibs/parms/pgl200s1 bytes=34
 080922:131349:JGL200: uvsort fili1=gl/account.tran1,filo1=jobtmp/JGL200/GDG/gl/account.trans_000006
 080922:131349:JGL200: EOF fili01 20 rds, 1600 size; gl/account.tran1
 080922:131349:JGL200: EOF filo01 20 wrts, 1600 size; jobtmp/JGL200/GDG/gl/account.trans_000006
 080922:131349:JGL200: Begin Step S0020 cgl200 (#2)
 080922:131349:JGL200: gen+1: GLTRANS=jobtmp/JGL200/GDG/gl/account.trans_000006 gens=18
 080922:131349:JGL200: gen0: GLMSOLD=gl/account.master_000004 insize=8720
 080922:131349:JGL200: gen+1: GLMSNEW=jobtmp/JGL200/GDG/gl/account.master_000005 gens=10
 080922:131349:JGL200: moving jobtmp/JGL200/GDG/subdir/files back to $RUNDATA/subdirs/
 `jobtmp/JGL200/GDG/gl/account.master_000005' -> `gl/account.master_000005'
 `jobtmp/JGL200/GDG/gl/account.trans_000006' -> `gl/account.trans_000006'
 080922:131349:JGL200: JobEnd=Normal, StepsExecuted=2, LastStep=S0020

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

Notes on rerun log above

  1. Console log above is the 'rerun' after we have corrected the problem causing the ABterm on the 1st run above.

  2. The begining of the console log shows the new generation files stranded in jobtmp/... due to the prior run ABterm.

  3. In this case, the operator replied 'n' to NOT move the new generation files back to their intended/subdirs, which allows him to restart the job from the begining (vs restarting from a specified step#).

  4. The EOJ is now 'Normal' & the console log clearly shows the new generation files being moved back to their proper subdirs.

    GDG file history actions increased to 30

We now maintain the last 30 GDG file actions in the indexed control file. Actions are coded G0=reads by exportgen0, G1=writes by exportgen1, AB=ABterms.

Here is the uvhd display for the 'gl/account.master_' file. GDG filenames are coded with a trailing '_' underscore (followed by a 6 digit generation#). The latest generation# for gl/account.master is seen below at byte 128 'G1_000005'.


 uvhd ctl/gdgctl51I.dat r2048  <-- use 'uvhd' to display GDG control file records
 ============================
                      10        20        30        40        50        60
 r#        2 0123456789012345678901234567890123456789012345678901234567890123
        2048 gl/account.master_                                 gdg=10
          64 next=000000(000000:000000)000000:000000 JGL200    080922:131349
         128 080922:131349:G1_000005(000001:000004)JGL200   S0020 cgl200  +
         192 080922:131349:G0_000004(000001:000004)JGL200   S0020 cgl200
         256 080922:131313:AB_000005(______:______)JGL200   S0020 cgl200  *
         320 080922:131311:G1_000005(000001:000004)JGL200   S0020 cgl200
         384 080922:131311:G0_000004(000001:000004)JGL200   S0020 cgl200
         448 080922:131225:G0_000004(000001:000004)JGL100   S0010 cgl100
         512 080922:131216:G1_000004(000001:000003)JGL220   S0010 cgl200  +
         576 080922:131216:G0_000003(000001:000003)JGL220   S0010 cgl200
         640 000000:000000:___000000(000000:000000)_______  _____ _________
                  - - - - - 20 entries removed to save space - - - - -
        1984 000000:000000:___000000(000000:000000)_______  _____ _________>.
               date:Time:action:GDG# oldest:newest Jobname  Step# Program

notes re history entries

  1. The 2048 byte record allows 30 64 byte entries from bytes 128 to 1984.

  2. New entries are inserted at the top at byte 128 & older entries shifted down.

  3. You can see (from the date:times & Jobnames) that there have been 4 runs writing actions in the gl/account.master GDG history record. First JGL220, second JGL100, then 2 runs of JGL200. The 1st JGL200 was started at 080922:131311 & ABtermed at 080922:131313. The 2nd was run at 080922:131349.

  4. Also note that 'gdg=10' on the right side of 1st line dictates that 10 generations are maintained (for gl/account.master) & older generations are dropped off.

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

08V07. version 200807 - July 2008

uvcopy - most powerful Vancouver Utility

'uvcopy' is the most powerful data file manipulation utility in the Vancouver Utilities package. There are over 500 'uvcopy jobs' (parameter files for the uvcopy interpreter), that perform many functions involved in mainframe conversions & running mainframe applications on Unix/Linux systems.

uvcopy is vital because it can process various mainframe data types & files (such as packed decimal fields & indexed files), that can not be processed by the standard Unix/Linux system utilities. uvcopy is continually enhanced, and here are some recent improvements.

edt a1 option reduces data file conversion code

Vancouver Utilities generate uvcopy jobs to convert mainframe files to Unix/Linux. The uvcopy jobs are generated automatically from the COBOL copybook record layouts. There are 2 main choices. We can retain the same record layouts by translating EBCDIC fields to ASCII, but preserving packed/binary fields unchanged (compatible with Micro Focus COBOL). This choice allows you to quickly migrate your mainframe applications to Unix/Linux.

The 2nd choice is to convert the data files to pipe delimited text files for loading Relational databases. Packed/binary fields will be unpacked and edited with signs & decimal points as required to load RDBMS tables. Here is a sample of pipe delimited output from http://www.uvsoftware.ca/datacnv1.htm#4C2.

      101301|JOHN HENRY|1815 BOW RD|VANCOUVER|BC|V9S1H1|+82898|+1490.61|
      101399|GEORGE BROWN|125 PENDER ST|VANCOUVER|BC|V5L1W1|+82898|-1462.61|
      101476|BONNIE SMITH|444 YALE RD|VANCOUVER|BC|V2P6J1|+121395|+376.92|
        edta1  c900(11),b102(5p),'+zzzzzzzzz9'   #10 face-value
        sqz    c900(11),' '                      squeeze left no longer req'd
        edta1  c1000(12),b107(5p),'+zzzzzzz.99'  #11 maint-tax
        sqz    c1000(12),' '                     edta1 eliminates 'sqz' instrns
        var    d0(2000),c0(100),0011,'|'         convert to pipe delimited

Above we are showing the generated 'edt/sqz' instructions only for the last 2 fields, and the 'var' instruction which removes the right hand blanks from the 11 100 byte max fields & inserts the '|' pipe delimiters.

The 'a1' option on 'edta1' left adjusts the edited output, so we no longer need to generate the 'sqz' instructions, shortening the code generated from the copybooks.

You do not need to modify these auto generated jobs for most files, but for files with multiple record types, you need to insert record type test & skip to the auto generated bank of instructions for that record type. We would write the different record types to different files for loading separate tables, since RDBMS tables do not allow multiple record types.

uvcopy gives us the power & flexibility to convert the most difficult mainframe files. The Vancouver Utilities have successfully converted several mainframe sites that could not be converted by other vendor's tools.

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

08V05. version 200805 - May 2008

Preventing Nightly Batch Failures

Several of our customers have nightly batch jobs scheduled by cron. Some of them have reported batch shift failures due to file permissions.

To understand how we use cron to schedule batch jobs, please see: http://www.uvsoftware.ca/admjobs.htm#Part_5

You could run a night shift from a crontab owned by 'root' & never have a permissions failure, but this would be extremely dangerous. One wrong use of 'rm *' could wipe out your system. Running as appsadm/apps protects your system.

Our suggested crontabs & scripts are owned by 'appsadm' in group 'apps' which is common to the group of operators & programmers who work with the production data & libraries. The permissions in this group must be 775 for directories & 664 for files (which extends security to the group level).

Batch failures can occur if a day shift operator/programmer creates a file with the wrong permissions or group & this file is later used by the nightly batch scripts. FTP'd files can have the wrong permissions. Somebody might use 'root' to fix something & forget to reset permissions/owner/group.

We can prevent these failures if we setup a cron script (setperms1) to set permissions & group before the nightly batch jobs are scheduled.

The setperms1 script & the crontab used to schedule it must of course be run under 'root' to be able to change permissions & groups. See crontab_root example at http://www.uvsoftware.ca/admjobs.htm#5F2. Here is the essential line:


 30 01 * * 2-6 /home/appsadm/sf/setperms1 all  # fix permissions
 #===========================================    on data & libraries
 # minute hour day-of-mth mth-of-yr day-of-week <----command---->

The crontab above (owned by root) schedules setperms1 at 1:30 AM Tues-Sat. The crontab below (owned by appsadm) schedules nightly1 at 1:45 AM Tues-Sat.


 45 01 * * 2-6 /home/appsadm/sf/nightly1 all  # schedule nightly batch jobs
 #==========================================

See the full 'setperms1' script at http://www.uvsoftware.ca/admjobs.htm#5H1, but here are the essential lines:

      . /home/appsadm/env/common_defines
      find "$PRODDATA" -type d -exec chmod 775 {} \;
      find "$PRODDATA" -type f -exec chmod 664 {} \;
      chown -R appsadm:apps "$PRODDATA"

'PRODDATA' is the super directory containing all production subdirs & files, and is defined in 'common_defines', for example:

      export PRODDATA=/p2/proddata

Please see the file system design (directory structures) suggested for mainframe conversions at http://www.uvsoftware.ca/admjobs.htm#2B0.

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

08V04. version 200804 - April 2008

Morada RPG compiler

UV Software can now provide the Morada RPG compiler for Unix/Linux systems, so we can now migrate your RPG programs as well as your COBOL, JCL,& DATA files from your mainframe to Unix/Linux systems.

RPG source cleanup & compile scripts are provided. Please see complete details at http://www.uvsoftware.ca/vserpg.htm.

uvhd scan/replace enhanced

uvhd is a file investigation utility primarily intended for mainframe type files with packed/binary fields & without the LineFeeds required by most Unix/Linux system utilities.

The search/replace feature has been enhanced to allow different length patterns to be used for 'TEXT' files (as well as descriptive fields within fixed length records).

See the example at uvhd.htm#L4 which replaces tabs in text files (scripts & source programs) with 4 spaces (vs the default 8).

'uvhd' is most customers favorite utility, and is a free download from http://www.uvsoftware.ca/libuvhd.htm.

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

08V03. version 200803 - March 2008

Preparations for Mainframe Conversion

http://www.uvsoftware.ca/uvprices.htm#G1 thru G3, now documents 20 points of preparations for conversions of mainframes to Unix/Linux/Windows systems.

You should find these useful regardless of whether you intend to use the mainframe migration software & services provided by UV Software.

Optional Enhancements during Conversion

UV Software can make enhancements during the conversion, that will make your applications easier to run, improve your backups, etc. Here are some examples of enhancements that we can provide.

  1. Extract 'control-cards' from JCL to separate files for easier/safer updates.

  2. Multiple sets of Data & Libraries for Production &/or Test.

  3. Enhanced Backups, run by cron, create zip files for last 35 days, last 15 months,& last 10 years.

  4. Replace Line Printers with Lasers, most reports on 8 1/2 x 11 3 hole punched.

  5. Convert COBOL printer files to 'LINE SEQUENTIAL' to allow viewing & printing. The Micro Focus default is 'RECORD SEQUENTIAL' which would create 132 byte records without the LineFeeds required by Unix/Linux editors & lp schedulers.

  6. Convert other DATA files without packed/binary fields to Line Sequential, to allow use of Unix/Linux utilities (vi,cat,more,lp,etc).

See more details at http://www.uvsoftware.ca/uvprices.htm#J0 thru page J6.

Mainframe Conversion Aids

http://www.uvsoftware.ca/cnvaids.htm is intended to make you aware of the many conversion, testing, & debugging aids supplied by the Vancouver Utilities. I believe you will find many of these aids essential to the success of your conversion project.

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.

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

08V02. version 200802 - February 2008

countc1d - count lines of code & comments

'countc1d' is a new uvcopy job (in /home/uvadm/pf/util/countc1d) to count lines of code & comments in all files in the specified directory. This job assumes the files are scripts (that use '#' as the comment identifier). This works for most unix/linux scripts, configuration files, uvcopy jobs, etc.

Here is the Op. Instrns & sample report for /home/uvadm/env. We use the profiles directory since it has only a few files & the sample report is short.


 mkdir stats     <-- make subdir to receive report (if not already present)
 ===========       - report name = directory + '.stats' extension

 uvcopy countc1d,fild1=env
 =========================
 countc1d - count lines of Code,Comments,Total for scripts & uvcopy jobs
 Directory: env   prefix=    2008/04/21_10:10:09
      Code  Comments     Total    Filename   Report: stats/env.count
        14        22        36    env/kshrc
        15        21        36    env/bashrc
        14        46        60    env/common_defines
        69       161       230    env/common_profile
        20       139       159    env/stub_profile
        18        31        49    env/root_profile
       150       420       570   * Grand Totals *

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

08V01. version 200801 - January 2008

statdir1 - Directory Statistics

'statdir1' is a new script (in /home/uvadm/sf/util/statdir1) to count files, subdirs,& total KB used in the specified parent directory. Here is the Op. Instrns & sample report for /home/uvadm:


 mkdir stats     <-- make subdir to receive report (if not already present)
 ===========       - report name = directory + '.stats' extension

 statdir1 /home/uvadm     <-- count files,subdirs,KB used in uvadm
 ====================       - report in /home/uvadm/stats/uvadm.stats
 statdir1 - FileCounts & DiscUsage for SubDirs in ParentDir: /home/uvadm
 statdir1 uvadm >stats/uvadm.stats   Sun Apr 20 02:01:02 PDT 2008
 ===============================================================
 #1 Files=0000030 SubDirs=0000 KB=0000248 - /home/uvadm/batDOS
 #2 Files=0000021 SubDirs=0000 KB=0003576 - /home/uvadm/bin
 #3 Files=0000007 SubDirs=0000 KB=0001376 - /home/uvadm/binDOS
 #4 Files=0000049 SubDirs=0006 KB=0000492 - /home/uvadm/cobol
 #5 Files=0000064 SubDirs=0000 KB=0000588 - /home/uvadm/ctl
 #6 Files=0000089 SubDirs=0000 KB=0000760 - /home/uvadm/dat1
 #7 Files=0000100 SubDirs=0000 KB=0010640 - /home/uvadm/doc
 #8 Files=0000151 SubDirs=0001 KB=0013392 - /home/uvadm/dochtml
 #9 Files=0000019 SubDirs=0001 KB=0000228 - /home/uvadm/env
 #10 Files=0000010 SubDirs=0000 KB=0000132 - /home/uvadm/hdr
 #11 Files=0000087 SubDirs=0001 KB=0001324 - /home/uvadm/htmlcode
 #12 Files=0000029 SubDirs=0000 KB=0005644 - /home/uvadm/lib
 #13 Files=0000220 SubDirs=0082 KB=0002688 - /home/uvadm/mvstest
 #14 Files=0000013 SubDirs=0000 KB=0000212 - /home/uvadm/ovl
 #15 Files=0000005 SubDirs=0000 KB=0000076 - /home/uvadm/perlm
 #16 Files=0000002 SubDirs=0000 KB=0000024 - /home/uvadm/perls
 #17 Files=0000787 SubDirs=0005 KB=0010276 - /home/uvadm/pf
 #18 Files=0000000 SubDirs=0000 KB=0000008 - /home/uvadm/rpts
 #19 Files=0000583 SubDirs=0004 KB=0004804 - /home/uvadm/sf
 #20 Files=0000044 SubDirs=0000 KB=0000436 - /home/uvadm/sfun
 #21 Files=0000055 SubDirs=0000 KB=0007120 - /home/uvadm/src
 #22 Files=0000030 SubDirs=0000 KB=0000428 - /home/uvadm/srcf
 #23 Files=0000009 SubDirs=0000 KB=0000108 - /home/uvadm/stats
 #24 Files=0000141 SubDirs=0004 KB=0001228 - /home/uvadm/tf
 #25 Files=0000000 SubDirs=0000 KB=0000008 - /home/uvadm/tmp
 #26 Files=0000161 SubDirs=0082 KB=0002148 - /home/uvadm/vsetest
 Total Files=2706, SubDirs=186, KB=67964, for ParentDir=/home/uvadm

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

07V12. version 200712 - December 2007

RDW support extended to all utilities

RDW (Record Descriptor Word) files are now supported by all Vancouver Utilities (uvcp,uvsort,uvcopy,uvqrpg,uxcp,uxsort,uxcopy,uxqrpg,& uvhd).

This is important for mainframe variable length file conversions to unix/linux. Mainframe FTP products such as BSTTFTPC from Barnard Systems (www.bsiopti.com) insert a 2 byte binary record size at the begining of each record.

The Vancouver Utility file conversions save the record size at the end, so the record layout will match the copybook descriptions, used to preserve the packed/binary fields while character fields are translated to ASCII.

After conversion, the saved record length is used to load variable length files on unix/linux for Micro Focus COBOL variable length formats (IDXFORMAT3 or IDXFORMAT8).

See data file conversions at http://www.uvsoftware.ca/vsedata.htm#Part_4 or http://www.uvsoftware.ca/mvsdata.htm#Part_4

Note that we can also convert the data files back to EBCDIC & insert the 2 byte binary record sizes for the BSSFTPC product to reload ESDS files on the mainframe.

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

07V11. version 200711 - November 2007

Mainframe Conversion Enhanced

The mainframe JCL, COBOL,& DATA conversions continue to improve with each new customer. The latest is a major financial corporation in Phoenix, and you can read the customer's reference letter at uvintro.htm#H1.

See the updated documentation at http://uvsoftware.ca/mvsjcl.htm#Part_4. Part 4 covers all steps of the conversion from directory design, thru the conversions to testing & implementation.

www_uvsoftware.ca is the 'BIBLE'

A friend tells me that he knows an IT shop that calls my website the 'BIBLE' (on mainframe conversions I assume). Of course I was pleased to hear that my website is appreciated.

I have worked diligently to make the UV Software website a source of real knowledge about converting mainframe JCL, COBOL,& DATA to Unix/Linux/Windows (not just the collection of buzzwords I see on some websites).

 After receiving the 'BIBLE' compliment, I wrote a letter illustrating some
 of the more useful profiles & scripts that you can download from my website
 - regardless of whether you buy my mainframe conversion software or not.

Please see http://www.uvsoftware.ca/uvintro.htm#I1

All platforms handle Large Files

Large File handling (over 2 gig) has just been extended to Windows/DOS, as well as all flavors of Unix & Linux. Large Files can now be processed by Vancouver Utilities (C programs: uvhd, uvsort, uvcp, uvcopy,& uvqrpg).

Note
  • uvhd is especially useful for investigating large files
    since you can jump to any point in the file by record# or byte#
  • uvhd is the 1 free utility that you can download from the web site
  • http://www.uvsoftware.ca/libuvhd.htm

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

version 200711 - November 2007

inserting common copybooks aids conversions

The converter inserts 2 common copybooks while converting mainframe COBOL to Unix/Linux Micro Focus COBOL. This common code replicates mainframe features that are otherwise not available on Unix/Linux systems.

     copy "unixwork1.cpy".  <-- inserted after 'WORKING-STORAGE'
                                W-S fields used by unixproc1.cpy
     perform unixproc1.     <-- inserted after 'PROCEDURE DIVISION'
                              - to perform common code in unixproc1.cpy
     copy "unixproc1.cpy".  <-- inserted at end of program

We have just found another reason (#4 below) why it was a great idea to insert these common copybooks into all programs during conversion.

  1. unixproc1/unixwork1 transfer 'PARM' data from the JCL/script to COBOL. The JCL converter 'export's environmental variable PARM & unixproc1 code in the COBOL program 'accepts' the PARM data.

  2. unixproc1/unixwork1 provide a 'RUNDATE' like the mainframe where the JCL could set a DATE different than the system date.

  3. unixproc1/unixwork1 provide a subroutine to decode the binary file status code used by Micro Focus COBOL.

  4. In Oct 2007 we converted a site where most COBOL programs needed to connect to an ORACLE database (was DB2 on mainframe). It was easy to supply this connection to all COBOL programs, simply by adding 1 line of code to the common copybook 'unixproc1.cpy'.

    EXEC SQL CONNECT DSNE/ORACLE@SOA END-EXEC.
    ==========================================

See more at http://www.uvsoftware.ca/mvscobol.htm#2E0

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

07V10. version 200710 - October 2007

Data File Compares

The data file compare jobs have been updated to provide for variable length record compares & exclusion fields. The data file compare utilities were 1st used for Year 2000, but are now being used to verify mainframe data conversions. You can see complete details at http://www.uvsoftware.ca/cmpjobs.htm but here is a brief introduction to the data file compares provided by UV Software.

compare scripts for various file types

uvcmpFA1
  • compare 2 Fixed length ASCII data files
uvcmpFE1
  • compare 2 Fixed length EBCDIC data files
uvcmpVA1
  • compare 2 ASCII Variable length files (see Part_2)
uvcmpVE1
  • compare 2 EBCDIC Variable length files (see Part_2)
uvcmpIDX81
  • compare 2 IDXFORMAT8 Variable length files (see Part_3)

uvcmpVA1 & uvcmpVE1 are designed for variable length 'RDW' files, which have 4 byte record prefixes with the record length in binary in the 1st 2 bytes (3rd & 4th bytes unused nulls).

The following script demo is from http://www.uvsoftware.ca/cmpjobs.htm#2F1 & the ample output report is at http://www.uvsoftware.ca/cmpjobs.htm#2F3.


 uvcmpVE1 dat0/testRDWe dat0/testRDWe2 r64k1 <-- script to compare RDW files
 ===========================================   - see sample report below
 uvcmp1 - compare 2 files, print mismatched record pairs, flag diffs with '*'s
 2007/11/17_18:49:27 UOPs=q1k0m1p30r256s8t500000v2x0
 recsize  reccount   file-size  typ Report=rpts/testRDWe.cmp
 1:   64         8         512  RSF  File1=tmp1/testRDWe
 2:   64         8         512  RSF  File2=tmp2/testRDWe2
                       1         2         3         4         5         6
 f#rec#byte# 0123456789012345678901234567890123456789012345678901234567890123
 ============================================================================
 1    3    0 0044IBM000 - International Business Machines....................
             FFFFCCDFFF464C9A8998A899894CAA898AA4D888898A00000000000000000000
             0044924000000953595139651302429552204138955200000000000000000000
                                                  ** ****
 2    3      0044IBM000 - International Business Mothers ....................
             FFFFCCDFFF464C9A8998A899894CAA898AA4D9A889A400000000000000000000
             0044924000000953595139651302429552204638592000000000000000000000
                                                  ** ****
 1    6    0 0028REDHAT - Red Hat Linux  ....................................
             FFFFDCCCCE464D884C8A4D89AA44000000000000000000000000000000000000
             0028954813000954081303954700000000000000000000000000000000000000
                     **
 2    6      0028REDH00 - Red Hat Linux  ....................................
             FFFFDCCCFF464D884C8A4D89AA44000000000000000000000000000000000000
             0028954800000954081303954700000000000000000000000000000000000000
                     **
 ======================= EOF or stop count reached ==========================
 Total=000008,read=000008,mismatches=000002,stop=000008,term=500000

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

version 200710 - October 2007

uvhd now handles RDW files

'uvhd' is most customers favorite utility & invaluable for investigating mainframe & unix/linux files with packed/binary fields. uvhd is a free download from http://www.uvsoftware.ca/libuvhd.htm.

We recently added option 'a' for RDW (Record Descriptor Word) files. These files have variable length records with the record size in Big-End binary in the 1st 2 bytes (& next 2 bytes null).


 uvhd dat1/testRDWe a  <-- examine RDW test file, option 'a' translate ASCII
 ====================    - no file type option, defaults to 256 byte blocks
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 ....DELL00 - Dell Inc.  ....HP0000 - Hewlett Packard....IBM000 -
             0100CCDDFF464C8994C984440100CDFFFF464C8A98AA4D8898980200CCDFFF46
             080045330000045330953B000C008700000008563533071321940C0092400000
          64  International Business Machines....MFC000 - Micro Focus COBOL
             4C9A8998A899894CAA898AA4D888898A0200DCCFFF464D88994C98AA4CDCDD44
             0953595139651302429552204138955200004630000004939606634203626300
         128 ....MS0000 - Microsoft Corp.....REDHAT - Red Hat Linux  ....SUN0
             0100DEFFFF464D8899A98A4C99940100DCCCCE464D884C8A4D89AA440200EEDF
             0C0042000000049396266303697B0C0095481300095408130395470004002450
         192 00 - Sun Microsystems Ltd   ....UVSI00 - UV Software Inc.
             FF464EA94D8899AAAA89A4DA84440200EEECFF464EE4E98AA8984C984444
             00000245049396282354203340000000452900000450266361950953B000

Since we did not specify option 'z' to recognize RDW, uvhd would display the file in 256 byte blocks. In this case the entire file is only 252 & contains 8 short RDW records. Note the 1st 2 bytes of the 1st record (DELL) is x'0018' = ((1*16)+(8*1)) = 24 bytes.


 uvhd dat1/testRDWe z0a3p4y7  <-- rerun uvhd with RDW & text output options
 ===========================    - z0=file type 'RDW', a3=translate to ASCII
                                - p4=drop 4 byte binary recsize, y7=text out
                                - displays 1st record & waits for your command
                      10        20        30        40        50        60
 r#        1 0123456789012345678901234567890123456789012345678901234567890123
           0 ....DELL00 - Dell Inc.
             0100CCDDFF464C8994C98444
             080045330000045330953B00
 ---> w99999  <-- write all records (8) to tmp/testRDWe_yymmdd_hhmmssW
     DELL00 - Dell Inc.
     HP0000 - Hewlett Packard
     IBM000 - International Business Machines
     MFC000 - Micro Focus COBOL
     MS0000 - Microsoft Corp.
     REDHAT - Red Hat Linux
     SUN000 - Sun Microsystems Ltd
     UVSI00 - UV Software Inc.

See other options explained at http://www.uvsoftware.ca/uvhd.htm#X2

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

07V08. version 200708 - August 2007

statdir1 - report file counts & KB used in a Parent dir

This script should be very useful to any unix/linux site:

  1. Helps control disc storage used. Note the sample report shown below for all user /home/... dirs. You can quickly spot any users with extreme Total KB of storage.

  2. Helps verify results of batch runs, you might know how many files & approx how much disc usage there should be for each subdir.

  3. Helps maintain the integrity of your directories & files. The report shows if there are any subdirs within a subdir, which might be a problem if you have batch jobs that process all entries in a directory & might be upset by the appearance of an unintended subdir created by mistake.

Here is the report I created for all /home/... dirs on my machine:


 statdir1 /home      <-- call script, arg1 is directory to be examined
 ==============        - sample report below
 stats/home.rpt - FileCounts & DiscUsage for SubDirs in ParentDir: /home
 #1 Files=0000063 SubDirs=0049 TotKB=0004308 - /home/appsadm
 #2 Files=0000126 SubDirs=0022 TotKB=0001180 - /home/aquitec
 #3 Files=0000266 SubDirs=0057 TotKB=0018216 - /home/berks
 #4 Files=0000036 SubDirs=0037 TotKB=0000372 - /home/callatay
 #5 Files=0000070 SubDirs=0061 TotKB=0025964 - /home/carol
                  - - - - - etc - - - - -
 #82 Files=0003280 SubDirs=0252 TotKB=0060484 - /home/uvadm
 #83 Files=0003995 SubDirs=0297 TotKB=0070032 - /home/uvext
 #84 Files=0000015 SubDirs=0006 TotKB=0000100 - /home/uvtest1
 #85 Files=0000407 SubDirs=0079 TotKB=0003168 - /home/vsetest
 Total Dirs=85, Files=33711, SubDirs=3646, KB=1550852, for ParentDir=/home

You can rerun for homedirs using a lot of storage, for example:


 statdir1 /home/uvadm     <-- rerun for selected homedirs
 ====================

'statdir1' is a very powerful & interesting script. You can see it listed at http://www.uvsoftware.ca/CNVaids.htm#2G1

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

07V07. version 200707 - July 2007

statlogin1 - table summary user logins by month & userid

'statlogin1' should appeal to Unix/Linux system administrators. It reads a system file (/var/log/messages) and creates a table summary report of user logins by month & userid. Here are a few lines of the input file, followed by a sample report.

sample input /var/log/messages

 Oct 23 06:11:51 uvsoft3 login[16341]: session opened for user laval4 by LOGIN(uid=0)
 Oct 23 06:11:51 uvsoft3  -- laval4[16341]: LOGIN ON tty5 BY laval4
 Oct 23 06:13:08 uvsoft3 ftpd[16342]: FTP LOGIN FROM 192.168.0.2, uvsoft2.uvsoft.ca (laval4)
 Oct 23 07:15:00 uvsoft3 login[16341]: session closed for user laval4
 Oct 23 07:15:23 uvsoft3 login[16516]: authentication failure; logname=LOGIN uid=0 euid=0 tty=tty5 ruser= rhost=  user=mvstest
 Oct 23 07:15:33 uvsoft3 login[16516]: session opened for user mvstest by LOGIN(uid=0)
 Oct 23 07:15:33 uvsoft3  -- mvstest[16516]: LOGIN ON tty5 BY mvstest
 Oct 23 21:00:42 uvsoft3 shutdown: shutting down for system halt

sample output report

 statlogin1  2007/11/26_21:24:24  logins by month & userid
 tbl#001 pg#001     -argument-
 line#  count    %  mth login
     1      13   5  Nov efunds2
     2      13   5  Nov laval4
     3      23  10  Nov mvstest
     4      27  12  Nov root
     5      26  11  Nov uvadm
     6      26  11  Nov uvbak
     7       8   3  Oct efunds2
     8       7   3  Oct laval4
     9      10   4  Oct mvstest
    10      11   4  Oct root
           222*100   *TOTAL*

This uvcopy job scans for 'session opened', then scans for ' user ', extracts the following word (userid),& uses the userid & month as the table argument

See 'statlogin1' job listed at http://www.uvsoftware.ca/tablejobs.htm#J1. To scan for desired data & build table above requires only 21 lines of code. The job is 87 lines total because we include 66 lines of comments for operating instructions & a samples of input & output.

Using this job as an example, you should be able to write other jobs to table summarize other items that interest you from this file or other system files.

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

07V06. version 200706 - June 2007

GDG Enhancements

The Vancouver Utilities provides GDG (Generation Data Group) processing similar to the mainframe facility. In May 2007, the VU GDG system was significantly enhanced and some new features go well beyond the original features provided on the mainframe.

VU GDG Basic Features

  1. After mainframe GDG files are converted (from EBCDIC to ASCII, preserving packed/binary fields), they are copied to the testdata/proddata directories & renamed with suffix '_000001' (1st generation using 6 digit#).

  2. When mainframe JCL is converted to Korn shell scripts, GDG files are identified with a trailing '_' underscore only.

  3. The JCL calls Korn shell 'functions' to determine the appropriate generation. 'exportgen0' defines the latest/highest generation (for reading). 'exportgen1' defines the next generation (for writing).

  4. Earlier versions of exportgen1 incremented the generation# immediately (vs delaying until the job terminated normally as on the mainframe). If a multi-step job terminated abnormally, you were advised to use the 'restart' facility (provided for every step by the VU JCL converter). But if for some reason you wanted to restart from the begining, you had to manually remove any new generations created before the abterm.

  5. The abterm problem is now solved by an enhanced version of 'exportgen1' and a new function 'jobend51' called at Normal End of Job. 'exportgen1' now assigns new generations to the 'jobtmp' directory and at Normal EOJ, function 'jobend51' will move the jobtmp files back to the $RUNDATA directories. This allows you to rerun abterm jobs from the begining , but if you do restart, you will be prompted if it is OK to move any jobtmp files back to the $RUNDATA directories.

  6. Earlier versions of exportgen1 used a hard-coded number of generations to be accumulated before erasing older generations, unless you coded the gdg=... keyword on all exportgen1's for the file, which could be problematic.

  7. The new system provides an Indexed file which exportgen1 accesses to get the desired number of generations for each file.

  8. We provide a utility to automatically create the indexed file by extracting all GDG filenames from all JCL/scripts, sorting,& dropping duplicates. You then edit the auto generated control file to modify the default number of generations as desired & run another utility job to load the indexed file.

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

version 200706 - June 2007

GDG Advanced Features (beyond mainframe capability)

The indexed control file allows us to provide some significant enhancements that go well beyond the original GDG implementation on the mainframe.

  1. You can specify a prior generation of a file to be defined by exportgen0 for the next run only, or until a specified expiry date/time is reached.

  2. You can specify range processing for a series of prior generations This is a powerful feature that 1 customer is already planning to make good use of. On the mainframe he had 30 tapes that had to be processed 1 at a time by a batch COBOL program & the operator simply mounted the tapes in turn.

  3. On the new unix system, all tape files are converted to disc files & with the old GDG system, he would have had to modify the JCL to hard-code the next desired generation# or to specify via an operator keyin.

  4. With the new GDG system, he edits the control file specifying the low to high range of generation#s to be processed. He can then run the batch job 30 times to process the 30 files (with no changes to JCL/scripts & no operator generation# keyins).

  5. This is possible because 'exportgen0' uses the current next generation#, which is incremented by the 'jobend51' function at normal EOJ. At the high end of the range, processing returns to normal, but an historical record is maintained in the indexed file database, making it easier to reactivate if the same cycle is repeated periodically.

  6. You can specify 'opt=c' (confirm) on control file entries to cause exportgen0 to prompt the operator to confirm the generation# selection, or to enter an alternative 6 digit generation#.

  7. The new system maintains a history of the last 14 accesses by exportgen0 and exportgen1. You can look at the gdgctl file (with uvhd) and for each of the last 14 accesses, you can see: date:time, generation# selected, lowest:highest generations on-file, jobname, step#,& program of last access.

  8. Each of the last 14 accesses is coded with: G0=exportgen0(reading current/ selected gen), G1=exportgen1(writing next gen), or AB=ABnormal Termination (indicates file not moved from jobtmp/subdirs back to RUNDATA/subdirs).

See the complete documentation for the Vancouver Utility GDG system at http://www.uvsoftware.ca/mvsjcl.htm#Part_5.

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

version 200706 - June 2007

IDXf8 Variable Length file handling improved

This version has significant improvements in handling variable length sequential & indexed files (IDXFORMAT3 & IDXFORMAT8 compatible with Micro Focus COBOL).

uvsort, uvcp, uvcopy, uvqrpg now pass thru the input record length to the output file. In uvsort the variable reclth is temporarily appended to the record for the sort phase & then used to write the specified record length on the output phase. This was necessary to not disrupt any includes, omits, field moves, etc that are specified zero relative.

Previous versions would have written the max length specified for each particular variable length file which worked for most applications since they should have been programmed to accept the max for the file (but I found some customer COBOL programs that did not allow the max for the file).

ftpgdg1 - detect/rename FTP'd files

The 'ftpgdg1' script is designed to detect files FTP'd from remote sites & move them to a 2nd directory, renaming to prevent overwriting existing files.

The remote site should name their files with a trailing underscore '_', so we can use the 'exportgen1' function (documented on page '3D2' of MVSJCL.doc).

'exportgen1' is the Vancouver Utility function to replace the mainframe 'GDG' function. It replaces the trailing '_' with '_000001' if there is no existing matching filename, or assign the next 6 digit sequential number if there is an existing match.

Please see the 'ftpgdg1' script documented at www.uvsoftware.ca/mvsjcl.htm#8K1 Page '8K2' describes how we tested it at UV Software & the script is listed on page '8K3'.

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

07V05. version 200705 - May 2007

new backup plan - Part4 of ADMjobs.doc

  1. This system takes advantage of the massive inexpensive disc systems now available to maintain zip file backups on-disc for the last 40 days, the last 15 end of month backups,& the last 7 end of year backups.

  2. Backups automatically scheduled by 'cron'

  3. Two days backup on-disc, unzipped, instantly available for file recovery.

  4. Zipped file of nightly backups maintained on-disc for 40 days, 1st of month zip file maintained on-disc for 15 months, & 1st of year zip file maintanined on-disc for 7 years.

  5. Zip file names have embedded date & time to eliminate confusion. For example, the 3 nightly zip files used in the backup examples are: proddata_yymmdd_HHMM.zip, prodlibs_yymmdd_HHMM.zip, homedirs_yymmdd_HHMM.zip.

  6. This backup system is intended application files (production data, libraries, & home dirs), that may need quick restore. Most sites will already have backups for the entire system, but those probably do not provide the quick restore possible with these smaller targeted ondisc backup files.

  7. Nightly zip files backed up to tape by cron & tapes cycled over 31 days. For smaller sites with single tape units, I suggest you simply label 31 tapes with numbers 1 to 31. Each morning the operator changes tapes & inserts the tape# for today's day of month, with no need to write anything.

  8. The nightly backup tapes can be stored onsite in fireproof vault. The end of month tape should be taken offsite & new tape inserted in rotation, progressing thru the 31 tapes, so tapes are reused maximum 31 times.

  9. Directories & devices defined in 1 place (/home/appsadm/env/common_defines), to make it easier, to install backup scripts at new sites & to make changes, when directories or tape devices change.

  10. This is achieved by having all scripts '.' dot-execute the 'appsadm profile' & 'common_defines' which define the symbols ($PRODDATA, $PRODLIBS, $BACKUP, $TAPERWD, $TAPENRW), which are used thruout the scripts. Please see the profiles listed begining on page http://www.uvsoftware.ca/admjobs.htm#1B1.

  11. Executing the backups under cron means the console logs will be 'mailed' to the crontab owner, which is 'appsadm', so the site administrator can investigate any errors.

  12. These scripts use zip/unzip for Linux, but Unix users may have to change these to gzip/gunzip or to tar+compress/uncompress/untar.
 See details & examples at http://www.uvsoftware.ca/admjobs.htm#Part_4

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

07V04. version 200704 - April 2007

chmodR2 - change permissions on all files & subdirs

This script will change permissions on entire directory trees, using 'recursion' to process all levels of sub-directories. This script can save hours of manual investigation & correction.

See ADMjobs.htm#7B1 or http://www.uvsoftware.ca/admjobs.htm#7B1

For projects such as mainframe conversions, there is usually a team of programmers who must be able to read & write on a common set of directories & files (JCL/COBOL libraries & datafiles).

We recommend 775 for directories & 664 for files. This extends security to the 'group' level & all team members must be in the same group. Scripts would be 775 since they are files with the execute bit on.

This script is the solution to a very significant problem, that I frequently encounter when I arrive onsite to assist customer conversions.

If the site administrator did not initially setup the profiles with umask 002 (permissions 775/664 for directories/files), then the other programmers will be very frustrated when they attempt to work on the shared directories of JCL, COBOL,& DATA files.

VSEJCL.doc Part 4 rewritten

Part 4 of VSEJCL.htm#Part_4 was completely rewritten as a result of a recent conversion. It now documents all activities required during the conversion period.

VSEDATA.doc rewritten


VSEDATA.htm was also rewritten as a result of the same conversion.

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

06V10. version 200610 - October 2006

Overlay Printing

Overlays can eliminate the need for pre-printed forms such as letterheads, tax notices, etc.

An 'overlay' is a file that is loaded into the memory of a laser printer, prior to sending a report file to the printer. When each formfeed is received, the overlay is superimposed upon the variable data for that page.

Background

The development of 'uvoverlay' was suggested by a customer. I had helped convert that site from a mainframe to unix in 2000. I returned in 2006 to help him move the JCL/scripts, programs,& data to new hardware.

When we converted in 2000, we had replaced the line printer with laser printers & we used the 'uvlist' scripts to get the mainframe style reports (with 132 columns & 66 lines) onto 8 1/2 by 11 3 hole punched paper.

In 2006 the customer asked if I could help him to use overlay printing & eliminate several preprinted forms (letterheads, tax notices, etc). The text data for these forms was generated by COBOL programs in his JCL/scripts & printed via 'uvlist' scripts.

I searched the web for unix programs to create overlays from forms created by Microsoft WORD & I found the 'pcloverlay' program, freeware downloadable from http://www.shady.com & 'kevin@shady.com'.

I then developed 'uvoverlay' to prepend the overlay with the report file. 'uvoverlay' does more than just concatenate the files, it allows you to specify laser printer options to adjust the report data. You can modify the cpi, lpi, margins, etc to match the overlay form you are printing.

Please see the complete documentation at: http://uvsoftware.ca/uvoverlay.htm.

Good example of Vancouver Utilities

Overlay printing is a good example of adding a new feature to your existing applications (of JCL/scripts & COBOL programs). uvoverlay.htm shows you how to add overlay printing to applications previously converted from a mainframe, using the directory structures, as documented in MVSJCL.htm#1A1 or http://www.uvsoftware.ca/mvsjcl.htm#1A1.

Even if you do not immediately need overlay printing, I am sure you will learn a lot by studying the procedures & directory setups used to implement an application such as this.

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

06V09. version 200609 - September 2006

uvhd option 'z1' for variable length BDW/RDW files

Option 'z1' is provided to read BDW/RDW standard IBM mainframe variable length files. Also specify option 'y6' (y2=append LineFeeds, y4=strip prefixes), and you can then use 'w999999' (write all) to create text records without the binary BDW/RDW record prefixes.

 IBM BDW/RDW standard variable length format is as follows:
 - 4 byte block  lth hdr with lth in 1st 2 bytes & 3-4 x'0000'
 - 4 byte record lth hdr with lth in 1st 2 bytes & 3-4 x'0000'
 - lengths in 1st 2 bytes are BIG-END format vs INTEL little-end
   IE - record lth 80 would be x'0050' not x'5000' as per INTEL
      - blk lth 16384 would be x'4000' not x'0040' as per INTEL

Here is the 1st 64 bytes of a test/demo file dat1/testBDWe. This is the Ebcdic version (dat1/testBDW is the ASCII version). You can examine dat1/testBDWe with uvhd as follows:


 uvhd dat1/testBDWe a   <-- option 'a' translates char line to ASCII
 ====================
               10        20        30        40        50        60
      0123456789012345678901234567890123456789012345678901234567890123
      ........DELL00 - Dell Inc.  ....HP0000 - Hewlett Packard....IBM0
      00000100CCDDFF464C8994C984440100CDFFFF464C8A98AA4D8898980200CCDF
      1000080045330000045330953B000C008700000008563533071321940C009240

The 1st 64 bytes shows the 4 byte BDW, followed by RDW for 1st record (DELL), followed by 2nd record RDW+data (HP), followed by 3rd record RDW+data (IBM). uvhd displays data 'vertical hex', converting to horizontal hex we have:

at byte 00
  • x'0100' - BDW length for 1st block (256 decimal)
at byte 04
  • x'0018' - RDW length for 1st record (DELL) = 1*16+8*1 = 24 bytes
at byte 28
  • x'001C' - RDW length for 2nd record (HP) = 1*16+12*1 = 28 bytes
at byte 56
  • x'002C' - RDW length for 3rd record (IBM) = 2*16+12*1 = 44 bytes

Run uvhd twice, the 1st time to strip BDW hdrs,& a 2nd time to strip RDW hdrs:


 uvhd dat1/testBDWe z1y4a <-- run#1 - strip BDW prefixes
 ========================     option z1=read BDW, y4=strip BDW,a=show ASCII
 ---> w999999 <-- write out, stripping BDW headers (from 2 blocks)
              --> result is RDW only file (16 records)

 uvhd tmp/testBDWe.yymmddhhmmssW z1y6a <-- uvhd run#2 - strip RDW prefixes
 =====================================   - z1=RDW,y4=strip RDW,y2=insert LFs
 ---> w999999 <-- write out, stripping RDW headers,& inserting LineFeeds
                - result is text only file (16 records)

See DATAcnv1.htm#Part_5 for more examples

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

06V08. version 0608 - August 2006

uvcp 'tras' to correct zoned signs

Option 's' of 'tras' will translate zoned signs from EBCDIC to ASCII for use with Micro Focus COBOL. You could use this to fix the signs in files that have been FTP'd in text mode from the mainframe to unix/linux/windows.

FTP from the mainframe in text mode will automatically translate EBCDIC to ASCII. Most people know that you can't do this if there are any packed or binary fields, but some don't realize that any unpacked signs need to be corrected from the mainframe conventions to Micro Focus COBOL conventions.

      In EBCDIC +'0123456789' is '{ABCDEFGHI' (x'C0' thru x'C9')
      In EBCDIC -'0123456789' is '}JKLMNOPQR' (x'D0' thru x'D9')
      In ASCII  +'0123456789' is '0123456789' (x'30' thru x'39') (no diff)
      In ASCII  -'0123456789' is 'pqrstuvwxy' (x'70' thru x'79')

Here is a complete uvcp command to translate a 152 byte EBCDIC record to ASCII (OK if no packed fields & no zoned signed fields).


 uvcp "fili1=infile,typ=LST,rcs=152,filo1=outfile,tra=0(152)"
 =================================================^^^^^^^^^^=

If the file had a zoned signed field in bytes 41-49 (0 rel), then we could use the following uvcp to correct the units zone in byte 49.


 uvcp "fili1=infile,typ=LST,rcs=100,filo1=outfile,tras=49(1)"
 ====================================================^=======

We could also have used 'mvn=41(9za)41(9ze)', but the advantage of 'tras' is that we can correct multiple contiguous signed fields with 1 instruction. For example if we had 12 * 9 byte signed fields in bytes 41-112, we could use:


 uvcp "fili1=infile,typ=LST,rcs=154,filo1=outfile,tras=41(112)"
 ====================================================^=========

The recsize is specified as 154 because FTP text would have added 2 bytes for CR/LF to the original 152 (40 + 112). If we wanted to drop the CR/LF to get back to the original record length of the mainframe file, (so we don't have to change the COBOL programs) we should use the following:


 uvcp "fili1=infile,typ=LST,rcs=154,filo1=outfile,tras=41(112),rcs=152,typ=RSF"
 ====================================================^=========================

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

06V07. version 0607 - July 2006

'profiles' provided in /home/uvadm/env

 /home/uvadm/env      <--- profiles provided here
 :-----common_defines    - defines TEST/PROD LIBS/DATA so stub_profile
 :                         can use $symbols to define RUNLIBS/RUNDATA
 :-----common_profile    - common profile (called by stub_profile)
 :                         defines PATH's etc using $RUNLIBS/$RUNDATA
 :-----stub_profile      - will be renamed .profile (ksh) or .bash_profile (bash)
 :                       - defines RUNLIBS/RUNDATA for programmers & operators
 :
 /home/appsadm/env    <--- setup user 'appsadm' & copy from /home/uvadm/env/*
 :-----common_defines    - customize profiles here in /home/appsadm/env/...
 :-----common_profile    - common profile (called by stub_profile)
 :-----stub_profile      - customize & copy to homedirs .profile or .bash_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 the longer 'common' profile which is stored in /home/appsadm/env/...

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

The common_profile will use $RUNLIBS & $RUNDATA to define PATH's to scripts & data directories.

The 'stub' profiles in programmer homedirs define RUNLIBS=$TESTLIBS & RUNDATA=$TESTDATA. The 'stub' profiles in production operator homedirs define RUNLIBS=$PRODLIBS & RUNDATA=$PRODDATA.

The stub profiles would also define user variable items such as: TERM, stty erase character, aliases, console logging on/off.

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

 See more at http://www.uvsoftware.ca/admjobs.htm#1B1
 or at ----> http://www.uvsoftware.ca/install.htm#G0

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

version 0606 - June 2006

JCL to Perl script conversion

UV Software can now provide MVS JCL to Perl script conversion in addition to the existing MVS JCL to Korn shell script. Please see MvsJclPerl.htm or http://www.uvsoftware.ca/mvsjclperl.htm.

Multi-Client systems

The 'Multi-Client' system is for sites that have multiple systems of of JCL/scripts, COBOL programs,& data files that they wish to run on the same machine. The profile for each user can default to an initial client, and then he can use the 'chgclient' script to change to any desired client.

The system provides multi-level searches for scripts & programs for both 'production' & 'test' modes.

In 'prod' mode the libraries are searched in the following sequence: emergency, clientapp, clientcom, sitecom,& appscom.

In 'test' mode the libraries are searched in the following sequence: clientapp, clientcom, sitecom,& appscom.

uvhd now has sequence# generate

'uvhd' now has the 'g' command to generate sequence numbers. For example to generate sequence#s in cols 75-80 in a file of 80 byte records:


 uvhd tmp/test100 r80u   <-- start uvhd on test file Recsize 80 Update mode
 =====================

 --> g999i10 74(6),'000010'   <-- Generate seq#s on next 999 recs,
     ======================     - Increment by 10
                                - in bytes 74-79 (0 rel) or cols 75-80
                                - starting from '000010' initial value

See more examples on page P1 of uvhd.htm#P1 or http://www.uvsoftware.ca/uvhd.htm#P1

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

06V02. version 0602 - February 2006

RAID, Partitioning,& File System Design

Please see http://www.uvsoftware.ca/admjobs.htm to see new documentation on setting up RAID arrays, Partitioning,& making file systems.

The example was based on a Dell 2800 with 6 x 73 gig SCSI discs:

The original mainframe had been converted to unix in 1994, and at that time, the customer was very impressed when a job that took 4 hours on the mainframe was reduced to 10 minutes on the unix system.

Now in 2006, that job takes only 7 seconds on the Dell 2800 with 4 gig of memory (vs 64 meg on the 12 year old unix system).

JCL Conversions enhanced

The MVS & VSE JCL converters continue to be enhanced with each new conversion.


See 'http://www.uvsoftware.ca/mvsjcl.htm' for more about MVS JCL conversion.

uvhd enhanced

'uvhd' is an interactive utility for investigating mainframe type files with packed or binary fields. It displays the data in vertical hexadecimal and allows you to browse, search, select, print, etc. You can now insert sequence#s as well as check sequence#s.

Most customers say uvhd is an essential tool when converting to unix/linux.

See http://www.uvsoftware.ca/libuvhd.htm to download the latest version (free).

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

05V08. version 0508 - August 2005

testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp

IDXFORMAT1
  • FIXED length indexed files < 2 gigs
  • files have 2 parts - data & index (filename & filename.idx)
  • MF COBOL does not use filename.dat & filename.idx (like C-ISAM)
  • compatible with C-ISAM & D_ISAM (used by 'uv' utilities)
  • 'uv' utilities provided to process IDXFORMAT1 files
IDXFORMAT3
  • VARIABLE length indexed files < 2 gigs
  • files have 2 parts - data & index (filename & filename.idx)
  • 'ux' utilities provided to process IDXFORMAT3 files
IDXFORMAT8
  • FIXED & VARIABLE length indexed files > 2 gigs
  • files have only 1 part - data & index in same partition
  • 'ux' utilities (with option y8) provided for IDXFORMAT8 files

'uv' utilities

The 'uv' utilities (uvcp,uvsort,uvcopy,uvqrpg) can process IDXFORMAT1 files (& any non-indexed file). The 'uv' utilities use the D-ISAM file handler which is compatible with Micro Focus COBOL IDXFORMAT1.

'ux' utilities

The 'ux' utilities (uxcp,uxsort,uxcopy,uxqrpg) can process IDXFORMAT3/8 files (in addition to IDXFORMAT1 & any non-indexed file). The 'ux' utilities must be compiled using the Micro Focus compiler to include the file handler for IDXFORMAT3 & IDXFORMAT8. See the special compile instructions on page D1 of install.htm#D1.

testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp

We provide COBOL test programs cobidx31/cobidx32 to write/read IDXf3 files and cobidx81/cobidx82 to write/read IDXf8 files. The IDXf3 & IDXf8 programs are the same except for the '$SET IDXFORMAT(8)' on line 1 of cobidx81/82.

Text files 'idx3S' & 'idx8S' are provided as input to these tests. It has the indexed key in the 1st 4 bytes & the desired record length in the next 4 bytes. COBOL programs 'cobidx31/cobidx81' load the IDXf3/IDXf8 files & 'uxcp' reads them back & outputs text nonindexed files. Then we do the reverse (load the Indexed files with uxcp & read them back with cobidx32/cobidx82)

See these tests documented at http://www.uvsoftware.ca/mvscobol.htm#Part_8

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

05V07. version 0507 - July 2005

Mainframe Conversion Documentation Reorganized

The mainframe conversion documentation has been reorganized as follows:


 Text doc file - HTML file (hyperlink) - description
 =============================================================
MVSJCL.doc
VSEJCL.doc
MVSCOBOL.doc
VSECOBOL.doc
MVSDATA.doc
  • mvsdata.htm MVS Data Conversion (all files in directory)
VSEDATA.doc
  • vsedata.htm VSE Data Conversion (all files in directory)
DATAcnv1.doc

Previously only the 'JCL' conversion was split into 'MVS' & 'VSE' versions. Now 'COBOL' & 'DATA' are also split to separate versions. This allows us to give more specific examples since the JCL is different.

UV Software maintains documentation as text files with 'vi' & automatically converts them to HTML when significant changes are made (see HTMLjobs.htm).

Hit Counter downloadable from UV Software

"uvhitctr2.pl" is a CGI Perl program that you may download from UV Software. It displays counts month by month for this year & last year, for example:

Visitor Counter for This Year and Last Year

 ThisYear=000016 (J=0,F=0,M=0,A=0,M=0,J=0,J=16,A=0,S=0,O=0,N=0,D=0)
 LastYear=000078 (J=1,F=2,M=3,A=4,M=5,J=6,J=7,A=8,S=9,O=10,N=11,D=12)

Hit Counter Usage at UVSI

At UV Software the documentation is maintained as text files so it can be edited with unix/linux editors such as 'vi'. The HTML is automatically generated from the text files (as explained in Part_2 of HTMLjobs.htm). The automatic conversion inserts the following Server Side Include (SSI) to uvhitctr2.pl at the end of every document:

 <!--#exec cgi="/cgi-bin/uvhitctr2.pl" -->

The hit counter files are periodically FTP'd from the ISP website to UV Software's computer for analysis & charting. We can see which documents have the most hits & which months have the most hits.

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

05V04. version 0504 - April 2005

Reverse Conversion & Data File Comparisons

The primary focus of DATAcnv1.htm is conversion of mainframe EBCDIC data files to ASCII, while preserving packed decimal fields, and translating any zoned signs to ASCII equivalents. Conversion jobs are automatically generated from the COBOL copybooks.

We have now added a few pages begining at DATAcnv1.htm#5A1 to document the reverse - converting ASCII files back to EBCDIC.

This allows us to take files back to the mainframe, and in addition it gives us a way to verify the original conversion - by comparing the reconverted files to the original EBCDIC files.

DATAcnv1.htm#5B1 documents the 'uvcmp1' utility to compare data files and flag differences with '*'s (sample below).

                       1         2         3         4         5         6
 f#rec#byte# 0123456789012345678901234567890123456789012345678901234567890123
 ============================================================================
 1    1    0 10130140  JOHN HENRY               1815 BOWEN ROAD          VANC
             FFFFFFFF44DDCD4CCDDE444444444444444FFFF4CDECD4DDCC4444444444ECDC
             1013014000168508559800000000000000018150266550961400000000005153
          64 OUVER           BCV9S1H1 bi   Wb    g   qq 00014906A970530191809
             DEECD44444444444CCEFEFCF0888005880008000770FFFFFFFFCFFFFFFFFFFFF
             645590000000000023592181029C0072C0047C0111C000149061970530191809
                                                                *
 2    1      10130140  JOHN HENRY               1815 BOWEN ROAD          VANC
             FFFFFFFF44DDCD4CCDDE444444444444444FFFF4CDECD4DDCC4444444444ECDC
             1013014000168508559800000000000000018150266550961400000000005153
          64 OUVER           BCV9S1H1 bi   Wb    g   qq 000149061970530191809
             DEECD44444444444CCEFEFCF0888005880008000770FFFFFFFFFFFFFFFFFFFFF
             645590000000000023592181029C0072C0047C0111C000149061970530191809
                                                                *

The '*' differences shown are not a problem - they are caused by translating zoned signs from EBCDIC to ASCII & back, because there are no + zones in ASCII. The original + zones in EBCDIC x'C_' are lost (not needed) in ASCII where normal numeric zones x'3_' are the only + zones. When we convert back we get the normal numeric zones in EBCDIC x'F_', which cause the mismatches (but these are not errors). See more details on zoned sign conversions on page DATAcnv1.htm#3C6.

We need a utility such as 'uvcmp1' because we can't use the unix/linux 'diff' command, since diff is for text files only and mainframe style data files are fixed length without the LineFeeds required by diff.

The other unix/linux system command for comparing files is 'cmp' which is good for telling you whether 2 files are the same or not, but it does not illustrate the differences as does the Vancouver Utility 'uvcmp1'.

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

05V03. version 0503 - March 2005

Cross References for COBOL & JCL/scripts

These cross-reference reports will be invaluable during testing & debugging. The Cross-References & the documentation for them has been greatly improved. Here is a list of the cross-reference reports available, followed by just 1 sample report contents (xcobcopy2).

xcobcopy1
  • list all COPYBOOKS in any 1 PROGRAM
xcobcopy2
  • crossref all PROGRAMS copying any 1 COPYBOOK
xcobcall1
  • list of all CALLED-PROGRAMs in each PROGRAM
xcobcall2
  • crossref all PROGRAMS calling any 1 CALLED-PROGRAM
xjkshfile1
  • list all DATAFILES used in any 1 ksh JCL/script
xjkshfile2
  • crossref show all ksh JCL/scripts using any 1 DATAFILE
xjkshprog1
  • list all PROGRAMs executed in any 1 ksh JCL/script
xjkshprog2
  • crossref show all ksh JCL/scripts executing any 1 PROGRAM

xcobcopy2 - crossref all PROGRAMS using any 1 COPYBOOK

 Keyword=copy  Exclude= Include=  page#  1
 Directory=/home/vsetest/cbls
 Options=q1a16b16c4e0d0j0l0s2w1a16b16c4e1q0i7
 =======================================================2005/03/24_12:49:50
 custmas.cpy      car100.cbl      car120.cbl      car130.cbl      car140.cbl
 ____________6    car150.cbl      car200.cbl
 paymas.cpy       cpy100.cbl
 saledtl.cpy_2    car150.cbl      car200.cbl
 sdline.cpy       car200.cbl
 stline.cpy       car200.cbl

You can see samples for all the cross-references at: MVSJCL.htm#9E1 or MVSJCL.htm#9E1 or MVSCOBOL.htm#4Q1.

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

version 0503 - March 2005

COBOL 'Files' Report

Vancouver Utilities provides a utility to extract the essential file info from the COBOL programs into a concise report. The report prints 1 line for each file found in each program. Here is a sample report. See more details at MVSCOBOL.htm#4J1

 cobfil41  ** COBOL Files Report ** Dir=cbls  2005/03/05_20:04:06
 progname.cbl DDname       OAM   open recsz  copybook.cpy  FDname      Key
 ================================================================================
 car100.cbl   custmas      SS    I    00256  custmas.cpy   custmas
 car100.cbl   nalist       L     O    00120                nalist
 car200.cbl   saledtl      SS    I    00064  saledtl.cpy   saledtl
 car200.cbl   custmas      IR    I    00256  custmas.cpy   custmas
 car200.cbl                                                            cm-cust
 car200.cbl   salelst      L     O    00120  sdline.cpy    salelst

Job Flow Reports

These reports are a vital guide to your testing & debugging. This job extracts the essential info for each Data-File from each step in the JCL/script & combines this with the matching file info from the matching COBOL program. Here is a sample report. See more details at MVSJCL.htm#9H1 or VSEJCL.htm#9H1.

 jclfil43 ** JCL Report with COBOL Files info ** 20050305 page#0002
 stp# progname.cbl  DDname  OAM open recsz copybook    data-file-name
 ================================================================================

 #001 sort         sortin1  SS  I  00064               ar/sales.items
                   sortout  SS  O  00064               $DW/##srtext
                   sysin                               tmp/${JOBID}_${JOBSTEP}_${PROGID}

 #002 car200.cbl   saledtl  SS  I  00064  saledtl.cpy  $DW/##srtext
                   custmas  IR  I  00256  custmas.cpy  ar/customer.master.indexed
                   salelst  L   O  00120  sdline.cpy   ar/sales.list
                   syslst                              $DP/${JOBID}_${JOBSTEP}_${PROGID}

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

05V02. version 0502 - February 2005

Documentation Re-Organized

The mainframe conversion procedures have been reorganized into the following documents:

 MVSJCL.htm   - Convert MVS JCL to ksh scripts for unix,linux,Windows/SFU
 VSEJCL.htm   - Convert VSE JCL to ksh scripts for unix,linux,Windows/SFU
 COBOLcnv.htm - Convert Mainframe COBOL to Micro Focus COBOL
 DATAcnv1.htm - Convert EBCDIC data to ASCII, preserving packed decimal fields
 DATAcnv2.htm - for higher volume & more complex DATA conversions

Permuted Keyword Index

For longer more important documents (such as MVSJCL.htm), we now generate a 'permuted keyword index' (cross-reference) & insert it at the end. Keywords are extracted from the ** headings, permuted, sorted,& converted to HTML hyperlinks. "permuting" shows each word in turn at the begining of the original sentence & sorts on these keywords. Insignificant words are dropped by a table which is easily updated.

Each page (about every 50 lines) of the main document includes a link to the keyword index, so you can quickly get to the index & then to the 1st letter of the desired keywords. You ca see how effective this is at: http://www.uvsoftware.ca/mvsjcl.htm#kwindex

See Part 2 of HTMLjobs.htm#Part_2 for the details of how the Vancouver Utilities all text documentation is automatically converted to HTML for the web site. You might be able to use a similar process if you have legacy text documents.

Evaluation copies & Partnerships

The requirements for obtaining 'evaluation copies' of the Vancouver Utilties is more clearly described at uvprices.htm#M1. Becoming a UV Software partner is described at uvprices.htm#P1.

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

04V11. version 0411 - November 2004

multicol1/2/3 - rearrange files for multi-column printing

Use these when you want to print multi column tickets,labels,etc (2up,3up,etc). This assumes the input records contain some sequential# or alpha sequence that we wish to appear in sequence horizontally or vertically. Three versions of the program are provided:

multicol1
  • prints the records in horizontal sequence
  • options for the no of columns & the spacing between the columns
multicol2
  • prints the records in vertical sequence
  • last record in column 1 followed by 1st record in column 2 etc
  • options for the no of columns & the spacing between the columns
multicol3
  • writes the records in vertical sequence
  • for use when you already have a program to print horizontally
  • options for the no of columns (user program determines spacing)

demo input file tf/test100a

 0001 one
 0002 two
 0003 three
 0004 four
   ------- etc ------
 0097 ninety seven
 0098 ninety eight
 0099 ninety nine
 0100 one hundred

multicol2 output (vertical)

 0001 one           0026 twenty-six    0051 fifty-one     0076 seventy-six
 0002 two           0027 twenty-seven  0052 fifty-two    0077 seventy-seven
 0003 three         0028 twenty-eight  0053 fifty-three  0078 seventy-eight
                ----------------- etc ------------------
 0025 twenty-five   0050 fifty         0075 seventy-five 0100 one hundred

These jobs were suggested by Mike Fey of Datex Services Vancouver. The most important job to him was multicol3, since he already had an application to print horizontally, and he needed a way to rearrange the file to achieve the vertical column effect.

These jobs read the entire file into memory to allow the vertical sequencing. By default 10 megabytes are reserved for the input area 'a', but you could increase to 100 meg or more if required depending on your memory available. Since 200 bytes are allowed for each record, 10 meg allows 50,000 records,& 100 meg would allow 500,000 records.

See these jobs documented at http://www.uvsoftware.ca/testdemo.htm#U1

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

04V10. version 0410 - October 2004

Oct 2004 Enhancements to uvsort

uvsort now maintains the original file record sequence. This is effective when multiple records exist for the specified sort keys. This feature is implemented by automatically adding an extra low order sort field with an input record sequence number. For best performance, uvsort uses the 'qsort' algorithm which does not guarantee original record sequence.

sort field type 'g'

Sort field type 'g' changes the character collation sequence. The exact sequence is shown on page C3 of http://www.uvsoftware.ca/uvsort.htm#C3. This was requested by customers converting DB2 UDB applications from the mainframe to unix/linux. Other sites might use this if they want UPPER & lower case letters to sort together (vs the separate ranges of ASCII).

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

04V08. version 0408 - August 2004

gentest1 - generate test data files based on COBOL copybooks

'gentest1' will generate uvcopy jobs to generate test data files based on the COBOL copybooks. The cobol copybooks are 1st converted to the 'cobmap' record layouts by the 'cobmap1' utility.

The generated uvcopy jobs are named after the copybooks and they call sub- routines to generate data for each field. Each picture field in the copybook generates a 'bal' to a subrtn, depending on field type (type X, packed, binary, signed/unsigned numeric). For example:


   bal  genx,'a00035b0025','address'    <-- sample call to subrtn
   =================================

This calls subrtn 'genx' for a type X field starting at byte 35 (option a00035) that is 25 bytes long (option b0025), whose fieldname is 'address'.

Here is a summary of the subrtns called & a description of the actions performed for the various field types:

genx
  • generates data in type X fields
  • inserts field-names in every 10th record
  • else generates 'A's in 1st field, 'B's in 2nd, 'C's in 3rd
  • inserts current record# in bytes 5-10 of fields longer than 15 bytes
gen9
  • generates data in numeric unpacked unsigned fields
  • inserts current record# in entire field, if field longer than 5 bytes
  • else, generates '1's in 1st field, '2's in 2nd, '3's in 3rd
gens
  • generates data in numeric Signed fields
  • inserts current record# in entire field
  • makes all fields in every 3rd record negative
genp
  • generates data in packed fields
  • inserts current record# in entire field
  • makes all fields in every 3rd record negative

Calling subrtns keeps the generated uvcopy jobs short since most of the field processing code is in these sub-routines. Please see details & sample copybooks & generated jobs in part 5 of DATAcnv1.doc or on the internet at --> www.uvsoftware.ca/datacnv1.htm#Part_5

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

04V03. version 0403 - March 2004

DATAcnv1 enhanced

DATAcnv1.htm documents data conversion from EBCDIC to ASCII, while preserving any packed or binary fields, and modifying any unpacked zoned signs to Micro Focus COBOL standards.

The data conversion jobs are automatically generated from the COBOL copybooks. If a copybook is not available, it can be automatically generated by scanning the data file. The 'signscan' jobs have been significantly enhanced to detect all packed & zoned fields that are logically possible to detect.

There is also a new master script to generate all conversion jobs with one command (gencnvE1). This generates multiple jobs to scan the data and create the copybook, the EBCDIC to ASCII translation, and a job to convert the data to pipe delimited text for loading Relational DataBases.

Evaluation copy & Partnership Policies

The requirements for obtaining evaluation copies and becoming a UV Software marketing partner are now clearly explained in uvprices.htm.

Microsoft Windows SFU

SFU is Services For Unix running under Windows 2000, XP, or Server 2003. SFU allows you to run a unix/linux shell (ksh, bash, csh, sh, etc) on a Windows system (UV Software recommends the Korn shell 'ksh').

UV Software has completed testing the mainframe conversion tools (for JCL, COBOL,& Data) under SFU. We had previously tested under Cygwin & Uwin (other emulators for unix/linux on Windows). We now recommend SFU.

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

04V01. version 0401 - January 2004

Enhancements to uvsort

uvsort now allows you to specify up to 20 input files & up to 60 output files. On input you may specify record selects/deletes/reformats that are applied to all records. On output you may specify record selects/deletes/reformats that are different for different output files.

A maximum of 20 input & 60 output files apply when you specifically name the desired files (fili1=...,fili2=...,fili20=...,filo1=...,filo2=...,filo60=...).

An alternative to specifying multiple input filenames is to use the new run option 'f2', to input all files from a specified directory, OR all filenames matching a specified prefix.

For output files, you may specify option 'f1' on key1 (key1f1) to output multiple separate files for duplicate record key sets based on key1. This is a unique & powerful feature that can be used to write out separate files for each customer#, salesman#, state/province, etc.

The output filenames are automatically created in the specified output directory, with an optional prefix, followed by the current key1 data value.

Please see these new features described in detail on pages C5,F4,G2,I2 of uvsort.htm. These enhancements make uvsort even more powerful than SYNCSORT.

JCL converter also enhanced

The mainframe JCL to Korn shell script converter has been updated to use these new uvsort enhancements when converting SYNCSORTs to uvsort. Please see mvsjcl.htm#6F6 for an example of converting a SYNCSORT with multiple selects/deletes for multiple output files.

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

03V04. version 0304 - April 2003

Windows/DOS versions of Vancouver Utilities

A Windows/DOS version of Vancouver Utilities is now available. The 'WinDos' package is executables only. Source code for the C programs is provided only for the Unix versions. The WinDos executables run in the DOS window under Windows 95,98,NT,2000,XP.

The WinDos versions were compiled using the lcc-win32 compiler. The author of lcc-win32 is Jacob Navia & it may be downloaded from: http://www.cs.virginia.edu/~lcc-win32/ But you do not need it since the WinDos package includes the executables.

 The UV WinDos utilties are especially valuable when run under the KORN
 shell for windows (see http://www.mks.com), or the BASH shell for windows
 See http://www.cygwin.com.

support for Variable Length Indexed files

The Vancouver Utilities now support Variable Length Indexed files compatible with Micro Focus COBOL IDXFORMAT3. For more info on these file types, please see the 'File Handling' documentation for Micro Focus Object or Server Express COBOL.

The Micro Focus COBOL 'EXTFH' file handler is compiled into the new 'ux' versions of the Vancouver Utility programs (uxcp,uxsort,uxcopy,& uxqrpg) versus the original versions (uvcp,uvsort,uvcopy,& uvqrpg).

Two versions of the programs are required since only Micro Focus COBOL users (server express 2.2+) could compile 'ux' versions whereas any user can compile 'uv' versions which use D-ISAM to support Indexed Sequential FIXED record length files. See install.htm for complete details of compiling both 'uv' & 'ux' programs.

TestDemo.doc - new section of documentation

Run these tests & ensure your outputs match the expected outputs which are illustrated following each test/demo. Running these 'test/demo's is also a great way to investigate the Vancouver Utilities & find out which utilties will be the most useful to you.

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

02V12. version 0212 - December 2002

HTMLjobs - Convert Text Doc to HTML

New section HTMLjobs.doc describes how the UV Software text documentation is automatically converted to HTML & FTP'd to the website ('http://www.uvsoftware.ca').

The Vancouver Utilities distribution CD now contains subdir 'dochtml'. If you install as directed in install.doc, you can point your web browser to the dochtml subdir as follows: (replace 'httpd://' with 'file:/')


 file:/home/uvadm/dochtml
 ========================

Over 99.8% of the HTML you see here on the UV Software web site was generated automatically. Only a few small files such as index.htm were coded manually. The voluminous documentation (99.8%) continues to be maintained via the UNIX 'vi' editor. When website updates are made (monthly or whatever) the 99.8% is reconverted & merged with the few small hand coded files. The result is 'tar'd, compressed,& FTP'd to the webserver.

This may be of interest to other sites with legacy documentation. If your legacy documentation has a clear set of rules for page headings & section/chapter references, then you (or UV Software) could write a uvcopy job to automatically convert your legacy documentation to HTML.

DATAcnv1.doc

DATAcnv1.doc is intended to help you convert EBCDIC data files whether or not the COBOL copybook is available. Other conversion documents in the Vancouver Utilities presume the COBOL copybooks are available.

When the COBOL copybook is not available, we have procedures to scan the EBCDIC data to determine the record layout. 'signscanA' can determine the locations of packed fields & zoned signs which would be destroyed if you translate the entire record to ASCII.

When the COBOL copybook is available, you can use it with this document, by skipping the signscanA & sign2cpyA procedures. All the data conversion procedures are driven by the copybook whether supplied or created by scanning the data.

DATAcnv1 is intended to convert 1 file at a time. DATAcnv2 is intended to convert entire mainframe sites with hundreds of data files. DATAcnv1 is applicable to sites that receive data files from outside sources which supply the data in varying formats with or without copybooks.

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

02V06. version 0206 - June 2002

jobflow2 - JCL Report with COBOL Info

 jclfil23    ** JCL report with COBOL info **   20020522  page#0001
 jobname.jcl st#  progname.bat  DDname  genf  OAM   open recsz  copybook.cpy  data-file-name
 ====================================================================================================
 csh240      #001 cshc240.bat   cshfms                                        $DM/cshfms
                                cshfact       IR    I    00080                $DM/cshfact
                                dm01                                          $DW/_scr1
                                prntr         LS    O    00132                $DP/$(date +%H%M%S)_${JOBID}_${PROGID}
              002 cshc241.bat   cshfms        SS    I    00150  cshtran       $DM/cshfms
                                dm01                                          $DW/_scr1
                                prntr         LS    O    00132                $DP/$(date +%H%M%S)_${JOBID}_${PROGID}
              003 csh240.bat    cshfms                                        $DM/cshfms
                                cshfact       IR    I    00080  cshfact       $DM/cshfact
                                cshtsum       SS    IO   00200  cshtsum       $DM/cshtsum
                                csh240a       SS    O    00104                $DW/csh240a
                                csh240b       SS    I    00150  cshtran       $DW/csh240b
                                dm01                                          $DW/_scr1
                                prntr         L     O    00132                $DP/$(date +%H%M%S)_${JOBID}_${PROGID}

TABLEjobs.doc

table1
  • read any file building a table of counts & values to be accumulated
    by a specified field & dumped to report file at EOF.
  • This is a general purpose table analysis utility that will satisfy
    most of your need to quickly read thru files accumulating
    any 1 field by any 1 argument.
  • There is no need to write or understand any uvcopy code.

table1 general purpose job vs custom written jobs

If your requirements exceed the limitations of this general purpose job then you can custom write your own uvcopy job. Several examples are given.

sltbl1
  • sample/demo uvcopy job to illustrate custom written table summaries
  • creates same report as the table1 demo above, but with several
    extensions allowed by special purpose jobs.

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

00V03. version 0003 - March 2000

64 bit accumulators for uvcopy & uvqrpg

64 bit accumulators are now available for uvcopy & uvqrpg on some systems (UnixWare 7 & DEC Alpha). UnixWare 7 provides long long integers now on via software on 32 bit hardware. 64 bit accumulators are generated via a new compile argument I32 or I64, for example:

ccuvall INT I64 DISAM <-- compile all utilties for Intel UW7 long long ccuvall DEC I64 DISAM <-- compile all utilties for DEC Alpha long 64 bits

 ccuvall DEC I32 SUN     <-- compile all utilties for SUN with 32 bit acums

See the complete compile instructions in install.htm#C1 As of Feb 2000, I am not sure whether long long is available for other architectures (SUN,HP,etc), but I will update this as soon as I find out.

For uvcopy 64 bit accumulators are used for the counters $ca1-$ca24 thru $ci1-$ci24, and for the table accumulators ('tbl' instruction). For uvqrpg 64 bit accumulators are used for the 8 total levels of 100 accumulators per level, and for the table analysis tbl instruction. Please see the details in uvqrpg.htm

Note that the previous 32 bit accumulators allowed for 2,000,000,000 but if this is dollars & cents it is only $20,000,000.00 - 64 bits allows numbers so big you never have to worry about it. uvcopy & uvqrpg allow for 20 digits.

uvqrpg - report generator

64 bit accumulators are more important for uvqrpg than for uvcopy, since uvcopy is primarily a data manipulation utility rather than a report utility. Please see the uvqrpg announcement in October 1999, or the detailed documentation in uvqrpg.htm

Note1 - we have changed the 'sort file' & 'report file' conventions for uvqrpg (was new in Oct 1999, so this change can be made now before users have developed many new jobs).

 Was: sort-in=fili1, sort-out=filo1, report-in=fili2, report-out=filo2
 Now: sort-in=fili8, sort-out=filo8, report-in=fili1, report-out=filo1

The '@end' function has been removed as of Oct 1999 (was redundant). You must remove them from the end of your uvqrpg jobs. The reason was to improve error checking on @dtl which must be coded on an instruction & not on a line by itself. You can code on a 'nop' if desired.

@dtl nop

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

99V10. version 9910 - October 1999

'uvqrpg' report writer for the Vancouver Utilities

This is a major component of the Vancouver Utilities. 'uvqrpg' is being used with great success, replacing well known mainframe utilities such as 'easytrieve'.

  1. Uvqrpg makes it easy to create control level reports, ie: reports with multiple total levels depending on specified control fields, such as customer#, salesman#, division, etc.

  2. Similar to uvcopy, but includes additional functions for report writing.

  3. Built-in sort, to sort input file prior to the control level report phase.

  4. Record Selection (keep or drop) during sort input. - up to 8 'OR' selections (keep1-keep8, or drop1-drop8) - up to 5 'AND' conditions for each 'OR' selection (keep1c1-keep1c5, keep2c1-keep2c5, etc -> keep8c1-keep8c5)

  5. Up to 8 control fields & corresponding total levels.

  6. Up to 100 accumulators per total level. $t100-$t199, $t200-$t299, etc thru $t800-$t899

  7. Up to 8 page headings.

  8. Record fields are declared using functions 'ctl', 'ref', or 'acum'. ctl/ref/acum fields are defined by displacement & length, and field-names are assigned, which area matched in 'head1' to determine print position.

  9. Page heading #1 (head1) specifies field positions simply by coding the field-names within the print line where ever you want them to print. The fieldnames must match those assigned on the ctl/ref/acum statements. The data will be aligned to the left character of the name if unedited but to the right character of the field is edited.

  10. Most reports can be created by function declarations only (fili2,filo2, head,ctl,ref,acum) without needing to use uvcopy instructions. But at any point required, you can use the powerful uvcopy instruction set for customizations or complex data manipulation.

  11. Please see the preliminary examples on the next few pages. Note that example #1 creates a sales analysis with totals by customer, salesman,& final - with just 12 lines of code.

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

99V01. version 9901 - January 1999

uvhdcob - data file utility with COBOL field names

                'uvhdcob' is similar to the original uvhd.
uvhd
  • displays data records only (no knowledge of copybook fields)
  • uvhd is shareware & may be downloaded from http://www.uvsoftware.ca
    (but uvhdcob is part of the Vancouver Utility package)
  • source program is self-contained (no linkable archives req'd)
uvhdcob
  • displays copybook fieldnames, preceding data for each field
  • may browse,search,update,print,drop,check sequence (same as uvhd)
  • intended for use in conjunction with uvhd
    (may exit to uvhd to display record without fieldnames & return)
  • does not have all the functionality of uvhd
  • displays only the 1st occurrence of occurs fields
  • might not encode proper fieldnames for multi-record-type files
  • uvhdcob is not shareware & requires other elements of the
    Vancouver Utilities package, most notably 'cobmap'
  • 'cobmap1' is a uvcopy job which must be run prior to uvhdcob
    a 1 time operation to convert the COBOL copybook directory
    to a directory of 'cobmaps' (COBOL record layouts)

uvhdcob - sample display

 datafile=dat1/custmas1 bytes=8192 rsz=256 totrecs=32 current=2
 cobmapfile=maps/custmas1 today=199902151608 datalastmod=1999011612
 rec#       2 fieldname occurs  bgn end typ<------ data (hex if typ=p/b) ----->
 cm-num                           0   5 n  132588
 cm-delete                        6   9
 cm-name                         10  34    GEECOE GENERATOR SERVICES
 cm-adrs                         35  59    UNIT 170 - 2851 SIMPSON
 cm-city                         60  75    RICHMOND
 filler001                       76  76
 cm-prov                         77  78    BC
 filler002                       79  79
 cm-postal                       80  89    V6X2R2
 cm-phone                        90 101    604-278-4488
 cm-contact                     102 119
 cm-thisyr-sales           012  120 124pns 000004680C
 cm-lastyr-sales           012  180 184pns 000005360C
 cm-thisyr-xft                  240 244pns 4120202038
 cm-lastyr-xft                  245 249pns 3731303036
 filler003                      250 255
 null=next,r#=rec,b#=byte,+/-recs,s=search,u=update,p=print,w=write
 ,q=quit,?=help -->

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

version 9901 - January 1999 continued

File Locking Options for UV Sequential files

NOTE
  • see complete discussion in uvlocks.doc (new section ).
  1. File Locking options are provided for: uvcopy, uvcp,& uvsort.

  2. File Lock options are specified on the file 'typ' parameter, for example:

    uvcp fili1=dat1/file1,typ=ISFl1,rcs=40,filo1=dat2/file2,typ=ISFl0,rcs=40
    ========================================================================
                                 ^^                                ^^
    - 'l1' of 'typ=ISFl1' specifies READONLY for the ISAM input file.
    - 'l0' of 'typ=ISFl0' specifies Exclusive for the ISAM output file.
  1. File locking has always been provided for ISAM files via D-ISAM, which is linked into uvcopy, uvcp,& uvsort. D-ISAM is software from Byte Designs & is also used by TIP/ix D-ISAM is compatible with C-ISAM & Micro Focus COBOL

  2. As of January 1999, File Locking is now provided for Non-Indexed files (in the Vancouver Utilities - uvcopy, uvcp,& uvsort).

  3. UV lock options for UNIX SEQUENTIAL (non-indexed) files are: l0=RDWRlock(exclusive), l1=RDonly, l8=NOlock

  4. UV lock options for D-ISAM Indexed files are: l0=Exclusive(RD/WRlock), l1=RDonly, l2=Automatic, l4=Manual - DISAM does not allow NOlock (l8 does not apply to ISAM files) - DISAM provides l2/l4 auto/manual record locks (these do not apply to UV sequential non-indexed files)

  5. The effect of locking options depends on how the file is opened. File open Modes are: INPUT, OUTPUT, or I-O

  6. There are a lot of combinations of open mode & file lock options for the 2 files involved: file1 - open mode (IN,OUT,I-O) + lock-option (RDRWlock,RDlock,NOlock) file2 - open mode (IN,OUT,I-O) + lock-option (RDRWlock,RDlock,NOlock)

See uvlocks.doc for test results for most of the possible combinations. (also includes test results for COBOL programs & TIP/ix)

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

version 9901 - January 1999 continued

D-ISAM '.dat' extensions

Prior to January 1999, the DISAM/DISAMdat option allowed you to compile uvcopy, uvcp,& uvsort to process DISAM Indexed files with or without the '.dat' extension on the data partition. Microfocus COBOL does not use the .dat extension. TIP/ix will read either but always creates .dat extensions and TIP/ix users compensate by using symbolic links (a messy solution).

As of Jan/99, environmental variable 'DISAMEXT' is provided for sites that want to use '.dat' extensions, rather than the default of no extension.


 export DISAMEXT=dat
 ===================

This export causes '.dat' extensions to be expected on input & created on output. Sites that always want '.dat' can put this export in /etc/profile.

Can export DISAMEXT=dat from your shell prompt for 'as required' use. For example if you wish to process TIP/ix data files. Don't forget to export DISAMEXT="" before you run any uvcopy/uvcp/uvsorts that create files for Micro Focus COBOL.

As of 2003, the supplied profiles 'export DISAMEXT=dat', and a COBOL file handler configuration file 'extfh.cfg' is supplied with 'IDXNAMETYPE=2', which causes Micro Focus to read/write the '.dat' extension.

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

Permuted Index of Keywords from ** Headings **

A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

99V01 .dat: D-ISAM '.dat' extensions

08V08 Abterm: 1st run console log - ABterm lines only
08V08 Abterm: console log for rerun (after ABterm)
09V06 Accept: Micro Focus COBOL Accept/Display Documentation
08V11 Access: uycopy API for DataBase/Table access
09V05 Access: COBOL access to MySQL DataBase via ODBC
09V03 Accum: genacum2 - generate jobs to accum ALL numeric fields
09V01 Accumulate: acum1 - accumulate any 1 field in any datafile
00V03 Accumulators: 64 bit accumulators for uvcopy & uvqrpg
08V08 Actions: GDG file history actions increased to 30
09V03 Acum: Generate uvcopy job to acum all numeric fields
09V01 Acum1: - accumulate any 1 field in any datafile
09V01 Acum1: sample report from acum1
09V02 Added: 'verify' command added to 'uvhdcob'
07V05 Admjobs.doc: new backup plan - Part4 of ADMjobs.doc
07V06 Advanced: GDG Advanced Features (beyond mainframe capability)
08V09 Advantages: Advantages of common_defines, stub_profile,& common_profile
07V11 Aids: inserting common copybooks aids conversions
08V03 Aids: Mainframe Conversion Aids
04V01 Also: JCL converter also enhanced
05V07 And: Visitor Counter for This Year and Last Year
08V11 Api: uycopy API for DataBase/Table access
08V12 Api: Pro-COBOL EXEC SQL API to Oracle DB
08V09 Are: Profiles are vital for Unix/Linux

06V10 Background: Background
07V05 Backup: new backup plan - Part4 of ADMjobs.doc
04V08 Based: gentest1 - generate test data files based on COBOL copybooks
07V06 Basic: VU GDG Basic Features
08V05 Batch: Preventing Nightly Batch Failures
06V09 Bdw: uvhd option 'z1' for variable length BDW/RDW files
07V06 Beyond: GDG Advanced Features (beyond mainframe capability)
07V11 Bible: www_uvsoftware.ca is the 'BIBLE'
00V03 Bit: 64 bit accumulators for uvcopy & uvqrpg
08V11 Book: SQL Book References

08V11 C-api: MySQL C-API sample programs
07V06 Capability: GDG Advanced Features (beyond mainframe capability)
09V10 Capturing: logs by mail from cron jobs
07V04 Chmodr2: chmodR2 - change permissions on all files & subdirs
09V02 Cm_testuvhdcob: genverify1 report for dat1/cm_testuvhdcob
09V02 Cmpjobs: CMPjobs enhanced
09V03 Cobmap: sample cobmap - custmas1
02V06 Cobol: jobflow2 - JCL Report with COBOL Info
04V08 Cobol: gentest1 - generate test data files based on COBOL copybooks
05V03 Cobol: COBOL 'Files' Report
05V03 Cobol: Cross References for COBOL & JCL/scripts
05V08 Cobol: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
05V08 Cobol: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
09V05 Cobol: COBOL access to MySQL DataBase via ODBC
09V06 Cobol: Micro Focus COBOL Accept/Display Documentation
09V06 Cobol: Micro Focus COBOL SCREEN program demo
99V01 Cobol: uvhdcob - data file utility with COBOL field names
09V01 Command: notes re command line options
09V02 Command: 'verify' command added to 'uvhdcob'
09V02 Command: response to search/verify command
09V02 Command: uvhdcob - test/demo 'verify' command
08V02 Comments: countc1d - count lines of code & comments
07V11 Common: inserting common copybooks aids conversions
08V09 Common_defines: Advantages of common_defines, stub_profile,& common_profile
08V09 Common_profile: Advantages of common_defines, stub_profile,& common_profile
07V10 Compare: scripts for various file types
07V10 Compares: Data File Compares
05V04 Comparisons: Reverse Conversion & Data File Comparisons
05V08 Compatibility: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
05V08 Compatibility: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
08V04 Compiler: Morada RPG compiler
08V08 Console: 1st run console log - ABterm lines only
08V08 Console: log for rerun (after ABterm)
09V01 Console: log (option prompts)
09V01 Console: log - options prompt
04V01 Converter: JCL converter also enhanced
05V02 Copies: Evaluation copies & Partnerships
04V03 Copy: Evaluation copy & Partnership Policies
05V03 Copybook: xcobcopy2 - crossref all PROGRAMS using any 1 COPYBOOK
04V08 Copybooks: gentest1 - generate test data files based on COBOL copybooks
07V11 Copybooks: inserting common copybooks aids conversions
06V08 Correct: uvcp 'tras' to correct zoned signs
08V02 Count: countc1d - count lines of code & comments
08V02 Countc1d: - count lines of code & comments
05V07 Counter: Hit Counter Usage at UVSI
05V07 Counter: Hit Counter downloadable from UV Software
05V07 Counter: Visitor Counter for This Year and Last Year
07V08 Counts: statdir1 - report file counts & KB used in a Parent dir
09V10 Cron: 'cron mail logs' vs 'logged in user logs'
09V10 Cron: capturing logs by mail from cron jobs
09V11 Cron: emailing cron job ERRORS to managers at home
05V03 Cross: Cross References for COBOL & JCL/scripts
05V03 Crossref: xcobcopy2 - crossref all PROGRAMS using any 1 COPYBOOK
09V03 Custmas1: sample cobmap - custmas1
02V06 Custom: table1 general purpose job vs custom written jobs

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 

99V01 D-isam: D-ISAM '.dat' extensions
09V02 Dat1: genverify1 report for dat1/cm_testuvhdcob
04V08 Data: gentest1 - generate test data files based on COBOL copybooks
05V04 Data: Reverse Conversion & Data File Comparisons
07V10 Data: Data File Compares
08V07 Data: edt a1 option reduces data file conversion code
99V01 Data: uvhdcob - data file utility with COBOL field names
08V11 Database: MySQL DataBase Tutorial & Test/Demo
08V11 Database: uycopy API for DataBase/Table access
09V05 Database: COBOL access to MySQL DataBase via ODBC
04V03 Datacnv1: DATAcnv1 enhanced
02V12 Datacnv1.doc: DATAcnv1.doc
09V01 Datafile: acum1 - accumulate any 1 field in any datafile
04V11 Demo: input file tf/test100a
08V11 Demo: MySQL DataBase Tutorial & Test/Demo
09V02 Demo: uvhdcob - test/demo 'verify' command
09V06 Demo: Micro Focus COBOL SCREEN program demo
09V01 Depending: selectf1 - select records depending on field value
06V02 Design: RAID, Partitioning,& File System Design
07V06 Detect: ftpgdg1 - detect/rename FTP'd files
07V08 Dir: statdir1 - report file counts & KB used in a Parent dir
08V01 Directory: statdir1 - Directory Statistics
09V06 Display: Micro Focus COBOL Accept/Display Documentation
99V01 Display: uvhdcob - sample display
02V12 Doc: HTMLjobs - Convert Text Doc to HTML
03V04 Documentation: TestDemo.doc - new section of documentation
05V02 Documentation: Documentation Re-Organized
05V07 Documentation: Mainframe Conversion Documentation Reorganized
09V06 Documentation: Micro Focus COBOL Accept/Display Documentation
03V04 Dos: Windows/DOS versions of Vancouver Utilities
05V07 Downloadable: Hit Counter downloadable from UV Software

08V07 Edt: a1 option reduces data file conversion code
09V11 Emailing: cron job ERRORS to managers at home
04V01 Enhanced: JCL converter also enhanced
04V03 Enhanced: DATAcnv1 enhanced
06V02 Enhanced: JCL Conversions enhanced
06V02 Enhanced: uvhd enhanced
07V11 Enhanced: Mainframe Conversion Enhanced
08V04 Enhanced: uvhd scan/replace enhanced
08V08 Enhanced: GDG file reporting enhanced
09V02 Enhanced: CMPjobs enhanced
04V01 Enhancements: Enhancements to uvsort
04V10 Enhancements: Oct 2004 Enhancements to uvsort
07V06 Enhancements: GDG Enhancements
08V03 Enhancements: Optional Enhancements during Conversion
08V08 Entries: notes re history entries
06V07 Env: 'profiles' provided in /home/uvadm/env
09V11 Errors: emailing cron job ERRORS to managers at home
04V03 Evaluation: Evaluation copy & Partnership Policies
05V02 Evaluation: Evaluation copies & Partnerships
06V10 Example: Good example of Vancouver Utilities
08V12 Exec: Pro-COBOL EXEC SQL API to Oracle DB
07V12 Extended: RDW support extended to all utilities
99V01 Extensions: D-ISAM '.dat' extensions

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 

08V05 Failures: Preventing Nightly Batch Failures
07V06 Features: GDG Advanced Features (beyond mainframe capability)
07V06 Features: VU GDG Basic Features
04V10 Field: sort field type 'g'
09V01 Field: acum1 - accumulate any 1 field in any datafile
09V01 Field: selectf1 - select records depending on field value
99V01 Field: uvhdcob - data file utility with COBOL field names
09V02 Fields: genverify1 - generate jobs to Verify Packed/Numeric Fields
09V03 Fields: Generate uvcopy job to acum all numeric fields
09V03 Fields: genacum2 - generate jobs to accum ALL numeric fields
05V03 Flow: Job Flow Reports
09V06 Focus: Micro Focus COBOL Accept/Display Documentation
09V06 Focus: Micro Focus COBOL SCREEN program demo
07V06 Ftp: ftpgdg1 - detect/rename FTP'd files
07V06 Ftpgdg1: - detect/rename FTP'd files

07V06 Gdg: GDG Advanced Features (beyond mainframe capability)
07V06 Gdg: GDG Enhancements
07V06 Gdg: VU GDG Basic Features
08V08 Gdg: GDG file history actions increased to 30
08V08 Gdg: GDG file reporting enhanced
09V03 Genacum2: - generate jobs to accum ALL numeric fields
02V06 General: table1 general purpose job vs custom written jobs
04V08 Generate: gentest1 - generate test data files based on COBOL copybooks
06V07 Generate: uvhd now has sequence# generate
09V02 Generate: genverify1 - generate jobs to Verify Packed/Numeric Fields
09V03 Generate: Generate uvcopy job to acum all numeric fields
09V03 Generate: genacum2 - generate jobs to accum ALL numeric fields
00V03 Generator: uvqrpg - report generator
04V08 Gentest1: - generate test data files based on COBOL copybooks
09V02 Genverify1: - generate jobs to Verify Packed/Numeric Fields
09V02 Genverify1: report for dat1/cm_testuvhdcob
06V10 Good: Good example of Vancouver Utilities

07V11 Handle: All platforms handle Large Files
07V10 Handles: uvhd now handles RDW files
07V06 Handling: IDXf8 Variable Length file handling improved
06V07 Has: uvhd now has sequence# generate
08V08 History: GDG file history actions increased to 30
08V08 History: notes re history entries
05V07 Hit: Hit Counter Usage at UVSI
05V07 Hit: Hit Counter downloadable from UV Software
06V07 Home: 'profiles' provided in /home/uvadm/env
09V11 Home: emailing cron job ERRORS to managers at home
02V12 Html: HTMLjobs - Convert Text Doc to HTML
02V12 Htmljobs: HTMLjobs - Convert Text Doc to HTML

05V08 Idxf3: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
05V08 Idxf3: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
05V08 Idxf8: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
05V08 Idxf8: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
07V06 Idxf8: IDXf8 Variable Length file handling improved
07V06 Improved: IDXf8 Variable Length file handling improved
08V08 Increased: GDG file history actions increased to 30
03V04 Indexed: support for Variable Length Indexed files
02V06 Info: jobflow2 - JCL Report with COBOL Info
07V11 Inserting: common copybooks aids conversions

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 

02V06 Jobflow2: - JCL Report with COBOL Info

05V02 Keyword: Permuted Keyword Index

07V11 Large: All platforms handle Large Files
09V01 Line: notes re command line options
08V09 Linux: Profiles are vital for Unix/Linux
99V01 Locking: File Locking Options for UV Sequential files
07V07 Log: sample input /var/log/messages
08V08 Log: 1st run console log - ABterm lines only
08V08 Log: console log for rerun (after ABterm)
09V01 Log: console log (option prompts)
09V01 Log: console log - options prompt
09V10 Logged: 'cron mail logs' vs 'logged in user logs'
07V07 Logins: statlogin1 - table summary user logins by month & userid
09V10 Logs: 'cron mail logs' vs 'logged in user logs'
09V10 Logs: 'cron mail logs' vs 'logged in user logs'
09V10 Logs: capturing logs by mail from cron jobs

09V10 Mail: 'cron mail logs' vs 'logged in user logs'
09V10 Mail: capturing logs by mail from cron jobs
09V11 Mail: ssmtp vs mail/sendmail
05V07 Mainframe: Mainframe Conversion Documentation Reorganized
07V06 Mainframe: GDG Advanced Features (beyond mainframe capability)
07V11 Mainframe: Mainframe Conversion Enhanced
08V03 Mainframe: Mainframe Conversion Aids
08V03 Mainframe: Preparations for Mainframe Conversion
09V11 Managers: emailing cron job ERRORS to managers at home
07V07 Messages: sample input /var/log/messages
09V06 Micro: Micro Focus COBOL Accept/Display Documentation
09V06 Micro: Micro Focus COBOL SCREEN program demo
04V03 Microsoft: Microsoft Windows SFU
07V07 Month: statlogin1 - table summary user logins by month & userid
08V04 Morada: Morada RPG compiler
08V07 Most: uvcopy - most powerful Vancouver Utility
06V07 Multi-client: Multi-Client systems
04V11 Multi-column: multicol1/2/3 - rearrange files for multi-column printing
04V11 Multicol1: multicol1/2/3 - rearrange files for multi-column printing
04V11 Multicol2: output (vertical)
08V11 Mysql: MySQL C-API sample programs
08V11 Mysql: MySQL DataBase Tutorial & Test/Demo
09V05 Mysql: COBOL access to MySQL DataBase via ODBC

03V04 New: TestDemo.doc - new section of documentation
07V05 New: backup plan - Part4 of ADMjobs.doc
08V05 Nightly: Preventing Nightly Batch Failures
06V07 Now: uvhd now has sequence# generate
07V10 Now: uvhd now handles RDW files
09V02 Numeric: genverify1 - generate jobs to Verify Packed/Numeric Fields
09V03 Numeric: Generate uvcopy job to acum all numeric fields
09V03 Numeric: genacum2 - generate jobs to accum ALL numeric fields

04V10 Oct: Oct 2004 Enhancements to uvsort
09V05 Odbc: COBOL access to MySQL DataBase via ODBC
08V10 On-site: On-site Conversion Training Plan
06V09 Option: uvhd option 'z1' for variable length BDW/RDW files
08V07 Option: edt a1 option reduces data file conversion code
09V01 Option: console log (option prompts)
08V03 Optional: Optional Enhancements during Conversion
09V01 Options: console log - options prompt
09V01 Options: notes re command line options
99V01 Options: File Locking Options for UV Sequential files
08V12 Oracle: Pro-COBOL EXEC SQL API to Oracle DB
06V10 Overlay: Overlay Printing

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 

09V02 Packed: genverify1 - generate jobs to Verify Packed/Numeric Fields
07V08 Parent: statdir1 - report file counts & KB used in a Parent dir
07V04 Part: VSEJCL.doc Part 4 rewritten
07V05 Part4: new backup plan - Part4 of ADMjobs.doc
06V02 Partitioning: RAID, Partitioning,& File System Design
04V03 Partnership: Evaluation copy & Partnership Policies
05V02 Partnerships: Evaluation copies & Partnerships
06V07 Perl: JCL to Perl script conversion
07V04 Permissions: chmodR2 - change permissions on all files & subdirs
05V02 Permuted: Permuted Keyword Index
07V05 Plan: new backup plan - Part4 of ADMjobs.doc
08V10 Plan: On-site Conversion Training Plan
07V11 Platforms: All platforms handle Large Files
04V03 Policies: Evaluation copy & Partnership Policies
08V03 Preparations: Preparations for Mainframe Conversion
08V05 Preventing: Preventing Nightly Batch Failures
04V11 Printing: multicol1/2/3 - rearrange files for multi-column printing
06V10 Printing: Overlay Printing
08V12 Pro-cobol: Pro-COBOL EXEC SQL API to Oracle DB
06V07 Profiles: 'profiles' provided in /home/uvadm/env
08V09 Profiles: Profiles are vital for Unix/Linux
09V06 Program: Micro Focus COBOL SCREEN program demo
05V03 Programs: xcobcopy2 - crossref all PROGRAMS using any 1 COPYBOOK
08V11 Programs: MySQL C-API sample programs
09V01 Prompt: console log - options prompt
09V01 Prompts: console log (option prompts)
06V07 Provided: 'profiles' provided in /home/uvadm/env

06V02 Raid: RAID, Partitioning,& File System Design
06V09 Rdw: uvhd option 'z1' for variable length BDW/RDW files
07V10 Rdw: uvhd now handles RDW files
07V12 Rdw: RDW support extended to all utilities
05V02 Re-organized: Documentation Re-Organized
04V11 Rearrange: multicol1/2/3 - rearrange files for multi-column printing
09V01 Records: selectf1 - select records depending on field value
08V07 Reduces: edt a1 option reduces data file conversion code
05V03 References: Cross References for COBOL & JCL/scripts
08V11 References: SQL Book References
07V06 Rename: ftpgdg1 - detect/rename FTP'd files
05V07 Reorganized: Mainframe Conversion Documentation Reorganized
08V04 Replace: uvhd scan/replace enhanced
08V08 Reporting: GDG file reporting enhanced
08V08 Rerun: console log for rerun (after ABterm)
09V02 Response: to search/verify command
05V04 Reverse: Reverse Conversion & Data File Comparisons
07V04 Rewritten: VSEDATA.doc rewritten
07V04 Rewritten: VSEJCL.doc Part 4 rewritten
08V04 Rpg: Morada RPG compiler
08V08 Run: 1st run console log - ABterm lines only

07V07 Sample: input /var/log/messages
07V07 Sample: output report
08V11 Sample: MySQL C-API sample programs
09V01 Sample: report from acum1
09V03 Sample: cobmap - custmas1
09V03 Sample: report
99V01 Sample: uvhdcob - sample display
08V04 Scan: uvhd scan/replace enhanced
09V06 Screen: Micro Focus COBOL SCREEN program demo
09V02 Search: response to search/verify command
03V04 Section: TestDemo.doc - new section of documentation
09V01 Select: selectf1 - select records depending on field value
09V01 Selectf1: - select records depending on field value
09V11 Sendmail: ssmtp vs mail/sendmail
06V07 Sequence: uvhd now has sequence# generate
99V01 Sequential: File Locking Options for UV Sequential files
04V03 Sfu: Microsoft Windows SFU
06V08 Signs: uvcp 'tras' to correct zoned signs
05V07 Software: Hit Counter downloadable from UV Software
04V10 Sort: field type 'g'
08V11 Sql: SQL Book References
08V12 Sql: Pro-COBOL EXEC SQL API to Oracle DB
09V11 Ssmtp: vs mail/sendmail
07V08 Statdir1: - report file counts & KB used in a Parent dir
08V01 Statdir1: - Directory Statistics
08V01 Statistics: statdir1 - Directory Statistics
07V07 Statlogin1: - table summary user logins by month & userid
08V09 Stub_profile: Advantages of common_defines, stub_profile,& common_profile
07V04 Subdirs: chmodR2 - change permissions on all files & subdirs
07V07 Summary: statlogin1 - table summary user logins by month & userid
03V04 Support: for Variable Length Indexed files
07V12 Support: RDW support extended to all utilities
06V02 System: RAID, Partitioning,& File System Design
06V07 Systems: Multi-Client systems

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 

07V07 Table: statlogin1 - table summary user logins by month & userid
08V11 Table: uycopy API for DataBase/Table access
02V06 Table1: general purpose job vs custom written jobs
02V06 Tablejobs.doc: TABLEjobs.doc
04V08 Test: gentest1 - generate test data files based on COBOL copybooks
08V11 Test: MySQL DataBase Tutorial & Test/Demo
09V02 Test: uvhdcob - test/demo 'verify' command
04V11 Test100a: demo input file tf/test100a
03V04 Testdemo.doc: TestDemo.doc - new section of documentation
05V08 Testing: IDXf3/IDXf8 compatibility between MF COBOL & uxcp
05V08 Testing: IDXf3/IDXf8 compatibility between MF COBOL & uxcp
02V12 Text: HTMLjobs - Convert Text Doc to HTML
08V10 Training: On-site Conversion Training Plan
06V08 Tras: uvcp 'tras' to correct zoned signs
08V11 Tutorial: MySQL DataBase Tutorial & Test/Demo
04V10 Type: sort field type 'g'
07V10 Types: compare scripts for various file types

08V09 Unix: Profiles are vital for Unix/Linux
07V07 User: statlogin1 - table summary user logins by month & userid
09V10 User: 'cron mail logs' vs 'logged in user logs'
07V07 Userid: statlogin1 - table summary user logins by month & userid
03V04 Utilities: Windows/DOS versions of Vancouver Utilities
05V08 Utilities: 'uv' utilities
05V08 Utilities: 'ux' utilities
06V10 Utilities: Good example of Vancouver Utilities
07V12 Utilities: RDW support extended to all utilities
99V10 Utilities: 'uvqrpg' report writer for the Vancouver Utilities
08V07 Utility: uvcopy - most powerful Vancouver Utility
99V01 Utility: uvhdcob - data file utility with COBOL field names
06V07 Uvadm: 'profiles' provided in /home/uvadm/env
00V03 Uvcopy: 64 bit accumulators for uvcopy & uvqrpg
08V07 Uvcopy: - most powerful Vancouver Utility
09V03 Uvcopy: Generate uvcopy job to acum all numeric fields
06V08 Uvcp: 'tras' to correct zoned signs
06V02 Uvhd: enhanced
06V07 Uvhd: now has sequence# generate
06V09 Uvhd: option 'z1' for variable length BDW/RDW files
07V10 Uvhd: now handles RDW files
08V04 Uvhd: scan/replace enhanced
09V02 Uvhdcob: 'verify' command added to 'uvhdcob'
09V02 Uvhdcob: - test/demo 'verify' command
99V01 Uvhdcob: - data file utility with COBOL field names
99V01 Uvhdcob: - sample display
00V03 Uvqrpg: 64 bit accumulators for uvcopy & uvqrpg
00V03 Uvqrpg: - report generator
99V10 Uvqrpg: 'uvqrpg' report writer for the Vancouver Utilities
05V07 Uvsi: Hit Counter Usage at UVSI
04V01 Uvsort: Enhancements to uvsort
04V10 Uvsort: Oct 2004 Enhancements to uvsort
05V08 Uxcp: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
05V08 Uxcp: testing IDXf3/IDXf8 compatibility between MF COBOL & uxcp
08V11 Uycopy: API for DataBase/Table access

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 

09V01 Value: selectf1 - select records depending on field value
03V04 Vancouver: Windows/DOS versions of Vancouver Utilities
06V10 Vancouver: Good example of Vancouver Utilities
08V07 Vancouver: uvcopy - most powerful Vancouver Utility
99V10 Vancouver: 'uvqrpg' report writer for the Vancouver Utilities
07V07 Var: sample input /var/log/messages
03V04 Variable: support for Variable Length Indexed files
06V09 Variable: uvhd option 'z1' for variable length BDW/RDW files
07V06 Variable: IDXf8 Variable Length file handling improved
07V10 Various: compare scripts for various file types
09V02 Verify: 'verify' command added to 'uvhdcob'
09V02 Verify: genverify1 - generate jobs to Verify Packed/Numeric Fields
09V02 Verify: response to search/verify command
09V02 Verify: uvhdcob - test/demo 'verify' command
03V04 Versions: Windows/DOS versions of Vancouver Utilities
04V11 Vertical: multicol2 output (vertical)
05V07 Visitor: Visitor Counter for This Year and Last Year
08V09 Vital: Profiles are vital for Unix/Linux
07V04 Vsedata.doc: VSEDATA.doc rewritten
07V04 Vsejcl.doc: VSEJCL.doc Part 4 rewritten

03V04 Windows: Windows/DOS versions of Vancouver Utilities
04V03 Windows: Microsoft Windows SFU
99V10 Writer: 'uvqrpg' report writer for the Vancouver Utilities
02V06 Written: table1 general purpose job vs custom written jobs
07V11 Www_uvsoftware.ca: is the 'BIBLE'

05V03 Xcobcopy2: - crossref all PROGRAMS using any 1 COPYBOOK

05V07 Year: Visitor Counter for This Year and Last Year
05V07 Year: Visitor Counter for This Year and Last Year

06V08 Zoned: uvcp 'tras' to correct zoned signs

A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z 

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

Visitor Counters for ThisYear and LastYear

ThisYear=000232   (J=90,F=79,M=63,A=0,M=0,J=0,J=0,A=0,S=0,O=0,N=0,D=0)
LastYear=001133   (J=0,F=0,M=109,A=105,M=89,J=113,J=121,A=104,S=113,O=159,N=115,D=105)