You can find Year 2000 solutions from many vendors. Would't it be nice if you could find a product that can solve your Year 2000 problems - and still have value beyond January 1, 2000? If that's the solution you're looking for, then UV Software has it!
UV Software was formed in 1992 to develop and market a package of general purpose utilities for UNIX systems. The programs are written in ANSI C, and some of the more prominent utilities are: uvcopy, uvsort, uvlist,and uvhd. There are over 300 pre-programmed jobs (for the uvcopy interpreter), to perform many useful tasks such as: cross- references, table analysis, scan/replace, creating COBOL copy-book layouts, and processing standard labelled tapes (not handled by UNIX system software).
The Vancouver Utilities have been extensively used to convert mainframe systems to UNIX, but they were primarily intended for ongoing, everyday use. These utilities were designed to fill the gaps in UNIX system software that were formerly supplied with mainframe operating systems.
For example, 'uvsort' replaces the UNIX system sort, which cannot be used for mainframe type files, because these files do not have line-feeds, may be indexed, and may contain packed sort fields. Uvsort also has a Year 2000 sort field type. The 'uvcopy' utility replaces the mainframe 'DATA' utility and can be used to copy files while selecting or deleting records, or reformatting the output records.
Please note that these utilities are compatible with Micro Focus indexed files and without these, you would otherwise have to write COBOL programs to perform even the simplest file maintenance on indexed files. The UNIX system has hundreds of utilities, but most of them require linefeeds and none of them can process indexed files.
The Vancouver Utilities are much more than just Year 2000 tools. You will continue to use them long after the year 2000. They can perform file maintenance functions necessary and complementary to any other Year 2000 tools that you may already have.
The Vancouver Utilities provide solutions to the two main aspects of the Year 2000 problem - program problem detection (impact analysis) and data file conversion (bridge programming). The 'y2scan' job will scan your directory of COBOL source programs and create a problem report showing:
These reports are table driven and you would first update the supplied table of common date field names with any names unique to your site. Y2scan does not operate directly on your COBOL source directory. The directory is pre-processed to an alternate directory, expanding copy-books and encoding group name fields (to show length and date components). This alternate directory is a valuable asset when you are correcting your original source. You can use vi and grep on the expanded/encoded directory to further investigate the problem areas indicated by the y2scan report.
There are 2 main solutions to the Year 2000 problem - windowing or date field expansion. Expansion is preferred, especially where date fields are used as indexed file keys and sort keys. However, expansion may take longer. Many sites will use a combination of expansion and windowing. Date field expansion can be quite manageable if your site has made extensive use of copy-books.
Turning from COBOL program correction to data file conversion, uvcopy is ideal for the 'bridge' programs required to expand date fields and insert '19' or '20' depending on the existing 2 digit year. You can generate these bridge programs automatically from the old and new versions of the copybook. In case you are interested, the same technique is used to generate SQL*LOADER control files for loading Oracle data-bases.
So if you have a UNIX system, consider the Vancouver Utilities to address your Year 2000 needs or to complement your existing Year 2000 tools. This is one tool you'll keep using well into the 21st century.
For more information and prices, please Email your mailing address.
Owen Townsend
Email: [email protected]
UV Software Inc.
5436 Victoria Dr.
Vancouver BC
Canada V5P 3V8
Phone: 604-321-1024
Fax: 604-324-6333
JOB: y2scan2d Directory: cobs1b DATE: 1997/04/10_11:05:37
Table of Keywords and Qualifiers, loaded from file: tf/y2tbl1
======================================================================
if ~~~~~~~~ greater ~~~ less ~~~~~~ > ~~~~~~~~~ < ~~~~~~~~~
add ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
subtract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
start ~~~~~ greater ~~~ less ~~~~~~ > ~~~~~~~~~ < ~~~~~~~~~
select ~~~~ indexed ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sort ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
======================================================================
Table of Date-Field-Names, loaded from file: tf/y2tbl2
======================================================================
year~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
date~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
yy~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
yr~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
age-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-age~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
======================================================================
000040 if exp-test-date@6 < "750101"
display "EXPIRY TEST DATE INVALID" upon con74 stop run .
000047 if wm-expiry@6@year < exp-test-date@6
move warmas-rec@64@year to expire-rec
000050** 0002 matches @EOF in file: cobs1b/cobolw.bat
000013 select war-purged assign to disc-warpurg-f
organization indexed access sequential
record key is wp-expiry@6@year with duplicates .
000069 sort sort-file ascending key ws-expiry@6@year
input procedure is sortin
output procedure is sortout .
000076 if wm-expiry@6@year less than expiry-test@6@yy
move warmas-rec@64@year to sort-rec@64@year
000087** 0003 matches @EOF in file: cobs1b/cobolx.bat
======================================================================
0005 TOTAL HITS found in 0008 files in directory: cobs1b
The y2scan report first lists the 2 tables that control the selection of COBOL statements in the body of the report. For example line 40 is listed because it contains the keyword ' if ' and the qualifier ' < ' from table #1, and also contains 'date' from table #2.
Given - an indexed file of 40 byte records with a 6 digit date
in columns 21-26 (yymmdd).
Required - copy the file inserting the century and shifting the remainder
of the record as required. Set the century to '19' or '20'
depending on the year greater or less than '50'.
input: x-------------------991231-------------x
x-------------------000101-------------x
output: x-------------------19991231-------------x
x-------------------20000101-------------x
# datefix1 - copy a file inserting the century for 6 digit dates
fili1=?input,rcs=40,typ=ISF
filo1=?output,rcs=42,typ=ISFi1
@run
opn all
loop get fili1,a0 get record into area 'a'
skp> eof
#----------------------------------------------------------------------
mvc b0(20),a0 move 1st 20 bytes from 'a' to 'b'
mvn b20(8),a20(6) move numeric expand date to 8 bytes
skp= tag1 bypass century if zeros/blanks
mvc b20(2),'19' presume century '19'
cmc a20(2),'50' input year => 50 ?
skp=> tag1 yes - leave as is
mvc b20(2),'20' no - change to '20'
tag1 mvc b28(14),a26 shift cols 27-40 over to 29-42
#----------------------------------------------------------------------
put filo1,b0 write area 'b' to the output file
skp loop repeat loop until EOF
# EOF - close files and end job
eof cls all
eoj
The bridge programs can be generated automatically from the old and new versions of the copybook. Before execution you can modify them if required. The uvcopy interpretive instruction set has the power to do whatever special processing you desire. This is much more flexible than a black-box utility that is designed to perform the task internally.
You might think that you will not need bridge programs if you have adopted the 'windows' solution. However you will probably need some bridge programs to interface with outside agencies who are using expanded dates.
Assume you are ready to test in January 1998. You can reboot your machine with a date in January 2000, but you will also need to advance the dates in your test files by a corresponding amount. The following illustrates an advance of 2 years (730 days), and assumes 'windows'.
input: x-------------------971231-------------x
x-------------------980101-------------x
output: x-------------------991231-------------x
x-------------------000101-------------x
The uvcopy instructions to advance the dates are shown below. This code would be inserted in a job similar to the one shown in example #1.
#------------------------------------------------------------------------
dati1o4 $ca1,a20(6) convert yymmdd to days-since-1900
add $ca1,730 add 730 days (2 years)
dati4o1 b20(6),$ca1 convert days-since-1900 back to calendar
#------------------------------------------------------------------------