CPX For ZOS Users Guide
CPX For ZOS Users Guide
User’s Guide
Serena Proprietary and Confidential Information
Copyright
Copyright © 2001–2011 Serena Software, Inc. All rights reserved.
This document, as well as the software described in it, is furnished under license and may
be used or copied only in accordance with the terms of such license. Except as permitted
by such license, no part of this publication may be reproduced, photocopied, stored in a
retrieval system, or transmitted, in any form or by any means, electronic, mechanical,
recording, or otherwise, without the prior written permission of Serena. Any reproduction
of such software product user documentation, regardless of whether the documentation
is reproduced in whole or in part, must be accompanied by this copyright statement in its
entirety, without modification.
This document contains proprietary and confidential information, and no reproduction or
dissemination of any information contained herein is allowed without the express
permission of Serena Software.
The content of this document is furnished for informational use only, is subject to change
without notice, and should not be construed as a commitment by Serena. Serena
assumes no responsibility or liability for any errors or inaccuracies that may appear in this
document.
Trademarks
Serena, TeamTrack, StarTool, PVCS, Collage, Comparex, Dimensions, Serena Dimensions,
Mashup Composer, Mashup Exchange, Prototype Composer, Mariner and ChangeMan are
registered trademarks of Serena Software, Inc. The Serena logo, Version Manager,
Meritage and Mover are trademarks of Serena Software, Inc. All other products or
company names are used for identification purposes only, and may be trademarks of their
respective owners.
Chapter 1: Introduction
In This Chapter 21
Comparex Overview 22
Types of Files You Can Compare 22
Running Comparex: All-Defaults or Keywords 23
All-Defaults 23
Keywords 24
DATA or TEXT File Comparison 24
DATA 24
TEXT 24
Environment Definitions 26
3
Contents
4
Serena® Comparex® 8.7 for z/OS User’s Guide
Disadvantage of DATA 74
Decisions About DATA and TEXT 74
End-of-Job Counts 74
CPX74I - Bytes Underscored 74
CPX73I - COPYSPLIT Record Counts 74
CPX75I - Record Counts 75
CPX76I - Unusable Fields, IDENTITYs, SEGMENTs, DESENs 75
CPX78I - Member Counts 75
DATA Keywords 75
KEY, KEY1, and KEY2 Keywords 75
KEY1 77
KEY2 77
SEGMENT 77
5
Contents
FIELD 91
MASK 92
IDENTITY 92
Keywords for Input Processing 93
CCSID1 and CCSID2 93
CONTINUE 95
CPXEXIT 95
CPXIFACE 96
DATA 96
CSECT Parsing Enhancements 98
DESEN 99
DESEN1 100
DESEN2 100
DIRECTORY 100
END 103
FIELD, FIELD1, and FIELD2 Keywords 104
FIELD1 108
FIELD2 108
FILTERIN 108
FILTEROUT 110
FILTORIN 110
FILTOROUT 111
IDENTITY 111
A-IDENTITY 113
IGNORSIN 114
MASK 114
MASK1 115
MASK2 116
MODE 116
SCAN 117
SKIPUT1 118
SKIPUT2 118
STOPAFT 119
SYSUT1 119
SYSUT2 122
WILDCARD 122
6
Serena® Comparex® 8.7 for z/OS User’s Guide
7
Contents
DELETE 157
REPLACE 158
Delta Deck Examples 159
Copying Matching Records 161
COPYSAME 161
End-of-Job Record Count 161
Copying Matching and Differing Records Concurrently 162
COPYSPLIT 162
End-of-Job Record Count 163
8
Serena® Comparex® 8.7 for z/OS User’s Guide
9
Contents
10
Serena® Comparex® 8.7 for z/OS User’s Guide
11
Contents
CPX23I 359
CPX24A 359
CPX25I 360
CPX26I 361
CPX27I 361
CPX28I 362
CPX30A 362
CPX31A 362
Messages During Processing and End of Job 363
CPX35A 363
CPX36A 363
CPX37A 364
CPX39A 364
CPX40A 365
CPX41I 365
CPX42I 365
CPX45A 366
CPX50I 366
CPX51I 366
CPX52I 367
CPX55I 368
CPX56I 368
CPX57I 368
CPX61I 369
CPX62I 369
CPX64I 370
CPX65I 370
CPX66A 370
CPX67I 371
CPX69I 371
CPX71I 372
CPX72I 372
CPX73I 374
CPX74I 374
CPX75I 374
CPX76I 376
CPX77I 377
CPX78I 377
CPX80I 378
CPX90A 379
CPX91A 380
CPX92A 380
12
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX93A 380
CPX94A 381
CPX97A 381
CPX99A 383
CPX001 383
CPX002 383
CPX201 384
CPX203 384
CPX205 385
CPX206 385
CPX207 385
CPX301 385
CPX303 386
CPX304 386
CPX401 386
CPX403 387
CPX404 387
CPX501 387
CPX502 387
CPX503 388
CPX504 388
CPX601 388
CPX602 389
CPX603 389
CPX604 389
CPX605 389
CPX606 390
CPX701 390
CPX702 390
CPX703 391
CPX704 391
CPX705 391
CPX706 391
CPX707 392
CPX708 392
CPX801 392
CPX802 393
CPX803 393
CPX804 393
CPX805 394
CPX806 394
CPX807 394
13
Contents
CPX810 394
CPX811 395
CPX812 395
CPX813 395
CPX814 396
CPX815 396
CPX816 396
CPX817 397
CPX818 397
CPX819 397
CPX820 397
CPX821 398
CPX822 398
CPX823 398
CPX824 399
CPX825 399
CPX826 399
CPX827 400
CPX828 400
CPX829 400
CPX830 400
CPX831 401
CPX832 401
CPX834 402
CPX836 402
CPX837 402
CPX839 402
CPX840 403
CPX841 403
CPX842 403
CPX843 403
CPX844 404
CPX845 404
CPX846 404
CPX847 405
CPX848 405
CPX850 405
CPX851 406
CPX852 406
CPX853 406
CPX900 407
CPX901 407
14
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX902 407
CPX903 407
CPX904 407
CPX905 407
CPX906 407
CPX907 408
CPX908 408
CPX909 408
CPX910 408
CPX911 408
CPX912 408
CPX913 408
CPX914 409
CPX915 409
CPX916 409
CPX917 409
CPX918 409
CPX918A 409
CPX919 409
CPX920 410
CPX921 410
CPX922 410
CPX923 410
CPX924 410
CPX925 410
CPX926 411
Common Abends 411
User Abends and Reason Codes 413
15
Contents
16
ABOUT THIS BOOK
This document describes how to use Serena® Comparex® version8.7 and guides you
through some commonly used comparisons. It contrasts DATA and TEXT comparison logic
and also describes the components of difference reports.
Step-by-step instructions show you how to:
• Compare files as a submitted batch job
• Compare files in the foreground using the ISPF Interface
This book also shows you how to:
• Run a DATA comparison with keys
• Run a DATA comparison without keys
• Run a TEXT comparison
• Understand the printed output of each comparison type
AUDIENCE
This guide is intended for the professional programmer experienced with file structures and
organizations, utilities, and testing practices. You also need to have a working knowledge of
your operating environment.
CODE CONVENTIONS
This legend describes the symbols and abbreviations used in the descriptions of the
Comparex keywords.
Symbol Meaning
17
About This Book
Symbol Meaning
lowercase Lowercase letters indicate that variable information is to
be supplied.
LEGEND
This legend describes the symbols and abbreviations used in the descriptions of the
Comparex keywords in the chapters that follow. These symbols and abbreviations are used
in this same way in the Comparex Getting Started Guide and Comparex Quick Reference .
Symbol Meaning
18
Serena® Comparex® 8.7 for z/OS User’s Guide
Symbol Meaning
ddd Displacement into the record. Both ddd and len must be in decimal.
len Length, in bytes. Values range from 1 to 32767, or the word ‘END’
to indicate through the end of the record. (For KEY, KEY1, and
KEY2, values range from 1 to 256.)
t Type. Values are ‘X’ for hexadecimal and ‘C’ for character.
vvvv Literal value between apostrophes. For example, t‘vv’ could be
X‘5B’.
RELATED DOCUMENTS
The following related manuals are included on the Comparex software distribution CD. They
are also available through the Download Center on the Serena Support self-service Web site:
Book Description
Serena® Comparex® for z/OS Installation requirements and instructions for installing
Installation Guide the product under z/OS.
19
About This Book
20
INTRODUCTION
1
Comparex is a utility designed to compare two files and print a report showing the records
that are different. It helps you check the accuracy of maintenance changes before
implementation and it facilitates effective unit, system, and regression testing for new
development. This utility performs specific field comparisons, highlights the differences, and
generates a report that underscores those differences. You can perform DATA, TEXT, and
DIRECTORY compares.
Note
DATA comparison is the default.
IN THIS CHAPTER
This chapter describes the general flow of Comparex. We suggest you read this chapter
before running the scenarios presented in the following chapters.
This chapter covers the following topics:
• “Comparex Overview” on page 22
• “Types of Files You Can Compare” on page 22
• “Running Comparex: All-Defaults or Keywords” on page 23
• “DATA or TEXT File Comparison” on page 24
• “Environment Definitions” on page 26
21
Chapter 1: Introduction
COMPAREX OVERVIEW
If a change is introduced into a system, Comparex compares files produced before the
change with files produced after the change. The difference report is printed, allowing you to
see precisely which bytes differ between the two files, record by record. The results will
confirm your expected changes and, more importantly, expose any unexpected changes.
An effective Comparex job can be run in all-defaults mode, with no keywords. Comparex
reads two files, comparing a record number from the first file with the same record number
from a second file. It then prints both records if it finds one or more differing bytes. In all-
defaults mode, Comparex reads to the end of each file, printing all the pairs of differing
records and all the extra records from the longer input file.
The most frequently requested options are implemented as the Comparex defaults. The all-
defaults mode can be significantly modified. Using extensive optional keywords, you can
modify input processing, record pairing, and printing routines in Comparex. In a keywords
job, you specify free-form keywords to change the default parameters, so a file of any
organization can be read, synchronization can be done by logical keys, and the format of the
report can be customized. In addition, keywords can be used to tell Comparex to create an
output file of selected records.
22
Serena® Comparex® 8.7 for z/OS User’s Guide
— CA-Panvalet
— CA-Librarian
— FUJITSU/FACOM’s GEM
— Partitioned Data Set (PDS/PDSE)
— OWL
— CA-ROSCOE
— WYLBUR
• Most Database Management Systems (DBMS)
— ADABAS/NATURAL
— DL/1
— IMS, IMS/FASTPATH
— CICS
— DB2
— FOCUS
— IDMS (5.7) or IDMS/R (10.0)
— CA-RAMIS II
— CA-DATACOM/DB
— CINCOM MANTIS
— Others to be developed in the future, including ORACLE
• Formatted Screens (PANELS) for ISPF sessions
• Control Card Images
• Reports
• Documentation
All-Defaults
Comparex can run in “all-defaults” mode. In this mode, Comparex reads two files, comparing
a record from the first file with the same number record from a second file. It then prints both
records if it finds one or more differing bytes.
Note
In this mode, Comparex compares records from a DATA file without attempting to
match on keys.
23
Chapter 1: Introduction
Keywords
You can modify any of the defaults with Comparex keywords. Using these keywords, you can
tell Comparex to read a file of any organization, synchronize by logical keys, choose records
and fields to compare, customize the report format, and create an output file of selected
records.
Note
The examples that follow this chapter are very simple, using a minimum number
of keywords. We recommend that you experiment with these samples before
customizing Comparex with the wide range of keywords available.
DATA
To Comparex, a DATA file contains formatted records. DATA files have fields in fixed
positions in each record. DATA records are generally sequenced (usually defined by a key
field). Comparex compares DATA files by pairing physical records and then comparing these
records field by field, using key-, segment-, or record-number to record-number
synchronization.
Examples of DATA files are:
• Master files
• Intermediate files
• Transaction files
• Databases
• Load modules
TEXT
To Comparex, TEXT is any file where no specific format exists in the record. TEXT files do
not have bytes and fields in fixed positions. TEXT records can contain blanks and might be
entirely free-form. Rather than pairing records by record number or key, TEXT
synchronization matches records by content to find blocks of matching text and isolate
differences.
Examples of TEXT files are:
• Program source code
24
Serena® Comparex® 8.7 for z/OS User’s Guide
• JCL
• Reports
• Documentation
Note
If TEXT has neither been specified nor been nullified because of inconsistencies,
Comparex uses DATA comparison logic. When Comparex performs DATA
comparison logic, it cannot also perform TEXT comparison logic in the same run.
The two logic routines are mutually exclusive.
25
Chapter 1: Introduction
ENVIRONMENT DEFINITIONS
To compare files on the mainframe, Comparex supports the three major IBM operating
systems:
• z/OS (z/OS, OS/390, XA, ESA)
• z/VSE - (VSE/ESA, SP 2.1 System Package, and pre-2.1)
• z/VM (VM/CMS)
In addition, Comparex runs under the following operating systems:
• MVT/VSE from Software Pursuits
• OSIV/F4 (MSP) from FUJITSU/FACOM
• Nixdorf NIDOS
26
Serena® Comparex® 8.7 for z/OS User’s Guide
27
Chapter 1: Introduction
28
MAJOR PROCESSING STEPS
2
What you will find in this chapter:
• “Processing Steps” on page 29
• “Comparex with No Keywords” on page 30
• “Comparex with Keywords” on page 33
PROCESSING STEPS
INPUT FILES
Three files are used:
• SYSIN contains any keywords to modify the all-defaults mode. If SYSIN is not able to be
opened or if SYSIN is empty, Comparex processes without any keywords, taking all
defaults. If SYSIN is not empty, Comparex modifies its default processing with the given
keywords.
• SYSUT1 is the first file of the two to be compared. This is the original file. If program
source code is being compared, this is the unmodified version.
• SYSUT2 is the second file of the two to be compared. This is the modified file. If
program source code is being compared, this is the updated version.
OUTPUT FILES
Two files are generated:
• SYSPRINT contains a listing of the results of the comparison, called the difference report.
It also contains a list of the defaults and keywords used, and it shows end-of-job statistics
lines. You can also specify a list of the Comparex keywords and a visual representation of
each record type identified.
• SYSUT3 is an optional file. Comparex can be used as a test file generator by the
specification of COPYDIFF or COPYSAME (keywords that direct Comparex to write file
29
Chapter 2: Major Processing Steps
Note
You can also specify up to 5 different output files in place of SYSUT3. See
“Copying Matching and Differing Records Concurrently” on page 162 for more
information.
SERENA COMPAREX (MVS-8.6.0-2006/105) Saturday APRIL 15, 2006 (2006/105) 15:59:59 PAGE 1
• As delivered, Comparex has installation defaults which can override the normal defaults
as described in this manual. Your installation may have changed them to fit your shop’s
needs. Refer to “Installation Defaults” below for the delivered installation defaults.
CPX00I - **************************************************
CPX00I - *** I N S T A L L A T I O N D E F A U L T S ***
CPX00I - **************************************************
CPX00I - HALT=COND /* STOP EXECUTION IF SYNTAX ERRORS FOUND */
CPX00I - ************************************
CPX00I - *** END-OF-INSTALLATION DEFAULTS ***
CPX00I - ************************************
Comparex attempts to open SYSIN. If this open is not successful, Comparex issues warning
message CPX02A. If SYSIN is able to be opened but is empty (since no Comparex keywords
are being specified for this no-keywords job),
Comparex continues to process without issuing a warning message.
• Comparex displays on SYSPRINT the defaults it will use. A sample default message
follows:
30
Serena® Comparex® 8.7 for z/OS User’s Guide
Comparex Defaults
Here is a complete list of the defaults Comparex takes:
Input Processing
• CONTINUE is not in effect
• DATA file comparison logic is in effect
• Fields are not used
• Filters are not used
• IDENTITYs are not used
• MASKs are not used
• MODE=APPLICATIONS is in effect
• SKIPUT1 - no records are bypassed on SYSUT1
• SKIPUT2 - no records are bypassed on SYSUT2
• STOPAFT=999999999999 is in effect
• SYSUT1 is specified by JCL
• SYSUT2 is specified by JCL
• WILDCARD is not used
31
Chapter 2: Major Processing Steps
Output Processing
Under the no-keywords job, output processing is not done; output processing keywords
(COPYDIFF, COPYSAME, and SYSUT3) are not used.
Display Processing
• EBCDIC character encoding is in effect; ASCII and UNICODE are not
• CASE=MIXED is in effect
• DASH=C‘-’ is in effect
• DECIMAL is in effect
• EBCDIC is in effect
• FLDSONLY is not in effect
• FORMAT=02 is in effect
• No GENFLDS are generated
• HALT=NO is in effect
• No HELP listing is produced
• HEX is not in effect; DECIMAL is in effect
• INTERLEAVE=0 is in effect
• LINE=(32,HORIZONTAL) is in effect
• LINELIM=0 is in effect
• MAXDIFF=999999999999 is in effect
• MBRHDR=YES is in effect
• NIBBLE is not in effect
• PLUS=C‘+’ is in effect
• PRINT=MATCH and PRINT=MISMATCH are in effect
— Unless HALT=YES has been specified, Comparex opens SYSUT1. If the open is not
successful, Comparex terminates, issuing message CPX90A and a return code of 16.
— Unless HALT=YES has been specified, Comparex opens SYSUT2. If the open is not
successful, Comparex issues a warning with message CPX90A, and unless
HALT=COND has been specified, Comparex functions as a print utility, printing all
records of SYSUT1 onto SYSPRINT.
— Comparex reads SYSUT1 and SYSUT2 sequentially. It compares each SYSUT1
record with the same numbered record on SYSUT2 (that is, record number 1 on
SYSUT1 is compared with record number 1 on SYSUT2 and record number 1001 on
SYSUT1 is compared with record number 1001 on SYSUT2).
32
Serena® Comparex® 8.7 for z/OS User’s Guide
— If Comparex finds that compared records do not match exactly (all bits in all bytes are
not equal), prints both records on SYSPRINT and underscores the differences. The
example below shows how two differing records might look on the difference report
(modified to fit on page).
CPX61I - KEY SYNCHRONIZATION MISMATCH - RECORD 1 ON FILE SYSUT1
• If SYSUT1 has come to end of file and SYSUT2 has not come to end of file,
Comparex prints all SYSUT2’s records on SYSPRINT until SYSUT2’s end of file has
been reached.
• Likewise, if SYSUT2 has come to end of file and SYSUT1 has not come to end of file,
Comparex prints all SYSUT1’s records on SYSPRINT until SYSUT1’s end of file has
been reached.
• Comparex writes statistics to SYSPRINT. The following is an example of end of job
messages.
CPX67I - MAXDIFF INVOKED, CONTINUING WITHOUT PRINTING BY REQUEST
CPX71I - END OF DATA ON FILE SYSUT1
CPX72I - END OF DATA ON FILE SYSUT2
CPX74I - BYTES UNDERSCORED(15)
CPX75I - RECORDS PROCESSED: SYSUT1(28)/SYSUT2(34),DIFFERENCES(3,1,7)
EXPLANATION - 3 RECORDS DIFFER THAT SYNCHRONIZED TOGETHER
1 RECORD WAS CONSIDERED INSERTED ON SYSUT1
7 RECORDS WERE CONSIDERED INSERTED ON SYSUT2
33
Chapter 2: Major Processing Steps
Processing of SYSPRINT
SYSPRINT file is opened and the license information is displayed on SYSPRINT, exactly as
described in Comparex with no keywords.
Comparex opens SYSIN, and the utility looks at each SYSIN record to find its keywords.
Each SYSIN record is listed on SYSPRINT, to the right of message CPX00I. If the first
character of the SYSIN record is an asterisk, Comparex considers the entire SYSIN record to
be a comment, and the utility does not search for keywords on that record. Additional
comments may be placed to the right of keywords by preceding them with a slash-asterisk “/
*” or slash-slash, “//”. (Do not begin “/*” or “//” in column 1). If Comparex finds information on a
SYSIN record that cannot be recognized as a valid keyword, the utility underscores the
characters and displays the literal “ERROR?” in the right-hand column.
Comparex uses the valid keywords from the SYSIN file to modify the defaults, and the utility
displays messages CPX03I through CPX12I to show these processing parameters.
Each SYSIN record is read and translated to uppercase as CASE=RAISE is normally in
effect for SYSIN records. This allows keywords and parameters to be entered in any case.
(Character strings of the form C’vv’ are not translated.) A CASE= keyword found specifies
what sort of translating is to be used; however, implementation of this choice is delayed until
keyword processing is finished and comparison processing is ready to begin.
If it is desired to have CASE=MONO in effect for keyword processing this can be done; see
the section on Programmable Options in the Install Guide.
Files Opened
Comparex interrogates the system for the SYSUT1, SYSUT2, SYSUT3 and SYSUT3x file
attributes. Data set organization and data set attributes under z/OS are taken from the
operating system but may be overridden by the user.
If COPYDIFF, COPYSAME or COPYSPLIT was specified, Comparex opens the SYSUT3 or
SYSUT3x files. Message CPX16I shows the data set organization and attributes.
If SYSUT1=DUMMY was not specified and HALT=YES was not specified,
Comparex opens file SYSUT1. Message CPX21I shows the data set organization and
attributes.
If SYSUT2=DUMMY was not specified and HALT=YES was not specified,
Comparex opens file SYSUT2. Message CPX22I shows the data set organization and
attributes.
If TEXT processing is specified and Comparex has not nullified TEXT because of other
keywords, the utility issues message CPX25I, showing the TEXT file keywords in effect for
the run.
If TEXT processing is not being done for the run, Comparex issues message CPX25I,
showing that DATA file synchronization is in effect.
If either SKIPUT1 or SKIPUT2 was specified, Comparex skips over the specified number of
records on the input.
34
Serena® Comparex® 8.7 for z/OS User’s Guide
Reading of Records
If the STOPAFT keyword has been specified, Comparex reads records until that keyword’s
number has been reached. Otherwise, Comparex does not stop reading records after a
specific number has been reached.
If MAXDIFF has been specified, and the maximum number of differences specified with the
MAXDIFF keyword have been printed on the difference report, then
Comparex continues to read records (if CONTINUE has been specified) or it goes to its end-
of-processing routines (if CONTINUE has not been specified).
Comparex considers all record displacements on keywords to be relative to one (the first
column is column 1) unless the MODE=SYSTEMS keyword has been entered to change
displacements to be relative to zero (the first column is column zero).
Comparex reads records and pairs them for comparison. If TEXT comparison logic is in
effect, Comparex uses buffers and look-ahead logic to pair records and to isolate differing
blocks. Under TEXT processing, keywords may be entered to control the size of the look-
ahead logic buffer (BUFF), the back-in-synchronization matching line count (MLC), the
characters to be deleted (SQUEEZE), and the format of the difference report (FRAME and
PRINT=FULL). If DATA comparison logic is in effect, Comparex pairs records based on
KEYs, SEGMENTs, or same physical-record-number synchronization.
Comparex uses any filtering keywords, along with the WILDCARD value, to determine which
records are sent to the comparison routines.
35
Chapter 2: Major Processing Steps
If IDENTITY, FIELD, or MASK keywords have been specified, Comparex uses these
keywords to compare the various parts of the record. IDENTITY keywords test for a value on
the SYSUT1 record so that the following fields and MASKs can apply to that record type only.
FIELD keywords specify bytes to be compared, and MASK keywords specify bytes that are to
be ignored. If any bytes in fields are unequal, Comparex identifies this pair as different and
sends them to the difference report, noting which IDENTITY and FIELD uncovered the first
difference.
Writing of SYSUT3
If COPYDIFF or COPYSAME was specified, and if SYSUT3 was successfully opened, the
utility writes any record from file SYSUT2 that it identified as differing from SYSUT1 onto file
SYSUT3. These differing records include matched records where some difference in data is
found and records that are considered inserted on SYSUT2 (i.e., exist on SYSUT2 but not
SYSUT1).
Note
Records considered inserted on SYSUT1 do not go to SYSUT3.
Writing of SYSUT3x
If COPYSPLIT was specified, and if the SYSUT3x files were successfully opened, the utility
writes:
• Matching records to SYSUT3A
36
Serena® Comparex® 8.7 for z/OS User’s Guide
Writing of SYSPRINT
The difference report shows the differing records. The format of the difference report is
modified by the specified display processing keywords. The input file and the associated
logical record number on that input file are shown with each record printed, and the message
on the difference report also shows why the record was identified as differing.
Many keywords are available to direct Comparex to modify the default parameters for the
printing of the difference report.
The PRINT keyword directs Comparex to print synchronized matched records or mismatched
records.
Comparex translates the input to characters for printing using its EBCDIC translate table. You
may specify that Comparex use an ASCII or UNICODE translate table instead.
The MAXDIFF keyword specifies the maximum number of differing records, mismatched
records, and extra records to print on the difference report. A MAXDIFF keyword should be
included in every Comparex job to avoid large printouts if the expected results do not occur.
Comparex shows each line’s relative displacement in decimal. You may specify that
Comparex show the relative displacement in hexadecimal instead, by using the HEX
keyword.
The GENFLDS statement causes Comparex to print out a handy visual representation of
each record type, as identified by IDENTITYs, FIELDs, and MASKs. These sheets can be
made into clear plastic overlays on a copying machine and used in a review of the difference
report.
The LINE keyword changes the number of bytes shown on each line of the difference report,
the PAGE keyword changes the number of print lines on each page, and the FORMAT
keyword specifies formatting characteristics on how differences are displayed and permits
INTERLEAVEing of displayed lines. The LINELIM keyword indicates how many lines to print
for each record.
Comparex underscores each differing byte with a dash. You can change this to any other
character by the use of the DASH keyword. Comparex underscores excess bytes on the
record from file SYSUT2 with a plus “+” sign. You can change this to any other character by
the use of the PLUS keyword.
When using dump (horizontal hex) format, Comparex underscores both the character printout
(on the right) and both half-bytes of the hex printout (on the left). However, if the NIBBLE
keyword is specified, each half-byte is compared separately, and only those half bytes that
compare unequal are underscored. Comparex will underscore all differing bytes, even those
bytes considered MASKed out unless FLDSONLY is specified also.
37
Chapter 2: Major Processing Steps
The HELP keyword causes Comparex to print a listing of valid keywords and their
descriptions on the difference report.
Note: on the HELP keyword, braces { } indicate a required entry where more than one
selection is available. Within the braces, individual options are separated with a broken
vertical bar. One of the indicated choices must be selected.
Brackets [ ] indicate optional entries, and may show one or more choices. One of the choices
may be made, or the entry may be eliminated altogether. If you are using JES2, the brackets
may not display, being replaced by spaces. This can be remedied by supplying a custom
translation table via JES2 installation exit 15. See also PRINTDEF TRANS= in the JES
Installation and Tuning Reference.
End-of-Job Processing
If the input files contain an embedded directory such as a Partitioned Data Set (PDS),
Panvalet master, or Librarian master, Comparex issues an end-of-DATA or end-of-TEXT
message at the end of each member, unless DIRECTORY processing was requested. Also,
with directory-embedded files, an end-of-DIRECTORY message is issued when each
directory is exhausted. If the input files are not directory-embedded, Comparex issues an
end-of-DATA or end-of-TEXT message at the end of each input file.
If keywords have been used, Comparex modifies the default processing to show additional
counters.
The statistics line, message CPX75I, shows the number of records written onto SYSUT3, if
COPYDIFF or COPYSAME was specified. Message CPX73I, shows the number of records
written onto SYSUT3A, SYSUT3B, SYSUT3C, SYSUT3D, and SYSUTE if COPYSPLIT was
specified.
If KEY or SEGMENT synchronization is used, Comparex shows, next to
‘DIFFERENCES,’ as the left-hand figure, the number of pairs of records which were
synchronized by KEY or SEGMENT and some difference was found; as the middle figure, the
number of records from file SYSUT1 that were not synchronized to any SYSUT2 record; and,
as the right-hand figure, the number of records from file SYSUT2 that were not synchronized
to any SYSUT1 record.
If FIELDs, SEGMENTs, IDENTITYs, or DESENs are specified, then message CPX76I shows
how many of these specified positions went beyond the length of the record.
If filtering keywords are used, Comparex will show, with message CPX77I, the number of
records that were not passed to the comparison routines due to filtering tests.
The clock time at the end of the job is shown, and the condition (return) code is displayed.
The return codes are:
0 - normal completion - all records compared equal
4 - normal completion - at least one difference found
8 - error - Comparex output may still be useful
38
Serena® Comparex® 8.7 for z/OS User’s Guide
16 - serious error - Comparex processing is halted immediately; look for a CPXnnA message
to describe the reason.
Comparex closes all files.
KEY=(1,4)
2. No spaces are allowed in a keyword and its associated data, but a space may be used to
separate keywords on the SYSIN record.
3. Displacement and length values greater than 32767 are set to 32767.
4. If a file is variable length (RECFM=V, VB, or VBS), the LLBB (or RDW) cannot be
accessed unless MODE=SYSTEMS has been specified.
5. Commas and decimal points cannot be used in numbers in keywords. Values,
displacements, and lengths are given in numeric characters only.
6. Numeric expressions are specified with one to eight numeric characters only. Leading
zeroes are acceptable, but are not redisplayed in acknowledgment messages.
7. If the first position of a SYSIN record is an asterisk, Comparex considers the entire record
to be a comment and does not search for keywords on that record.
8. As many keywords as possible may be coded on one record, or, each SYSIN record may
have only one keyword.
9. You may enter as many of each of the following keywords as desired, but Comparex will
use only the last one of each specified. If multiple STOPAFT= keywords are encountered,
the one with the lowest value will be used.
BUFF
COPYDIFF
COPYSAME
COPYSPLIT
DASH
DELETE
FORMAT
39
Chapter 2: Major Processing Steps
HALT
IGNORSIN
INSERT
KILLRC
LINE
LINELIM
MAXDIFF
MAXMATCH
MBRHDR
MLC
MODE
PAGE
PLUS
REPLACE
SKIPUT1
SKIPUT2
STOPAFT
SYSUT1
SYSUT2
SYSUT3
SYSUT3A
SYSUT3B
SYSUT3C
SYSUT3D
SYSUT3E
TEXT
WILDCARD
10. Some keyword pairs or triplets are mutually exclusive. If more than one is specified, only
the last one entered is used. These keyword sets are:
a) DATA versus TEXT versus DIRECTORY
b) DECIMAL versus HEX
c) EBCDIC versus ASCII versus UNICODE
d) MODE=APPLICATIONS versus MODE=SYSTEMS
e) PRINT=MATCH versus PRINT=NOMATCH
f) PRINT=MISMATCH versus PRINT=NOMISMATCH
g) LINE versus FORMAT
11. Some keywords are cumulative. Comparex will use as many as you enter, up to some
limit. These keywords are:
a) Up to 800 IDENTITYs, FIELDs, MASKs, and DESENs are used together by
Comparex. Each FIELD1 and FIELD2 pair counts as one field, and each MASK1 and
MASK2 pair counts as one MASK.
40
Serena® Comparex® 8.7 for z/OS User’s Guide
1 FIELD1=(1,11,C,N=DATA-SUBSCRIBER-OLD),FIELD2=(3,11,C,N=DATA-SUBSCRIBER-NEW)
00001ABCDEF
3 001ABCDEFGH
---------
SAMPLE RUN
Sample run JCL is shown in “Sample Batch JCL” following.
41
Chapter 2: Major Processing Steps
For access to Panvalet, Librarian, and other proprietary file structures, exit information must
be provided to the Comparex interface (CPXIFACE) using the SYSUT1 and SYSUT2
keywords.
42
TEXT KEYWORDS
3
What you will find in this chapter:
• “What Is TEXT?” on page 43
• “TEXT Processing Keywords” on page 44
• “What Is TEXT Comparison Logic?” on page 45
• “Keywords Not Available with TEXT” on page 50
• “Advantages of TEXT” on page 52
• “Disadvantages of TEXT” on page 53
• “Decisions About DATA and TEXT” on page 53
• “End-of-Job Counts” on page 53
• “TEXT Keywords” on page 53
Comparex recognizes two categories of files (DATA and TEXT) and has separate comparison
logic routines for each. This chapter describes TEXT files and the TEXT comparison logic
routines.
If Comparex finds the TEXT keyword and the utility has not nullified TEXT because of other
keywords, Comparex uses its TEXT comparison logic routines to compare the two input files.
If Comparex performs TEXT comparison logic, it cannot also perform DATA comparison logic
in the same run. For this reason, the TEXT keyword and the DATA keyword are mutually
exclusive; you cannot enter both. If both keywords are entered, Comparex will use the last
one specified.
WHAT IS TEXT?
In Comparex, TEXT is defined as any file where there is not a known inter-record
relationship. TEXT files may not have bytes or fields in any fixed relationship between
records. The records can contain blanks, and they can be entirely free-form.
Examples of TEXT files are application program source code, job control language (JCL),
reports, and documentation.
43
Chapter 3: TEXT Keywords
44
Serena® Comparex® 8.7 for z/OS User’s Guide
45
Chapter 3: TEXT Keywords
6. You can determine the size of the buffering area Comparex works with by using the BUFF
keyword. Comparex uses a buffer of 60 kilobytes as the default. You can change this by
entering any value between 32 (for 32K) and 1024 (for 1M). If you set MODE=SYSTEMS,
you can specify up to 16 megabytes.
In general, the larger the buffer size, the more CPU time Comparex will use for the run. A
small buffer could be used for small text records (such as 8 to 40 bytes) and a large buffer
could be used for large text records (such as 500 bytes to 32000 bytes).
7. Comparex manipulates its buffers, and compares records until an end of file is detected
on either file. It identifies extra records from the file that is not at end of file, and then
moves these extra records to the difference report as differing records.
8. Comparex writes the difference report, under TEXT comparison logic, to identify differing
records (rather than differing fields). For this reason, the entire record is displayed without
underscoring of differing bytes, half-bytes, or excess bytes. By using PRINT=FULL and
the FRAME keyword, you can show text records in several ways:
a) The default is to show only the differing records from the two files. Those records from
file SYSUT1 that are not matched to any record from file SYSUT2 are identified, on
the right-hand side of the report, with the designation DIF O N E; and those records
from file SYSUT2 that are not matched to any record from file SYSUT1 are identified
with the designation DIF T W O. To the far right, the logical record number is shown.
If a pair of records that are exactly equal (after any SQUEEZE characters are
removed) occurs in the blocks, those records are not designated with the DIF literal
on the right-hand side of the report. The DIF literal designates only records that are
differing.
b) If PRINT=FULL is specified, the default report is modified so that all records from file
SYSUT1 are shown in context. If records are framed (because an option to TEXT was
specified, or because you entered the FRAME keyword), the SYSUT1 records that
have been matched to a SYSUT2 record are not listed inside a frame (they are not
surrounded by the dash character and the plus character on the difference report).
Those SYSUT1 records that have been matched to a SYSUT2 record do not show
the designation DIF on the right-hand side of the report. The “TEXT=COBOL and
PRINT=FULL” example on page 49 shows the use of PRINT=FULL and FRAME.
Note that every record from file SYSUT1 is printed.
c) PRINT=MLC is a variation on PRINT=FULL. Only a few (MLC) lines are shown before
and after the highlighted differences. Refer to “TEXT=COBOL and PRINT=MLC” on
page 47 for an example. Note the fade-in, fade-out, and ellipsis.
d) If FRAME is specified, or if any option to TEXT except for TEXT=REPORT is
specified, blocks of differing records are surrounded by the dash and plus characters
on the difference report. Note the < and > characters on the FRAME that signify the
bounds of the field that was used in the TEXT comparison.
Refer to “TEXT=COBOL” on page 47 for an example that shows TEXT, but without
PRINT=FULL.
46
Serena® Comparex® 8.7 for z/OS User’s Guide
9. In general, if the differences between SYSUT1 and SYSUT2 exceed 40%, the usefulness
of the difference report is questionable. At that rate of difference, the changes are major;
you should increase the BUFF size (try BUFF=500) and lower MLC (try MLC=4) to get
satisfactory results.
TEXT Examples
The following examples show comparisons of two versions of the same COBOL program
(which is shown in Appendix A).
TEXT=COBOL
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 002100 02 ONLY-REST-OF-REC PIC X(100). 00002100 DIF O N E 21 +
--------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7----.----8-----------------
I 002100 02 ONLY-REST-OF-REC. 00002100 DIF T W O 21 +
I 002200 05 ONLY-DISP PIC XXX. 00002200 DIF T W O 22 +
I 002300 05 ONLY-UNIT PIC X(8). 00002300 DIF T W O 23 +
I 002400 05 ONLY-VOL PIC X(6). 00002400 DIF T W O 24 +
I 002500 05 FILLER PIC X(83). 00002500 DIF T W O 25 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 003800 ELSE IF UPDATE-REQUEST PERFORM DO-THE-UPDATE 00003800 DIF O N E 38 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 004600 MOVE 0 TO RETURN-CODE 00004600 DIF O N E 46 +
--------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7----.----8-----------------
I 004900 MOVE ZERO TO RETURN-CODE 00004900 DIF T W O 49 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
CPX71I - END OF TEXT ON FILE SYSUT1
CPX72I - END OF TEXT ON FILE SYSUT2
CPX75I - RECORDS PROCESSED: SYSUT1(60)/SYSUT2(63),DIFFERENCES(2,1,4)
EXPLANATION - 2 RECORDS DIFFER THAT SYNCHRONIZED TOGETHER
1 RECORD WAS CONSIDERED INSERTED ON SYSUT1
4 RECORDS WERE CONSIDERED INSERTED ON SYSUT2
CPX80I - TIME OF DAY AT END OF JOB: 10:27:37 - CONDITION CODE ON EXIT: 4
. . .
001600 02 ONLY-KEY. 00001600 O N E 16
001700 03 ONLY-ACCOUNT PIC X(10). 00001700 O N E 17
001800 03 ONLY-TYPE PIC XX. 00001800 O N E 18
001900 03 ONLY-DSN PIC X(44) OCCURS 2. 00001900 O N E 19
002000 03 ONLY-MEMBER PIC X(10) OCCURS 2. 00002000 O N E 20
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 002100 02 ONLY-REST-OF-REC PIC X(100). 00002100 DIF O N E 21 +
--------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7----.----8-------------------
I 002100 02 ONLY-REST-OF-REC. 00002100 DIF T W O 21 +
I 002200 05 ONLY-DISP PIC XXX. 00002200 DIF T W O 22 +
I 002300 05 ONLY-UNIT PIC X(8). 00002300 DIF T W O 23 +
I 002400 05 ONLY-VOL PIC X(6). 00002400 DIF T W O 24 +
I 002500 05 FILLER PIC X(83). 00002500 DIF T W O 25 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
002200 WORKING-STORAGE SECTION. 00002200 O N E 22
002300 77 ONLY-FILE-STAT PIC XX. 00002300 O N E 23
002400 01 SWITCHES. 00002400 O N E 24
002500 02 END-OF-ONLY-FILE-SW PIC X. 00002500 O N E 25
002600 88 END-OF-ONLY-FILE VALUE 'Y'. 00002600 O N E 26
. . .
003300 EJECT 00003300 O N E 33
003400 PROCEDURE DIVISION USING LS-FUNCTION, LS-ONLY-REC. 00003400 O N E 34
003500 MAIN-LINE. 00003500 O N E 35
003600 IF OPEN-REQUEST PERFORM DO-THE-OPEN 00003600 O N E 36
003700 ELSE IF READSEQ-REQUEST PERFORM DO-THE-SEQ-READ 00003700 O N E 37
47
Chapter 3: TEXT Keywords
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 003800 ELSE IF UPDATE-REQUEST PERFORM DO-THE-UPDATE 00003800 DIF O N E 38 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
003900 ELSE IF CLOSE-REQUEST PERFORM DO-THE-CLOSE 00003900 O N E 39
004000 ELSE DISPLAY 'INVALID I/O FUNCTION REQUESTED' 00004000 O N E 40
004100 MOVE 12 TO RETURN-CODE. 00004100 O N E 41
004200 GOBACK. 00004200 O N E 42
004300 DO-THE-OPEN. 00004300 O N E 43
004400 OPEN I-O ONLY-FILE. 00004400 O N E 44
004500 IF ONLY-FILE-STAT = '00' 00004500 O N E 45
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 004600 MOVE 0 TO RETURN-CODE 00004600 DIF O N E 46 +
--------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7----.----8-------------------
I 004900 MOVE ZERO TO RETURN-CODE 00004900 DIF T W O 49 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
004700 ELSE 00004700 O N E 47
004800 EXHIBIT NAMED ONLY-FILE-STAT 00004800 O N E 48
004900 DISPLAY 'OPEN FAILED' 00004900 O N E 49
005000 MOVE 8 TO RETURN-CODE. 00005000 O N E 50
005100 DO-THE-SEQ-READ. 00005100 O N E 51
CPX71I - END OF TEXT ON FILE SYSUT1
CPX72I - END OF TEXT ON FILE SYSUT2
CPX75I - RECORDS PROCESSED: SYSUT1(60)/SYSUT2(63),DIFFERENCES(2,1,4)
EXPLANATION - 2 RECORDS DIFFER THAT SYNCHRONIZED TOGETHER
1 RECORD WAS CONSIDERED INSERTED ON SYSUT1
4 RECORDS WERE CONSIDERED INSERTED ON SYSUT2
CPX80I - TIME OF DAY AT END OF JOB: 10:27:42 - CONDITION CODE ON EXIT: 4
48
Serena® Comparex® 8.7 for z/OS User’s Guide
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 002100 02 ONLY-REST-OF-REC PIC X(100). 00002100 DIF O N E 21 +
--------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7----.----8-------------------
I 002100 02 ONLY-REST-OF-REC. 00002100 DIF T W O 21 +
I 002200 05 ONLY-DISP PIC XXX. 00002200 DIF T W O 22 +
I 002300 05 ONLY-UNIT PIC X(8). 00002300 DIF T W O 23 +
I 002400 05 ONLY-VOL PIC X(6). 00002400 DIF T W O 24 +
I 002500 05 FILLER PIC X(83). 00002500 DIF T W O 25 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
002200 WORKING-STORAGE SECTION. 00002200 O N E 22
002300 77 ONLY-FILE-STAT PIC XX. 00002300 O N E 23
002400 01 SWITCHES. 00002400 O N E 24
002500 02 END-OF-ONLY-FILE-SW PIC X. 00002500 O N E 25
002600 88 END-OF-ONLY-FILE VALUE 'Y'. 00002600 O N E 26
002700 LINKAGE SECTION. 00002700 O N E 27
002800 01 LS-FUNCTION PIC X(8). 00002800 O N E 28
002900 88 OPEN-REQUEST VALUE 'OPEN'. 00002900 O N E 29
003000 88 READSEQ-REQUEST VALUE 'READSEQ'. 00003000 O N E 30
003100 88 CLOSE-REQUEST VALUE 'CLOSE'. 00003100 O N E 31
003200 01 LS-ONLY-REC PIC X(220). 00003200 O N E 32
003300 EJECT 00003300 O N E 33
003400 PROCEDURE DIVISION USING LS-FUNCTION, LS-ONLY-REC. 00003400 O N E 34
003500 MAIN-LINE. 00003500 O N E 35
003600 IF OPEN-REQUEST PERFORM DO-THE-OPEN 00003600 O N E 36
003700 ELSE IF READSEQ-REQUEST PERFORM DO-THE-SEQ-READ 00003700 O N E 37
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 003800 ELSE IF UPDATE-REQUEST PERFORM DO-THE-UPDATE 00003800 DIF O N E 38 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
003900 ELSE IF CLOSE-REQUEST PERFORM DO-THE-CLOSE 00003900 O N E 39
004000 ELSE DISPLAY 'INVALID I/O FUNCTION REQUESTED' 00004000 O N E 40
004100 MOVE 12 TO RETURN-CODE. 00004100 O N E 41
004200 GOBACK. 00004200 O N E 42
004300 DO-THE-OPEN. 00004300 O N E 43
004400 OPEN I-O ONLY-FILE. 00004400 O N E 44
004500 IF ONLY-FILE-STAT = '00' 00004500 O N E 45
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
D 004600 MOVE 0 TO RETURN-CODE 00004600 DIF O N E 46 +
--------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7----.----8-------------------
I 004900 MOVE ZERO TO RETURN-CODE 00004900 DIF T W O 49 +
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+>++.++++8+++++++++++++++++++
004700 ELSE 00004700 O N E 47
004800 EXHIBIT NAMED ONLY-FILE-STAT 00004800 O N E 48
004900 DISPLAY 'OPEN FAILED' 00004900 O N E 49
005000 MOVE 8 TO RETURN-CODE. 00005000 O N E 50
005100 DO-THE-SEQ-READ. 00005100 O N E 51
005200 READ ONLY-FILE NEXT, AT END MOVE 8 TO RETURN-CODE. 00005200 O N E 52
005300 IF ONLY-FILE-STAT = '00' 00005300 O N E 53
005400 MOVE ONLY-REC TO LS-ONLY-REC 00005400 O N E 54
005500 MOVE 'N' TO END-OF-ONLY-FILE-SW 00005500 O N E 55
005600 ELSE 00005600 O N E 56
005700 MOVE 'Y' TO END-OF-ONLY-FILE-SW 00005700 O N E 57
005800 MOVE 8 TO RETURN-CODE. 00005800 O N E 58
005900 DO-THE-CLOSE. 00005900 O N E 59
49
Chapter 3: TEXT Keywords
DUMMY File
SYSUT2=DUMMY cannot be specified with TEXT. To do a TEXT comparison, Comparex
needs a valid file as SYSUT2. If you specify TEXT and SYSUT2=DUMMY, Comparex issues
message CPX24A and continues to process, ignoring the TEXT keyword and using DATA
comparison logic for the run.
KEYs
KEY keywords (and KEY1 and KEY2 pairs) cannot be specified with TEXT. Comparex does
not synchronize on KEY keywords with TEXT. If you specify any KEY keyword and TEXT,
Comparex issues message CPX24A and continues to process, ignoring the TEXT keyword
and using DATA comparison logic for the run, synchronizing by key.
SEGMENTs
SEGMENT keywords cannot be specified with TEXT. Comparex does not synchronize on
segments with TEXT. If you specify any segment and TEXT, Comparex issues message
CPX24A and continues to process, ignoring the TEXT keyword and using DATA comparison
logic for the run, synchronizing by segment.
DATA
DATA cannot be specified with TEXT; the two are mutually exclusive. If both keywords are
specified, Comparex will use the last one.
IDENTITYs
IDENTITY keywords cannot be specified with TEXT. TEXT comparison logic does not use
identity tests. If you specify any IDENTITY keyword and TEXT, Comparex issues message
CPX24A and continues to process, ignoring the TEXT keyword and using DATA comparison
logic for the run.
50
Serena® Comparex® 8.7 for z/OS User’s Guide
Fields
Multiple FIELD keywords (or a FIELD1, FIELD2 pair) cannot be specified with TEXT. If any
option to TEXT has been specified (such as TEXT=COBOL or TEXT=JCL), no FIELD
keyword can be entered because Comparex creates a field when it processes with an option
to TEXT. Comparex creates FIELD=(7,66) for TEXT=COBOL, and FIELD=(1,72) for
TEXT=JCL (relative to one). If you enter more than one FIELD keyword with TEXT,
Comparex issues message CPX24A and continues to process, ignoring the TEXT keyword
and using DATA comparison logic.
DESENs
The desensitizing keywords (DESEN, DESEN1, and DESEN2) cannot be used with TEXT.
They will be ignored if entered.
MASKs
If a MASK keyword generates only one FIELD, it can be used with TEXT. If more than one
FIELD is generated, Comparex ignores the TEXT keyword. See “Input Processing Keywords”
on page 81 for information about how Comparex generates fields from masks.
FLDSONLY
FLDSONLY cannot be specified with TEXT. Comparex does not underscore any bytes on the
difference report with TEXT. Comparex will ignore this keyword if TEXT comparison logic is in
effect.
LINE
If any option to TEXT processing except for TEXT=REPORT is specified (such as
TEXT=COBOL or TEXT=JCL), Comparex sets the value of LINE to (80,ALPHA) and any
LINE keyword entered by you will be ignored.
If TEXT=REPORT is specified, Comparex sets the value of LINE to (133,ALPHA). If no
option to TEXT processing is specified, Comparex defaults the value of LINE to
(32,HORIZONTAL); you can modify this by specifying any other legitimate value for LINE.
LINELIM
LINELIM is not used with TEXT.
NIBBLE
NIBBLE cannot be specified with TEXT. Comparex does not underscore the difference report
with TEXT. Comparex will ignore this keyword if TEXT comparison logic is in effect.
51
Chapter 3: TEXT Keywords
PRINTs
PRINT=MATCH, PRINT=NOMATCH, PRINT=MISMATCH, and PRINT=NOMISMATCH
cannot be specified with TEXT. Comparex will ignore these keywords if TEXT comparison
logic is in effect.
PRINT=FULL or PRINT=MLC are the only PRINT keywords that can be entered with TEXT;
these specify that Comparex will print some or all of the records from file SYSUT1 along with
all differing records from file SYSUT2 on the difference report.
ADVANTAGES OF TEXT
TEXT comparison logic has the advantages (over DATA comparison logic) of comparing only
the significant data, determining differences in context with the rest of the file, and providing
synchronization if no KEY is clear.
Comparex would remove all spaces and commas, and it would compare only positions 7
through 72 (relative to one).
52
Serena® Comparex® 8.7 for z/OS User’s Guide
DISADVANTAGES OF TEXT
Inefficiencies
• TEXT comparison logic requires more CPU time than DATA comparison logic because it
squeezes out specific characters, and searches the entire buffer for two records that
match.
• It may access its buffer areas many times during the comparison of one record.
• It manipulates its buffer areas to move records into lower storage if new records are
added to the buffer.
• TEXT produces a difference report showing the full record, but differing bytes, half-bytes,
and excess bytes are not underscored.
END-OF-JOB COUNTS
At the end of the TEXT processing, Comparex shows the message CPX75I the number of
records read from the input files and written to any SYSUT3 file.
In addition, the number of differences are shown with message CPX75I.
TEXT KEYWORDS
The BUFF, FRAME, MLC, SQUEEZE, TEXT, PRINT=MLC, and PRINT=FULL keywords are
used to specify TEXT comparison logic and to direct the matching, buffering, and printing
routines.
53
Chapter 3: TEXT Keywords
BUFF
Specifies the number of kilobytes for buffering records.
Keyword Format
BUFF={60}
{nn}
nn can range from 32 to 1024 under MODE=APPLICATIONS, and as high as 16384 under
MODE=SYSTEMS.
There is no limit to the size of the buffer. Twenty megabyte (BUFF=20000) buffers are
possible without fear of abending. These GETMAINed areas are obtained above the 16 MB
storage line. The default value for TEXT processing, or DATA with Random KEYs, is 60.
For CSECT parsing (DATA=CSECT), the default buffer size is 256K. You should specify a
much larger buffer if the load modules to be compared are sizable.
For example:
Setting the size of the buffer in these keywords does not necessarily mean that the GETMAIN
to obtain the storage will be satisfied. If the region is not large enough to handle such a large
request, the task can abend or receive the following message:
Keyword Examples
BUFF=512
BUFF=1024 /* One megabyte
54
Serena® Comparex® 8.7 for z/OS User’s Guide
FRAME
FRAME specifies that blocks of differing records are surrounded by the plus (+) character
and the dash (-) character on the difference report.
If any option to TEXT is specified (except for TEXT=REPORT), the blocks of differing records
are automatically framed with FRAME=NUM on the difference report.
FRAME=YES and FRAME are logically equivalent and indicate that the frame is composed
solely of pluses and dashes.
FRAME=NUM intersperses numerics into the frame to show relative displacements.
FRAME=NO overrides any other specification or defaults, and effectively nullifies the frame
construction.
Keyword Format
FRAME[={YES}]
[ {NO}]
[ {NUM} ]
Keyword Examples
FRAME
FRAME=NO
FRAME=(NUM)
MLC
MLC specifies matching line count.
Keyword Format:
MLC={5}
{nn}
nn can be a value between 1 and 40. This value specifies how many records Comparex must
match consecutively after a mismatch to determine if the files are back in synchronization.
Specification of a very large value, such as 40, should be done only if you are certain that
there are very few differences. In general, the larger the matching line count, the more
processing time Comparex will take.
If TEXT=JCL is specified and no MLC is specified, Comparex sets the MLC value to 2.
If TEXT=REPORT is specified and no MLC keyword is entered, Comparex sets the MLC
value to 3. Otherwise, if no MLC keyword is entered, Comparex sets the MLC value to 5.
55
Chapter 3: TEXT Keywords
Keyword Examples
MLC=10
MLC=(005)
PRINT
PRINT specifies printing a certain number of records from file SYSUT1 in context with the
differing records from file SYSUT2.
Keyword Format
PRINT={FULL}
{MLC}
SQUEEZE
SQUEEZE allows you to specify the character(s) to be taken out from each TEXT record
before comparison. The specified characters are removed, and the remaining text is moved
to the left in the record. All instances of the characters are taken out.
Up to 40 different SQUEEZE characters can be specified. The character is specified as X‘vv’
or C‘v’.
You cannot specify a SQUEEZE keyword if any option to TEXT is specified. If an option to
TEXT is specified (such as TEXT=COBOL), any SQUEEZE keywords will be ignored.
Keyword Format
SQUEEZE=t'vv'
(or SQZ)
Keyword Examples:
SQUEEZE=C' '
SQUEEZE=X'EA'
SQZ=C'?'
TEXT
TEXT specifies that files have no inter-record relationship (such as program source code).
56
Serena® Comparex® 8.7 for z/OS User’s Guide
Inserted, deleted, and modified records are isolated in the difference report, but differing
bytes are not underscored.
If any option to TEXT processing is specified (except for TEXT=REPORT or TEXT=SCRIPT),
LINE is set to LINE=(80,ALPHA). This gives a difference report in character format, not the
hexadecimal dump format.
It is not necessary to specify an option (programming language). If the TEXT keyword is used
without an option, Comparex will squeeze out only those characters specified by the
SQUEEZE keyword, and it will compare the entire record (unless a FIELD is specified).
None of the DATA files synchronization keywords (KEY, KEY1, KEY2, and SEGMENT) can
be used with TEXT processing.
Keyword Format
TEXT[=[$]{ALC} ]
[ {BAL} ]
[ {C} ]
[ {CLIST} ]
[ {COBOL} ]
[ {FORTRAN}]
[ {HTML} ]
[ {JCL} ]
[ {NATURAL}] /* ADABAS Natural */
[ {PANEL} ]
[ {PASCAL} ]
[ {PL1} ]
[ {PL/1} ]
[ {PL/1} ]
[ {PL1} ]
[ {REPORT} ]
[ {REXX} ]
[ {RPG} ]
[ {SCRIPT} ]
[ {XML} ]
[ {.} ] <=== Whatever WILDCARD is set to
The options for the TEXT keyword are described in the following table.
Option Description
57
Chapter 3: TEXT Keywords
Option Description
COBOL Comparex will squeeze out spaces and commas. You can bypass
the squeezing out of commas if appropriate for your installation; see
the section on “Programmable Options” in the Install Guide.
Under the default, MODE=APPLICATIONS (displacement relative to
one), the utility will compare only on positions 7 through 72 of the
record.
If you specify MODE=SYSTEMS (displacement relative to zero), the
utility will compare only on positions 6 through 71.
The first apostrophe or quotation mark in any line of the COBOL
program will temporarily suspend the squeezing of blanks until the
next apostrophe or quotation mark is encountered, at which point
squeezing is reinstated.
58
Serena® Comparex® 8.7 for z/OS User’s Guide
Option Description
HTML Comparex will squeeze out spaces and x’05’ horizontal tab
characters.
LINE is set to (133,ALPHA); Comparex displays bytes in excess of
133 only if one or more of the excess bytes are not spaces.
If you do not enter an MLC keyword, MLC is set to 3.
59
Chapter 3: TEXT Keywords
Option Description
Wildcard (.) Comparex will read the first 40 records from file SYSUT1 and
determine what kind of TEXT compare should be run (this is not
foolproof, but most kinds of program source code can be
determined, and the appropriate FIELD deduced).
For example, if the first record in SYSUT1 starts with <?xml,then
Comparex will execute a TEXT=XML compare.
Note
will compare equal because all the subsection tags are present in
the other document even though their order is reversed.
Example:
<stuff></stuff> <stuff/>
will compare equal, as Comparex recognizes empty XML tags.
Note
60
Serena® Comparex® 8.7 for z/OS User’s Guide
Keyword Examples:
TEXT
TEXT=$COBOL
TEXT=($BAL)
TEXT=C
TEXT=.
TEXT=XML
61
Chapter 3: TEXT Keywords
62
DATA KEYWORDS
4
What you will find in this chapter:
• “DATA File Synchronization Keywords” on page 63
• “What Is DATA?” on page 64
• “What Is DATA Comparison Logic?” on page 64
• “DUMMY Files” on page 64
• “KEY Synchronization” on page 65
• “SEGMENT Synchronization” on page 67
• “Physical-Record-Number Synchronization” on page 71
• “Keywords Not Available with DATA” on page 73
• “Advantages of DATA” on page 73
• “Disadvantage of DATA” on page 74
• “Decisions About DATA and TEXT” on page 74
• “End-of-Job Counts” on page 74
• “DATA Keywords” on page 75
Comparex recognizes two categories of files (DATA and TEXT) and the utility has a
comparison logic routine for each. This chapter describes DATA files and the DATA
comparison logic routines; refer to “TEXT Keywords” on page 43 for information on TEXT
files and the TEXT comparison logic routines.
If TEXT is not specified, or if it has been nullified because of inconsistencies, Comparex uses
its DATA comparison logic routines to compare the two input files.
When Comparex performs DATA comparison logic, it cannot simultaneously perform TEXT
comparison logic in the same run. For this reason, the DATA keyword and the TEXT keyword
are mutually exclusive; you cannot enter them both in the same run. However, if both
keywords are entered in the same run, Comparex will use the last one on the file. DATA is the
default.
63
Chapter 4: DATA Keywords
KEY For KEY, specifies a control field to use for file 65, 75,
KEY1 synchronization. The field position, length, and 77
format are the same for both SYSUT1 and
KEY2 SYSUT2.
If field position, length, or format are different in
SYSUT1 and SYSUT2 files, then KEY1 and
KEY2 designate the field’s position, length, and
format in SYSUT1 and SYSUT2, respectively.
SEGMENT Specifies a control field if the input files are 77
databases.
WHAT IS DATA?
In Comparex, DATA is defined as any file where there is a known inter-record relationship.
DATA files have bytes and fields in fixed relationships on their records.
Examples of DATA files are system master files, system intermediate files, system
transaction files, load modules, and databases.
DUMMY FILES
If you specify SYSUT1=DUMMY or SYSUT2=DUMMY, these DATA compare routines are not
used. Instead, the input processing routines send the records from the non-DUMMY file
directly to the difference report. Records from SYSUT2 are sent to the print routines if
COPYDIFF has been specified; this can be used to create an unloaded copy of a database
file.
64
Serena® Comparex® 8.7 for z/OS User’s Guide
KEY SYNCHRONIZATION
If you specify one or more KEY keywords, Comparex uses KEY synchronization to pair
records to send to the compare routines. In addition, if no KEY was specified, and if the
SYSUT1 file organization uses a key (such as ISAM or VSAM-KSDS), Comparex will use the
file’s defined key as a default for synchronization.
KEYs are file control fields. Up to 40 KEYs (or KEY1 and KEY2 pairs) may be specified in
each Comparex run. The first KEY keyword specified is the most significant KEY on the file;
the last KEY keyword specified is the least significant KEY on the file.
An example of the use of KEYs would be for a customer file. The most significant KEY would
be for the customer number field; an intermediate KEY would be for invoice number; and the
least significant KEY would be for transaction date/time stamp. The KEY keywords could look
like this:
KEY=(3,7)
KEY=(11,4,P,D)
KEY=(31,6,,R)
The KEY synchronization processing is described in the following sections.
65
Chapter 4: DATA Keywords
Using Fields
If fields have been specified, or if fields have been compiled from MASK statements,
Comparex compares only the bytes defined by FIELD keywords.
66
Serena® Comparex® 8.7 for z/OS User’s Guide
• or if no fields have been specified, and the records do not compare equal,
• or if no fields have been specified, and one record is longer than the other record,
then Comparex sends both records to the difference report, showing the SYSUT1 record with
message CPX51I, and showing the SYSUT2 record with message CPX52I.
If COPYDIFF is in effect, Comparex sends the SYSUT2 record to the output processing
routines for writing to file SYSUT3.
SEGMENT SYNCHRONIZATION
If you specified one or more SEGMENT keywords and Comparex found no KEY keywords,
Comparex uses SEGMENT synchronization to pair records to send to the compare routines.
If both SEGMENT and KEY keywords have been specified, Comparex issues message
CPX18I and continues to process, using only the KEY keywords.
67
Chapter 4: DATA Keywords
Compare SEGMENTs are much like KEYs, except that the input files, with SEGMENTs, are
expected to be databases. The matching process is much the same, and the details are
repeated here.
SEGMENTs are file control fields. The first part of the information in the SEGMENT keyword
tells Comparex how to identify the SEGMENT by specifying a logical test. If a control field is
associated with the SEGMENT, it is identified in the second part of the SEGMENT keyword.
An example of the use of SEGMENTs would be for a customer database. The first
SEGMENT would define the customer header record, the second SEGMENT would be for
the invoice records associated with that customer, and the third SEGMENT would be for the
transactions associated with each invoice.
The SEGMENT keywords could resemble the following:
SEGMENT=(1,EQ,C'CUSTHDR',(R,9,5))
SEGMENT=(1,EQ,C'INVOICE',(D,14,4))
SEGMENT=(1,EQ,C'TRANS',(A,18,6))
68
Serena® Comparex® 8.7 for z/OS User’s Guide
Records Matched
If the compare routines find that a SEGMENT (and its control field, if any) on a record from
file SYSUT1 is equal to a SEGMENT on a record from file SYSUT2 (the pair has been sent
together to the compare routines, synchronized by SEGMENT), Comparex compares the
data values in the record.
Using Fields
If fields have been specified, or if fields have been compiled from MASK statements,
Comparex compares only the bytes defined by FIELD keywords.
69
Chapter 4: DATA Keywords
70
Serena® Comparex® 8.7 for z/OS User’s Guide
PHYSICAL-RECORD-NUMBER SYNCHRONIZATION
If you specified no KEY keywords and no SEGMENT keywords, and if the SYSUT1 file
organization is not ISAM or VSAM-KSDS, Comparex uses same-physical-record-number
synchronization to pair records to send to the compare routines.
This means that Comparex compares each SYSUT1 record with the same-numbered record
on SYSUT2. Record number 1 on SYSUT1 is compared to record number 1 on SYSUT2, and
record number 1001 on SYSUT1 is compared to record number 1001 on SYSUT2.
If one file is longer than the other, the extra records are sent to the print routines alone.
If filters have been specified with same-physical-record-number synchronization, Comparex
changes its procedure for sending records to the compare routines. Under same-physical-
record-number synchronization, Comparex sends pairs of records to the compare routines
unless one file is at end of file. If a record is filtered out, Comparex processes that records file
until the utility finds a record that is filtered in; then, it sends a pair of records to the compare
routines.
Messages CPX51I and CPX52I show the actual input sequence record number, not the
sequence number of records sent to the compare routines.
In the following example, if the two input files had ten records each, and if the filter keywords
filtered out records 2, 4, 6, 8, and 10 from SYSUT1, Comparex would send pairs of records to
the compare routines.
71
Chapter 4: DATA Keywords
Using Fields
If fields have been specified, or if fields have been compiled from MASK statements,
Comparex compares just the bytes defined by FIELD keywords.
72
Serena® Comparex® 8.7 for z/OS User’s Guide
ADVANTAGES OF DATA
DATA comparison logic has the advantages over TEXT comparison logic of being more
efficient (unless Random KEYs are specified), and of pointing out differences at the byte or
nibble level.
More Efficient
DATA comparison logic takes less CPU time than TEXT comparison logic because it does not
squeeze out characters, and unless Random KEYs are specified, it does not search through
buffer areas for matches, or move records around in buffer areas.
73
Chapter 4: DATA Keywords
DISADVANTAGE OF DATA
If there is no way to synchronize files, DATA comparison logic does not produce a useful
difference report.
For example, if a JCL file, with no sequence numbers and many insertions, was to be
compared to the previous version of that JCL file, DATA comparison logic could not match the
records in a way that would help you identify the changes.
END-OF-JOB COUNTS
At the end of the DATA comparison logic run, Comparex shows counts of its processing.
74
Serena® Comparex® 8.7 for z/OS User’s Guide
DATA KEYWORDS
The KEY, KEY1, KEY2, and SEGMENT keywords are used to direct the matching of records.
Keyword Format
KEY=(ddd,len[,C] [,A][,N=key_name])
[,Z] [,D]
[,P] [,R]
[,B]
[,UP]
[,UB]
75
Chapter 4: DATA Keywords
where:
Parameter Description
UP ; maximum length =
D Descending sequence.
R Random sequence.
If no KEY has been specified (or if all KEY statements have been incorrect), and if the file
organization for SYSUT1 uses a key (such as ISAM or VSAM-KSDS), Comparex will take
that key for synchronization.
If KEYs (or KEY1 and KEY2 pairs) are specified, SEGMENT keywords may not be specified.
You should not specify Zoned, Signed or Unsigned Packed, or Binary in keys unless there is
a logical reason to do so. The reasons for this are:
1. If you specify Zoned or Packed for a key that is not of that format, Comparex will abend
when attempting to compare it to its counterpart in the other file. To maintain speed, there
are no format consistency checks.
2. If a numeric (Z, P, B, UP or UB) specification is not made, the default is Character. These
comparisons (internally done as CLC) are faster and as accurate in determining
synchronism.
Keyword Examples
KEY=(3,19,N=IRS_DATA_SSN)
KEY=(21,3,P,A),KEY=(29,9) /* Multiple keys */
KEY=(000024,0003,B,D)
76
Serena® Comparex® 8.7 for z/OS User’s Guide
KEY1
KEY1 specifies a control field used for file synchronization, and to determine out-of-sync
conditions. The KEY1 keyword is used to show the relative position, length, and format of the
field on SYSUT1, and the KEY2 keyword is used to show its counterpart on SYSUT2. The
KEY2 usually follows the KEY1 keyword. If Comparex cannot find a paired KEY2, it changes
the KEY1 to a key.
In all other respects, KEY1 is like KEY.
Keyword Format
Same syntax as KEY.
Keyword Examples
KEY1=(3,19,N=IRS_DATA_SSN)
KEY1=(21,3,P,A)
KEY1=(000024,0003,B,D)
KEY2
KEY2 specifies a control field used for file synchronization, and to determine out-of-sync
conditions. The key may differ in displacement, length, and format versus its associated
KEY1. See KEY1 for further information about the KEY2 keyword.
Keyword Format
Same syntax as KEY.
Keyword Examples
KEY1=(3,19),KEY2=5
KEY1=(21,3,P,A),KEY2=(45,3,P)
KEY1=(3,19,N=IRS_DATA_SSN),KEY2=(7,19,N=IRS_SSN_MOVED)
KEY1=(000024,0003,B,D),KEY2=(2,4,B)
SEGMENT
Specifies a control field if the input files are databases. The KEY keywords (and KEY1 and
KEY2 pairs) are generally not used if Comparex is to process databases.
Keyword Format
SEGMENT=(ddd,EQ,t'vvvv'[,({A},ddd,len)])
(or SEG) {D}
{R}
77
Chapter 4: DATA Keywords
If a SEGMENT keyword is specified, KEY keywords may not be specified. The order of the
SEGMENT keywords tells Comparex about the hierarchical structure of the database. The
first SEGMENT keyword describes the highest ranking segment type. For example, on a
payroll database, the highest ranking segment type might be for employee identification data,
and the control field on this segment might be employee number.
The next SEGMENT keyword describes the second highest ranking segment type. For
example, on a payroll database, the second highest ranking segment type might be for
departmental information, with each employee having one or more departments that he or
she reports time to.
Then, the last SEGMENT keyword describes the lowest ranking segment type. For example,
on a payroll database, the lowest ranking segment type might be for the weekly time card
information.
The three SEGMENT keywords for this payroll example could be entered in this order:
SEGMENT=(1,EQ,C'EMPL')
SEGMENT=(1,EQ,C'DEPT')
SEG=(1,EQ,C'TIME',(D,50,3))
The first part of the variable information in the keyword (ddd,EQ,t‘vvvv’) tells Comparex how
to identify a segment type.
The second part of the variable information in the keyword (A, D, or R, and ddd,len) is
optional; it specifies the control field that is associated with the segment type. In this second
part, A (default) specifies ascending, D specifies descending, and R specifies random.
Comparex provides a table area of 6000 bytes for SEGMENT keywords. Each SEGMENT
keyword requires thirteen bytes, plus the length of the value in the first part of the variable
information (double if a wildcard is used).
If a control field is also specified, add four more bytes.
If the type of the value is character, each byte of the value between the apostrophes takes up
one byte of the table; if the type of the value is hexadecimal, each byte of the value between
the apostrophes takes up one half-byte of the table (an odd number of bytes is rounded up).
For example:
SEGMENT=(1,EQ,C'SEG01',(A,71,3))
SEG=(1,EQ,C'CHILDREN')
uses 43 of the table’s 6000 bytes (13 for each of the two SEGMENT keywords, 4 for the
control field, 5 and 8 respectively for the SEGMENT identifiers).
78
Serena® Comparex® 8.7 for z/OS User’s Guide
The following illustration shows the hierarchical structure of two databases with three
segment types. A reorganizational unload of each of them would result in a similar flat file,
reading top to bottom and left to right. However, the concatenated key for the STEMS
segment would be different.
ROOT
ROOT
APPLES
APPLES STEMS
STEMS
If the database is in a hierarchical structure in which ROOT has an ascending control field,
APPLES has no control field, and STEMS has a random control field, then these statements:
SEG=(1,EQ,C'ROOT',(A,09,5))
SEGMENT=(1,EQ,C'APPLES')
SEG=(1,EQ,C'STEMS',(R,68,4))
79
Chapter 4: DATA Keywords
80
INPUT PROCESSING
KEYWORDS 5
The input processing routines set up the non-default parameters for the execution (based on
the keywords). They open the SYSUT1, SYSUT2, and possibly the SYSUT3 or SYSUT3x
files. They read the input file records, select records to send to the comparison routines, and
they pair records for comparison.
What you will find in this chapter:
• “List of Keywords” on page 81
• “Comparex Keyword Input” on page 84
• “SYSUT1, SYSUT2, and SYSUT3 or SYSUT3x Opened” on page 85
• “SYSUT1 and SYSUT2 Read” on page 86
• “Selecting Records for Comparison” on page 87
• “Pairing Records for Comparison” on page 90
• “Keywords for Input Processing” on page 93
LIST OF KEYWORDS
Keywords Descriptions Pages
DATA Signifies that records are formatted, and that fields may 96
have different data formats.
Compare type: Data
81
Chapter 5: Input Processing Keywords
DESEN Identifies both the record fields that should not be printed 99, 100
or displayed, and the text that will be overlaid in the
DESEN1
corresponding output field.
DESEN2
For DESEN, the desensitizing parameters for SYSUT1
and SYSUT2 are the same. If the desensitizing
parameters are different for SYSUT1 and SYSUT2,
DESEN1 and DESEN2 specify the desensitizing
parameters for SYSUT1 and SYSUT2, respectively.
Compare type: Data
DIRECTORY Specifies that Comparex will compare only the directory 100
entries for the type of library specified.
Compare type: Directory
FILTEROUT / FOUT Specifies which records will be excluded from comparison 110
processing. The record being processed must pass all
FILTEROUT specifications to be excluded from further
processing. (AND logic)
Compare types: Data, Text, Directory
82
Serena® Comparex® 8.7 for z/OS User’s Guide
IDENTITY Identifies a record type on SYSUT1 that activates the 92, 111
processing of the FIELD and MASK statements that
follow the IDENTITY. These FIELD and MASK statements
are in effect until the next IDENTITY is encountered.
Compare type: Data
83
Chapter 5: Input Processing Keywords
WILDCARD Specifies the character used to indicate that any value 122
passes the logical test in FILTER, IDENTITY, and
SEGMENT keywords.
Compare types: Data, Text, Directory
Comments
If a SYSIN record has an asterisk in the first position, Comparex considers the entire record
to be a comment, and it does not search for keywords on that record. Comparex prints the
record on SYSPRINT, to the right of message number CPX00I. Additional comments may be
placed to the right of legitimate keywords by starting them with a slash-asterisk or double
slash. Everything to the right of the slash-asterisk delimiter is considered a comment. For
example:
* This is a comment
MAXDIFF=10,CONTINUE /* This is also a comment */
HELP
If a SYSIN record contains the HELP keyword, Comparex prints the HELP canned response.
84
Serena® Comparex® 8.7 for z/OS User’s Guide
Incorrect Keywords
Comparex examines each SYSIN record for the correctness of keywords. If Comparex finds
an incorrect keyword or an incorrect parameter, the utility prints the SYSIN record on
SYSPRINT, to the right of message number CPX00I, and Comparex underscores the
incorrect characters and prints the literal ERROR? on the right.
Correct Keywords
If Comparex finds a correct keyword with its associated parameters, the utility prints the
SYSIN record on SYSPRINT, to the right of message number CPX00I, but Comparex does
not underscore any characters. It uses these correct keywords to modify its default
processing parameters.
Note
If you specify PAN, LIB, or OTH in the SYSUT1 or SYSUT2 keywords, then the
Comparex interface (CPXIFACE) handles opening, searching, reading, and
closing those files. The DDNAME used is dependent on the file type, and can be
overridden by the DDNAME subkeyword of SYSUT1 and SYSUT2.
85
Chapter 5: Input Processing Keywords
For HFS files, long file names are supported for a total path length up to 256 bytes in JCL. An
HFS file name must be preceded by an initial slash and must be specified relative to the root
directory.
1. If SYSUT1=DUMMY has not been specified, or if the JCL does not point to a null file,
Comparex opens SYSUT1. If the open is not successful, Comparex terminates with a
condition code of 16. After file SYSUT1 has been successfully opened, Comparex issues
message CPX21I to show the data set name and the data set attributes.
2. If SYSUT2=DUMMY has not been specified, or if the JCL does not point to a null file,
Comparex opens SYSUT2. If the open is not successful, Comparex processes as a print
utility, printing onto SYSPRINT any SYSUT1 record that passes filtering tests. After file
SYSUT2 has been successfully opened, Comparex issues message CPX22I to show the
data set name and the data set attributes.
3. If SYSUT1=DUMMY and SYSUT2=DUMMY have both been specified, Comparex issues
its end-of-processing messages and terminates.
SYSUT3 Opened
If COPYDIFF or COPYSAME was specified, the utility opens output file SYSUT3 and
Comparex issues message CPX16I to show the data set attributes.
SYSUT3x Opened
If COPYSPLIT was specified, the utility opens the SYSUT3x output files. Comparex issues
message CPX16I for each SYSUT3x file to show the data set attributes.
86
Serena® Comparex® 8.7 for z/OS User’s Guide
STOPAFT
Comparex uses the value of the STOPAFT keyword to determine the maximum number of
records to be read from either file. The default value is STOPAFT=999999999999 (effectively,
infinity).
CONTINUE
If MAXDIFF was specified and the number of differences specified by that keyword have
been displayed on the difference report, then Comparex prints message CPX67I and it writes
no more input records on the difference report. If CONTINUE was specified, the utility prints a
second line with message CPX67I to say that Comparex will continue without printing.
If CONTINUE was not specified, the utility issues message CPX67I, then issues its end-of-
job counts and closes its files.
If CONTINUE was specified, Comparex continues to read files, selects records for
comparison, compares records, and writes any SYSUT3 file. The end-of-job counters show
the total input count and the total number of differences found.
To see how many differences are found without seeing the records, you could specify:
/* Job to See Statistics Only */
MAXDIFF=0,CONTINUE
Displacement
Comparex uses FIELD, FILTER, IDENTITY, MASK, KEY, and SEGMENT keywords to
process input. These keywords contain displacement values. These displacement values tell
Comparex where the data on each keyword starts in the record.
Some users like to think that the first position of any record is position 1; other users like to
think that the first position of any record is position 0. Comparex defaults to assume that the
first position of each record is position 1 (MODE=APPLICATION).
If you call the first position of each record position 0, change the MODE by entering
MODE=SYSTEMS. If you enter the MODE=SYSTEMS keyword, Comparex will process all
displacements on other keywords as if the first position of each record is position 0.
If you specify MODE=SYSTEMS for variable-length records, then position 0 is the first byte of
the Record Descriptor Word (RDW).
87
Chapter 5: Input Processing Keywords
Keywords
The filtering keywords are FILTERIN, FILTEROUT, FILTORIN, and FILTOROUT. Each
filtering keyword has an abbreviated version:
FILTERIN FIN
FILTEROUT FOUT
FILTORIN FORIN
FILTOROUT FOROUT
You may enter either the full spelling of the keyword or its abbreviation. In the description that
follows, only the full spelling of the keyword is used.
Note
The filtering functions may not be used with Unicode character encoding.
Form of Keywords
All filtering keywords take the form:
keywordname=([{MEMBER,}]d1[-d2],op,t'vvvv')
[{M,} ]
[{CSECT,} ]
where keywordname is FILTERIN, FILTEROUT, FILTORIN, or FILTOROUT.
If the filter is to include or exclude certain members of a directory-embedded data set such as
a PDS, the MEMBER (or M option) is used.
d1 is the displacement, relative to one or zero, of the first (left-most) position of the field on
which Comparex is to perform the logical test. If MODE=SYSTEMS is specified, the
displacement is relative to zero.
A range may be specified on the displacement by specifying a dash and a second
displacement (d1-d2). Any value that starts in this inclusive range satisfies (passes) the filter
criteria.
op is the operation to be performed with the test. The values for op are:
LT - less than
LE - less than or equal
EQ - equal
NE - not equal
GE - greater than or equal
GT - greater than
t is the type for value vvvv.
If t is C, vvvv represents alphanumeric characters, where each position of vvvv
represents one byte. The value may be any character.
88
Serena® Comparex® 8.7 for z/OS User’s Guide
If t is X, vvvv represents hexadecimal values, where two positions of vvvv represent one
byte. The value may be composed of numeric values, and the letters A through F.
vvvv is the value to be tested.
The WILDCARD value can be used in any positions of the value to be tested to indicate that
any input data in those positions passes the filter test.
When skipping records, any filtering that was requested is temporarily turned off. In effect,
any records that would have gotten filtered out, count towards the skip count.
Inclusive Keywords
The two inclusive filtering keywords are FILTERIN and FILTORIN. The two inclusive
keywords end in the letters ‘IN’. These keywords direct Comparex to include the record that
passes the test in further tests or in further processing.
AND Logic
The inclusive filter that uses AND logic is FILTERIN. AND logic is defined as one or more
tests where the data being tested must pass all such tests to be eligible for further
processing. Comparex converts the last filter keyword to an AND logic filter.
OR Logic
The inclusive filter that uses OR logic is FILTORIN. OR logic is defined as one or more tests
where the data being tested must pass at least one test to be eligible for further processing.
Exclusive Keywords
The two exclusive filtering keywords are FILTEROUT and FILTOROUT. The two exclusive
keywords end in the letters OUT. These keywords direct Comparex to exclude the record that
passes the test from further processing.
AND Logic
The exclusive filter that uses AND logic is FILTEROUT. AND logic is defined as one or more
tests where the data being tested must pass all such tests to be excluded from further
processing.
OR Logic
The exclusive filter that uses OR logic is FILTOROUT. OR logic is defined as one or more
tests where the data being tested must pass at least one test to be excluded from further
processing.
89
Chapter 5: Input Processing Keywords
90
Serena® Comparex® 8.7 for z/OS User’s Guide
Differences are underscored, CSECT name to CSECT name. Date and time stamps are
underscored, as well as uninitialized data areas (DS versus DC). CSECTs that are
different because of different source code will be dramatically different, but CSECTs that
are the same such as transient modules (COBOL has a lot of ILBOxxxx modules) will
show as identical.
TEXT
If TEXT processing is being done, the input processing routines do not pair records for
comparison. Instead, the TEXT processing routines synchronize records based on record-to-
record compares. For information about TEXT processing, see “DATA File Synchronization
Keywords” on page 63.
FIELD
You can specify that Comparex compare only certain positions of the records. If fields are
used, Comparex does not compare on the positions of the record that are not specified by
FIELD keywords. If fields and MASKs are not used, Comparex compares on all positions of
the record. Under TEXT processing, only one FIELD keyword may be specified. See“TEXT
Processing Keywords” on page 44 for more information about specifying a field with TEXT.
If the positions to be compared are in the same places on both input records, the FIELD
keyword is used. If the positions to be compared are in different displacements, or the field
lengths differ, or the field types differ, then the FIELD1 and FIELD2 keywords are used. For
example:
/* JOB to Compare on Certain Fields */
MAXDIFF=100,CONTINUE /* Set MAXimum DIFFerences */
FIELD=(1,10) /* Compare bytes 1 thru 10 */
FIELD1=(20,7,P),FIELD2=(27,4,B) /* Compare Packed to Binary */
FIELD1=(40,8,Z),FIELD2=(31,5,P) /* Compare Zoned to Packed */
91
Chapter 5: Input Processing Keywords
MASK
You may specify that Comparex ignore certain positions of the records when comparing. If
MASKs are used, Comparex does not compare on the positions of the records specified by
the MASK keywords. If the positions to be ignored are in the same places on both input
records, the MASK keyword is used. If the positions to be ignored are in different places on
the two input records, MASK1 and MASK2 pairs of keywords are used.
Comparex creates fields from MASKs. This means that if you entered only a MASK
specifying that positions 17 through 20 were to be ignored, then
MASK=(17,4)
would generate:
FIELD=(1,16,C)
FIELD=(21,END)
If one or more MASK keywords generate only one field, it may be used with TEXT
processing.
IDENTITY
You may specify that Comparex compare different fields on different record types. The
IDENTITY keyword specifies a logical test, to be made on the record from file SYSUT1, that
identifies the record type; the FIELD and MASK keywords that come after that IDENTITY
keyword and before the next IDENTITY keyword are used to process any record that passes
the IDENTITY test.
Note
The IDENTITY function may not be used with Unicode character encoding.
The WILDCARD value may be used in any position of the value to be tested to indicate that
any input data in those positions passes the IDENTITY test.
Here is a simple example. The customer file has two record types; if position 8 is C, the
record type is a customer header record. If position 8 is I, the record type is a customer
invoice record. The keywords might look like the following:
92
Serena® Comparex® 8.7 for z/OS User’s Guide
The sample job would test the record from file SYSUT1 for the two record types, and if a
customer header were found, Comparex would compare only on positions 1 through 3, 13
through 59, 72 through 80, and 84 through the end of the record. Then, if a customer invoice
record were found, Comparex would compare only on positions 1 through 7, 22 through 29,
72 through 80, and 84 through the end of the record. If some record were found that passed
neither of the IDENTITY tests (a customer payment record, perhaps, with P in position 8),
Comparex would compare on all positions of that record.
If at least one IDENTITY is specified, Comparex generates a final IDENTITY with message
CPX12I to show that all records that do not pass the user’s IDENTITY tests will be handled
like this:
IDENTITY=(CATCH-ALL)
FIELD=(1,END)
Under TEXT processing, no IDENTITY statement may be used. If a record from file SYSUT2
is selected to be printed on the difference report, the sequence number from message
CPX12I for any IDENTITY associated with the record is shown with the record, to the right of
message number CPX52I.
93
Chapter 5: Input Processing Keywords
Comparex uses IBM’s OS-internal character translation support and therefore works with any
character encoding supported by z/OS. Common character encoding CCSIDs are:
IBM
Character Encoding Description
CCSID
EBCDIC - English and Portuguese with dollar and euro currency symbols 01140
UNICODE - UTF-16 Big Endian with IBM mainframe special characters 01200
UNICODE - UTF-16 Little Endian with IBM mainframe special characters 01202
The values in the table are provides for customer convenience only. It is the user’s
responsibility to choose the correct CCSIDs for their installation.
94
Serena® Comparex® 8.7 for z/OS User’s Guide
CONTINUE
Lets you continue processing beyond the limit set in MAXDIFF. The input files are read, the
input processing keywords operate on the input, the files are compared according to the
instructions in the DATA files synchronization keywords, any SYSUT3 file continues to be
written, and records are counted for the end-of-job statistics line. The difference report shows
only the number of differences specified by the MAXDIFF keyword, but the end-of-job
statistics line shows the total number of records on the input files and the total number of
differences.
Keyword Examples
CONTINUE
CONTINUE=NO
CONTINUE=(YES)
CPXEXIT
Specifies the load module name for the Comparex exit. Sample source code for this exit is
provided. If this exit is invoked, the field EXT$RC contains an exit number and gives the
reason for the call:
• If 1, a SYSUT1 record has just been read - the exit may inspect the record and build a
“formatted fragment” of up to 64 bytes which will be printed with the next DATA record or
TEXT frame printed.
If this is a TEXT compare, the formatted fragment is displayed in the top framing line of
any difference report. For example,
++++++|+++.++++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7++++.
D 002100 02 ONLY-REST-OF-REC PIC X(100). 00002100 DIF O N E 21
------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7---
I 002100 02 ONLY-REST-OF-REC. 00002100 DIF T W O 21
++++++|+++.++++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7++++.
If this is a DATA compare, the formatted fragment is displayed in message CPX51I which
details the record that follows. For example:
95
Chapter 5: Input Processing Keywords
A Comparex exit coded with the initial EXT$RC test will not run on Comparex 8.2 and
earlier, however, Comparex 8.3 will run with either style of exit. If Comparex 8.3 calls the
new style exit, EXT$RC will always be 1.
See associated messages CPX28I and CPX51I in Chapter 11.
CPXIFACE
Keyword Format
CPXIFACE=xxxxxxxx
CPXIFACE1=xxxxxxxx
CPXIFACE2=xxxxxxxx
Specifies the load module name for the Comparex interface. The source code for this exit
module is provided. Unless otherwise specified by this keyword the default is
CPXIFACE=CPXIFACE. See “CPXIFACE Integration with External Data Managers” on page
213 for a description of what interfaces have been developed.
The alternate forms (CPXIFACE1 and CPXIFACE2) are used if it is desired to have separate
modules for SYSUT1 and SYSUT2. The most common time for this is when comparing two
different interfaces, each of which is generated under the &OTH global variable.
Keyword Examples
CPXIFACE=CPXIFACE
CPXIFACE=USEREXIT
CPXIFACE1=CPXADABS,CPXIFACE2=CPXRAMIS
DATA
Keyword Format
DATA[=CSECT[,ADCON={YES}]]
{NO}
Specifies that the files have an inter-record relationship and that they are not TEXT. A master
file would be an example of a DATA file. DATA is the default. DATA file comparison logic can
involve same-physical-record-number synchronization (a record is compared to the same
numbered record on the other input file), KEY, or SEGMENT synchronization (see “DATA File
Synchronization Keywords” on page 63 for more information).
With DATA logic, Comparex can highlight differences at the byte or nibble (half-byte) level. In
addition, the synchronization logic is more efficient than with TEXT processing, unless
Random KEYs (or SEGMENTs) have been specified.
Comparex can compare load modules (RECFM=U) in two ways:
• As straight DATA
• CSECT Parsing (DATA=CSECT)
96
Serena® Comparex® 8.7 for z/OS User’s Guide
If a load module from one library is copied to another library and then the two load modules
are compared, they are equal. However, if identical source code is compiled and link-edited
into one library, and the same process is done into another library before comparison, there
will be differences.
In most cases, the differences will be in a few IDR records, any date/time stamp that the
compiler puts in, and any uninitialized data areas. However, if the block sizes of the two
libraries are different, or if the order of CSECTs link edited in are different, major differences
are noted.
CSECT parsing can be invoked by specifying:
DATA=CSECT
Once invoked, CSECT parsing logic extracts information about the load module from the
ESD (External Symbol Dictionary) entries on the front of the load module, and determines
where each subsequent CSECT starts and ends. The IDR (IDentification Records) are
ignored, and only full text blocks are buffered.
The normal default buffer size is 60K for TEXT processing or DATA with random keys. For
CSECT parsing, the default BUFFer size is 256K. You may override it larger or smaller, but
you should not lower this from 256K. You should make BUFF go as large as possible
(perhaps BUFF=1024). Differences are underscored, CSECT name to CSECT name.
Date and time stamps are underscored as well as uninitialized data areas (DS versus DC).
CSECTs that are different because of different source code will be dramatically different, but
CSECTs that are the same such as transient modules (COBOL has a lot of ILBOxxxx
modules) will show as identical.
If one CSECT changed slightly, it sometimes happens that the V-type address (ADCON)
constants are all that change in the rest of the CSECTs. You may or may not be interested in
seeing the differences in the address constants.
You can specify:
DATA=(CSECT,ADCON=NO)
to have each address constant (A-type and V-type) nullified to binary zeroes before any
comparison is done. The default is ADCON=YES, implying that address constants are to be
left alone. ADCON=NO should result in a shorter difference report.
If the load module has been link-edited with the scatter attribute (PARM= ‘SCTR’), Comparex
cannot parse the CSECTs at all. Generally, this is only used in the z/OS Nucleus or some
special load modules such as assembled IMS MFS modules.
Likewise, Comparex cannot parse a load module that has been link-edited with the Overlay
attribute (PARM=‘OVLY’).
97
Chapter 5: Input Processing Keywords
Large load modules can be compared. The dynamic area set aside for the External Symbol
Dictionary (ESD entries) is 128K. This translates into the ability to compare load modules
comprised of 4095 CSECTs each.
If a CSECT name is blank, it is tagged with the literal *SPACES* and compared. The
following illustration shows two load modules, each with member name ‘MEMBER1’.
SYSUT1 SYSUT2
PDS1 PDS2
(Member (Member 1)
CSECT10 CSECT10
(identical) (identical)
CSECT20 CSECT20
(shorter) (longer)
CSECT30 CSECT25
(identical) (inserted)
CSECT40 CSECT30
(inserted) (identical)
The following example shows execution JCL and keywords to compare the two load
modules.
98
Serena® Comparex® 8.7 for z/OS User’s Guide
The following example shows a sample difference report when comparing MEMBER1 in the
two PDSs with these JCL and keywords.
CPX51I - CSECT=CSECT20
CPX52I - CSECT=CSECT20
DESEN
Keyword Format
DESEN=(ddd,t'vvvv'[,N=desen_name])
Specifies that Comparex is to desensitize (clobber) a portion of both records (SYSUT1 and
SYSUT2). The displacement of the field is given in ddd and the length of the field is what it
takes to contain t‘vvvv’. For example, C‘ABCD’ is four bytes, while X‘ABCD’ is two bytes.
Specifying a name for the field (N=desen_name) is optional. The maximum length for
desen_name is 32 bytes.
Note
The DESEN function may not be used with Unicode character encoding.
99
Chapter 5: Input Processing Keywords
If IDENTITYs are present, the desensitizer can be under it along with FIELDs and MASKs.
The order of invocation is the order specified. If you want certain fields to be desensitized
before comparing (and, hence, displaying the inequalities) then they must be specified
chronologically ahead of the fields.
For an example of how DESEN (DESEN1 and DESEN2 also) fit into the IDENTITY, FIELD,
and MASK picture, see “IDENTITY, FIELD, MASK, and DESEN Messages” on page 113.
Keyword Examples
DESEN=(12,C'FORMER NAME FIELD ',N=DDA.SENSITIVE.NAME)
DESEN=(0042,X'0000000C')
DESEN1
Keyword Format
Same syntax as DESEN.
DESEN2
Keyword Format
Same syntax as DESEN.
Specifies that Comparex is to desensitize (clobber) a portion of a record on SYSUT2. In
general, it is used if displacements differ between like data in the two files. In all other
respects, it is the same as DESEN. DESEN2 can be used without a corresponding DESEN1.
Keyword Examples
DESEN1=(12,C'FORMER NAME FIELD ',N=PAY.SYSTEM.90Q1)
DESEN2=(14,C'FORMER NAME FIELD ',N=PAY.SYSTEM.90Q4)
DESEN2=(0042,X'0000000C')
DIRECTORY
Keyword Format
DIRECTORY[={USER}]
(or DIR) [ {HFS} ]
[ {LOAD}]
[ {PDF} ]
100
Serena® Comparex® 8.7 for z/OS User’s Guide
[ {SPF} ]
Specifies that Comparex is to read and compare only the directories of the following types of
files in any combination:
• Partitioned Data Sets (PDSs or PDSEs)
• z/OS Unix Hierarchical File System (HFS) files
• CA-Panvalet masters through CPXIFACE interface
• CA-Librarian masters through CPXIFACE interface
• GEM masters through CPXIFACE interface
• OTHER proprietary masters through CPXIFACE interface
It is not necessary to specify an option to DIRECTORY. If no option is specified, Comparex
processes only the member name. It will indicate an ALIAS if appropriate, but no other data is
used.
If DIRECTORY=USER is specified, Comparex will compare the user data in like-named
members. It is displayed in hexadecimal format on the difference report.
If DIRECTORY=SPF is specified, the user data is compared as in DIRECTORY=USER, but it
is displayed on the difference report under special headings with proper formats. This
happens only if Partitioned data sets that were created and maintained by TSO/SPF or ISPF/
PDF if STATS are on are involved, or if simulated by the Comparex interface in retrieving
Panvalet, Librarian, or GEM members.
If DIRECTORY=PDF is specified, Comparex formats exactly as with DIRECTORY=SPF,
except that the dates (created and last modified) are presented in Gregorian order
(yyyymmdd) instead of Julian. If IBM changes the PDF format in the future, this option will
provide different headings and formats on the difference report.
If DIRECTORY=HFS is specified:
• Comparex looks for z/OS Unix-formated directories on which to perform the comparison.
At least one input file must be identified as HFS files using the FILE=HFS subkeyword,
and a complete path to the top-level directories to be compared must be identified using
the PATH subkeyword.
• An optional EXPAND keyword may be added to SYSIN to specify that all HFS
subdirectories within the named directories should be expanded recursively and their
catalog information be included in the comparison.
• HFS directories may be compared against each other or against PDS libraries.
If DIRECTORY=LOAD is specified:
• Comparex assumes that load module libraries are being processed and produces
headings accordingly. See “DIRECTORY Compare in LOAD Format” on page 103.
• If a load module has the TEST attribute on, the Link Date will be displayed as question
marks.
101
Chapter 5: Input Processing Keywords
When comparing two directory-embedded data sets, the difference report can be large. Some
of the ways to trim it down, unless of course you want to see it all, are to:
• Filter (in or out) by member (generic) name
• Set MAXDIFF lower
• Set STOPAFT lower.
Sometimes you are only interested in finding out what member names match between two
libraries or, conversely, finding out what members do not match on member name. The
PRINT keyword logic applies to member names for displaying. In all cases, PRINT=FULL is
the only way of displaying member names that match in name and are also identical in
directory data.
In the following example, two libraries (LIB1 and LIB2) have as members:
LIB1 LIB2
A A
B
C C
D
E E
If a DIRECTORY compare were made of these two libraries, with PRINT=FULL, the report
would resemble this:
A O N E 1
B DIF O N E 2
C O N E 3
D DIF T W O 3
E O N E 4
If PRINT=NOMATCH (or leaving off PRINT=FULL) was specified, the report would resemble
this:
B DIF O N E 2
D DIF T W O 3
If PRINT=NOMISMATCH and PRINT=FULL was specified, the report would resemble this:
A O N E 1
C O N E 3
E O N E 4
The sub-keyword options to DIRECTORY such as USER, SPF, and PDF would alter the
display, particularly if there are differences in the DIRECTORY data.
102
Serena® Comparex® 8.7 for z/OS User’s Guide
Keyword Examples
DIRECTORY=(PDF)
DIR=SPF
or (DIR)
You should use DIR=PDF when comparing libraries for directory entries. Below is an
example of a DIRECTORY compare in PDF format with PRINT=FULL.
NAME VV.MM CREATED LAST MODIFIED SIZE INIT MOD ID
CDF$ISPF 21.00 20050617 20050617 15:47 5639 5639 0 SERENA DIFT W O 1
CDF$SPF3 01.11 20050725 20050903 13:17 6847 6824 0 USERID DIFT W O 2
CDFBATCH 21.01 20050617 20050730 04:50 3308 3307 0 USERID DIFT W O 3
CDFBILD2 21.01 20050617 20050626 12:13 12993 12992 0 USERID DIFT W O 4
CDFBILD3 01.01 20050905 20050905 10:11 14115 14109 0 USERID DIFT W O 5
CDFBUILD 21.00 20050617 20050617 15:47 12926 12926 0 SERENA DIFT W O 6
CDFPANEL 21.00 20050617 20050617 15:47 8696 8696 0 SERENA DIFT W O 7
CDFPANL3 21.02 20050617 20050724 13:27 8694 8696 0 USERID DIFT W O 8
CDFSPY 21.00 20050617 20050617 15:47 14 14 0 SERENA DIFT W O 9
HPSSTART 01.01 20050122 20050122 14:14 163 163 0 USERID O N E 1
HPSSTART 21.00 20050617 20050617 15:47 163 163 0 SERENA T W O 10
- - --- --- - -- ------ -DIFFERENCE+
PDSTOOLS 01.07 20050518 20050529 13:26 611 580 0 USERID O N E 2
PDSTOOLS 21.00 20050617 20050617 15:47 610 610 0 SERENA T W O 11
- - - - --- - -- - -- ------ -DIFFERENCE+
SERALLOC 01.04 20050122 20050502 11:57 539 533 0 USERID O N E 3
SERALLOC 21.00 20050617 20050617 15:47 539 539 0 SERENA T W O 12
- - --- --- - - - ------ -DIFFERENCE+
SERBSAM 01.07 20050122 20050502 11:56 2845 2827 0 USERID O N E 4
SERBSAM 21.00 20050617 20050617 15:47 2845 2845 0 SERENA T W O 13
- - --- --- - -- -- ------ -DIFFERENCE+
Note the headings (VV.MM, CREATED, SIZE), which give information about the member,
such as when it was created, time stamp, size, and responsible party. Dates are in the
yyyymmdd style for Year 2000 and beyond. Not every member contains PDF-formatted
information; and for those, the information is missing. With those interfaces (SYSUT1=PAN)
that support member searches, the PDF format is simulated such that this report is possible.
END
Keyword Format
END=(ddd,op,t'vvvv')
103
Chapter 5: Input Processing Keywords
Identifies a record on either SYSUT1 or SYSUT2 such that if the condition is satisfied,
processing terminates. It is applicable to both DATA and TEXT, but is probably more useful
with DATA.
ddd is the displacement, relative to one, of the first position (leftmost or high-order) of the field
on which Comparex is to perform the logical test. If MODE=SYSTEMS is specified, the
displacement is relative to zero.
Values of op are:
LT - less than
LE - less than or equal
EQ - equal
NE - not equal
GE - greater than or equal
GT - greater than
Messages CPX14I and CPX69I in Chapter 11 are applicable to this keyword.
Keyword Examples
END=(7,EQ,C'ZANZIBAR')
END=(098,GE,X'0092001C')
Keyword Format
FIELD=(ddd,{len}[{,C}][/dateformat][,N=field_name])
{END} [{,Z}]
[{,P}]
104
Serena® Comparex® 8.7 for z/OS User’s Guide
[{,B}]
[{,UP}]
[{,UB}]
Note
To successfully compare an unpacked numeric field to a packed numeric field,
you must specify the unpacked field as Zoned instead of Character; otherwise,
Comparex will underscore the field as different even though the values resolve to
be equal.
If fields are considered numeric, all bytes of unequal fields will be underscored. Specifying a
date format is optional. It can be used with different displacements (FIELD1/FIELD2) and
disparate formatting (character, zoned, and signed or unsigned packed, and binary). The
purpose of the date format is to account for date fields that may have different formats yet
contents which are considered to be the same. See below for an example of how to use the
date format.
Specifying a name for the field (N=field_name) is optional. It is usually associated with
specifying FORMAT=FIELD. The maximum length for field_name is 32 bytes.
Keyword Examples
FIELD=(3,END)
FIELD=(12,4,P),FIELD=(61,END) /* Multiple fields */
FIELD=(0999,15,Z)
FIELD=(15,00032,C,N=DDA-BILLING-NAME-L1)
FIELD=(64,4,B,N='INTEREST.BEARING.PERCENTAGE')
105
Chapter 5: Input Processing Keywords
Consider that you have two fields of packed data. FIELD1 contains a packed date field that is
not Year 2000 compliant. The data resembles this:
00711
0900C
FIELD2 contains a packed date field that is Year 2000 compliant. The data resembles this:
09711
1900C
In a Comparex comparison without using the date format, the first two bytes would compare
differently, even though the dates may, in effect, contain the same logical value. All five bytes
are underscored, however, if a FIELD keyword specifying Packed data format is used.
By using:
FIELD1=(1,5,P/YYMMDD)
FIELD2=(1,5,P/CCYYMMDD)
Comparex is made aware that FIELD2 contains a century and will ignore the century value if
FIELD1 does not contain one. In this case, the two values specified above will compare
equally.
Gregorian Dates
Without Separators With Separators (Note 1)
Julian Dates
106
Serena® Comparex® 8.7 for z/OS User’s Guide
Note 1. The separator slash (/) may be written in the FIELD keyword as dash (-) or period
(.) instead; in the data this position is simply ignored.
Note 2. mmm refers to an alphabetic month (such as JAN or FEB) which may be written
as MON instead. The field must be specified as a character field.
Note 3. yyyy may be written as ccyy instead.
Note 4. Y2K compliant date. Comparex can successfully compare Y2K dates, non-Y2K
dates, and mixed format dates.
Note 5. yyy can be written as cyy instead.
Note 6. This is the format used by many IBM products; numbers 000-099 are years 1900-
1999, numbers 100-199 are years 2000-2099, and so on.
Note 7. Year/month dates have no days and will compare equal to any date in any format
in that month.
Note 8. Year-only dates have no months or days, and will compare equal to any date in
any format in that year.
Alphabetic-month to numeric-date compares are now supported for French, German, Italian,
and Spanish by use of a zap available from Technical Support. It is also possible to support
alphabetic-month to alphabetic-month compares in one supported language for SYSUT1 and
another language for SYSUT2. Contact Technical Support for details.
The unmodified product now compares alphabetic-month to alphabetic-month dates in any
language (the same language for SYSUT1 and SYSUT2); English language alphabetic-
months are still fully supported.
FIELD1
Keyword Format
Same syntax as FIELD.
107
Chapter 5: Input Processing Keywords
Specifies comparison of a portion of a record. The FIELD1 keyword is used to show the
relative position, length, and format of the field on SYSUT1, and the FIELD2 keyword is used
to show its counterpart on SYSUT2. The FIELD2 usually follows the FIELD1 keyword. If
Comparex cannot find a paired FIELD2, it changes the FIELD1 to a FIELD.
In all other respects, FIELD1 is like FIELD.
Keyword Examples
FIELD1=(3,END)
FIELD1=(12,5,P,N=VISA_ACCOUNT_BALANCE)
FIELD2
Keyword Format
Same syntax as FIELD.
Specifies comparison of a portion of a record. The field may differ in displacement, length,
and format versus its associated FIELD1. See “FIELD1” on page 108 for further information.
Keyword Examples
FIELD1=(7,END),FIELD2=(9,14)
FIELD1=(12,7,P,N=ACT_BAL),FIELD2=(12,4,B,N=NEW_ACT_BAL)
FIELD1=(22,8,Z),FIELD2=(23,5,P)
FILTERIN
Keyword Format
FILTERIN=([{M},]d1[-d2],op,t'vvvv'[,N=name])
(or FIN) [{MEMBER},]
[{CSECT},]
Specifies which records will be passed to the comparison routine or to the next filter test. If no
filters and no SKIPUTs are specified, all records are passed to the comparison routine.
d1 is the displacement, relative to one or zero, of the first (left-most position) of the field on
which Comparex is to perform the logical test. A range may be specified on the displacement
by specifying a dash and a second displacement (d2). Any value starting in this inclusive
range satisfies, or passes, the filter criteria.
Values of op are:
108
Serena® Comparex® 8.7 for z/OS User’s Guide
LT - less than
LE - less than or equal
EQ - equal
NE - not equal
GE - greater than or equal
GT - greater than
If the record passes the test specified by the FILTERIN, it is eligible to be tested by the next
filter statement. If no further filter statements are specified, the record goes to the comparison
routine. This FILTERIN keyword is an inclusive filter using AND logic.
If the record fails any FILTERIN test, Comparex does not pass this record to the comparison
routine. Instead, the utility reads another record from the input file.
The FILTERIN keyword tests records on both SYSUT1 and SYSUT2. If you use the SCAN
keyword, then FILTERIN tests records on SYSUT1 only.
The WILDCARD value may be used in any positions of the value to be tested to indicate that
any input data in those positions passes the filter test.
You can use the MEMBER option to specify that filters include certain members of directory-
embedded data sets such as Panvalet, Librarian, GEM, or PDSs.
The CSECT option is used only for CSECT parsing (DATA=CSECT) such that certain CSECT
names will be included in the comparison. Filtering of members, CSECTs, and records may
all be used in the same run; however, you should not filter records conjunction with CSECT
parsing.
Specifying a name for the filter (N=filter_name) is optional. The maximum length for
filter_name is 32 bytes. Comparex provides an area to hold approximately 800 filters.
If a filter specifying a range of displacement goes beyond the length of the physical record, it
is discarded and considered a filter failure.
Note
FILTERIN, FILTEROUT, FILTORIN, and FILTOROUT should be consistent with
each other. If not, results can be unpredictable.
Keyword Examples
FILTERIN=(07,EQ,C'*')
FILTERIN=(3-60,EQ,C'UNIT=3330',N=OLD.DISK.DRIVE)
FILTERIN=(23,GT,X'01.....C')
FIN=(MEMBER,1,LE,C'CPX.A')
FIN=(CSECT,1,NE,C'ILB0....')
FILTEROUT
FILTEROUT specifies which records will not be passed to the comparison routine. If the
record passes the test specified by the FILTEROUT, and there are no more filter-type tests,
109
Chapter 5: Input Processing Keywords
Comparex does not pass this record to the comparison routine. Instead, Comparex reads
another record from the input file.
If the record fails the test specified by the FILTEROUT, Comparex passes this record to the
next filter-type test or to the comparison routine if no other tests are present.
In all other respects, it works the same as FILTERIN.
Note
FILTERIN, FILTEROUT, FILTORIN, and FILTOROUT should be consistent with
each other. If not, results can be unpredictable.
Keyword Format
FILTEROUT=([{M},]d1[-d2],op,t'vvvv'[,N=name])
(or FOUT) [{MEMBER},]
[{CSECT},]
Keyword Examples
FILTEROUT=(07,EQ,C'*')
FILTEROUT=(3-60,EQ,C'UNIT=3330',N=KILL.OLD.DISKS)
FILTEROUT=(23,GT,X'01.....C')
FOUT=(M,1,LE,C'CPX.A')
FILTORIN
FILTORIN specifies which record will be passed to the comparison routine. This FILTORIN
keyword is an inclusive filter using ‘OR logic. As soon as the record passes this test, it is sent
to the comparison routine. If the record does not pass this test, it is tested by the next filter-
type test; if no other tests are present, the record is sent to the comparison routine.
Because Comparex converts the last filter keyword to an AND logic filter, a FILTORIN
keyword will never be processed as the last filter keyword.
In all other respects, it works the same as FILTERIN.
Note
FILTERIN, FILTEROUT, FILTORIN, and FILTOROUT should be consistent with
each other. If not, results can be unpredictable.
Keyword Format
FILTORIN=([{M},]d1[-d2],op,t'vvvv'[,N=name])
(or FORIN)[{MEMBER},]
[{CSECT},]
110
Serena® Comparex® 8.7 for z/OS User’s Guide
Keyword Examples
FILTORIN=(07,EQ,C'*')
FILTORIN=(3-60,EQ,C'UNIT=3330',N=FIND.OLD.DISKS)
FILTORIN=(23,GT,X'01.....C')
FORIN=(M,1,LE,C'CPX.A')
FORIN=(CSECT,1,GE,C'PQA')
FILTOROUT
Specifies which record will not be passed to the comparison routine. If the record passes the
test specified by the FILTOROUT, Comparex does not pass this record to the comparison
routine. Instead, Comparex reads another record from the input file.
If the record fails the test specified by the FILTOROUT, Comparex passes this record to the
next filter-type test or to the comparison routine if no other tests are present. In all other
respects, it works the same as FILTEROUT above.
Note
FILTERIN, FILTEROUT, FILTORIN, and FILTOROUT should be consistent with
each other. If not, results can be unpredictable.
Keyword Format
FILTOROUT=([{M},]d1[-d2],op,t'vvvv'[,N=name])
(or FOROUT)[{MEMBER},]
[{CSECT},]
IDENTITY
Identifies a record on SYSUT1 so that the FIELD and MASK keywords that follow (until the
next IDENTITY) can be used for this record.
Keyword Format
IDENTITY=(ddd,op,t'vvvv'[,BREAK][,N=name])
Values of op are:
LT - less than
LE - less than or equal
EQ - equal
NE - not equal
GE - greater than or equal
GT - greater than
111
Chapter 5: Input Processing Keywords
If the test is passed, matched SYSUT1 and SYSUT2 records are compared according to the
FIELD/MASK statements following.
If that process compares unequal, the records are printed out as usual.
If the matched SYSUT1/SYSUT2 records compare equal, control is passed to the next
IDENTITY and the process is repeated. However, if an IDENTITY contains the BREAK
option, then if the IDENTITY test is passed, control is never passed on to another IDENTITY
regardless of whether the compare routines call them equal or not.
If the record on SYSUT1 does not pass any IDENTITY test, Comparex will compare all
positions of the SYSUT1 record to the matched SYSUT2 record.
The WILDCARD value may be used in any positions of the value to be tested to indicate that
any input data in those positions passes the IDENTITY test.
Specifying a name (N=id_name) is optional. The maximum length for id_name is 32 bytes.
Any FIELD or MASK statements that precede the first IDENTITY are considered to be global,
and are used for all IDENTITYs, including the catch-all IDENTITY that is added by
Comparex.
Comparex provides a table area of 8200 bytes for IDENTITY and DESEN keywords. Each
IDENTITY keyword you enter takes up 45 bytes plus the length of the value (double if a
wildcard is used).
If the type of the value is character, each byte of the value between the apostrophes takes up
one byte of the table; if the type of the value is hexadecimal, each byte of the value between
the apostrophes takes up one half-byte of the table (an odd number of bytes is rounded up).
For example:
IDENTITY=(123,GE,X'00034A',N=PAYROLL-TYPE-FIRED)
ID=(45,EQ,C'MASTERRECORD')
would take up 105 of the table’s 8200 bytes (45 for each of the two IDENTITY keywords, 3 for
half of the six hexadecimal positions, and 12 for the character value ‘MASTERRECORD’).
A check is performed to see if the IDENTITY statement fits in the record. The statement is
counted as bad if it does not, and is considered an IDENTITY failure.
Keyword Examples
IDENTITY=(07,EQ,C'A.4',N=ALL$OF$DETAILS)
ID=(49,GT,X'07450F')
CPX04I - MAXDIFF=3,CONTINUE,STOPAFT=1000
CPX05I - PRINT=(MATCH,MISMATCH),MBRHDR=YES,HALT=COND,KEYSONLY
112
Serena® Comparex® 8.7 for z/OS User’s Guide
A-IDENTITY
The A-ID keyword extends the IDENTITY keyword to include Boolean AND logic.
Keyword Format
A-IDENTITY=(ddd,op,t'vvvv'[,N=name])
(or A-ID)
If A is the value at offset1 and B is the value at offset3, then Comparex reads the keywords
specified after the A-IDENTITY keyword. If, however, both conditions are not satisfied,
Comparex advances to the next ID statement.
113
Chapter 5: Input Processing Keywords
If Comparex finds a MASK, FIELD, or DESEN keyword, the creation of the ID/A-ID unit ends,
and Comparex performs the comparison. If another A-ID or ID is found after the FIELD/
MASK, it is considered part of the next ID/A-ID unit.
As illustrated in the following example, Comparex considers the second ID keyword (the one
that tests whether B is offset at 5) as the next ID/A-ID unit.
ID=(1,EQ,C'4)
A-ID=(3,EQ,C'B')
FIELD=
MASK=
ID=(5,EQ,C'B')
IGNORSIN
If the difference between compared DATA files is that one file contains packed fields with a
sign of C, and the other contains packed fields with a sign of F, every record contains
differences.
This keyword causes Comparex to scan every byte of both synchronized records for packed
fields and make them signs of F before comparison begins. When the two records are
compared, these sign differences are effectively ignored.
Certain restrictions apply to the use of IGNORSIN:
• No fields or MASKs are allowed.
• Not available for TEXT processing.
• Has no effect when comparing fields numerically.
IGNORSIN is not applicable to CSECT parsing.
Keyword Examples
IGNORSIN
IGNORSIN=YES
MASK
MASK specifies that a portion of a record in the same relative position on both input files is to
be ignored. This area in the records is not eligible for comparison. Those differing bytes
specified by MASKs (in records that are printed) will be underscored unless FLDSONLY is
also specified.
If an IDENTITY keyword precedes the MASK keyword, the MASK keyword is used only if the
record passes the IDENTITY test.
If there are no IDENTITY keywords, or if the MASK keyword precedes the first IDENTITY, the
MASK keyword applies to all records on the file.
114
Serena® Comparex® 8.7 for z/OS User’s Guide
Keyword Format
MASK=(ddd,{len}[{ C}][,N=mask_name])
,
{END}[{,Z}]
[{,P}]
[{,B}]
[{,UP}]
[{,UB}]
END signifies that everything from the starting location to the end of the record is included.
C, Z, P, B, UP, or UB may be specified to show the format of the data there, although it has no
effect.
Specifying a name for the mask (N=mask_name) is optional, and is usually associated with
specifying FORMAT=FIELD. The maximum length for mask_name is 32 bytes.
Keyword Examples
MASK=(256,END)
MASK=(83,5,Z,N=DATE-LAST-POST)
MASK=(83,5)
MASK1
MASK1 specifies that a portion of a record is to be ignored. The MASK1 keyword shows the
relative position, length, and format of the field on SYSUT1; the MASK2 keyword shows its
counterpart on SYSUT2. The MASK2 keyword must follow a MASK1 keyword. If Comparex
cannot find a paired MASK2, it changes the MASK1 to a MASK.
In all other respects, MASK1 is like MASK. MASK1 and MASK2 are applicable only if they fall
under a FIELD1/FIELD2 pair. By themselves, MASK1/MASK2 will not generate (compile into)
the proper FIELD1/FIELD2 statements.
Keyword Format
Same syntax as MASK.
Keyword Examples
MASK1=(256,END)
MASK1=(83,5,P,N=TIME-LAST-POST)
MASK1=(83,5)
MASK2
MASK2 specifies that a portion of a record is to be ignored. MASK2 shows the relative
position, length, and format of the field on SYSUT2; MASK1 shows its counterpart on
SYSUT1. MASK2 must follow a MASK1.
115
Chapter 5: Input Processing Keywords
Keyword Format
Same syntax as MASK.
Keyword Examples
MASK2=(83,5,C)
MASK2=(83,5,N=GARBAGE)
MODE
MODE specifies the user orientation.
MODE=APPLICATIONS is the default. Under the applications mode, all displacements given
on other keywords are relative to one. The first position of the record is position one.
In addition, under the applications mode, the LLbb (or RDW) of a variable length record is not
processed. This means that the LLbb is not:
• counted when determining the first position of the record
• shown on the difference report
• compared
• able to be accessed with FIELD, FILTER, IDENTITY, MASK, and KEY statements.
Under the systems mode (MODE=SYSTEMS or MODE=SYS), all displacements on other
keywords are relative to zero. The first position of the record is position zero.
In addition, under the systems mode, the LLbb (or RDW) of a variable length record is able to
be processed. This means that the LLbb is:
• counted when determining the first position of the record
• shown on the difference report
• compared
• able to be accessed with FIELD, FILTER, IDENTITY, MASK, and KEY statements.
Finally, under the systems mode, HEX becomes the default. You may override this by
entering a DECIMAL keyword along with the MODE=SYSTEMS keyword.
Keyword Format
MODE={APPLICATIONS}
{APL}
{SYSTEMS}
{SYS}
Keyword Examples
MODE=APL
116
Serena® Comparex® 8.7 for z/OS User’s Guide
MODE=(SYSTEMS)
SCAN
Keyword Format
SCAN
SCAN allows Comparex to scan the input file as specified through SYSUT1 for character
strings specified through filtering criteria. That is, the rules of exclusive filters (FILTERIN,
FILTEROUT) and inclusive filters (FILTORIN, FILTOROUT) as documented are applied to
each record, and that record is displayed if it passes the filter tests. If SCAN is specified,
SYSUT2 is ignored.
If directory-embedded data sets are being read, Comparex will process each member,
subject to member filters. Every record is then subjected to record filtering criteria.
Keyword Examples
SCAN
SCAN=(YES)
You should use MBRHDR=COND with SCAN because it reduces the number of mini-headers
displayed. Mini-headers encapsulate non-null statistics in angle brackets about the member
whose records follow. For example:
M member name
CREDATE creation date in yyyyddd format
MODDATE last modification date in yyyyddd format
MODTIME last modification time in hhmm format
USER user ID associated with last update
117
Chapter 5: Input Processing Keywords
SCAN,MBRHDR=COND,FORIN=(5-72,EQ,C'COMPAREX.LINK')
. . .
<M=ABC37JCL,CREDATE=89356,MODDATE=94274,MODTIME=0907,USER=ABC37>
1 //STEPLIB DD DISP=SHR,DSN=ABC.COMPAREX.LINKLIB ABC37056 56
1 //STEPLIB DD DISP=SHR,DSN=ABC.COMPAREX.LINKLIB ABC37088 88
<M=COMPARE,CREDATE=93187,MODDATE=93188,MODTIME=0842,USER=ABC89DD>
1 //* from the COMPAREX.LINKage 00027500 275
. . .
SKIPUT1
SKIPUT1 allows Comparex to skip over a specified number of records, at the beginning of file
SYSUT1 before comparison or printing begins.
Records that are filtered out count against the number of records to be skipped. Skipping is
done without regard to whether records are to be filtered out.
If directory-embedded data sets are being read, Comparex will skip over that number of
records at the beginning of each member.
Keyword Format
SKIPUT1=nn
Keyword Examples
SKIPUT1=00001
SKIPUT1=500
SKIPUT2
SKIPUT2 allows Comparex to skip over any desired number of records at the beginning of
file SYSUT2 before comparison or printing begins.
Records that are filtered out count against the number of records to be skipped. Skipping is
done without regard to whether records are going to be filtered out or not.
If directory-embedded data sets are being read, Comparex will skip over that number of
records at the beginning of each member.
Keyword Format
SKIPUT2=nn
Keyword Examples
SKIPUT2=00001
SKIPUT2=500
118
Serena® Comparex® 8.7 for z/OS User’s Guide
STOPAFT
STOPAFT specifies the maximum number of records to be read from SYSUT1 or SYSUT2.
The default is 999999999999. This number does not include records bypassed as a result of
SKIPUT1 or SKIPUT2. Comparex stops processing as soon as the number is reached on
either file, writes the statistics line, and closes all files.
For example, if STOPAFT=60 was specified, and if there were 50 records on file SYSUT1
and 70 records on file SYSUT2, Comparex would read all 50 records on file SYSUT1, and 60
records on file SYSUT2 before stopping its processing (with return code 8).
Remember, the limit you can specify for STOPAFT is 99999999. Even though a larger
number (twelve 9’s) is the default, you can specify only eight digits for any keyword.
Keyword Format
STOPAFT=nn
Keyword Examples
STOPAFT=00001
STOPAFT=500
SYSUT1
SYSUT1 specifies parameters that override the SYSUT1 JCL statement issued when
Comparex was called. It is generally used to pass parameters to the CPXIFACE interface to
read Panvalet, Librarian, GEM, and OTHER proprietary file structures in the place of
SYSUT1. It is also used to invoke z/OS Unix Hierarchical File System (HFS) processing.
Keyword Format
SYSUT2=({PAN}[,{MEMBER=}xxx][,INCLUDE={NO} ][,DDNAME=xxx][,LEVEL=n][,PARM='xxx'])
{LIB}[,{M=} ][ {YES}][,DDNAME=xxx][,LEVEL=n][,PARM='xxx'])
{OTH} [,DDNAME=xxx][,LEVEL=n][,PARM='xxx'])
{HFS,PATH=’/u/user/xxxx’}
Parameter Description
119
Chapter 5: Input Processing Keywords
Parameter Description
HFS z/OS Unix Hierarchical Files System (HFS) file or directory. Full path
from root is required in PATH subkeyword. Mutually exclusive with
PAN, LIB, or OTH.
PATH Path from HFS root to desired directory or file in the z/OS Unix
Hierarchical File System (HFS). Value must be enclosed in single
quotes and prefaced by initial slash. Required if FILE=HFS.
120
Serena® Comparex® 8.7 for z/OS User’s Guide
Parameter Description
DDNAME Specifies what ddname is to be used to open the proprietary file
structure. For disk libraries, the default for PAN is PANDD1, and the
default for LIB is MASTER. Certain other specifications mean special
handling in CPXIFACE, depending on the library.
Unique ddnames and their meanings are:
• PAN
• PANDD1 - disk master
• BACKUP) - protection file
• PANDD3 - tape master
• PANDD4 - disk protection
• LIB
• MASTER - disk master
• MASTIN - tape master
• CYCLE) - cycle control
• LEVEL - (for LIB only) specifies the relative level number of the
archived (ARCHIE) module. LEVEL=0 is the current module,
LEVEL=1 is the next oldest, and so on.
Keyword Examples
SYSUT1=(PAN,MEMBER=PANMEMBER)
SYSUT1=LIB
SYSUT1=(OTH,M=MEMBER-IS-16-BYT,DDNAME=A,PARM='A B')
SYSUT1=(LIB,M=ABC,INCLUDE=YES,LEVEL=3,PARM=1234)
SYSUT1=(HFS,PATH=’/u/user0001/somedir/somefile.txt’)
121
Chapter 5: Input Processing Keywords
Overrides the data set organization (DSORG) determined by Comparex for SYSUT1. This is
allowed, but not recommended.
SYSUT2
SYSUT2 specifies parameters that override the SYSUT2 JCL statement issued when
Comparex was called. It is generally used to pass parameters to the CPXIFACE interface to
read Panvalet, Librarian, GEM, and OTHER proprietary file structures in the place of
SYSUT2. It is also used to invoke z/OS Unix Hierarchical File System (HFS) processing.
Keyword Format
SYSUT2=({PAN}[,{MEMBER=}xxx][,INCLUDE={NO} ][,DDNAME=xxx][,LEVEL=n][,PARM='xxx'])
{LIB}[,{M=} ][ {YES}][,DDNAME=xxx][,LEVEL=n][,PARM='xxx'])
{OTH} [,DDNAME=xxx][,LEVEL=n][,PARM='xxx'])
{HFS,PATH=’/u/user/xxxx’}
Keyword Examples
SYSUT2=(PAN,MEMBER=PANMEMBER)
SYSUT2=LIB
SYSUT2=(OTH,M=MEMBER-IS-16-BYT,DDNAME=A,PARM='A B')
SYSUT2=(LIB,M=ABC,INCLUDE=YES,LEVEL=3)
SYSUT2=(HFS,PATH=’/u/user0001/somedir/somefile.txt’)
WILDCARD
Specifies the character to be used in subsequent logical tests to indicate that any data value
passes the test.
The logical tests occur in FILTER, IDENTITY, and SEGMENT keywords.
Keyword Format
WILDCARD={C'.'}
{t'vv'}
122
Serena® Comparex® 8.7 for z/OS User’s Guide
Any number of WILDCARD keywords may be entered. The WILDCARD value (or default) is
in effect until another WILDCARD keyword is encountered.
For example, the keywords could be:
FILTERIN=(12,EQ,X'.0.2')
WILDCARD=C'?'
FILTERIN=(23,EQ,C'AB??C')
WILDCARD=C'!'
FILTERIN=(34,EQ,C'DE!F!G')
and Comparex would interpret the periods (first FILTERIN), question marks (second
FILTERIN), and exclamation points (third FILTERIN) as WILDCARD values.
If the default (a period) was in effect and you entered
FILTERIN=(123,EQ,X'...D')
then any data value with D in the low-order half-byte would pass this test for packed negative
numbers.
Any number of the positions of the value to be tested may contain the WILDCARD character.
For example:
IDENTITY=(234,EQ,C'..A..B..C..1')
SEGMENT=(345,EQ,X'F....0')
Keyword Examples
WILDCARD=C'*'
WILDCARD=X'5C'
123
Chapter 5: Input Processing Keywords
124
DISPLAY PROCESSING
KEYWORDS 6
What you will find in this chapter:
• “Printing the Comparison Results” on page 125
• “Display Processing Keywords” on page 125
• “All-Defaults Difference Report” on page 128
• “All-Defaults Difference Report with DATA” on page 128
• “Modifying the Difference Report” on page 129
CASE Specifies how lowercase characters in the input stream will 130
be treated.
Compare types: Data, Text, Directory
125
Chapter 6: Display Processing Keywords
DECIMAL Specifies that relative displacements for each line in a report 131
are shown in decimal format.
Compare types: Data, Text
IGNORSIN Specifies that the positive hexadecimal signs X‘.C’ and X‘.F’ 138
are equivalent.
Compare type: Data
INTERLEAVE Specifies the number of lines that are grouped together if the 139
output format is interleaved.
Compare type: Data
KEYSONLY Specifies that, for synchronization mismatches, only the lines 139
that contain the control fields will be printed.
Compare type: Data
126
Serena® Comparex® 8.7 for z/OS User’s Guide
KILLECHO Suppresses the printing of installation defaults after the first 139
page of the Comparex report.
Compare types: Data, Text, Directory
KILLRC Specifies that the system return code is set to zero. 140
Compare types: Data, Text, Directory
LINE Specifies the number of bytes displayed on each line of the 140
output report, and the format of the display.
Compare types: Data, Text
LINELIM Specifies the number of lines to be printed for each record. 141
Compare type: Data
PLUS Specifies the character that underscores the excess bytes if 144
the data record on the modified file is longer than the record
on the original file. Also used as the framing character in
TEXT processing.
Compare types: Data, Text
127
Chapter 6: Display Processing Keywords
Note
The all-defaults report is not recommended. Every Comparex run should specify
a MAXDIFF keyword to avoid large printouts if unexpected results occur.
128
Serena® Comparex® 8.7 for z/OS User’s Guide
4. PAGE=58 is used. Each page contains a maximum of 58 lines. The first two lines show
the time, date, page number, and input file data set names.
a) The literal O N E is shown in the right-hand column if the line contains data from a
record from file SYSUT1.
b) The literal T W O is shown in the right-hand column if the line contains data from a
record from file SYSUT2. ONE/TWO can be changed to OLD/NEW; see the section
on “Programmable Options” in the Install Guide for more details.
c) The literal DIFFERENCE is shown after each line of data from file SYSUT2 if the
SYSUT2 record has been selected for printing on the difference report because of
inequalities if matched to a record from file SYSUT1. This SYSUT2 record is shown
with message CPX52I.
d) When reviewing the difference report, scan the right-hand column, looking for the
literal DIFFERENCE. These SYSUT2 records are then reviewed for reconciliation by
noting the dash character underscores (for differing bytes) and the plus character
underscores (for extra bytes).
5. The EBCDIC translation table is used to translate the bit representations shown on the
left side of the report into the printable characters on the right side of the report.
6. The displacement on each line is shown in DECIMAL. The first line shows bytes 1
through 32, the second line shown bytes 33 through 64, and the third line shows bytes 65
through 96.
7. FORMAT=02 is used. This implies that LINE is set at (32,HORIZONTAL) for the standard
IBM dump format. Each line contains 32 bytes of the record.
In the display of the SYSUT1 record under message CPX51I, if any line is the same as
the previous line, the data values are replaced by the words “SAME AS ABOVE”.
In the display of the SYSUT2 record under message CPX52I, only lines that actually have
underscored differences are displayed.
8. DASH=C‘-’ is used. The dash character is shown to the left of the word “DIFFERENCE”,
and it is used to underscore differing bytes. All differing bytes are underscored on the
record from file SYSUT2.
9. PLUS=C‘+’ is used. The plus character is shown to the right of the word “DIFFERENCE”,
and it is used to underscore excess bytes if the SYSUT2 records is longer than the paired
SYSUT1 record.
10. Comparex prints its end-of-processing totals.
ASCII
Translates ASCII input into readable format on the alphanumeric section of the difference
report.
129
Chapter 6: Display Processing Keywords
ASCII, EBCDIC, and UNICODE are mutually exclusive. EBCDIC is the default value.
The ASCII translate table is in two parts. Normal ASCII is from X ‘00’ to X ‘7F’, but some
users also have an abnormal ASCII that is a duplicate at values X‘80’ to X‘FF’. Comparex
supports both in the same table.
If ASCII translation is being used, processing parameter message CPX08I will specify ASCII.
CASE
CASE specifies the translation of lowercase characters, either EBCDIC or ASCII.
The default is CASE=MIXED, where lowercase and uppercase characters remain as is, but
nonprintable characters are translated to periods on the printout.
CASE=LOWER is exactly the same as CASE=MIXED.
CASE=UPPER treats lowercase letters as nonprintable and translates them to periods also.
CASE=RAISE capitalizes all letters (and does so before comparing).
CASE=MONO disables all translation; it is intended mainly for Japanese katakana
customers.
If an option to TEXT such as TEXT=PANEL is specified, CASE=MIXED is set automatically.
The preceding applies to the comparing of SYSUT1 and SYSUT2 records; not to the
scanning of SYSIN keywords. As each line of SYSIN is read, it is automatically translated to
upper case allowing keywords as entered to be in either case.
You can make CASE=MONO the default for both SYSIN keyword scanning, and for compare
processing; see the section on “Set Up Comparex Programmable Options” in the appropriate
Comparex Install Guide for details.
Keyword Format
CASE={MIXED}
{LOWER}
{UPPER}
{RAISE}
{MONO}
Keyword Examples
CASE=(MIXED)
CASE=UPPER
CASE=lower /* Same as CASE=mixed
CASE=RAISE
130
Serena® Comparex® 8.7 for z/OS User’s Guide
DASH
DASH specifies the character that is to be used as the underscore for differing bytes on the
difference report.
The dash character also is used as the character to separate a block of records from file
SYSUT1 from a block of records from file SYSUT2 if FRAME is specified with TEXT
processing.
If an inequality is discovered between two synchronized data records, the bytes that are
different are underscored with the dash character. Comparex prints the word ‘DIFFERENCE’
on the right side of the report, next to the record from file SYSUT2, on the same line as the
dash characters.
The default value is a dash. You may specify any other character or hexadecimal value.
If character data is given, only one value is used (such as C‘?’)
If hexadecimal data is given, two values are used (such as X‘4F’).
The dash character being used is specified by processing parameter message CPX11I. In
addition, the dash character is shown immediately to the left of the word “DIFFERENCE”.
At the end of processing, Comparex shows a count of bytes underscored with message
CPX74I.
The differing bytes are underscored with the dash character on both the left-hand
(hexadecimal) portion of the report and the right-hand (alphanumeric) portion of the report.
Comparex will accept any value given; you need only to be certain the value is a printable
character.
If you specify an unprintable character (one that is not in the Comparex internal translate
table), Comparex will substitute a period (C‘.’). You can specify other unprintable characters
in member COMPAREE, which may be found in data set somnode.COMPAREX.IFACE.
Keyword Format
DASH={C'-'}
{t'vv'}
Keyword Examples
DASH=C'?'
DASH=X'EA'
DECIMAL
DECIMAL causes each line's relative displacement to be shown in decimal format.
DECIMAL and HEX are mutually exclusive. DECIMAL is the default value. If DECIMAL is
specified, HEX should not be specified.
131
Chapter 6: Display Processing Keywords
Each line’s relative displacement is shown in the left-most column of the difference report.
If DECIMAL displacement is being used, processing parameter message CPX08I will specify
DECIMAL.
An example of DECIMAL format is shown in “FORMAT=02,DECIMAL,NIBBLE (Excerpts).”
Note that the first line of the record includes bytes 1 through 32, the second line of the record
includes bytes 33 through 64, the third line of the record includes bytes 65 through 96, and
the fourth line of the record includes bytes 97 through the end of the record. This example
shows DECIMAL with displacement relative to one (the default).
EBCDIC
EBCDIC specifies that the input files are in EBCDIC format. Unusual special characters are
translated to periods after the comparison routine but before their printing on the difference
report.
EBCDIC, ASCII, and UNICODE are mutually exclusive. EBCDIC is the default value.
If EBCDIC translation is being used, processing parameter message CPX08I will specify
EBCDIC.
The EBCDIC translate table may be customized at your shop by replacing CSECT
COMPAREE in load module Comparex.
FLDSONLY
FLDSONLY specifies that only differing bytes defined by FIELD statements are underscored
with the dash character. If used in conjunction with FORMAT=FIELD, it suppresses the
display of fields that do not reflect a difference.
If you specify at least one FIELD1/FIELD2 combination, Comparex turns on the FLDSONLY
indication automatically.
If FLDSONLY is being used, processing parameter message CPX11I will specify FLDSONLY.
132
Serena® Comparex® 8.7 for z/OS User’s Guide
FORMAT
FORMAT specifies the data formatting characteristics for how differences are displayed. The
default is FORMAT=02, which implies the IBM dump format, full display of a SYSUT1 record,
followed by the differing lines of SYSUT2 with the differences underscored.
Keyword Format
FORMAT={xy}
(or F) {FIELD}
{SMART}
{xyF}
{xyS}
If supplied, the xy argument must be two digits.
Individual field names with their associated values can be displayed by specifying
FORMAT=FIELD. You should use the name (N=) option to FIELD, FIELD1, FIELD2,
IDENTITY, and Filters.
If FLDSONLY is also specified, it suppresses the display of fields that do not reflect a
difference.
Furthermore, if only the fields that have changed are displayed, it can happen that a KEY is
not displayed, and you will not know what logical record the differences were for. One can
specify KEYSONLY and have a FIELD lay over the exact same bytes (displacement and
length) as the first (only one) KEY, and that FIELD will always be displayed.
The COBOL Copylib parsing capability of option 9 on the ISPF interface is built specifically
for invoking this feature.
The possible values for x are:
133
Chapter 6: Display Processing Keywords
For the following description on the values of y, imagine a SYSUT1 record with every byte
having a value of display character ‘A’ (C‘A’ or X‘C1’), and a SYSUT2 record similar except
that byte number ten (relative to one) has a value of ‘B’ (C‘B’ or X‘C2’). For example:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA O N E
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA etc. O N E
AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA T W O
- -DIFFERENCE+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA etc. T W O
2 Full display of the SYSUT1 record, followed by only the differing lines of
SYSUT2 with differences underscored. For example:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA O N E
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA etc. O N E
AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA T W O
- -DIFFERENCE+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA O N E
AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA T W O
- -DIFFERENCE+
134
Serena® Comparex® 8.7 for z/OS User’s Guide
4 Full display of the SYSUT1 record, interleaved with a full display of the
SYSUT2 record and the differences underscored. For example:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA O N E
AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA T W O
- -DIFFERENCE+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA etc. O N E
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA etc. T W O
5 Full display of SYSUT1 record, interleaved with only the differing lines of
SYSUT2; the differences are underscored. For example:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA O N E
AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA T W O
- -DIFFERENCE+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA etc. O N E
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA O N E
AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA T W O
- -DIFFERENCE+
All combinations of x and y are acceptable, unless FIELD1/FIELD2 offsets are specified. In
this case, regression to FORMAT=x1 or FORMAT=x2 may be enforced without express
notification using a CPXnnA message.
If differing FIELD1/FIELD2 offsets are specified such as:
FIELD1=(31,4,Z),FIELD2=(32,3,P)
Keyword Examples
FORMAT=26
FORMAT=11
FORMAT=FIELD
135
Chapter 6: Display Processing Keywords
Smart Fields
FORMAT=SMART allows formatting of numeric fields. If you specify FORMAT=SMART in the
control cards, numeric fields will be translated to a form that is appropriate for the type of data
being displayed. For example, a packed field will be printed out as a decimal number in
addition to alphabetic, horizontal hex, or vertical hex formats.
FORMAT=SMART implies FORMAT=FIELD, because SMART fields are special cases of
FORMAT=FIELD.
You can abbreviate FORMAT=SMART as FORMAT=xyS, where x=0 implies horizontal hex,
x=1 implies alphabetic, and x=2 implies vertical hex format.
FORMAT=SMART also works in conjunction with the FIELD=(x,x,x/date format) keyword. If
you are using both parameters, then a new field will appear on the report with formatted
alphanumeric data.
The following example is what appears without FORMAT=SMART. The first field is difficult to
understand because it is packed data.
1 C O M P A R E X (MVS - 8.6.0 - 2006/105) COMPARE
SYSUT1=WSER15.CPX860.SOURCE(DATEFL6),SYSUT2=WSER15.CPX860.SOURCE(DATEF)
0DSPL
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7.
0 FIELD1=(25,5,P/YYYYMMDD),FIELD2=(1,9,Z/DD/MON/YY
0CPX51I - RECORD NUMBER 1 ON FILE SYSUT1
0CPX52I - RECORD NUMBER 1 ON FILE SYSUT2 FIELD=1
25 r> O N E
1 30/SEP/97 T W O
------------ -DIFFERENCE+
With FORMAT=SMART, the formatted date will appear, and it will be easy to understand what
the original data means.
1 C O M P A R E X (MVS - 8.6.0 - 2006/105) COMPARE
SYSUT1=WSER15.CPX860.SOURCE(DATEFL6) ,SYSUT2=WSER15.CPX860.SOURCE(DATEF)
0DSPL
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7.
0 FIELD1=(25,5,P/YYYYMMDD),FIELD2=(1,9,Z/DD/MON/YY)
0CPX51I - RECORD NUMBER 1 ON FILE SYSUT1
0CPX52I - RECORD NUMBER 1 ON FILE SYSUT2 FIELD=1
25 r> JUN/30/0097 O N E
1 30/SEP/97 SEP/30/0097 T W O
----------- -DIFFERENCE+
If the original data for both SYSUT1 and SYSUT2 is in Julian format, then the newly-
formatted data will be in a YYYY.DDD format.
If the original data for both SYSUT1 and SYSUT2 is in Gregorian format, then the newly-
formatted data will be in MMM/DD/YYYY format.
136
Serena® Comparex® 8.7 for z/OS User’s Guide
If there is a mix of formats (comparing Julian against Gregorian), then the newly-formatted
data will be in MMM/DD/YYYY format.
GENFLDS
Specifies that Comparex is to generate a visual representation of all IDENTITY, FIELD, and
MASK statements on the difference report.
If GENFLDS is being used, processing parameter message CPX13I will be shown.
A page eject is done before and after each display so you can separate the GENFLDS pages
for reference as the difference report is studied. A clear plastic overlay could be made on a
copying machine to aid in the analysis of the report.
Comparex uses the value of LINE specified with processing parameter message CPX08I to
generate the GENFLDS representation. If done this way, the GENFLDS representation is in
the same format as the associated difference report.
HALT
HALT specifies if Comparex is to continue processing after extracting keywords.
HALT=COND causes Comparex to terminate after finding a keyword syntax error. This is the
default. As delivered, HALT=COND is set in the installation defaults. From experience, most
shops leave this in as the default.
HALT=YES forces Comparex to terminate with message CPX31A after all keywords have
been exhausted even if there are no syntax errors in the input.
HALT=NO implies that, if at all possible, Comparex continues processing, regardless of any
syntax errors you may have committed. This is the default if you remove HALT=COND from
the installation defaults and don’t supply it from any other source.
Syntax errors are defined here as anytime Comparex underscores non-blank characters that
are not recognizable keywords. The literal “ERROR?” also is displayed to the right of the
underscores alerting you of the problem.
Keyword Format
HALT={YES}
{NO}
{COND}
137
Chapter 6: Display Processing Keywords
HEX
HEX causes each line’s relative displacement to be shown in hexadecimal format.
DECIMAL and HEX are mutually exclusive. DECIMAL is the default. If HEX is specified,
DECIMAL should not be specified.
Each line’s relative displacement is shown in the left-most column of the difference report.
If HEX displacement is being used, processing parameter message CPX08I will specify HEX.
If MODE=SYSTEMS is specified and DECIMAL is not specified, Comparex turns on HEX
automatically.
IGNORSIN
IGNORSIN specifies that data differences in packed fields with unlike signs are to be ignored.
This keyword causes Comparex to scan every byte of both synchronized records for packed
fields, and to make them signs of F before comparison begins.
If one record contains packed fields with signs of C and the other record contains packed
fields with signs of F, they can be ignored. If the two records are compared, these sign
differences are effectively ignored.
The following restrictions apply to the use of IGNORSIN:
• No FIELDs or MASKs are allowed
• Not available for TEXT processing
• It is ignored for numeric compares
• It is not applicable to CSECT parsing.
138
Serena® Comparex® 8.7 for z/OS User’s Guide
Keyword Examples
IGNORSIN
IGNORSIN=YES
INTERLEAVE
INTERLEAVE specifies the number of lines that are blocked together from a SYSUT1 record
before displaying a similar number of lines from a SYSUT2 record.
This only has meaning in DATA logic if the value of y in FORMAT=xy is 4, 5, or 6. If entered,
the value of nn must be at least 1. If not entered, the default value is 1.
If INTERLEAVE is entered but FORMAT is not, FORMAT=x5 will be used by default.
Specifying a very high value (such as INTERLEAVE=10000 with FORMAT=04) is logically
equivalent to specifying FORMAT=01 and disregarding INTERLEAVE.
Keyword Format
INTERLEAVE=nn
(or ILV)
Keyword Examples
INTERLEAVE=1
ILV=010
KEYSONLY
KEYSONLY specifies that if synchronization mismatches occur, either from KEY or
SEGMENT synchronization, only the lines that completely contain any control fields will be
displayed. This is particularly useful when comparing DATA files with relatively large records
(500 bytes or more), and you are not concerned with flipping through the pages of the display
for inserted and deleted records.
Another possibility is to specify PRINT=NOMISMATCH, but that ignores the inserted/deleted
records completely from the difference report.
KILLECHO
KILLECHO specifies that CPX0xI messages that are not defined in the system defaults will
be suppressed. Only the title information, system defaults, and DATA report will be displayed.
139
Chapter 6: Display Processing Keywords
KILLRC
KILLRC specifies that the return code to be sent back to the operating system be overwritten
as zero. This keyword is rarely used.
Keyword Examples
KILLRC
KILLRC=NO
KILLSPIE
KILLSPIE=YES specifies that Comparex’s normal abend-intercept handling is to be turned
OFF. This keeps the ESPIE macro from being issued.
This option is normally used at the request of Serena Customer Support to gather additional
diagnostic information in the event of an error.
LINE
LINE specifies the number of bytes displayed on each line, and the method for that display.
Keyword Format
LINE=({32}[{,HORIZONTAL}])
{nn}[{,HOR} ]
[{,ALPHA} ]
[{,VERTICAL} ]
[{,VER} ]
For the HORIZONTAL [HOR] parameter, the maximum and minimum line widths have
changed. For horizontal hex (dump format), a width of 32 is not forced; the maximum is 48.
The minimum width for any format, is now the length of the largest numeric field, with an
overriding minimum of 8. Because a 15-byte zoned number is the largest numeric field
allowed, the actual minimum will be in the range of 8 to 15. The line width specified will be
increased if necessary to be that actual minimum.
If no FORMAT is specified, the default is FORMAT=x2 unless INTERLEAVE is specified.
If INTERLEAVE is specified, the default is FORMAT=x5 (full SYSUT1 interleaved with
differing lines of SYSUT2).
LINE=(nn,ALPHA) generates an alphanumeric line of length nn; the default is 100, but may
range from 8 to 175.
LINE=(nn,VERTICAL) generates the DITTO format, with line length nn, where the default is
100, but may range from 8 to 175.
If both LINE and FORMAT are specified, whichever is specified last will control.
140
Serena® Comparex® 8.7 for z/OS User’s Guide
Keyword Examples
LINE=80
LINE=(32,HOR)
LINE=(175,VERTICAL)
LINELIM
The LINELIM keyword specifies the number of lines to print for each displayed record.
You can use LINELIM to reduce your output volume. When you are working with large
records and need to detect records that match but are different, LINELIM allows you to print
just the amount of lines you need to identify the records.
The default of LINELIM=0 indicates no print truncation will occur. A numeric value indicates
truncation and how many lines per record to display. For example, LINELIM=2 would display
two print lines for each record.
The LINELIM keyword applies to DATA comparisons only.
Keyword Format
LINELIM={nn}
Keyword Examples
LINELIM=2
MAXDIFF
MAXDIFF specifies the maximum number of differences to be displayed on the difference
report. A difference can be two matched records with differing data, or one record that is not
matched on the other file (any inserted record under KEY or SEGMENT synchronization, or
any extra record on the end of the longer file).
The MAXDIFF value is specified by processing parameter message CPX04I. If Comparex
has displayed the specified number of differences, the utility will issue message CPX67I. At
that time, if CONTINUE is not specified, Comparex will execute its end-of-job routines; if
CONTINUE is specified, Comparex will read and compare records, adding to processing
totals, but not printing records on the difference report.
When comparing directory-embedded data sets (such as PDS, Panvalet, or Librarian) and
DIRECTORY is not specified, differing DIRECTORY records do not count toward the
MAXDIFF limit; only differing records of the member contribute to the MAXDIFF limit.
You should always give a MAXDIFF specification to prevent large printouts if errors occur.
You can specify MAXDIFF = 99999999; even though a larger number (twelve 9’s) is the
default, you can specify only eight numeric digits for any keyword.
141
Chapter 6: Display Processing Keywords
Keyword Format
MAXDIFF={999999999999}
{nn}
Keyword Examples
MAXDIFF=10
MAXDIFF=(999)
MAXMATCH
MAXMATCH is similar to MAXDIFF in that it counts differences; however MAXMATCH counts
only records that synchronize (match) together. It is only applicable to DATA; not to TEXT or
DIRECTORY.
A common usage is a DATA compare of huge files that contain many synchronization
mismatches and you only want to see the first 500 differences of records that match on a
KEY.
Remember that the limit you can specify for MAXMATCH is 99999999. Even though a larger
number (twelve 9’s) is the default, you can specify only eight (numeric digits for any keyword.
Keyword Format
MAXMATCH={999999999999}
{nn}
Keyword Examples
MAXMATCH=500
MAXMATCH=(99999)
MBRHDR
MBRHDR specifies if Comparex is to display a member header for each member of a
directory-embedded data set compare.
Keyword Format
MBRHDR={YES}
{NO}
{COND}
{MATCH}
MBRHDR=YES (the default) forces a page break and heading to be printed for each member
regardless of if there are any differences.
142
Serena® Comparex® 8.7 for z/OS User’s Guide
MBRHDR=COND specifies that a page break and member header are to be issued only if
there is at least one difference in the two members that synchronized, or if there is a member
insertion. If large libraries are compared, and only a few members differ, this abbreviates the
difference report considerably.
MBRHDR=NO forces all page breaks off, and all difference reports by member suppressed.
Only statistics (by member) are gathered as to how many members differed that
synchronized together, and how many inserted members were on each file. Using this option
speeds up the overall comparison considerably if large libraries are involved.
If two members synchronize together because their names match, the comparison is abruptly
terminated at the first difference. All detail is lost, however, as to which members differed and
where.
MBRHDR=MATCH is similar to MBRHDR=COND, except that inserted members are not
displayed. Only member names that match and have differences warrant a page break.
Statistics by member are gathered and displayed in all three cases with message CPX78I.
For example, if two directory-embedded data sets contain members:
-SYSUT1- -SYSUT2-
MEMBER10 MEMBER10 (identical)
MEMBER20 MEMBER15
MEMBER30 MEMBER20 (different)
MEMBER40 MEMBER40 (identical)
MEMBER50
With MBRHDR=COND, the difference report looks like:
MEMBER15 DIF T W O 2
SYSUT1=DSNUT1(MEMBER20),SYSUT2=DSNUT2(MEMBER20)
{List of differences within the member}
MEMBER30 DIF O N E 3
MEMBER50 DIF O N E 5
NIBBLE
NIBBLE specifies that each half-byte is to be compared and, if different, underscored with the
dash character.
For the NIBBLE keyword to be effective, LINE must be set (or defaulted) to
(nn,HORIZONTAL), or FORMAT=0y must be used.
If NIBBLE is used, processing parameter message CPX11I will specify NIBBLE.
143
Chapter 6: Display Processing Keywords
NIBBLE may be used only with DATA comparison logic; no bytes are underscored with TEXT
comparison logic.
See “FORMAT=02, DECIMAL, NIBBLE (Excerpts)” on page 132 for an example of NIBBLE
on the difference report.
PAGE
PAGE specifies the number of print lines on each page. The PAGE value being used is
specified by processing parameter message CPX08I.
Keyword Format
PAGE={58}
{nn}
The nn value may be between 10 and 99999999. The default value is 58. This number sets
the maximum number of lines to be printed on a page.
A low value for PAGE, such as 10, will cause more pages to be printed because Comparex
will advance to the top of the page and write the two heading lines (showing time, date, page
number, and input file data set names) each time that number of lines has been written.
A high value for PAGE, such as 999999, will eliminate most of the page headings and cause
Comparex to print over the fanfold page boundaries, perhaps saving some paper.
Keyword Examples
PAGE=76
PAGE=(999)
PLUS
PLUS specifies the character used as the underscore on the difference report for excess
bytes, if the record from SYSUT2 is longer than the record from SYSUT1.
The plus character also is used as the surrounding character if FRAME is specified with
TEXT processing.
Keyword Format
PLUS={C'+'}
{t'vv'}
The plus value being used is specified by processing parameter message CPX11I. In
addition, the plus character is shown immediately to the right of the word ‘DIFFERENCE.’ At
the end of processing, Comparex shows a count of excess bytes underscored as the second
figure in message CPX74I.
144
Serena® Comparex® 8.7 for z/OS User’s Guide
The default value is a plus character. You may specify any other character or hexadecimal
value. If character data is given, only one value is used (such as C‘*’); if hexadecimal data is
given, two values are used (such as X‘4F’).
Excess bytes are not underscored with TEXT processing logic.
The excess bytes are underscored with the plus character on both the left-hand
(hexadecimal) portion of the report and the right-hand (alphanumeric) portion of the report.
Comparex will accept any value given; you need only to be certain the value is a printable
character.
Keyword Examples
PLUS=C'*'
PLUS=X'5C'
The following example illustrates the use of PLUS=C‘)’ on the difference report.
101 O N E
44444444444444444444 O N E
00000000000000000000 O N E
101 T W O
444444444444444444444444444444 T W O
000000000000000000000000000000 T W O
)))))))))) -DIFFERENCE)
PRINT
PRINT specifies which synchronized MATCHs or MISMATCHs will be printed.
This form of the PRINT keyword may be used with DATA comparison logic or with
DIRECTORY (which is a variation on DATA logic). The defaults are MATCH and MISMATCH.
The PRINT parameters being used are specified by processing parameter message CPX05I.
Keyword Format
PRINT={MATCH}
{NOMATCH}
145
Chapter 6: Display Processing Keywords
{MISMATCH}
{NOMISMATCH}
{FULL}
Options
MATCH and NOMATCH are mutually exclusive; MISMATCH and NOMISMATCH are
mutually exclusive.
FULL All records from SYSUT1 will be printed in context with the
differing records. This is not applicable to Random KEYs or
CSECT parsing.
Keyword Examples
PRINT=NOMATCH
PRINT=(MATCH,NOMISMATCH)
PRINT=FULL
UNICODE
Translates UNICODE input into readable format on the alphanumeric section of the
difference report.
UNICODE, EBCDIC, and ASCII are mutually exclusive. EBCDIC is the default value.
If UNICODE translation is being used, processing parameter message CPX08I will specify
UNICODE.
146
COPYFILE TO OUTPUT FILES
7
Comparex lets you copy records from the input files to an output file [SYSUT3] or multiple
output files [SYSUT3A through SYSUT3E].
During TEXT comparisons, you can copy only the records that differ, but during DATA
comparisons, you can copy the records that either match or differ. You can also generate
change control cards (Insert, Delete, and Replace) for your own delta deck processing
program.
What you will find in this chapter:
• “Copyfile Keywords” on page 147
• “Output Definition SYSUT3” on page 148
• “Output Definitions SYSUT3A Through SYSUT3E” on page 149
• “Copying Matching Records” on page 161
• “Copying Differing Records” on page 150
• “Copying Matching and Differing Records Concurrently” on page 162
• “Generating Delta Deck Control Cards” on page 156
• “Delta Deck Examples” on page 159
COPYFILE KEYWORDS
Keywords Descriptions Pages
SYSUT3 Specifies an optional output file to be written if 148
COPYSAME or COPYDIFF are specified.
Compare types: Data, Text, Directory
147
Chapter 7: Copyfile to Output Files
INSERT Specifies control card text for inserted records in delta 157
decks.
Compare type: Text
DELETE Specifies control card text for deleted records in delta 157
decks.
Compare type: Text
SYSUT3
You can use the SYSUT3 keyword to specify a different data set organization [DSORG] for
your output file, such as VSAM or ISAM.
If you specify SYSUT1 as DUMMY, or if the JCL specified a null file for file SYSUT1
(//SYSUT1 DD DUMMY), you can also copy all the SYSUT2 records to the output file.
Keyword Format
SYSUT3={QSAM}
{ISAM}
{[(]VSAM[,PASSWORD=password][)]}
{DUMMY}
148
Serena® Comparex® 8.7 for z/OS User’s Guide
Note
Any overrides to these SYSUT3x data set parameters, although tolerated, can
lead to unexpected results.
Keyword Format - where ‘x’ can be ‘A’, ‘B’, ‘C, ‘D’, ‘E’
SYSUT3x={{DISK} ,BLKSIZE={80},RECFM={F}[B][,LRECL=nn]
{DUMMY}
Keyword Example
SYSUT3A=’somnode.COMPAREX.SPLITA’
149
Chapter 7: Copyfile to Output Files
Note
The COPYSPLIT keyword can also be used to copy differing records to output
files. See “COPYSPLIT” on page 162 for more information.
150
Serena® Comparex® 8.7 for z/OS User’s Guide
No Fields (DATA)
If DATA file comparison logic is being used, and if field comparison is not being done, and if
any byte is different on the synchronized records, the SYSUT2 record is identified as
differing.
151
Chapter 7: Copyfile to Output Files
Example: Create a SYSUT3 file whose records are selected by account number
criteria
Note
To create a test file of selected records where account number contains the set
of digits ‘06’ in the first byte and ‘5’ in the third byte, use these keywords:
COPYDIFF
COPYDIFF specifies that differing, not matching, records from the original file (SYSUT1) as
compared to records from the modified file (SYSUT2) are written to the copyfile (SYSUT3).
Primarily, COPYDIFF works with DATA and TEXT comparison logic, but you can specify only
a format type, such as Panvalet or IEBUPDTE, while doing TEXT processing.
COPYDIFF can also work with DIRECTORY by selecting MEMBER as a format type to write
only the member names of directories to the output file (SYSUT3).
152
Serena® Comparex® 8.7 for z/OS User’s Guide
Before being written to SYSUT3, differing text records are preceded by a formatted change
control record. Subsequent input of this SYSUT3 file (delta deck) into the proprietary library
management software creates an audit trail of the changes.
If COPYDIFF and SYSUT1=DUMMY are specified, or if SYSUT1 points to a null file, all
records on SYSUT2 that pass any filter-type tests are written to SYSUT3. SYSUT3 must be
QSAM, VSAM, ISAM, or DUMMY. If COPYDIFF is specified and SYSUT3=DUMMY,
Comparex issues message CPX16A - “SYSUT3 COPY FILE MISSING, INVALID, OR
DUMMY - COPYDIFF NULLIFIED” with a return code of 4, and continues processing.
The SYSUT3 data set attributes are specified through JCL.
Keyword Format
COPYDIFF [= {OTH} ]
[= {IEBUPDTE}][,SEQFLD='ddl[,ddl]'[)]
[= {MEMBER} ]
[= [,FormatType=][,STAMP=][,VERS=][,PASS=][,TEMP=][,RESEQ=]]
153
Chapter 7: Copyfile to Output Files
• (TEXT) In a ChangeMan ZMF, GEM, Panvalet, or Librarian SYSUT3 file, you can specify
if:
— a time stamp appears (and its format).
— the version date and time appears and its format.
— the member’s password appears.
— the change to the library or member is permanent or temporary.
— the members will be renumbered if the delta deck is applied.
154
Serena® Comparex® 8.7 for z/OS User’s Guide
-SEL member,VERS=mmdd
VERS=YESHHMM means that the month, day, hour, and minute will be generated in the
format:
-SEL member,VERS=mmddhhmm
-SEL member,pass,VERS=mmdd,TEMP
or
++UPDATE member,3,TEMP
or
-UPDATE member,TEMP
or
<UPDATE member,TEMP>
155
Chapter 7: Copyfile to Output Files
-SEL libmembr,pass,RESEQ
-UPDATE gemmember,NUM
Keyword Examples
COPYDIFF
COPYDIFF=PAN
COPYDIFF=(LIB,VERS=NO,PASS=NO)
COPYDIFF=(GEM,STAMP=YES,RESEQ=YES)
COPYDIFF=(IEBUPDTE,SEQFLD='738,783')
COPYDIFF=CMN /* ChangeMan ZMF format */
156
Serena® Comparex® 8.7 for z/OS User’s Guide
INSERT
INSERT specifies the text to be inserted on the Insert control card for the delta deck in your
proprietary delta deck program. You must specify a format type of COPYDIFF=OTHer or
COPYDIFF=MEMBER.
If you do not select OTHER or MEMBER as the format type, these values are set:
Keyword Format
INSERT={C'xxx'}
{xxx}
Keyword Examples
COPYDIFF=OTH,INSERT=C'/ INS '
COPYDIFF=OTH,INSERT=PUT-HERE
DELETE
You can specify the text for the Delete control card in your proprietary delta deck program.
You must specify a format type of COPYDIFF=OTHer or COPYDIFF=MEMBER.
If you select any format type other than OTHER or MEMBER, these values are set:
157
Chapter 7: Copyfile to Output Files
Keyword Format
DELETE={C'xxx'}
{xxx}
Keyword Examples
COPYDIFF=OTH,DELETE=C'/ DEL '
COPYDIFF=OTH,DELETE=DEL-HERE
REPLACE
You can specify the text for the Replace control card in your proprietary delta deck program.
You must specify a format type of COPYDIFF=OTHer or COPYDIFF=MEMBER.
If you select any format type other than OTHER or MEMBER, these values are set.
Keyword Format
REPLACE={C'xxx'}
{xxx}
Keyword Examples
COPYDIFF=OTH,REPLACE=C'/ REP '
COPYDIFF=OTH,REPLACE=REP-HERE
158
Serena® Comparex® 8.7 for z/OS User’s Guide
Example 1: COPYDIFF=(PAN,STAMP=NO,TEMP=YES)
++UPDATE membername,1,TEMP
++C 21,21
002100 02 ONLY-REST-OF-REC.
00002100
002200 05 ONLY-DISP PIC XXX.
00002200
002300 05 ONLY-UNIT PIC X(8).
00002300
002400 05 ONLY-VOL PIC X(6).
00002400
002500 05 FILLER PIC X(83).
00002500
++C 38,38
++C 46,46
004900 MOVE ZERO TO RETURN-CODE
00004900
Example 2: COPYDIFF=(LIB,VERS=YESHHMM,STAMP=NO)
-SEL member,pass,VERS=07311659
-REP 2100
002100 02 ONLY-REST-OF-REC.
00002100
002200 05 ONLY-DISP PIC XXX.
00002200
002300 05 ONLY-UNIT PIC X(8).
00002300
002400 05 ONLY-VOL PIC X(6).
00002400
002500 05 FILLER PIC X(83).
00002500
-DEL 3800
-REP 4600
004900 MOVE ZERO TO RETURN-CODE
00004900
-EMOD
-END
159
Chapter 7: Copyfile to Output Files
Example 3: COPYDIFF=(GEM,PASS=NO,STAMP=YES,RESEQ=YES)
- UPDATE member,VERS=0731,RESEQ
87101513
- REP 2100
87101513
002100 02 ONLY-REST-OF-REC.
87101513
002200 05 ONLY-DISP PIC XXX.
87101513
002300 05 ONLY-UNIT PIC X(8).
87101513
002400 05 ONLY-VOL PIC X(6).
87101513
002500 05 FILLER PIC X(83).
87101513
- DEL 3800
87101513
- REP 4600
87101513
004900 MOVE ZERO TO RETURN-CODE
87101513
Example 4: COPYDIFF=IEBUPDTE
./CPX CHANGE NAME=member,SEQFLD=(738,738)
002100 02 ONLY-REST-OF-REC.
00002100
002200 05 ONLY-DISP PIC XXX.
00002101
002300 05 ONLY-UNIT PIC X(8).
00002102
002400 05 ONLY-VOL PIC X(6).
00002103
002500 05 FILLER PIC X(83).
00002104
./CPX DELETE SEQ1=3800,SEQ2=3800
004900 MOVE ZERO TO RETURN-CODE
00004600
Example 5: COPYDIFF=(CMN,STAMP=YES,TEMP=YES)
<UPDATE member,TEMP>
<*STAMP 2006/04/15;15:59:59 SATURDAY APRIL 15, 2006>
<21,21>
160
Serena® Comparex® 8.7 for z/OS User’s Guide
002100 02 ONLY-REST-OF-REC.
94020115
002200 05 ONLY-DISP PIC XXX.
94020115
002300 05 ONLY-UNIT PIC X(8).
94020115
002400 05 ONLY-VOL PIC X(6).
94020115
002500 05 FILLER PIC X(83).
94020115
<38,38>
<46,46>
004900 MOVE ZERO TO RETURN-CODE
94020115
Note
The COPYSPLIT keyword can also be used to copy matching records to output
files. See “COPYSPLIT” on page 162 for more information.
COPYSAME
If you specify COPYSAME, all equal records from modified file (SYSUT2) as compared to
records from original file [SYSUT1] are written to the output file [SYSUT3]. After the output
file [SYSUT3] is successfully opened, Comparex issues message CPX16I to display the
SYSUT3 data set name and attributes.
Keyword Format
COPYSAME
Keyword Example ‘
COPYSAME
161
Chapter 7: Copyfile to Output Files
If Comparex opens file SYSUT3 but no records were written to the file, Comparex closes the
file and shows the record count of zero for file SYSUT3 with message CPX75I.
If Comparex is unable to open file SYSUT3, the record count is blank in message CPX75I.
All of the output files are optional. They may be omitted or allocated as DUMMY. Records are
only written to those files specified in your JCL. See “Output Definitions SYSUT3A Through
SYSUT3E” on page 149 for information on specifying these files.
COPYSPLIT only works with DATA comparisons.
Note
COPYSPLIT works optimally when a KEY is specified. If KEY is not specified,
Comparex will not know how to match the records.
COPYSPLIT
If you specify COPYSPLIT, Comparex will write to up to five different output files.
162
Serena® Comparex® 8.7 for z/OS User’s Guide
After the output files [SYSUT3A through SYSUT3E] are successfully opened, Comparex
issues message CPX16I to display the SYSUT3x data set names and attributes. If Comparex
is unable to open any of the files, the message CPX16A is displayed indicating the file was
missing, invalid, or specified as DUMMY.
Keyword Format
COPYSPLIT
Keyword Example
COPYSPLIT
163
Chapter 7: Copyfile to Output Files
164
USING COMPAREX
INTERACTIVELY 8
ISPF INTERFACE
The ISPF interface to Comparex allows the TSO/ISPF user to enter interactive comparison
requests for common file types (sequential, PDS, VSAM, and ISAM), for DB2 relational
database tables, and for widely used library management systems such as CA-Panvalet and
CA-Librarian.
NOTE Some database systems like IDMS and DL/1 are beyond the scope of
the ISPF interface, as they have too many exotic requirements such as special
DD cards. The Comparex batch interface can be used to process these files.
165
Chapter 8: Using Comparex Interactively
0 - SHORT CUT - Single screen for options and data set names (recommended)
1 - OPTIONS - Specify compare options for this session
2 - FILES - Specify data set names or files to be compared
3 - SAVE - Save options profile for future sessions
4 - LOAD - Select/Delete options profile from prior session(s)
5 - CLEAR - Clear previously loaded profile
6 - FOREGROUND - Invoke SERENA COMPAREX in the foreground and wait
7 - BACKGROUND - Invoke SERENA COMPAREX as a submitted batch job
8 - BACKGROUND - Similar to above but edit job (and optionally SUBMIT)
9 - PARSE - Parse COBOL Copylib for keyword assistance
M - M+R - Invoke Merge+Reconcile
X - EXIT - Exit
0 - Short Cut Requests the shortcut panel (CPXSHORT), which prompts you for the most
commonly used comparison parameters. The shortcut panel also accepts
free-format keywords for options that apply to both input files. This is the
recommended option for quickly specifying the majority of interactive file
comparisons. Use it as an alternative to Options 1, 2, and 9.
1 - Options Specify comparison options for both input files using multiple panels that
prompt you for the full range of Comparex options. Use this option for
complex comparisons or when becoming familiar with new functions.
2 - Files Specify dataset names (for native z/OS sequential files, ISAM or VSAM files,
or PDS and PDSE datasets) or path and file names (for z/OS Unix
Hierarchical File System files) of the input files to be compared. Use this
option for complex comparisons or when becoming familiar with new
functions.
3 - Save Save the comparison options currently in effect to an option profile for
reuse in another session.
4 - Load Load a previously saved option profile for reuse.
5 - Clear Clear a previously loaded option profile.
6 - Foreground Executes the currently specified comparison job in the foreground.
7 - Background Submits the currently specified comparison job for background execution.
8 - Background Generates the control statements for the current comparison job, then
presents them for review and editing. Optionally submits the edited job for
background execution.
9 - Parse Invokes the copylib parser, which provides interactive assistance with
FIELD, MASK, IDENTITY, KEY, FILTER, and DESEN keywords for
files associated with a COBOL, Assembler, or PL/I copybook layout.
(See Chapter 9, “Copybook and Copylib Assisted Comparisons”.)
M - M+R Invoke Merge+Reconcile option. (Appears only if option is installed.)
X - Exit Exit Comparex.
166
Serena® Comparex® 8.7 for z/OS User’s Guide
Interactive Workflow
In general, the your work in the ISPF interface to Comparex proceeds as follows:
1. Specify the files to be compared and the comparison options to be used, using one of the
following methods:
• Option 0 - Short Cut lets you specify two input files and basic comparison options on
one panel. Free-format keywords may be specfied from memory, but there is no
prompting for these. Use this option with most common comparisons.
= OR =
• Option 1 - Options presents a set of subpanels for selecting global comparison
options that apply to both input files. Prompts are provided for all keyword options.
• Option 2 - Files presents subpanels for identifying the files or directories to be
compared and for specifying file-level comparison options, such as character
encoding differences. Prompts are provided for all keyword options.
• Option 9 - Parse invokes the COPYLIB parser, which uses a pre-existing COBOL,
Assembler, or PL/I COPYLIB layout to assist you in interactively specifying field-level
or byte-level comparison options for one or both input files.
2. Save your comparison options in a named profile for later reuse using Option 3 - Save.
3. Run your comparison job, using one of the following methods:
• Option 6 - Foreground executes the comparison job in the foreground and displays
the results on screen. This is the prefered method for well-tested comparison
specifications that don’t need verification or editing and for small files that will not tie
up your terminal for a long time.
= OR =
• Option 7 - Background immediately submits the comparison job for execution in the
background and spools the output to SYSPRINT. Recommended for well-tested
comparison specifications that don’t need verification or editing and for large files or
complex comparison jobs that would tie up your terminal unacceptably.
= OR =
• Option 8 - Background presents the Comparex specifications generated from your
entries and allows you to edit them as needed. After review and editing, you may
optionally submit the comparison job for execution in the background. Recommended
for testing new functionality and complex comparison specifications.
4. Exit Comparex.
Keyword Support
The interactive interface to Comparex supports the same native keywords that are enabled
for the batch interface. This includes free-format global keywords, file-level keywords, and
field-level or byte-level keywords within a file or dataset. However, with only a few exceptions
for CA-Panvalet and CA-Librarian, keywords specific to third-party library managers and
167
Chapter 8: Using Comparex Interactively
databases are managed through the batch CPXIFACE customization interface and are not
supported interactively.
Native interactive support for DB2, including free-format SQL specifications for both SYSUT1
and SYSUT2 input files, is discussed in a separate chapter.
168
Serena® Comparex® 8.7 for z/OS User’s Guide
CPXOPHLQ ----- High-Level Qualifier And Common Profile Data Set -----
Command ===>
Press ENTER to register and stay; Enter END command to register and exit.
To copy a private profile to a shared one, or vice-versa, load that profile from the
one profile pool then save it again into the other profile pool.
Comparex saves the current profile and prevents it from being lost if a session
times out.
169
Chapter 8: Using Comparex Interactively
Now, the ISPF Panel CPXOPDTO is displayed asking you to decide between DATA, TEXT,
and free-form keywords.
1 - DATA Comparison
2 - TEXT Comparison
3 - Enter free-form keywords
DATA and TEXT are mutually exclusive. The third option (free-form keywords) allows you to
specify DATA or TEXT and all of the associated keywords in native format. So, let’s assume
we want to make a DATA comparison. Enter 1 at:
Option ===> 1
170
Serena® Comparex® 8.7 for z/OS User’s Guide
Now, the ISPF Panel CPXOPDAT is displayed asking you to further clarify how to compare
these DATA files.
All we know about these files is that there is a KEY in byte positions 6 through 19 (relative to
one, because MODE=SYSTEMS has not been specified). Because we do not want a
runaway compare at the first inserted record, we must specify some kind of KEY
Synchronization to isolate any inserted/deleted records, get back in sync, and continue on.
We do this by entering 2 at:
Option ===> 2
Now, the ISPF Panel CPXOPSYK displays allowing you specify the synchronizing KEY (up to
five may be specified).
Press Enter to register and stay, or press End to register and exit.
Because the KEY is in the same position in both files, we don’t have to bother with the fields
under KEY TWO.
The displacement is 6 and the length is 14 (bytes 6 through 19 inclusive).
The default format is C (character) but the key itself could be combinations of packed, zoned,
binary, and character data.
The sequence is A (ascending) and could have been left blank, because that is the default.
171
Chapter 8: Using Comparex Interactively
At this point, we should press Enter to register what we have specified (otherwise, it is
possible to pass dialog variables containing garbage into module CPX$ISPF which might
abend later). After registering the specifications, issue the
End (PF3) command
or
Return (PF4) command
Repeatedly pressing (PF3) retraces your steps back through the panels just visited. A quicker
way, however, is to issue the Return command either explicitly, or with a PF key. In this case,
you will return directly to ISPF Panel CPX@PRIM. You can also jump into the ISPF Panel
CPXOPSYK by typing:
then pressing either End or Return to take you back to your starting point. Assuming that you
return to ISPF Panel CPX@PRIM, you can:
Specify the data set names using Option 2, then invoke Comparex
or
Invoke Comparex in the Foreground, using Option 6, and be prompted for the data set
names.
Let’s assume that no data set names have been left over from any prior sessions (otherwise,
you could have used Option 5 to clear out previous selections first), and invoke Comparex in
the foreground like this:
Option ===> 6
Now ISPF panel CPXOPDS1 is displayed, requesting that you type a data set, file, or table
name for SYSUT1.
ISPF LIBRARY:
PROJECT ===>
LIBRARY ===>
TYPE ===>
MEMBER ===> DATA SET PASSWORD ===> (If Protected)
172
Serena® Comparex® 8.7 for z/OS User’s Guide
A native z/OS data set name can be specified using three nodes in regular ISPF
nomenclature, as follows:
ISPF LIBRARY:
PROJECT ===> abc_____
LIBRARY ===> data____
TYPE ===> file1___
MEMBER ===> ________
To specify a z/OS Hierarchical File System (HFS) file, enter the full path and file name in the
Dataset Name field under Other Partitioned or Sequential Data Set. For example:
OTHER PARTITIONED or SEQUENTIAL DATASET or z/OS UNIX file:
DATASET NAME ===> /u/userid/abc/data/file1
Click the plus sign (+) at right if more space is needed to enter the complete path and file
name. The total path plus file name may not exceed 1024 characters interactively, or 256
characters in JCL/REXX.
To specify a particular character encoding for this file, type an IBM-standard numeric
Character Code Set Identifier (CCSID) in the CCSID field. ASCII, EBCDIC, and UNICODE
character encodings are all supported. For example:
CCSID ===> 01200___
A CCSID value of 01200 specifies that the UTF-16 Big Endian variant of Unicode should be
used with the named file. Other common CCSID codes include 01140 for EBCDIC English
with dollar and euro currency symbols and 00437 for 8-bit ASCII with MS-DOS special
characters. A more complete list of CCSIDs appears in the table on page 94. It is the user’s
responsibility to ensure that you are using the correct CCSIDs for your installation.
Press ENTER. Assuming that the dataset or file exists (that is, it is cataloged on an
accessible disk pack), the file for SYSUT1 is allocated.
When panel CPXOPDS2 is displayed, enter a data set name for SYSUT2 similarly.
ISPF LIBRARY:
PROJECT ===>
LIBRARY ===>
TYPE ===>
MEMBER ===> DATA SET PASSWORD ===> (If Protected)
173
Chapter 8: Using Comparex Interactively
This time you will enter the data set name in the OTHER data set name area and intentionally
generate an error this way:
OTHER PARTITIONED OR SEQUENTIAL DATA SET:
and press Enter. Assuming that this data set does not exist, you will receive a prompting
message in the upper right corner of the panel:
Press Enter to register and stay, or press End to register and exit.
When Comparex finishes comparing the two data sets, the difference report is presented for
browsing. At this point, we are under program (CPX$ISPF) control - not panel control. Do not
enter the Return command now. When you are finished scrolling (up and down, left and right)
through the difference report, press (PF3).
174
Serena® Comparex® 8.7 for z/OS User’s Guide
The following screen is displayed prompting for a disposition of the dynamically allocated
SYSPRINT file.(ISPF Panel CPXREPRT)
The default is to keep the data set. You will override that disposition to Print and Delete it so
you can clean up, like this:
REPORT DISPOSITION ===> pd (P=Print) (K=Keep) (D=Delete)
(PD=Print and delete)
(JD=Submit a job to print and delete)
(JK=Submit a job to print and keep)
LOCAL PRINTER ID
Now press Enter. Whatever TSO command has been generated at install time is invoked to
route the difference report to a local (site 10) printer.
Upon return to ISPF panel CPX@PRIM, a short message will be issued at the top right
corner stating that the difference report has been printed and deleted. Entering the Help
command (usually PF1) gives this long ISPF message:
175
Chapter 8: Using Comparex Interactively
ENTER FREE-FORM KEYWORDS BELOW: (No Syntax Checking Done on the Panel)
===> *<--ASTERISK IN COLUMN 1 DENOTES COMMENT, REMOVE TO USE LINE____________
===> * TEXT=COBOL,PRINT=MLC,MBRHDR=COND /* COBOL TEXT FADE-IN/OUT___________
===> * DATA=CSECT,MODE=SYS,MBRHDR=COND /* LOAD MODULES (SYSTEM)____________
===> * KEY=(3,8),FOROUT=(9,GE,C'G2'),MASK=(67,7) /* FLAT DATA________________
Press ENTER to register and stay; enter END command to register and exit.
You will enter the two data set names to compare in the “ISPF FILE” nomenclature like this:
SYSUT1 ISPF FILE: SYSUT2 ISPF FILE:
PROJECT ===> abc_____ PROJECT ===> abc_____
LIBRARY ===> text____ LIBRARY ===> text____
TYPE ===> pds_____ TYPE ===> pds2____
MEMBER ===> cob904ab MEMBER ===> cob904ab
The listed (commented) free-form keywords are suggestions for comparison methodologies.
Overstrike and/or erase as necessary to enter what database want. Because you already
know that these two members are Cobol program source code, you only need to specify:
and press Enter. After registering them to ISPF, press PF3 to return to the main menu again.
Now, invoke Comparex as a submitted batch job like this:
Option ===> 7
176
Serena® Comparex® 8.7 for z/OS User’s Guide
ISPF panel CPXJOBST is presented, asking if there are any changes to be made to the job
card image last used.
JOB STATEMENT:
Overtype any changes to be made in the job card, then press Enter. The following message
is displayed:
This is the response to the TSO Submit command. There will be three asterisks at the bottom
of the screen. Press Enter one more times to return to the primary menu. The background job
you just submitted will start shortly.
The “No syntax checking done on panel” comment is not completely true; the four lines of
panel CPXSHORT and the additional six lines of panel CPXOPFFK are indeed parsed for the
usage of the COPYDIFF or COPYSAME keyword. If discovered, then an attempt to allocate
and open SYSUT3 is made.
177
Chapter 8: Using Comparex Interactively
ENTER FREE-FORM KEYWORDS BELOW: (No Syntax Checking Done on the Panel)
===> DIR=HFS_________________________________________________________________
===> EXPAND__________________________________________________________________
===> UNICODE_________________________________________________________________
===> ________________________________________________________________________
Press ENTER to register and stay; enter END command to register and exit.
z/OS Unix file and directory information is specifed at the SYSUTx DSNAME ==> prompts.
Specify the complete paths to the top-level nodes of the two directories to be compared using
standard z/OS Unix syntax. For example:
OTHER Partitioned, Sequential, VSAM, or ISAM dataset or z/OS UNIX file:
SYSUT1 DSNAME ===> '/u/user0001/testdir1’ +
SYSUT2 DSNAME ===> '/u/user0001/testdir2' +
Long names are supported up to a total path length of 256 bytes. Click the plus sign (+) at
right as needed to expand the data entry field to accept a longer path name.
The following free-format keywords are frequently used with z/OS Unix directory
comparisons:
• DIR=HFS specifies that a directory comparison rather than a file comparison is desired,
and that the directory is a z/OS Unix Hierarchical File System (HFS) directory. This
keyword is required for HFS directory comparisons.
• EXPAND is an optional keyword that instructs Comparex to recursively expand all
subdirectories within both top-level directories and include their contents in the
comparison. This keyword is optional. If it is omitted, only the top-level directories are
compared. The EXPAND keyword may only be used in HFS directory comparisons.
• UNICODE sets the character encoding for this comparison to the default UNICODE
variant configured for your installaation. Generally this is code page 01200 for UTF-16
Big-Endian with IBM mainframe special characters. The UNICODE keyword is not
restricted to z/OS Unix and may be used with any file system on the mainframe.
178
Serena® Comparex® 8.7 for z/OS User’s Guide
Press ENTER to register your comparison options with ISPF, then press PF3 to return to the
main ISPF menu. Select Option 7 - Foreground from the Comparex/ISPF Primary Menu
to execute your comparison in the foreground and view the results online.
Option ===> 2
Now, ISPF panel CPXOPDSN is displayed asking you to specify one of SYSUT1 or SYSUT2.
Option ===> 1
Now panel CPXOPDS1 will again be presented, requesting you to fill in a data set name for
SYSUT1. Fill in the name of the Panvalet master file like this:
OTHER Partitioned or Sequential dataset or z/OS UNIX file:
DATASET NAME ===> 'sys2.panvalet.master'
VOLUME SERIAL ===> ________ (If Not Cataloged)
UNIT ===> ________ (If Not Cataloged)
Press Enter, correct any syntax errors, then press PF3. CPXOPDSN is displayed again,
asking you to pick SYSUT1, SYSUT2, or SYSUT3.
Choose SYSUT2 by entering 2 at:
Option ===> 2
CPXOPDS2 is displayed again, requesting you to fill in a data set name for SYSUT2. Specify
an existing partitioned data set like this:
OTHER Partitioned or Sequential dataset or z/OS UNIX file:
Press Enter, correct any syntax errors, then press PF4. CPX@PRIM is displayed.
179
Chapter 8: Using Comparex Interactively
Option ===> 8
Now we are editing (via PDF EDIT) a dynamically allocated job that can be optionally
submitted at this point. Just after the job card images are some comments that you should
pay attention to:
//* C O M P A R E X BATCH EXECUTION
//* YOU MAY EDIT THIS DATA SET AT WILL. WHEN YOU
//* ARE FINISHED, "SUBMIT" AT THE COMMAND ===> SUB
//* IF YOU DON'T SUBMIT, THE DATA SET IS JUST DELETED
Because we didn’t specify any options, or we got the ones carried over from last execution,
we have the opportunity to modify them now. Find the SYSIN statement,
//SYSIN DD *
DIR=PDF
We want to compare the directories only of the Panvalet master against the PDS. See
“DIRECTORY” on page 100 for a description of what PDF means.
Now submit the job by typing:
then pressing Enter. The job will be submitted, and a message displays the job number. Now
press PF3 to end the edit session. The job data set will be deleted automatically, and ISPF
panel CPX@PRIM is displayed.
Parsing Copybooks
If you are doing a DATA comparison, and the files to be compared have an associated
COBOL, Assembler or PL/I Copylib layout, you can use the Comparex provided assist to
generate accurate FIELD, MASK, IDENTITY, KEY, FILTER, and DESEN keywords. Without
this facility, an application programmer would need to manually investigate a copybook and
enter all of the field statements.
Note that Comparex can parse imbedded DB2 DCLGEN copylibs.
To invoke this facility, select option 9, PARSE COPYLIB, from the primary Comparex menu.
The Copylib library name can be specified as either a standard ISPF three-part name, or as a
contiguous string.
If the copybook resides in a PDS, then you can enter a name in the MEMBER ==> line, or
type the data set name and member in the DATA SET NAME ===> line. For a PDS only, if
you omit the member name, a member list will be displayed for you to select the member. For
PDSs, you need to specify MVS in the DATA SET TYPE ===> line.
180
Serena® Comparex® 8.7 for z/OS User’s Guide
If you want to parse copybook members from a Panvalet or Librarian library, you need to
specify PAN or LIB in the DATA SET TYPE ===> line. Then, you must define a member name
(1 to 10 characters for Panvalet, 1 to 8 characters for Librarian) in the MEMBER IF PAN/LIB
===> line.
To parse a copybook that exists in a Panvalet or Librarian library, the user interface that is
compiled at install time must be called CPXIFACE. No alternative name can be given. It must
be generated with Panvalet or Librarian turned on, depending on which you want to use.
The default 01 level to begin the parsing is the first 01 in the copybook.
• If you prefer to use a different 01 level, specify that name at the Level 01 Name: location.
• If the level 01 name is blank, the first level name found will be used.
• If you want to override this action, you may enter a name in the Level 01 Name field on
panel CPXCBCBM.
• If the first statement of the copybook is a REDEFINES statement, and it is not an 01 level
statement, you can enter the name of the statement and it will be handled as an 01 level
statement.
181
Chapter 8: Using Comparex Interactively
182
COPYBOOK AND COPYLIB
ASSISTED COMPARISONS 9
COPYBOOK AND COPYLIB PARSER
If you do a DATA comparison, and if the files to be compared have an associated copybook
or copylib layout, you can use the COMPAREX parser to generate accurate FIELD, MASK,
IDENTITY, KEY, FILTER, and DESEN keywords. Without this facility, you would have to
investigate a copybook manually, and enter all of the keyword statements individually.
The COMPAREX parser will parse COBOL, PL/1, and Assembler copylibs, as well as DB2
DCLGENs. Note that currently, a PL/1 copybook with the VARYING keyword cannot be
parsed.
The following instructions illustrate parsing a COBOL copybook.
A simple COBOL copybook is delivered in somnode.COMPAREX.IFACE(COBOL); the
associated data is in somnode.COMPAREX.IFACE(COBOLD1) and
somnode.COMPAREX.IFACE(COBOLD2).
To invoke the parser, select Option 9 from the COMPAREX Primary Menu, CPX@PRIM.
0 - SHORT CUT - Single screen for options and dataset names (recommended)
1 - OPTIONS - Specify compare options for this session
2 - FILES - Specify dataset names or files to be compared
3 - SAVE - Save options profile for future sessions
4 - LOAD - Select/Delete options profile from prior session(s)
5 - CLEAR - Clear previously loaded profile
6 - FOREGROUND - Invoke SERENA COMPAREX in the foreground and wait
7 - BACKGROUND - Invoke SERENA COMPAREX as a submitted batch job
8 - BACKGROUND - Similar to above but edit job (and optionally SUBMIT)
9 - PARSE - Parse Copylib for keyword assistance
X - EXIT - Exit
183
Chapter 9: Copybook and Copylib Assisted Comparisons
ISPF LIBRARY:
PROJECT ===> _________
LIBRARY ===> _________
TYPE ===> _________
MEMBER ===> _________ DATASET PASSWORD ===> (If Protected)
Notes: If the level 01 name is blank, the first level name found
will be used; enter a name if you want to override this action.
Project somnode
Group COMPARE
X
Type IFACE___
Membe ________
r
184
Serena® Comparex® 8.7 for z/OS User’s Guide
If you supply a member name, COMPAREX parses that member. If you leave member blank,
COMPAREX displays a member list, as shown in the following figure:
As illustrated in the preceding figure, you will select member COBOL for parsing into
readable field names (for visual inspection and keyword assignment). The member list
referred to is delivered on the COMPAREX distribution tape.
The following is a fragment of data member COBOLD1 in somnode.COMPAREX.IFACE:
********************************************************************************
*
* THIS IS A VERY SIMPLIFIED PAYROLL FILE (SYSUT1 - ORIGINAL FILE)
* DESIGNED TO DEMONSTRATE CPXPARSE CAPABILITIES
*
********************************************************************************
1111223333BENEDICT, YANCEY 001MM50/03/150000
1123456789EGGER, VICTORIA 010PF39/08/081000
1123456789FRANKLIN, URSULA 001HF39/08/081500
1444556666DONALDSON, WENDY 020PF55/07/101000
1555001111CANDY, HIRAM X. 020PM55/11/111000
1555667777AARONS, ZACK 030PM45/01/161000
1993558788WAINWRIGHT, MARSHA 039SF42/07/220000
20195555559012001500016800000000000000000025200000000000000000000000000002520
20195555559015101500017600000000000800000026400000000000000001200000000002760
20195555559015101500016800120000000000000025200002700000000000000000000002790
20195555559021201500016800000000000800000025200000000000000001200000000002640
20195555559024301500018400000000000000000027600000000000000000000000000002670
20195555559027301500015200040000000800000022800000900000000001200000000002490
21112233339012003500016800000000000000000058800000000000000000000000000005880
21112233339015103500017600000000000800000061600000000000000002800000000006440
185
Chapter 9: Copybook and Copylib Assisted Comparisons
The following shows the layout for copylib member COBOL in somnode.COMPAREX.IFACE
000100***************************************************************** COBOL
000200* * COBOL
000300* THIS IS A SIMPLIFIED COBOL RECORD LAYOUT FOR OPTION 9 OF THE * COBOL
000400* ISPF INTERFACE TO PARSE AND PRODUCE LEGITIMATE KEYWORDS FOR * COBOL
000500* COMPAREX TO USE IN PERFORMING A DATA COMPARE. * COBOL
000600* * COBOL
000700* THIS IS MEMBER somnode.COMPAREX.IFACE(COBOL) * COBOL
000800* DATA FOR THIS LAYOUT EXISTS AS MEMBERS COBOLD1 AND COBOLD2. * COBOL
000900* * COBOL
001000***************************************************************** COBOL
001100 01 CPX-LOAD-RECORD. COBOL
001200 02 CPX-RECORD. COBOL
001300 05 CPX-COMMENT-RECORD PIC X. COBOL
001400 88 CPX-THIS-IS-A-COMMENT VALUE '*'. COBOL
001500 05 CPX-COMMENT-ITSELF PIC X(79) COBOL
001600 02 CPX-EMPL-DEMOG-RECORD REDEFINES CPX-RECORD. COBOL
001700 05 CPX-EMPL-DEMOG PIC X. COBOL
001800 88 CPX-EMPL-DEMOG-DATA-FOLLOWS VALUE '1'. COBOL
001900 05 CPX-EMPL-DEMOG-DATA. COBOL
002000 10 CPX-SSN-ALPHA-101 PIC X(9). COBOL
002100 10 CPX-SSN-NUMERIC-101 REDEFINES CPX-SSN-ALPHA-101 COBOL
002200 PIC 9(9). COBOL
002300 10 CPX-EMPL-NAME-101 PIC X(35). COBOL
002400 10 CPX-DEPT-NUMBER-101 PIC 999. COBOL
002500 10 CPX-EMPLOYEE-TYPE-101 PIC X. COBOL
002600 88 HOURLY VALUE 'H'. COBOL
002700 88 SALARIED-PROF VALUE 'P'. COBOL
002800 88 SALARIED-MGMT VALUE 'M'. COBOL
002800 88 SALARIED-COMMISSIONED VALUE 'S'. COBOL
002900 10 CPX-EMPL-SEX PIC X. COBOL
003000 88 FEMALE VALUE 'F'. COBOL
003100 88 MALE VALUE 'M'. COBOL
003200 10 CPX-EMPL-BIRTHDAY PIC X(8). COBOL
003300 10 CPX-EMPL-BD REDEFINES CPX-EMPL-BIRTHDAY COBOL
003400 15 CPX-EMPL-BYY PIC 99. COBOL
003500 15 FILLER PIC X. COBOL
003600 15 CPX-EMPL-BMM PIC 99. COBOL
003700 15 FILLER PIC X. COBOL
003800 15 CPX-EMPL-BDD PIC 99. COBOL
003900 10 CPX-OT-FACTOR-101 PIC S9V999. COBOL
004000 10 FILLER PIC X(18). COBOL
004100 02 CPX-EMPL-PAY-RECORD REDEFINES CPX-RECORD. COBOL
004200 05 CPX-EMPL-PAY PIC X. COBOL
004300 88 CPX-EMPL-PAY-DATA-FOLLOWS VALUE '2'. COBOL
004400 05 CPX-EMPL-PAY-DATA. COBOL
004500 10 CPX-SSN-EMPL-PAY-102 PIC X(9). COBOL
004600 10 CPX-END-DATE-102 PIC X(5). COBOL
004700 10 CPX-BASE-RATE-102 PIC S9(3)V99. COBOL
004800 10 CPX-LUMP-SUM-102 REDEFINES CPX-BASE-RATE-102 COBOL
004900 PIC S9(5). COBOL
005000 10 CPX-HOURS-WORKED-102. COBOL
005100 15 HOURS-SCHEDULED-102 PIC S9(4). COBOL
005200 15 HOURS-OVERTIME-102 PIC S9(4). COBOL
005300 15 HOURS-SICK-102 PIC S9(4). COBOL
005400 15 HOURS-HOLIDAY-102 PIC S9(4). COBOL
186
Serena® Comparex® 8.7 for z/OS User’s Guide
By selecting member COBOL from the member selection list, panel CPXCBBLD is
displayed.
Each COBOL field name (with attributes) sits behind a line command under the heading:
Keyword Op
You can page down to display the rest of the parsing. You have mitigating knowledge about
these files (they exist as members COBOLD1 and COBOLD2 in the same library). Filter out
the comment records in the first part of each file.
The first ten bytes (one byte record type, nine byte social security number) form a
synchronizing key. The fields to be compared are subject to interpretation. For this scenario,
you will choose individual fields for:
187
Chapter 9: Copybook and Copylib Assisted Comparisons
188
Serena® Comparex® 8.7 for z/OS User’s Guide
The S (selection) line command causes panel CPXCBCBE to be displayed, enabling you to
create multiple control statements from the COBOL field name (CPX-EMPL-DEMOG), as in the
following figure:
_ FIELD
_ MASK
/ KEY,A
_ KEY,D
Press ENTER to register your choice; Enter END Command to save and exit
189
Chapter 9: Copybook and Copylib Assisted Comparisons
Specify the elementary field as an ascending key by entering / (slash) next to the keyword, as
follows:
| _ FIELD
| _ MASK
| / KEY,A
| _ KEY,D
Press Enter to register the choices.
Enter the End command (usually [PF3]) to see the results of the line commands.
The selected elementary item is listed as both an ascending KEY, and as an open slot for
more line commands. As the following figure illustrates, you convert the selected item into an
IDENTITY.
190
Serena® Comparex® 8.7 for z/OS User’s Guide
Paging down (usually PF8) displays more elementary fields for assignment, as illustrated
following:
Paging down again lets you assign an IDENTITY and convert group level CPX-EMPL-PAY-
DATA into a 79 byte field, as follows.
Keyword Op Lvl Field Name
id_____ __ 05 CPX-EMPL-PAY
_______ eq 88 CPX-EMPL-PAY-DATA-FOLLOWS =
_______ __ '2'
f______ __ 05 CPX-EMPL-PAY-DATA
Paging down to the last part of the display lets you create another IDENTITY for sales
commission data, which is stored as multiple occurrences.
191
Chapter 9: Copybook and Copylib Assisted Comparisons
Note that an OCCURS DEPENDING ON clause will be parsed with only one occurrence.
A shortcut method for marking all the elementary fields in a group is to place *f (or f*) on the
group item, as follows:
Keyword Op Lvl Field Name
*f_____ __ 05 CPX-EMPL-SALES-DATA
_______ __ 10 CPX-SSN-EMPL-PAY-103
_______ __ 10 CPX-EMPL-QUARTERLY-SALES(1)
_______ __ 15 CPX-SALES-QTR-CODE-103(1)
Press Enter; each item in the group is flagged with the FIELD keyword, as shown in the
following figure:
192
Serena® Comparex® 8.7 for z/OS User’s Guide
ENTER FREE FORM KEYWORDS BELOW: (No Syntax Checking Done on the Panel)
===> MAXDIFF=20,CONTINUE
===> *
===> *
===> *
Press ENTER to register and stay; Enter END Command to register and exit.
193
Chapter 9: Copybook and Copylib Assisted Comparisons
From CPX@PRIM, you can compare the files either in the foreground (Option 6), or in the
background (Options 7 or 8). Assuming that you performed a foreground compare, the
browse might look like this:
SYSUT1=SER14.CPXP722.IFACE(COBOLD1),SYSUT2=SER14.CPXP722.IFACE(COBOLD2)
CPX51I - RECORD NUMBER 7 ON FILE SYSUT1
CPX52I - RECORD NUMBER 7 ON FILE SYSUT2 FIELD=(1,CPX-EMPL-NAME-101)
FIELD=(11,35,C,N=CPX-EMPL-NAME-101)
11 C2C5D5C5 C4C9C3E3 6B40E8C1 D5C3C5E8 40404040 40404040 40404040 40404040
43 404040
11 C2C5D5C5 C4C9C3E3 6B40E8C1 D5C3C5E8 40C5C4E6 C1D9C440 D7C8C9D3 C9D740C9
------ ------ -------- ---- --
43 C9C940
----
FIELD=(46,3,Z,N=CPX-DEPT-NUMBER-101)
46 F0F0F1
FIELD=(49,1,C,N=CPX-EMPLOYEE-TYPE-101)
49 D4
FIELD=(50,1,C,N=CPX-EMPL-SEX)
50 D4
FIELD=(51,8,C,N=CPX-EMPL-BD)
51 F5F061F0 F361F1F5
FIELD=(59,4,Z,N=CPX-OT-FACTOR-101)
59 F0F0F0F0
_
CPX62I - KEY SYNCHRONIZATION MISMATCH - RECORD 13 ON FILE SYSUT2
_
1 F1F5F7F8 F3F2F1F9 F2F5D4C1 D5E3D3C5 6B40D4C9 C3D2C5E8 40D84B40 40404040
ode.COMPAREX.IFACE(COBOLD2)
4
Y=CPX-EMPL-DEMOG-DATA-FOLLOWS
6
40 40404040 40404040 40404040 *BENEDICT, YANCEY * O N E
* * O N E
E6 C1D9C440 D7C8C9D3 C9D740C9 *BENEDICT, YANCEY EDWARD PHILIP I* T W O
-- ------ -------- ---- -- ------ ------ - -DIFFERENCE+
*II * T W O
-- -DIFFERENCE+
*001 * O N E
5
*M * O N E
7
*M * O N E
9
*50/03/15 * O N E
1
*0000 * O N E
ON FILE SYSUT2
194
Serena® Comparex® 8.7 for z/OS User’s Guide
If the difference report is printed, it would look something like the following:
SYSUT1=somnode.COMPAREX.IFACE(COBOLD1),SYSUT2=somnode.COMPAREX.IFACE(COBOLD2)
CPX51I - RECORD NUMBER 7 ON FILE SYSUT1
CPX52I - RECORD NUMBER 7 ON FILE SYSUT2 IDENTITY=CPX-EMPL-DEMOG-DATA-FOLLOWS
FIELD=(11,35,C,N=CPX-EMPL-NAME-101)
11 C2C5D5C5 C4C9C3E3 6B40E8C1 D5C3C5E8 40404040 40404040 40404040 40404040 *BENEDICT,
YANCEY *
43 404040 *
*
11 C2C5D5C5 C4C9C3E3 6B40E8C1 D5C3C5E8 40C5C4E6 C1D9C440 D7C8C9D3 C9D740C9 *BENEDICT,
YANCEY EDWARD PHILIP I*
------ ------ -------- ---- -- -
----- ------ -
43 C9C940 *II
*
---- --
FIELD=(46,3,Z,N=CPX-DEPT-NUMBER-101)
46 F0F0F1 *001
*
FIELD=(49,1,C,N=CPX-EMPLOYEE-TYPE-101)
49 D4 *M
*
FIELD=(50,1,C,N=CPX-EMPL-SEX)
50 D4 *M
*
FIELD=(51,8,C,N=CPX-EMPL-BIRTHDAY)
51 F5F061F0 F361F1F5 *50/03/15
*
FIELD=(59,4,Z,N=CPX-OT-FACTOR-101)
59 F0F0F0F0 *0000
*
195
Chapter 9: Copybook and Copylib Assisted Comparisons
196
Chapter 10
DB2 Comparisons in ISPF and Batch
The execution of a DB2 comparison proceeds in two phases. First, the desired data is
extracted from DB2 and formatted as PDS members or flat files. Comparex then
associates these files with SYSUT1 and SYSUT2 and performs the requested comparison.
Interfaces
ISPF Versus Rexx Advanced-function DB2 comparisons may be requested interactively using the ISPF
interface or in batch mode using Rexx. Both interfaces support free-format SQL queries
that dynamically generate input data streams for comparison at runtime.
The ISPF interface provides prompted assistance for dynamic SQL query generation, then
lets you edit the generated queries before execution. All request parameters may be
saved for reuse in a Comparex profile.
The batch Rexx interface permits more complex SQL queries to be executed in bulk. This
interface is provided for experienced programmers with specialized requirements.
NOTE The advanced DB2 functionality of Comparex does NOT use the CPXIFACE
interface. However, Comparex continues to support the CPXIFACE interface to DB2 for
backward compatibility with pre-existing function. Advanced DB2 features such as long
table names and dynamic SQL queries are not supported by CPXIFACE.
Information about using the CPXIFACE interface to DB2 can be found in the DB2 section
of Chapter 11, "CPXIFACE Integration with External Data Managers".
Performance
CPXZOS Best performance is achieved for DB2 comparisons using native System z support. For
this reason, Serena recommends that DB2 users install Comparex using the CPXZOS
module, which is optimized for System z, rather than the multi-platform COMPAREX
module. Instructions for installing CPXZOS are provided in the Comparex for z/OS
Installation and Setup Guide.
Requirements
Environment Advanced DB2 support in Comparex requires z/OS version 1.8 or higher. Support for long
table and column names applies only to DB2 version 8 or higher, as older versions of DB2
do not use long names.
CPX$ISPF The ISPF interface module CPX$ISPF must be configured as part of Comparex before
Configuration making advanced DB2 comparisons. For interactive users, this module is required to
enable interactive comparison prompts and SQL specification editing. But even batch DB2
comparison jobs must be submitted using the ISPF menu, since important DB2 support
functions are implemented in CPX$ISPF. See the Comparex for z/OS Installation and
Setup Guide for instructions on configuring this module.
Batch TSO TSO batch module IKJEFT01 is needed in order to execute SQL in Rexx EXECs.
IMPORTANT! Comparison between two DB2 tables is supported only if both DB2
subsystems are at the same release level and reside on the same LPAR.
On request, Comparex automatically detects all DB2 subsystems currently active on the
system and displays them for selection from a pop-up list. A similar pop-up list lets you
select the DB2 tables of interest. A dynamically generated prompt panel lets you select
the columns of interest for each table, specify how to include them in your selection and
sorting criteria, and independently designate the columns to be compared. Appropriate
SQL statements are generated from your selection criteria automatically.
Setup All DB2 panels in the Comparex ISPF interface assume that you have assigned the ISPF
ZEXPAND function to PF4. In addition, it is recommended (but not required) that you
assign the Comparex GO command to PF12.
TIP To optimize screen viewing area, a screen size of 43x80 (the 3270 Model 4
convention) is recommended.
Procedure In general, the DB2 comparison process requires the follow sequence of steps:
Summary
Selecting the DB2 Tables to Compare
Specifying Columns for Selection and Comparison
Viewing and Editing SQL Statements
Assessing the Results of the Comparison
0 - SHORT CUT - Single screen for options and data set names (recommended)
1 - OPTIONS - Specify compare options for this session
2 - FILES - Specify data set names or files to be compared
3 - SAVE - Save options profile for future sessions
4 - LOAD - Select/Delete options profile from prior session(s)
5 - CLEAR - Clear previously loaded profile
6 - FOREGROUND - Invoke SERENA COMPAREX in the foreground and wait
7 - BACKGROUND - Invoke SERENA COMPAREX as a submitted batch job
8 - BACKGROUND - Similar to above but edit job (and optionally SUBMIT)
9 - PARSE - Parse COBOL Copylib for keyword assistance
M - M+R - Invoke Merge+Reconcile
X - EXIT - Exit
2 From the ISPF Primary Menu, select Option 2 - FILES (highlighted above in red)
and press ENTER. The File Names menu (panel CPXOPDSN) displays.
3 From the File Names menu, select Option D - DB2 Table Selection and press
ENTER. If you see a row of three asterisks, press ENTER again.
Table Names 4 The DB2 Subsystem and Table Names panel (CPXDB2S1) prompts you to specify
the tables to be compared. Values supplied for the First Table are mapped to SYSUT1
and values for the Second Table are mapped to SYSUT2.
Table names up to 128 bytes in length may be entered at this panel. Position the
cursor in a Table field and press RIGHT (PF11) or LEFT (PF10) to scroll through table
names that extend beyond the width of the screen. Press EXPAND (PF4) to invoke the
ZEXPAND command and see the entire table name at once in a pop-up window.
Table specifications may entered directly if known, or they may be reused from a
previously saved Comparex session profile. You may also select from available choices
using pop-up windows.
The DB2 Subsystem and Table Names panel is shown below.
DB2 Subsystem
CPXDB2S1 ---------------- DB2 Subsystem and Table Names------------------------
and Table Names
Command ===> Current Profile: xxxx PVT*
Panel
First Table:
Table: ===> +
Second Table:
DB2 Subsystem a If you do not know the DB2 subsystem ID of the desired table, type an
Popup asterisk (*) in the appropriate DB2 Subsystem field and press ENTER. A pop-up
window displays the available DB2 subsystems. For example:
__ DSN1 INACTIVE
S_ D101 READY
__ D102 READY
__ D103 INACTIVE
__ D104 INACTIVE
__ D105 READY
__ D106 INACTIVE
__ D107 INACTIVE
__ D108 INACTIVE
Type the S line command in the option column beside the desired DB2 subsystem
to select it and press ENTER. The selected subsystem is copied to the DB2
Subsystem field of the DB2 Subsystem and Table Names panel.
Owner and Table b If you do not know the name of the desired table, type an asterisk (*) in the
Name Popup appropriate Table field and press ENTER. A pop-up window displays a list of tables
for the selected DB2 subsystem, sorted by table name within owner. For example:
Type S beside the desired DB2 table to select it and press ENTER. The selected
owner ID and table name are copied to the appropriate Owner and Table fields of
the DB2 Subsystem and Table Names panel.
Autofill Function c When a pop-up window closes, the DB2 Subsystem and Table Names panel
displays the values entered so far. Enter any remaining values that differ between
the two tables. Leave fields blank to copy entries from the First Table to the
Second Table. For example:
First Table:
Second Table:
DB2 Subsystem ===> D105 (leave blank to use the same DB2
subsystem as the first table)
Owner: ===> (leave blank to use the same
owner as the first table)
Table: ===> +
Press ENTER. Comparex populates blank fields in the Second Table with
corresponding values from the First Table. If no owners are specified, Comparex
enters your TSO user ID as the owner for both tables.
The panel is redisplayed with its autofilled values for your review. For example:
First Table:
Second Table:
DB2 Subsystem ===> D105 (leave blank to use the same DB2
subsystem as the first table)
Owner: ===> USER007 (leave blank to use the same
owner as the first table)
Table: ===> FED_E_PAYMENTS +
5 When all fields are filled on the DB2 Subsystems and Table Names panel, enter GO
at the Command ==> prompt to initiate the column selection process. Alternatively,
press PF12 if you have customized it to store the GO command.
Both DB2 tables are displayed on the column selection panel at the same time, so that
corresponding columns may be easily viewed. Table names and subsystem IDs are
highlighted in a colored box above the table’s associated columns.
Scrolling All columns defined for a table are displayed in a scrollable region immediately below
Column List the table name. To scroll through the column list, position the cursor anywhere in the
scrollable region and press DOWN (PF8) or UP (PF7). The currently displayed position
in the scrolling list is shown to the far right of the table name.
The DB2 Column Selection List panel can be used in either of the following ways:
Default Column a Include all table rows and columns in the comparison (default). To take this
Selection default option, don’t enter anything on the panel. This instructs Comparex to
generate a SELECT * statement for both tables. Skip to Step 9 below.
b Specify selection criteria for individual columns. If you choose this approach,
only columns explicitly marked with a line command in the OPT column will be
used to generate SQL SELECT statements. All other columns will be excluded from
the comparison. Proceed to Step 7 below.
7 Select the specific columns to include in the comparison. For each column in the DB2
Column Selection List panel that is relevant to the selection, sorting, or comparison
of table rows, enter the appropriate selection criteria in the following fields.
Line Command OPT — The OPT (Option) field to the left of each column name takes the
Options following line commands. Multiple commands are allowed in the same field.
Commands take effect when you press ENTER.
WHERE Predicates Predicate — The Predicate field for a column takes SQL predicate syntax for the
WHERE clause in a SELECT statement. For example, the predicate
= ‘CT’
includes all records that contain the postal abbreviation for the state of
Connecticut as the value in the selected column of the selected table.
An entry is required if the column is used in the selection criteria for including table
data in SYSUT1 or SYSUT2. Selection status is shown in the Sel display field to the
right of the column name. If selection status is not turned on, use the S-Select line
command and press ENTER to include the column in your SQL selection criteria.
Boolean Operators O/A — The O/A (Or/And) field for a column takes a Boolean operator that
specifies how the selection criteria in the predicate field should be combined with
selection criteria for other columns. An entry is required if multiple columns in a
table are used as data selection criteria. Allowed values are:
NOTE If a shortcut is entered in the O/A field, press ENTER to convert it to the
required AND or OR form. Otherise the entry will be ignored.
Registering 8 Press ENTER to register and valdate the current column selection criteria. These may
Column Selection be changed as often as required and re-registered by pressing ENTER again. To reset
Criteria all criteria for a column and start over, use the R-Reset line command.
For example, suppose you press ENTER after typing the column selection criteria
shown in the DB2 Column Selection List panel on page 202. Comparex would
register your choices and display the registered entries as shown below:
9 When satisfied with the way your selection criteria are registered on the the DB2
Column Selection List panel, enter GO at the Command ==> prompt. Alternatively,
press PF12 if you have customized it to store the GO command.
Generating 10 Comparex displays the Start DB2 Table Comparison panel (CPXDB2S5), which
SQL SELECT requests execution options for the Comparex SQL generator. For example:
Statements
CPXDB2S5------------ Comparex - Start DB2 Table Comparison--------------------
Command ===>
First Table:
Second Table:
First Table — The DB2 subsystem, owner, and name of the first table specified in
previous screens is displayed automatically for review. Change it if needed.
Second Table — The DB2 subsystem, owner, and name of the second table
specified in previous screens is displayed. Change it if needed.
12 When the Edit DB2 Select Statements panel (CPXDB2S7) displays, review the
generated SQL statements for each table to ensure the syntax is what you expect.
SQL Statement
CPXDB2S7----------- Comparex - Edit DB2 SELECT Statements ----------------------
Editing
Command ===> Current Profile: xxxx PVT*
Scroll ===> DATA__
Press ENTER to continue making changes; END command to exit. GO when ready.
SQL Select statement for:
D101 USER007.FED_E_PAYMENTS
-------------------------------------------------------------------------------
SELECT FEP_ROUTING, FEP_BANK_NAME, FEP_BANK_STATE FROM USER007.FED_E_PAYMENT
S WHERE FEP_BANK_STATE = 'CT' ORDER BY FEP_ROUTING ASC FETCH FIRST 10000 ROWS
ONLY
-------------------------------------------------------------------------------
SQL Select statement for:
D105 USER007.FED_E_PAYMENTS
-------------------------------------------------------------------------------
SELECT FEP_ROUTING, FEP_BANK_NAME, FEP_BANK_STATE FROM USER007.FED_E_PAYMENT
S WHERE FEP_BANK_STATE = 'CT' ORDER BY FEP_ROUTING ASC FETCH FIRST 10000 ROWS
ONLY
To edit the displayed SQL statement, position the cursor anywhere in the generated
string, then:
Press BACKSPACE/DEL (Delete) to delete characters to the left of the cursor.
Press INS (Insert) to toggle insert mode, then type the desired insertion. Multiple
SQL statements of any type you are authorized to execute may be inserted, up to
a maximum of 255 characters for each table.
The displayed lines of SQL text wrap automatically. No line edit commands are used.
13 When you are ready to proceed with the comparison, enter the GO command at the
Command ==> prompt. Alternatively, press PF12 if you have customized it to store
the GO command. Comparex executes the SQL statements as edited, then compares
the results of the two table selections.
The general procedure for Rexx-driven DB2 comparisons is illustrated by example in the
remainder of this section. In this example, the DB2 plan tables are compared to previous
execution on a weekly basis so that changes in the plan tables can be tracked.
2 Issue SQL statements that extract the desired data from DB2 tables.
3 Generate Comparex FIELD format descriptions for the data and write them to an
external parameter file that Comparex may subsequently read using SYSIN.
4 Write the extracted data to a flat file that can subsequently be used as input (SYSUT1
or SYSUT2) to a Comparex comparison.
DB2SMPL
/* Rexx */
Main Routine
arg subsys
call Establish_DB2_Connection
call Generate_Field_Statements
call Write_Output_Data
Exit 0
DB2 Connection
Establish_DB2_Connection:
and Fetching
SQLSTMT = 'SELECT * FROM SYSIBM.SYSPLAN'
First Row
address TSO "SUBCOM DSNREXX" /* HOST CMD ENV AVAILABLE ? */
if rc then s_rc = RXSUBCOM('ADD','DSNREXX','DSNREXX')
OPEN — Opens the cursor at the first row of the DB2 table.
FETCH — Retrieves the first row of DB2 output matching the SQL selection criteria.
The routine then writes the generated parameters to an external parameter file that can
be passed as SYSIN to Comparex following the execution of DB2SMPL. This parameter file
will be used to control the processing of the extracted DB2 data.
Generate
Generate_Field_Statements:
Comparex FIELD
cpx.=''
Statements coff=2
cpx.1=" KEY=("coff","out.1.sqllen",C,N="out.1.sqlname") "
coff=coff+out.1.sqllen+1
do ix = 2 to out.sqld
cpx.ix= " FIELD=("coff","out.ix.sqllen",C,N="out.ix.sqlname") "
coff=coff+out.ix.sqllen+1
end
ix=ix+1
cpx.ix=" MASK=("coff",END) "
ix=ix+1
cpx.ix=" FORMAT=11F "
cpx.0=ix
MASK — This Comparex parameter specifies that the remainder of the flat file input
record beyond the final column in the row is to be ignored. (See "MASK" on page 92
for more information about the MASK input parameter in Comparex.)
FORMAT=11F — This value of the Comparex FORMAT parameter requests difference
reporting using single-line character representation on a field-by-field basis, with the
field names included. (See "FORMAT" on page 133 for more information about the
FORMAT display keyword in Comparex.)
cpx.0=ix — The zero element of the stem is, by convention, set to the number of
elements in the stem.
EXECIO — Writes the stem to the external parameter file CPXSYSIN.
Data is formatted and written for the row extracted by the Establish_DB2_Connection
routine above first. The Write_Output_Data routine itself retrieves any remaining rows
meeting the SQL selection criteria, formats them, and writes them to CPXSYSUT.
Sysut.0=sx
address TSO "EXECIO" sx "DISKW CPXSYSUT (FINIS STEM SYSUT."
say sx 'records written to CPXSYSUT'
address DSNREXX "EXECSQL CLOSE C1"
Return
ox=ox left(out…) — Appends value in the ith column of the most recently fetched
row to the output record, separated by a space from previously appended values.
sx=sx+1 — Increments the index to the output stem.
Sysut.sx=ox — The output record ox is copied to the output stem at the location
indexed by sx.
FETCH — The next row of DB2 data is fetched and the outer loop is repeated.
Sysut.0=sx — Sets zeroth stem value to the number of elements in the stem.
EXECIO — Writes the reformatted data stem to flat file CPXSYSUT in one operation.
CLOSE — Closes the cursor.
Error Diagnostics
The SqlCa code section below is a simple error trapping routine that reports any SQL
diagnostics and exits with a bad return code in the event of an error.
SQL Error
SqlCa:
Processing
if SQLCODE = 0 then return
say "SQLCODE = " SQLCODE
say "SQLSTATE = " SQLSTATE
say "SQLERRMC = " SQLERRMC
Exit 8
JCL to Run
//*-------------------------------------------------------------------*
DB2SMPL
//TSO EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB DD DISP=SHR,DSN=DSN710.SDSNLOAD
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//DSNTRACE DD SYSOUT=*
//*-------------------------------------------------------------------*
//CPXSYSUT DD DISP=(NEW,CATLG,DELETE),DSN=yourid.COMPAREX.GDG(+1),
// SPACE=(TRK,(5,5)),
// DCB=(RECFM=FB,LRECL=1024,BLKSIZE=8192)
//*-------------------------------------------------------------------*
//CPXSYSIN DD DISP=(,PASS),DSN=&&OTH,
// UNIT=SYSDA,SPACE=(TRK,(5,5)),
// DCB=(RECFM=FB,LRECL=255,BLKSIZE=4000)
//*-------------------------------------------------------------------*
//SYSEXEC DD DISP=SHR,DSN=yourid.COMPAREX.REXX
//SYSTSIN DD *
DB2SMPL D123
/*
NOTES ON JCL:
IKJEFT01 — TSO in batch is needed in order to execute SQL in Rexx.
STEPLIB — Change to the dataset name to your actual DB2 DSNLOAD library.
CPXSYSUT — The flat file of extracted and reformatted DB2 data created by
Write_Output_Data. Because this example compares DB2 plan tables across weekly
executions of the DB2SMPL job, a GDG (Generation Data Group) child node is defined
to hold multiple versions of this file from week to week. The CPXSYSUT version created
during the current execution of DB2SMPL is written to the GDG as a new generation or
version (+1). This version of CPXSYSUT will be referenced in the Comparex execution
step below as SYSUT2.
CPXSYSIN — The Comparex parameter file created by Generate_Field_Statements.
Written as temporary file identified by the &&OTH refer-back variable and passed to the
Comparex execution step below, where it will be read as SYSIN.
SYSEXEC — The library where the DB2SMPL Rexx EXEC is stored.
DB2SMPL D123 — Calls DB2SMPL. D123 is an arbitrary DB2 subsystem ID shown for
illustration; change this parameter to an appropriate value.
JCL to Run
//*-------------------------------------------------------------------*
Comparex
//CPX870 EXEC PGM=COMPAREX,REGION=0M
//STEPLIB DD DISP=SHR,DSN=somnode.COMPAREX.V8R7M0.LOAD
//*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSUT1 DD DISP=SHR,DSN=yourid.COMPAREX.GDG(-1)
//SYSUT2 DD DISP=SHR,DSN=yourid.COMPAREX.GDG(0)
//SYSIN DD DISP=(OLD,DELETE),DSN=&&OTH
//* C O M P A R E X BATCH EXECUTION
NOTES ON JCL:
STEPLIB — Change the dataset name to your Comparex production load library.
SYSPRINT — Required for all Comparex runs.
SYSUDUMP — Defined just in case it’s needed.
SYSUT1 — The “before” version of the file to be compared by Comparex. Points to the
“minus-1” version of CPXSYSUT written to the GDG by DB2SMPL in the execution
immediately prior to the most recent run.
SYSUT2 — The “after” version of the file to be compared by Comparex. Points to the
current (“zero-level”) version of CPXSYSUT written to the GDG by DB2SMPL during its
most recent execution.
SYSIN — The parameter file created by Generate_Field_Statements and passed to
Comparex as a temporary file identified by the &&OTH refer-back variable. Contains
the FIELD variables and other parameters that instruct Comparex how to perform and
display the comparison.
BLOB XML
BLOB_FILE XML AS BLOB
CLOB XML AS CLOB
CLOB_FILE XML AS DBCLOB
DBCLOB
DBCLOB_FILE
Column types for which special length considerations may apply include:
Floating point (real, double, DECFLOAT) — Comparex cannot reliably compare
two floating point columns of different lengths (for example, single versus double
precision). Same-sized floating point columns should compare reliably. Comparex
does not correctly handle the fairly rare and specialized case of comparing normalized
versus unnormalized floating point numbers.
Packed decimal — Comparex cannot reliably compare packed decimal fields of
differing lengths. Same-sized fields must use the same sign coding for accurate
results.
DISPLAY SIGN LEADING SEPARATE and NATIONAL SIGN LEADING SEPARATE
— These column types must agree in length and in sign coding for an accurate
comparison in Comparex.
Integer — Comparex cannot reliably compare two integer values of different types
(for example, INT or INTEGER against SMALLINT or BIGINT).
Panvalet
Refer to the following example of comparing two members on the same Panvalet library and
generating an audit trail for subsequent browsing and/or feeding back into PAN#1. Note that
module cobolname1 is permanently updated after this procedure.
213
Chapter 11: CPXIFACE Integration with External Data Managers
Note
It is sometimes necessary to specify a different DDNAME for SYSUT2 because
your particular release of Panvalet cannot handle the following series of
commands:\OPEN(SYSUT1), OPEN(SYSUT2), \SEARCH(SYSUT1),
READ(SYSUT1), SEARCH(SYSUT2), READ(SYSUT2), CLOSE(SYSUT1). PAM
quite often needs to have SYSUT1 closed before any processing of SYSUT2.
Use the MEMBER options to specify a single member name to be read. To scan the entire
library (filters can limit this) leave off the MEMBER option. The optional PARM may be used
to further limit the search for members. When processing large Panvalet libraries, such as in
listing directories or comparing entire contents, you can specify a starting or ending member
name to limit the search. For example:
SYSUT1=(PAN,PARM='S=ABC$,E=DEF9999999')
SYSUT2=(PAN,PARM='S=B,E=E',DDNAME=PANLIB2)
Up to ten characters may be specified for starting (S=) and ending (E=) member names. If
fewer than ten characters are specified, it is considered a generic starting or ending point to
Panvalet. The default starting point is S=$ to support member names beginning with the
special characters $, #, and @.
Refer to the following example for comparing a member of one Panvalet library against a
member of another Panvalet library.
214
Serena® Comparex® 8.7 for z/OS User’s Guide
//SYSIN DD *
SYSUT1=(PAN,MEMBER=cobolname1) /* Fill in cobolname1 */
SYSUT2=(PAN,MEMBER=cobolname1,DDNAME=PANLIB2) /* <=== Note */
TEXT=COBOL,PRINT=MLC
//* EOJ
Note
It is sometimes necessary to specify a different DDNAME for SYSUT2 because
your particular release of Panvalet cannot handle the following series of
comands:\OPEN(SYSUT1), OPEN(SYSUT2), \SEARCH(SYSUT1),
READ(SYSUT1), SEARCH(SYSUT2), READ(SYSUT2), CLOSE(SYSUT1). PAM
quite often needs to have SYSUT1 closed before any processing of SYSUT2.
Librarian
This is an example of comparing a member of a Librarian Master against a sequential data
set.
Note
Your Librarian release level must be 3.2 or higher. Release 3.1 will not work.
215
Chapter 11: CPXIFACE Integration with External Data Managers
//LIB2 DD DISP=SHR,DSN=somnode.LIBARIAN.MASTER2
//SYSIN DD *
SYSUT1=(LIB,DDNAME=LIB1),SYSUT2=(LIB,DDNAME=LIB2)
DIR=PDF /* Compare the directories only */
//* EOJ
GEM
This is an example of comparing a range of members from a GEM library against a PDS.
216
Serena® Comparex® 8.7 for z/OS User’s Guide
Special Note
When comparing a single member of a Panvalet (or Librarian) library against another
member of the same (or different) Panvalet (or Librarian) library, the first member must be
completely exhausted into the BUFFer and then into dynamic storage in 32K chunks before
processing the second member.
If the second member is on a different library, the first must be CLOSed, the second must be
OPENed and SeaRCHed before READing can commence. If the first member is quite large,
(10,000 lines or larger) all available storage may be devoured before the second member can
be processed.
The symptom of this occurring is an abend 878; the solution is to increase the region size.
If processing under MVS/XA or MVS/ESA, storage is obtained above the line. It is unlikely
that this reservoir could be exhausted by even the largest of programs.
When invoking this interface, and the intent is to compare an entire PAN to PAN or LIB to LIB,
be aware of these restrictions:
• A DIRECTORY compare is always possible.
• A TEXT compare of every member to every matching member can be performed, but
requires that a differently-named interface module be used for the SYSUT2 slot and a
different DDNAME. Otherwise you will receive message CPX31A before any comparison
proceeds. For example:
//SYSIN DD*
CPXIFACE1=CPXIFACE /* standard module name
CPXIFACE2=CPXIFAC2 /* name reflects whatever installer has
named copy of standard module
SYSUT1=PAN,SYSUT2=(PAN,DDNAME=PAN2)
TEXT=$.,PRINT=MLC
/* end of input parameters
Note on Parameters
The OTH subparameter of the SYSUT1 and SYSUT2 keywords can spread the PARM across
two input records. The maximum length of the PARM is still 64 bytes, but with so many other
subparameters present, crossing to the next input line lets you get the maximum size PARM.
For example:
SYSUT1=(OTH,M=MEMBER,INCLUDE=YES,PARM='spread-parameter-to-the-next-
line-for-a-maximum-of-64-bytes')
Whatever has been specified for PARM is echoed back to you under the CPX21I and/or
CPX22I messages.
217
Chapter 11: CPXIFACE Integration with External Data Managers
ADABAS
ADABAS from Software AG is a DBMS that is not hierarchical and also contains a fourth
generation (4GL) language called Natural. Both the data and Natural software can be
processed and compared.
Note
It is not possible to use the ISPF interface to read ADABAS directly, as too many
special DD cards are needed.
218
Serena® Comparex® 8.7 for z/OS User’s Guide
//DDCARD DD *
ADARUN PR=USER,DATABASE=100,DEVICE=3380,SVC=247,MODE=SINGLE,
ADARUN LOGGING=YES,LOGCB=YES,READONLY=YES,
ADARUN LU=60000
//SYSIN DD *
CPXIFACE=CPXADABS /* Special interface module */
****************************************************************
* Point SYSUT1 to Database 3, File 4, Logical key field *
* BC and retrieve fields AA, AB, AU, BF, and DX1-5. *
* Set Record buffer (SYSUT1 & SYSUT2) to 4000 bytes. *
****************************************************************
SYSUT1=(OTH,M=A,PARM=DDNAME)
****************************************************************
* Point SYSUT2 to the Database 2, File 9, Logical key field *
* BJ and retrieve fields CA, CB, CU, DF, and FX1-5. In all *
* cases, Member name must be specified, anything will do. *
****************************************************************
SYSUT2=(OTH,M=ANYTHING,PARM='D2F9,RB=4000,K=BJ,F=BJ,CA,CB,CU,DF,
FX1-5')
KEY=(1,8,,A),FORMAT=25,MAXDIFF=50,CONTINUE
//SYSUT1 DD * COLUMN 72 ===>|
D03F4,RB=4000,K=BC,F=BC,AA,AB,AU,BF,DX1,DX2,DX3,DX4,DX5,DX6,DX7,DX8
,DS9,DX10,DX11,DX12,DX13
//* EOJ
When reading data records (not Natural members) it is necessary to pass a member name to
the interface. Any member name will do. For example:
SYSUT2=(OTH,M=any,PARM='D2F9,K=BJ,F=BJ,CA,CB,CU,DF,FX1-5')
is returned.
The key to the specifications here is in the PARM= subparameter of SYSUT1 and SYSUT2.
The format of the “PARM” information is:
PARM='Ffff,P=password,C=cipher,RB=nnnn,K=kk,F=bbbbbbbbbbbbbbbbb'
or
PARM='DdddFfff,KI=kk,S=ssss,F=bbbbbbbbbbbbbbbbb'
or
PARM='DddFff,P=pass,LS=llllllll'
219
Chapter 11: CPXIFACE Integration with External Data Managers
or
PARM='Ff,LO=llllllll'
where apostrophes are mandatory if any commas or blanks are present (normal case) in the
parameter data.
If an ADABAS file is password protected, it can be accessed by specifying the correct one to
eight character positional (just after DddFff) password via the P= keyword.
If a special ciphering exit (considered rare) is to be called because the data is encrypted, it
can be specified via the C= keyword.
The RB= keyword specifies the size of the allocated record buffer in bytes. Some shops have
serious storage constraints and the default 16K record buffer causes problems at open time.
The format buffer size is dynamically calculated.
There are two forms to specifying an ascending key (K=kk and KI=kk). Specifying KI=kk has
the same major result as K=kk, but with the added benefit of retrieving the ISN of the record
as the first four bytes of returned data.
There are two forms for specifying a starting value for reading data records such that the
begin point is beyond the first record. Specifying S=ssss means starting at the character
string “sss”, but specifying SX=ssss means starting at the hexadecimal string X‘ssss’.
Because the maximum parameter length is 64 bytes and your specifications for a complex
format buffer may require more, there is an option to read the parameter information from a
file. To do this, specify PARM=DDNAME. For example:
SYSUT1=(OTH,M=whatever,DDNAME=ADAPARM1,PARM=DDNAME)
In the instance above, file ADAPARM1 will be opened, read until exhaustion, and closed. All
of the rules associated with the parameter keywords still apply but hundreds of bytes are
available for specification.
If PARM=DDNAME is specified, whatever DDNAME=xxxxxxxx is used to read the file. If no
DDNAME is specified, then SYSUT1 (or SYSUT2) is used to open the file.
The format buffer can be either manually constructed (F=AB,...) or dynamically built at open
time. The manual method is considered tedious and the dynamic route sometimes retrieves
more than desired. You can request that the dynamic format buffer be written to another file
(along with the rest of the PARM) for subsequent editing and return back into a future
execution of Comparex. INCLUDE=YES is the method for requesting this service.
If subkeyword DDNAME= specifies a ddname, it will be written there. If no specification is
made for DDNAME, it will be written to SYSUT1 or SYSUT2. For example:
SYSUT1=(OTH,M=A,PARM=D105F25,DDNAME=UT1PARM,INCLUDE=YES)
In the instance above, a file will be written to //UT1PARM for which the DCB characteristics
are forced at RECFM=F and BLKSIZE=80. A maximum of 50 bytes (comma delimiter
respected) of each record is counted as the parameter is reread on subsequent executions.
220
Serena® Comparex® 8.7 for z/OS User’s Guide
The MEMBER (or M) option is used for specifying particular members of Natural libraries,
either source or object and must be specified for database (DATA) processing.
In reading DATA, a read physical (L2) call is the default unless you want a read logical (L3)
call. For example:
PARM='D3F12,K=AB'
which will read database 3 and file 12 logically in ascending sequence of field 'AB'. On
physical (L2) reads, the ISN of the record is returned in the first four binary bytes of the record
area. On logical (L3) reads, the ISN is not returned unless KI=kk has been specified. You may
also specify the particular fields to be retrieved. If you don't specify fields, then all fields will be
retrieved. The field specifications are exactly that for the Format Buffer which you should be
familiar with. For example:
Note
When processing periodic groups, only the count and first occurrence are
returned if you are not specifying your own field statements. You can define the
field statement with a periodic group by typing in the field statements using
F=xx1-? format.
In reading Natural programs, use the LS= (Library of Source) or LO= (Library of Object)
options. For example:
SYSUT1=(OTH,M=MEMBER1,PARM='D1F8,LS=MYSOURCE')
or
SYSUT2=(OTH,PARM='D2F8,LO=MYOBJECT')
In the Comparex tradition, individual members or entire libraries (subject to filtering) can be
processed.
Note
In the special case of comparing Natural source where the code is deemed
Global Data Area (GDA), each record is prefixed with 16 bytes of pointer data.
We recommend that you compare on different columns instead of using
TEXT=NATURAL. For example:
TEXT,LINE=80,FRAME=NUM,SQZ=C' ',FIELD=(17,63)
//ADABAS EXEC PGM=COMPAREX,REGION=0M
//STEPLIB DD DISP=SHR,DSN=somnode.COMPAREX.LOAD
//SYSPRINT DD SYSOUT=*
//* <=== ADABAS specific DD card images go here.
//SYSIN DD *
CPXIFACE=CPXADABS /* Special interface module */
221
Chapter 11: CPXIFACE Integration with External Data Managers
****************************************************************
* Compare all Natural programs in production library PROD to *
* testing library PREPROD. *
****************************************************************
SYSUT1=(OTH,PARM='D240F08,LS=PROD') /* Production lib
SYSUT2=(OTH,PARM='D111F08,LS=PREPROD') /* Pre-Production lib
TEXT=NATURAL,PRINT=MLC,MBRHDR=COND /* Recommended method
//* EOJ
Note
To continue the parameter to a second line, the last comma on the first line must
end in column 72 and the subsequent line must start in column 1 (otherwise
“ERROR?” will occur).
Note
Any password will be suppressed with asterisks on the output listing.
222
Serena® Comparex® 8.7 for z/OS User’s Guide
CINCOM
CINCOM Systems in Cincinnati, Ohio, has three related products in the DBMS market:
TOTAL - one of the first database access methods ever produced
SUPRA - a more modern version of TOTAL
MANTIS - the fourth generation (4GL) language of processing SUPRA databases
This interface supports only reading the MANTIS source code. The interface to MANTIS
source code does not go directly against the VSAM repository holding the code, panels, or
views. Instead, you must run the MANTIS batch (MANTISB) utility against it and retrieve a
portion of it to DDNAME PRINTER. That file is what is processed and/or compared. See the
following example of the keyword structure necessary to read MANTIS source code.
PARM=MANTIS must be set to process the unloaded MANTIS objects. MANTIS source code
contains numerics in the first five positions with leading zeroes suppressed, followed by two
spaces. Using FIELD=(8,71) ignores the sequence number and spaces, and compares only
the code. MANTIS views and screens can be compared without difficulty.
223
Chapter 11: CPXIFACE Integration with External Data Managers
The MEMBER (or M) option is used for specifying a particular member of the unloaded
MANTIS library. Even though the files are considered flat, the interface treats them as though
they are directory-embedded, and hence the DIRECTORY (or DIR) keyword generates a
legitimate DIRECTORY comparison.
Note
It is imperative that, when invoking MANTISB to unload programs, views, and
screens, the member names must be in alphabetical order. Otherwise,
unpredictable results occur.
CONDOR CAMLIB
This read-only interface processes the Condor CAMLIB library. You may compare the
directories, individual members, or the entire library to another library.
SYSUT1=(OTH,DDNAME=ABC1)
but only the first four characters will be used, and they will be internally prefixed with GA by
the CAMLIB USROPN module.
To compare a particular member and it has multiple versions and/or a password, you must
specify the particular version and/or its associated password in the “PARM” area:
SYSUT1=(OTH,MEMBER=MEMBER,PARM='002WXYZ')
PARM='nnnpass'
224
Serena® Comparex® 8.7 for z/OS User’s Guide
informing you that this password-protected member is intentionally being bypassed. On the
difference report (assuming TEXT=COBOL) this single line will appear where the SYSUT1
member would normally appear. Similarly,
Note
The subkeyword INCLUDE=NO is crippled. Every ./ INCLUDE is expanded
internally and cannot be circumvented.
225
Chapter 11: CPXIFACE Integration with External Data Managers
DATACOM
This read-only interface processes the database structure from Computer Associates called
DATACOM.
SYSUT1=(OTH,M=tbl,PARM='CPXURT=urtname,K=kkkkk,D=155,E=eeee1')
or
SYSUT1=(OTH,M=tbl,PARM='K=kkkkk,E=eeee1,eeee2,eeee3')
The table name (sometimes called the file name) is passed to the interface through the
Member option. It can be one to three characters long. If it is longer than three characters,
only the first three will be used.
The PARM is where you specify:
• CPXURT=xxxxxxxx (where xxxxxxxx is the User Requirements Table). This is required if
the dynamic route has been chosen at installation
• key name
• database number
• element name(s)
The database number (D=) is optional but the rest are mandatory.
Following is an example of how to print a single database.
226
Serena® Comparex® 8.7 for z/OS User’s Guide
DATA,MAXDIFF=10,CONTINUE,FORMAT=05
Installation Considerations
It is imperative that you understand how the installer generated CPXIFACE into CPXDATCM.
If you assume that a dynamic approach was taken by the installer and it wasn’t, failure is
certain.
Installation Considerations
The generation of CPXIFACE must be done in accordance with your shop standards for
implementing Assembler programs that access your DB2 tables. The source code must pass
the preprocessor (DSNHPC), which extracts the static SQL statements to create a DBRM
that must go through a BIND in the normal manner.
227
Chapter 11: CPXIFACE Integration with External Data Managers
In addition, a decision must be made at installation time whether the DSN command or the
Call Attach Facility will be used to integrate Comparex with DB2. If the Call Attach Facility is
used, it is not possible to simultaneously access two separate DB2 subsystems (ABEND
S200 will result). You must unload the first database to a flat file and then compare it to the
second database under its subsystem.
There are ways to unload a DB2 database to a flat file other than Comparex, but they are not
recommended in preparation for a Comparex comparison. Comparex will not process an
“image copy” of a DB2 database.
Note
It is possible to use the ISPF Interface to read DB2 databases directly but only
through the Call Attach Facility. It is impossible via TSO-DSN.
Note
The Comparex-DB2 interface defaults to a maximum of 300 columns. To process
a table with more than 300 columns, adjust the &MAXCOL parameter in
CPXIFACE.
SYSUT1=(OTH,M=tab.name,PARM='CAF=xxx.pppp,part1;part2;part3')
or
SYSUT2=(OTH,PARM=DDNAME,M=table,DDNAME=DB2PARM2)
or
SYSUT1=(OTH,PARM='part1;part2;part3',M=table,INCLUDE=YES)
Note that the physical PARM (or file equivalent - DDNAME=DB2PARM) must run
contiguously with predefined delimiters.
The table name is passed to the interface through the Member option. The maximum length
is 32 characters.
The PARM is where you specify the three parts (not including the CAF keyword) separated by
a semicolon. The use of apostrophes is prohibited in the PARM because that is the delimiter.
The interface will substitute an apostrophe for every quotation (") mark used. Because the
maximum length parameter is 64 bytes and your specifications for a complex Select clause
may require more, there is an option to read the parameter information from a file. To do this,
specify PARM=DDNAME.
For example:
SYSUT1=(OTH,M=table.name,DDNAME=DB2PARM1,PARM=DDNAME)
228
Serena® Comparex® 8.7 for z/OS User’s Guide
In the preceding instance, file DB2PARM1 will be opened, read until exhaustion, and closed.
All of the rules associated with the parameter keywords still apply but hundreds of bytes are
available for specification. If PARM=DDNAME is specified, whatever DDNAME=xxxxxxxx is
used to read the file. If no DDNAME is specified, then SYSUT1 (or SYSUT2) is used to open
the file.
• CAF= is optional and can be used only if CPXIFACE is generated for the Call Attach
Facility. The format is CAF=dddd.pppppppp where dddd is the DB2 subsystem name and
pppppppp is the Plan name. If not specified, the subsystem name is DSN and the Plan
name is CPXIFACE.
• part1 is required. It specifies the what of the dynamic SQL statement to read a table.
• part2 is optional. It specifies the where clause of the SQL statement.
• part3 is also optional. It specifies the order by clause of the SQL statement.
Ordinarily, the rows as returned to Comparex for display and/or comparison will contain just
the data requested in contiguous storage. If INCLUDE=YES is specified, the field names,
followed by an equal sign, precede the variable data, and the data is terminated by a
semicolon.
If you have used INCLUDE=NO and specified a KEY (or KEY1/KEY2 pair), those
displacements will now be off if you change that to INCLUDE=YES. As indicated above, the
actual data is preceded by a column name and an equal sign.
If KEY=(1,10) were specified before, INCLUDE=YES is now specified, the first column name
is ‘SS_ACCOUNT’, then the key would have to be updated to KEY=(12,10) because the
actual data would now be:
'SS_ACCOUNT=ss_account;'.
Following are some SYSUT1/SYSUT2 specifications and the dynamic SQL statement
internally generated by each:
SYSUT1=(OTH,M=DB2TEST.TNYT1010,PARM=*,INCLUDE=YES)
Generates ==> SELECT * FROM DB2TEST.TNYT1010
SYSUT2=(OTH,M=DB2TABLE.FOR.TES,PARM='ORDER;ABC = 123')
Generates ==> SELECT ORDER FROM DB2TABLE.FOR.TESTING WHERE
ABC = 123
SYSUT1=(OTH,M=DB2TEST.TNYT1010,INCLUDE=YES,PARM='*;NTSTORE IN
("0020","0016","0098");NTORDER') /* Note PARM crosses two lines
Generates ==> SELECT * FROM DB2TEST.TNYT1010 WHERE NTSTORE IN
('0020','0016','0098') ORDER BY NTORDER
229
Chapter 11: CPXIFACE Integration with External Data Managers
SYSUT2=(OTH,M=DDA_VIEW,PARM='CAF=DSNT.CPXDB2CA,*;;ACCOUNT')
Generates ==> SELECT * FROM DDA_VIEW ORDER BY ACCOUNT
230
Serena® Comparex® 8.7 for z/OS User’s Guide
231
Chapter 11: CPXIFACE Integration with External Data Managers
//*
//*
//* At this point, we have unloaded the DB2 table to a flat file
//* called "somnode.DB2BASE". Now we can optionally restore the
//* database and update it iteratively with whatever programs
//* are being tested. Then we Comparex the flat file against
//* the freshly updated database to see what changes were made.
//*
//DB2CAF EXEC PGM=COMPAREX
//STEPLIB DD DISP=SHR,DSN=somnode.COMPAREX.LOAD
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DISP=SHR,DSN=somnode.DB2BASE
//SYSIN DD *
CPXIFACE=CPXIFACE /* Default interface module name */
SYSUT2=(OTH,M=tablename,PARM='CAF=DSNT,*') /* <=== TABLE NAME
*/
MAXDIFF=200,CONTINUE
//*
Sample Code
Sample JCL for comparing DB2 objects is provided in library somnode.COMPAREX.IFACE.
The sample members are:
•DB2CAF1
•DB2CAF2
•DB2DI2
•DB2P50
232
Serena® Comparex® 8.7 for z/OS User’s Guide
Note
Refer to the IBM publication Database 2 Messages and Codes - SC26-4113 for
an explanation of the -nnn numbers in the messages listed above. Refer to the
IBM publication Advanced Application Programming Guide - SC26-4292 Chapter
3, CAF Return/Reason Codes, for an explanation of the xxx return codes and
yyyyyyyy reason codes.
DL/1
DL/1 databases are hierarchical in structure. IBM, the developer of DL/1, has coined the
terms HDAM, HIDAM, HISAM, and SHISAM to describe the organizational methods, but all
these methods are essentially usages of QSAM, ISAM, and VSAM. These QSAM, ISAM, and
VSAM file organizations can be handled directly by Comparex.
There are ways to unload a DL/1 database to a flat file other than Comparex, but they are not
recommended in preparation for a comparison. Comparex will not process an “image copy of
a DL/1 database.
Following is a graphical layout of what the individual records look like as returned to
Comparex by CPXIFACE:
Bytes Contents
It is sometimes necessary to unload both of the databases to flat files and sort them before
having Comparex compare them. One of the cases where this is advised is if the databases
are large HDAM files and either the randomizing algorithm has changed, or there are many
inserts or deletes. If sorting is required, sort on the concatenated key in ascending order:
SORT FIELDS=(13,56,CH,A)
You may use any PSB (except one that has Proc Option “L” for load) that exists in your
applicable PSBLIB, as long as it contains a PCB window for the appropriate DBD - database.
To compare two databases in the same execution, the PSB must contain at least two PCBs
with unique DBD names.
For FASTPATH, set KW=IFP; for full function, set KW=DLI or KW=BMP. For FASTPATH in
particular, the settings in CPXIFACE to generate the DL/1-FASTPATH interface correctly are:
&DL1 SETB 1 (YES) .DL/1 OF IMS OR CICS
233
Chapter 11: CPXIFACE Integration with External Data Managers
or
Internally, a segment search argument (SSA) is constructed to point beyond the beginning as
an artificial starting point. As a reminder, use the Comparex END= keyword to terminate
processing before reaching any end of file.
Note
It is not possible to use the ISPF interface to read DL/1 databases directly,
because too many special DD cards are needed.
234
Serena® Comparex® 8.7 for z/OS User’s Guide
The following example invokes Comparex under DL/1 to compare two databases directly in a
single pass.
235
Chapter 11: CPXIFACE Integration with External Data Managers
236
Serena® Comparex® 8.7 for z/OS User’s Guide
Disclaimer
The following restrictions apply:
• The archived data set must be the first data set on the tape
• Only archived VSAM or QSAM files will work
• The archived data set must NOT be compacted
FOCUS
FOCUS is a data base management system from Information Builders. FOCUS contains
optional interfaces for reading and reporting on the data in files created by other DBMS
products such as: ADABAS, IDMS, DB2, IMS, M204, SQL/DS, SYSTEM 2000, TERADATA,
DATACOM, and TOTAL. Refer to the following FOCUS interface segment layout for a
description of what the individual records look like as returned to COMPAREX by the
interface.
Bytes Contents
The key to the specifications here is in the MEMBER (or M) and 'PARM=' subparameters of
SYSUT1 and SYSUT2. MEMBER specifies the file name. DDNAME specifies the file type
(usually FOCUS).
INCLUDE=YES is not recommended, but specifies that 'ECHO' testing is to be performed
and requires that the following DD card image be present:
//HLIPRINT DD SYSOUT=*,DCB=(RECFM=FB,LRECL=80,BLKSIZE=880)
PARM='ModeSinkmachPassword'
237
Chapter 11: CPXIFACE Integration with External Data Managers
The following are samples of how to specify the SYSUT1 and SYSUT2 keywords.
SYSUT1=(OTH,MEMBER=CCCFILE,DDNAME=FOCUS)
SYSUT1=(OTH,M=TABLE2,DDNAME=FOCUS,PARM=' SYS37 TABPASS')
SYSUT2=(OTH,DDNAME=IMS,M=DL1FILE,INCLUDE=YES)
Refer to the following example for invoking Comparex to compare two versions of the same
database. Notice that two separately-named interface modules are required to perform this
compare. The CPXIFACE module calls entry point FOCUS in HLIFOCUS. It cannot support
having more than one file open at a time. After generating module CPXFOCUS, copy it to
CPXFOCU2 in the same load library.
SYSUT1=(OTH,M=filename,DDNAME=filetype,PARM='modesinkmachpassword')
* | | | | |
* | | | | Password
* | | | =======>Sink Machine
* | | File Mode
* | ==============>File Type, usually FOCUS
* ==============================>File Name
SYSUT2=DUMMY,MAXDIFF=50,CONTINUE
//* EOJ
238
Serena® Comparex® 8.7 for z/OS User’s Guide
//BENEFITS DD DISP=SHR,DSN=somnode.BENEFITS.FOCUS
//SYSIN DD *
CPXIFACE1=CPXFOCUS,CPXIFACE2=CPXFOCU2 /* Requires two modules
SYSUT1=(OTH,M=BENEFIX,DDNAME=FOCUS,PARM=' VERSION2')
SYSUT2=(OTH,M=BENEFITS,DDNAME=FOCUS,PARM=' VERSION3')
MODE=SYS,MAXDIFF=100,CONTINUE
SEG=(0,EQ,C'FALSESEG',(A,12,4))
SEG=(0,EQ,C'KEYSEG ')
SEG=(0,EQ,C'EMPSEG ')
SEG=(0,EQ,C'HISTORY ')
//* EOJ
Note
In the special case of xxxx = 0765, the description of the data file cannot be found
in the MASTER dictionary
IAM
IAM stands for Innovation Access Method from Innovation Data Processing. It is intended to
be an ISAM replacement, not a DBMS. Refer to the following example of invoking Comparex
with IAM to compare an ISAM file against an IAM file.
239
Chapter 11: CPXIFACE Integration with External Data Managers
IDMS
IDMS from Computer Associates is a DBMS that is not hierarchical. Only the relational
release (IDMS/R, release 10.x and upwards) is supported. Refer to the following example for
a graphical layout of what the individual records look like as returned to Comparex by
CPXIFACE.
Bytes Contents
See the following example of the keyword structure to sweep through two areas of
subsystem DEMOSS01. This subsystem is delivered with releases of IDMS as a post-
installation test.
240
Serena® Comparex® 8.7 for z/OS User’s Guide
SYSUT2=(OTH,M=DEMOSS01,PARM='R=ORDOR,A=ORDER-REGION,DB=QA,D=QA')
****************************************************************
* These two areas have nothing in common that can be compared *
* for any logical reason. Just see if they can be processed. *
****************************************************************
MAXDIFF=10,CONTINUE
//* EOJ
Note
The ISPF interface will not work with IDMS directly, because too many special
DD cards are needed.
In addition to the Area Sweep within record type, an exit facility is also available. There are
two major ways to process the database. The first is a slight variation on the area sweep. The
second is to specify an exit module (written in assembler or a high-level language) to
navigate through the database. The reason for this is that there are many ways to read
through a database, and using your own exit lets you control what is read.
Parameter Specifications
The key to the specifications here is in the PARM= subparameter of SYSUT1 and SYSUT2.
The format of the PARM information is:
PARM='P=ppp,R=rrr,A=aaa,DB=dbdb,D=dict'
or
PARM='R=rrr,A=aaa'
or
PARM=EXIT
where apostrophes are mandatory if any commas or blanks are present in the parameter
data.
If PARM=EXIT has been specified, an exit module is called from CPXIFACE to do the actual
OPEN, READ, and CLOSE. To sweep an area (physically), the keyword notation of the
PARM is in the format:
PARM='P=program,R=record,A=area,DB=dbname,D=dictname'
241
Chapter 11: CPXIFACE Integration with External Data Managers
where:
Failure to specify a legitimate record name and/or area name will result in a BIND error as a
minimum. The returned record now has the DBKEY (a full word - 4 bytes) prefixed so it can
be seen (and compared).
If you have specified that an exit is to be called to navigate through the database, then the
MEMBER keyword points to the exit module name:
SYSUT1=(OTH,MEMBER=JOSEFINE,PARM=EXIT)
A sample COBOL exit module called JOSEFINE is given in ““IDMS COBOL Exit Module
JOSEFINE - Excerpts” on page 244. This program has one entry point but performs the basic
functions of Open, iterative Read, and Close based on the request (IFACE-REQUEST)
passed in its link section from the CPXIFACE module (CPXIDMS).
This module exhausts (until DB-END-OF-SET) Customers and Orders in those Customers.
The data passed back to Comparex is grouped in exactly the same way as:
242
Serena® Comparex® 8.7 for z/OS User’s Guide
Caution
In determining what to call an exit program that works with a particular
subschema, never name the program the same as the subschema.
This is because if the exit program is loaded (by CPXIFACE or CPXIDMS) into storage for
subsequent calling, and it is named the same as any existing schema or subschema, the
STEPLIB concatenation has the IDMS control blocks higher than the exit module and you will
be loading (and executing) a subschema which gives unpredictable results. Conversely,
bringing in the exit module means that the subschema cannot be loaded by IDMS.
243
Chapter 11: CPXIFACE Integration with External Data Managers
MAXDIFF=100,CONTINUE
KEY=(3397,10,,R) /* CUSTOMER NUMBER
* KEY=(1,12,,R) /* RANDOM KEY ON FIRST 3 DB-KEYS
BUFF=512 /* LARGER BUFFER NECESSARY
FORMAT=06
IDENTIFICATION DIVISION.
*DMLIST.
PROGRAM-ID. JOSEFINE.
AUTHOR. SERENA.
DATE WRITTEN. AUGUST, 1986.
DATE COMPILED.
REMARKS.
************************************************************
* THIS PROGRAM IS INTENDED TO BE THE MODEL FOR OTHER *
* EXIT MODULES WHEN THE INTENT IS TO HAVE COMPAREX CALL *
* THIS MODULE (THROUGH CPXIFACE) TO READ PROPRIETARY *
* DATABASE MANAGEMENT SYSTEMS (DBMS). THIS PARTICULAR *
* MODEL IS FOR: *
* IDMS *
* *
* NOTE THE LINKAGE SECTION AND CALL STRUCTURE. THERE *
* IS A SINGLE ENTRY POINT BUT THE PARAMETER LIST CONTAINS *
* THREE AREAS: *
* 1) IFACE-REQUEST: 'OPEN', 'READ', OR *
* 'CLOS' PLUS FREE-FORM INSTRUCTIONS; *
* *
* 2) IFACE-RESPONSE: SPACES, 'EOF', OR *
* A LITERAL ERROR MESSAGE; *
* *
244
Serena® Comparex® 8.7 for z/OS User’s Guide
ORACLE
This read-only interface processes the database structure from Oracle.
Note
The Comparex-ORACLE interface defaults to a limit of 300 columns with a
maximum width of 512 bytes each, and a maximum column name length of 33.
These defaults can be changed by adjusting the parameters &MAXCOL,
&ORAMAXW, and &ORAMAXN in CPXIFACE.
SYSUT1=(OTH,M=userid-password@host,INCLUDE=YES,PARM='TABLE;*')
or
SYSUT2=(OTH,M=userid-
password@host,INCLUDE=NO,DDNAME=ORAPARM2,PARM=DDNAME)
Note
HOST is probably something like W:MPM.
245
Chapter 11: CPXIFACE Integration with External Data Managers
Further information:
• M= specifies the user ID, password for same, and host machine ID.
• The parameters must be specified in the order shown, with an @ as shown.
• INCLUDE=YES causes each column, as retrieved, to be prefixed with the column name
and an equal sign. If INCLUDE=NO is specified, only the column contents will be
retrieved.
• PARM='TABLE;*' will fetch all columns, in the sequence they were defined, from all rows
from table TABLE.
Alternatively, specify PARM='TABLE;SELECT;WHERE;ORDER' for a more sophisticated
retrieval. Where TABLE is the table name, SELECT is either * (all columns) or a list of
columns (separated by spaces or commas). The optional WHERE clause will choose the
rows to be retrieved, and an optional ORDER by clause will sort the output.
For example, PARM='PAYROLL;NAME SALARY;SALARY<50000;SALARY'.
Apostrophes are required, and although the SYSUT1 or SYSUT2 parameter(s) can be
continued across two input card images, the total length of the PARM= subkeyword is
limited to 64 bytes.
Because the maximum length for the PARM= is 64 bytes, PARM=DDNAME can be
specified for reading the parameter data from a file. PARM=DDNAME allows about 3K of
parameters to be read.
Only columns 1 through 72 are scanned for input. The default DDNAME opened is //
SYSUT1 DD (for SYSUT1) or //SYSUT2 DD (for SYSUT2). DDNAME=ORAPARM2 (or
whatever DDNAME you select), as shown in the above example, sets the DDNAME to be
used for reading parameters.
Note
Inside the PARM=' ' string you must substitute a quotation mark (") for each
apostrophe (') that you need, and a bracket ([]) or brace ({}) for each parenthesis
that you need.
SYSUT2=(OTH,M=U-P@H,PARM='ORAPROD.TEST.TABLE;ORDERNUM;ABC = 123')
SELECT ORDERNUM FROM ORAPROD.TEST.TABLE WHERE ABC = 123
SYSUT1=(OTH,M=U-
P@H,INCLUDE=YES,PARM='ORATEST.TNYT1010;FIELD1,FIELD4;NTSTORE IN
("0020","0098");NTORDER')
246
Serena® Comparex® 8.7 for z/OS User’s Guide
SYSUT2=(OTH,M=U-P@H,PARM='SAMPLE_VIEW;*;;SSN')
SELECT * FROM SAMPLE_VIEW ORDER BY SSN
SYSUT1=(OTH,MEMBER=member1)
or:
SYSUT1=(OTH,MEMBER=member1.stat)
247
Chapter 11: CPXIFACE Integration with External Data Managers
SYSUT1=OTH,SYSUT2=DUMMY
DIR=PDF /* List all member names in library
or:
SYSUT1=(OTH,PARM=TEST),SYSUT2=DUMMY
DIR=PDF /* List member names in library with status TEST
OWL must exhaust a particular member before processing another. It cannot have a series of
READ requests interrupted by another type of request and then pick back up again. For this
reason, a very large BUFFer is recommended in all TEXT comparisons to give yourself a
higher probability of exhausting the SYSUT1 member before attempting to process the
SYSUT2 member. Specified member names may not begin with a slash:
This is not a restriction of the interface code, but is a restriction of Comparex. Comparex
treats commas, blanks, and slashes as delimiters. Therefore, to specify a member name that
internally begins with a slash, substitute @ instead:
RAMIS II
RAMIS II from Online Software (formerly Martin Marietta - Mathematica Products Group) is a
4th Generation Language DBMS that is considered hierarchical. See the following example
for a graphical layout of what the individual records look like as returned to Comparex by
CPXIFACE.
Bytes Contents
The following example invokes Comparex with RAMIS to compare two databases directly in a
single pass.
248
Serena® Comparex® 8.7 for z/OS User’s Guide
The MEMBER name must specify a valid file (up to 12 characters) name. An optional
DDNAME may be specified but, if entered, must match an allocated external file. If no
DDNAME specification is made, the default connecting name used by RAMIS is DATABASE.
If you try to read a single level database, you will receive a READ ERROR message on the
second record. The interface must be informed of this (by you) by passing in a PARM=1,
which is interpreted as an instruction not to go below the top level. One other variation is the
debugging facility to trace the calls by specifying PARM=‘1ECHO’. The literal ECHO in bytes
two through five of the PARM are construed to mean “turn on the RPIECHO trace facility.”
Note
It is not possible to use the ISPF interface to read RAMIS II directly, because too
many special DD cards are needed.
249
Chapter 11: CPXIFACE Integration with External Data Managers
ROSCOE
ROSCOE, from Computer Associates, is a Library Management System that manages data
(usually program source code). It is not a DBMS.
The following example invokes Comparex with ROSCOE to compare two members directly.
Use the MEMBER options to specify a single member name to be read. To scan the entire
library (filters can limit this), leave the MEMBER option off. The PARM must be specified in
this format:
PARM='xxxyy'
| |
| |============> User Code (Optional)
|===============> Three character ROSCOE Prefix
Note
It is not possible to use the ISPF interface to read ROSCOE files directly,
because too many special DD cards are needed.
250
Serena® Comparex® 8.7 for z/OS User’s Guide
Alternative Method
One method of comparing ROSCOE members does not require using the interface. It
requires that the JCL for performing the job be edited and submitted from a ROSCOE library.
As the job is submitted, it copies (+INC) the appropriate members into the jobstream, and
Comparex compares them as temporary sequential files. The following code indirectly
compares ROSCOE members:
WYLBUR
WYLBUR is a Library Management System that compacts data (usually program source
code) into sequential data sets or members of partitioned data sets. The following example
uses Comparex with WYLBUR to compare two members.
251
Chapter 11: CPXIFACE Integration with External Data Managers
The MEMBER keyword tells Comparex that it is dealing with a sequential data set (a
member) in a PDS, or an embedded sequential data set in a library management system like
WYLBUR, Panvalet, or Librarian. If you do not specify the member keyword, Comparex
terminates with this message:
Note
The WYLBUR interface does not process entire WYLBUR libraries. It only reads
sequential files or individual members of PDSs. If you attempt to have WYLBUR
read a PDS as opposed to a member of a PDS, results are unpredictable.
...
&OTH SETB 1 (YES) GENERATE THE 'OTHER' INTERFACE.
...
&ZROLOWN SETB 1 (YES) .ROLL YOUR OWN - PROPRIETARY
...
AIF (NOT &ZROLOWN).ROL3900 ROLL YOUR OWN - READ
...
ROL$3060 LR R15,R1 DITTO LENGTHS
STH R1,PRM$RLEN PASS LENGTH BACK TO COMPAREX
MVCL R0,R14 LARGE MOVE
252
Serena® Comparex® 8.7 for z/OS User’s Guide
253
Chapter 11: CPXIFACE Integration with External Data Managers
SYNCHRONIZING DATABASES
There are at least two methods of synchronizing databases. The SEGMENT keyword is
designed for hierarchical structures such as DL/1; however, a variation of the KEY keyword,
called Random KEYs, is recommended in most cases. It is a matter of personal preference
when choosing between the two.
The first step in synchronizing is to pair like records for comparison (ROOT is paired with
ROOT, APPLES are paired with APPLES). Then, after like-record types are paired, a control
field is examined. If a record has been inserted or deleted, it can be identified as inserted or
deleted.
Some records do not contain a control field. For example, some records add information to a
database merely by their presence or by their relative position in a series. For such records,
Comparex cannot be completely accurate in picking out the exact insertion or deletion, but
the utility will show the series of differences, starting with the insertion or deletion.
Comparing
After the synchronizing process of pairing records (with either the SEGMENT or KEY
keyword), IDENTITY, FIELD, and MASK keywords can be used to tell Comparex which bytes
should be compared.
The following example compares two versions (unloaded or direct read) of a database using
SEGMENT synchronization logic.
Note
Random SEGMENTs are not recommended.
SEGMENT=(1,EQ,C'ROOT',(A,09,5))
ROOT IDENTITY=(1,EQ,C'ROOT')
FIELD=(65,END)
MASK=(81,3)
SEGMENT=(1,EQ,C'APPLES')
APPLES IDENTITY=(1,EQ,C'APPLES')
FIELD=(65,END)
SEG=(1,EQ,C'STEMS',(R,23,4))
ID=(1,EQ,C'STEMS')
STEMS FIELD=(65,END)
254
Serena® Comparex® 8.7 for z/OS User’s Guide
MASK=(85,1)
MASK=(93,1)
The following example compares two versions (unloaded or direct read) of a database using
a Random KEY.
KEY=(1,64,,R),BUFF=1024
IDENTITY=(1,EQ,C'ROOT')
FIELD=(65,END) MASK=(81,3)
IDENTITY=(1,EQ,C'APPLES')
FIELD=(65,END)
ID=(1,EQ,C'STEMS')
FIELD=(65,END),MASK=(85,1),MASK=(93,1)
255
Chapter 11: CPXIFACE Integration with External Data Managers
256
Serena® Comparex® 8.7 for z/OS User’s Guide
257
Chapter 11: CPXIFACE Integration with External Data Managers
258
DELTA DECK OPTION
12
DELTA DECK OPTION
The delta deck option refers to the facility of applying transaction files (commonly referred to
as delta decks) against one or more sequential files with the intent of updating them. For
example, if you compare one version of a program (at the source code level) against another,
you will see the differences. If you were to write those differences out to a third file and format
them appropriately, that third file becomes the delta deck. Comparex can produce delta decks
formatted for:
Panvalet from Computer Associates
Librarian from Computer Associates
GEM from Fujitsu/FACOM
IEBUPDTE from IBM
ChangeMan ZMF from Serena Software
Others formatting characteristics dynamically created
Generally speaking, the decks produced for Panvalet, Librarian, and GEM can be created at
any time by Comparex, but subsequent application of those decks to the original source (the
SYSUT1 member) requires the appropriate product.
Panvalet Format
A deck in Panvalet format can be created in this fashion:
259
Chapter 12: Delta Deck Option
SYSUT2=(PAN,M=MEMBER2)
COPYDIFF=PAN /* PANVALET Formatted Delta Deck
//* EOJ
++UPDATE MEMBER1,4
++C 35
003500 0100-COBOL-PARAGRAPH. 00350000
003600 PERFORM 4000-CALLED-ROUTINE. 00360000
++C 101,112
++C 155,160
If the deck was then processed by PAN#1, then MEMBER1 would be updated permanently
(at level 5) to look exactly like MEMBER2. For example:
//PAN#1 EXEC PGM=PAN#1
//SYSPRINT DD SYSOUT=*
//PANDD1 DD DISP=SHR,DSN=somnode.PANLIB
//SYSIN DD DISP=SHR,DSN=somnode.PAN.DELTDECK
//* EOJ
Librarian Format
A deck in Librarian format can be created in this fashion:
260
Serena® Comparex® 8.7 for z/OS User’s Guide
-DEL 101,112
-DEL 155,160
If the deck was then processed by LIB, then MEMBER1 would be updated temporarily to look
like MEMBER1 in the PDS. For example:
//LIBR EXEC PGM=LIBR
//SYSPRINT DD SYSOUT=*
//MASTER DD DISP=SHR,DSN=somnode.MASTER
//SYSIN DD DISP=SHR,DSN=somnode.LIB.DELTDECK
//* EOJ
261
Chapter 12: Delta Deck Option
262
Serena® Comparex® 8.7 for z/OS User’s Guide
The sequence numbers referred to in the brackets are relative to their order in the file. Any
sequence number in columns 73 through 80 (or 1 through 6 for COBOL) are ignored.
Update Directive
The Update directive tells CMNDELTA which member to process and how to do it. The format
is:
<UPDATE member,{options}>
where member specifies which member of the PDS (as pointed to by DDNAME BASELINE)
to select for processing. It can be one to eight (1-8) characterizing must match a name in the
directory. The member name can be omitted if DDNAME BASELINE points to a sequential
file or individual member of a PDS, but is generally always advised.
263
Chapter 12: Delta Deck Option
The options parameters are separated by a commas; refer to the following list:
NULL Do not list changes applied; just list the delta deck as read (note
syntax errors however). Mutually exclusive with FULL
SEQ Do not permanently update any PDS member; write updated file
to DDNAME SEQ. Mutually exclusive with TEMP.
Examples of Update directives include:
• <UPDATE MEMBER1>
• <UPDATE COBOLNM,TEMP,FULL>
• <UPDATE M,SEQ>
• <UPDATE THREE,NULL>
• <UPDATE,NULL>
Line Directives
Comments are denoted by <*. They may appear freely before and after the Update directive
but should not be mixed in with line directives. For example:
Directives that specify lines to delete, replace, or insert must be enclosed in angle brackets
(<>).
A single number specifies that the lines that follow must be inserted after this relative line
number.
Two numbers, separated by a single comma, (with no blanks) directs that an inclusive range
of lines is to be deleted. Any lines that follow are moved into the space provided.
The line directives must be in ascending order. That is, in the general example that follows:
<nnn1>
Statement after nnn1
<nnn2,nnn3>
<nnn4>
264
Serena® Comparex® 8.7 for z/OS User’s Guide
Execution JCL
The following JCL stream is a model for batch invocations of CMNDELTA.
In the preceding example, a parameter (SEQ) was passed to CMNDELTA. If options were
specified on the Update directive they would have overridden the PARM specification.
Because there were none found, the SEQ option is honored and the updated MEMBER1 is
not updated in place, but instead is written sequentially to wherever DDNAME SEQ points.
You can pass more than one option via the PARM if the string is surrounded by apostrophes,
and the keywords are separated by commas.
File Attributes
The file pointed to by the DDNAME BASELINE must be a PDS, PDS member, or sequential
file. It can be any record format except Undefined or Spanned. That is, it can be V (variable),
VB (variable blocked), F (fixed), or FB (fixed blocked).
The file pointed to by the DDNAME DELTA must be a PDS member or sequential file. It also
can be any record format except Undefined or Spanned.
Generally speaking, the delta deck being applied is similar in format to its associated
BASELINE, but does not have to be. The record lengths and block sizes could be very small
or very large. In the example cited previously, the PDSs could have been RECFM=FB, but
the delta deck attempts to save disk space by being RECFM=VB.
265
Chapter 12: Delta Deck Option
Multiple Decks
The file pointed to by DDNAME DELTA must be sequential (or a member of a partitioned data
set), but that does not mean that it cannot contain deltas for multiple members. It is possible
to have a single delta deck file containing:
<UPDATE MEMBER1>
<0069,00086>
006900 PARA-1200.
007000 IF SEASON IS EQUAL TO OCTOBER-FEST,
007100 PERFORM 3400-GUZZLE-UP.
<UPDATE MEMBER2,TEMP>
<101>
003010 AND THIS-IS-NO-JOKE,
This means that both MEMBER1 and MEMBER2 will be updated in the single execution of
CMNDELTA.
Integrity
Concurrent updates to the same PDS by simultaneous invocations of CMNDELTA will be
single-threaded by the ENQ/DEQ process across systems. If your shop has a single CPU,
then one update by CMNDELTA will not interfere with another update by CMNDELTA. If you
have multiple CPUs and the possibility exists that simultaneous invocations of CMNDELTA
on separate machines can occur, then you must enlist the assistance of vendor products that
address these matters:
• Global Resource Serialization (GRS)
• Multiple Systems Integrity (MSI)
• Shared Dataset Integrity (SDSI)
The major QNAME used in CMNDELTA at ENQ time is CHGMAN.
Directory Statistics
If DDNAME BASELINE points to a PDS, and an update in place is requested (not a
temporary update, nor output to SEQ file), then the updated members will have their directory
statistics stamped accurately with date, time, size, and job name that updated it.
266
Serena® Comparex® 8.7 for z/OS User’s Guide
Sample Report
baseline=CTSOID2.baseline.SOURCE [4]
MEMBER=ABC10000 [5]
OPTION: [6]
DELTA: <*STAMP 2006/04/14;15:59:59 FRIDAY APRIL 14, 2006>
DELTA: <4,5> [7]
DELETE: * PREAMBLE: [8]
DELETE: * NOW IS THE TIME FOR ALL GOOD PROGRAMMERS TO COME TO THE AID OF *
DELTA: <8> [9]
INSERT: ST R14,UCARCLEN STASH IN UCA FOR XMEM
INSERT: MVI BAT$FIND,C'Z' FUNCTION INDICATOR
INSERT: * [10]
DELTA: <45,46>
DELETE: * RETURN +0 FOR SYSTEM ERROR; +4 APPLICATION ERROR; +8 IS SUCCESS
DELETE: B PRO$DLTE BAD SYSTEM RETURN CODE
TIME OF DAY AT END OF JOB: 10:22:43, HIGHEST CONDITION CODE ON EXIT: 0 <key t=15>
Explanation
The following legend describes some of the key fields listed on the preceding report.
[1] - These three nodes separated by periods list:
1. Job name
2. Step name (possibly with a procedure)
3. Procedure step name
[2] - Date (always in form yyyy/mm/dd) and military time.
[3] - The DELTA file lines - Update directive in this case.
[4] - Data set name DDNAME BASELINE points to.
[5] - Acknowledgment that the specified member was located and will be updated.
[6] - All options in effect for this particular update. It is a blending of options from the PARM
and possibly overridden by any specified on the Update directive.
[7] - The first line directive to delete lines 4 and 5.
[8] - Echo to show that lines 4 and 5 are being deleted.
267
Chapter 12: Delta Deck Option
[9] - The second line directive to insert what follows after line 8.
[10] - The lines to be inserted after line 8.
[11] - Comment line. This exact text will be generated by Comparex at the end of each
Update directive.
[12] - Comment line. This exact text will be generated by Comparex at the end of the full delta
deck.
[13] - Logical end of file on DELTA.
[14] - Logical end of file on the baseline.
[15] - The highest condition code encountered. If no errors were encountered, it will be set to
zero. If errors were uncovered, the error message itself will dictate the severity (usually 8).
268
Serena® Comparex® 8.7 for z/OS User’s Guide
Error Messages
The following error messages can be issued:
UNABLE TO OPEN “DELTA” FILE - RC=16
Most likely DDNAME DELTA was not allocated. Check for misspelling on the jobstream.
Other possible causes are pointing DELTA to a VSAM or ISAM file. Execution terminates
immediately with return code 16.
“DELTA” FILE CONTAINS UNDEFINED LENGTH RECORDS- RC=8
DDNAME DELTA was allocated to a data set with DCB attributes of RECFM=U. No
attempt will be made to continue. Execution terminates immediately with return code 8.
INVALID DELTA DECK - RC=8
The first record of the delta deck did not begin with an open (less-than < ) bracket.
Execution terminates immediately with return code 8.
BASELINE MISSING/INVALID - RC=8
Most likely DDNAME BASELINE was not allocated. Check for a misspelling in the
jobstream. Execution terminates immediately with return code 8.
BASELINE ORGANIZATION INVALID - RC=8
DDNAME BASELINE was allocated but was not a PDS or sequential file. Execution
terminates immediately with return code 8.
UNABLE TO OPEN BASELINE - RC=8
An attempt was made to open DDNAME BASELINE and it failed. Execution terminates
immediately with return code 8.
SEQUENTIAL BASELINE REQUIRES “TEMP”, “SEQ”, OR “NULL” - RC=8
DDNAME BASELINE was allocated and determined to be a sequential file. It cannot be
updated in place like a PDS member. One of the options TEMP, SEQ, or NULL must be
used to process the file. Execution terminates immediately with return code 8.
UNABLE TO OPEN FILE “SEQ” - RC=8
Option SEQ was specified either on the Update directive or as a passed PARM. An
attempt was made to open DDNAME SEQ and it failed. Execution terminates
immediately with return code 8.
SYNTAX ERROR - RC=8
The Update directive had a syntax error or the line directives were not in ascending order.
Execution terminates immediately with return code 8.
BASELINE PDS; MEMBER NAME REQUIRED ON <UPDATE> - RC=8
The BASELINE has been determined to be a PDS but the Update directive did not
specify a member name. Execution terminates immediately with return code 8.
269
Chapter 12: Delta Deck Option
270
Serena® Comparex® 8.7 for z/OS User’s Guide
271
Chapter 12: Delta Deck Option
272
Serena® Comparex® 8.7 for z/OS User’s Guide
273
Chapter 12: Delta Deck Option
274
Serena® Comparex® 8.7 for z/OS User’s Guide
275
Chapter 12: Delta Deck Option
276
Serena® Comparex® 8.7 for z/OS User’s Guide
277
Chapter 12: Delta Deck Option
278
Serena® Comparex® 8.7 for z/OS User’s Guide
279
Chapter 12: Delta Deck Option
280
Serena® Comparex® 8.7 for z/OS User’s Guide
281
Chapter 12: Delta Deck Option
282
Serena® Comparex® 8.7 for z/OS User’s Guide
283
Chapter 12: Delta Deck Option
284
Serena® Comparex® 8.7 for z/OS User’s Guide
285
Chapter 12: Delta Deck Option
286
Serena® Comparex® 8.7 for z/OS User’s Guide
287
Chapter 12: Delta Deck Option
288
Serena® Comparex® 8.7 for z/OS User’s Guide
289
Chapter 12: Delta Deck Option
290
Serena® Comparex® 8.7 for z/OS User’s Guide
291
Chapter 12: Delta Deck Option
292
Serena® Comparex® 8.7 for z/OS User’s Guide
293
Chapter 12: Delta Deck Option
294
Serena® Comparex® 8.7 for z/OS User’s Guide
295
Chapter 12: Delta Deck Option
296
Serena® Comparex® 8.7 for z/OS User’s Guide
297
Chapter 12: Delta Deck Option
298
Serena® Comparex® 8.7 for z/OS User’s Guide
299
Chapter 12: Delta Deck Option
300
Serena® Comparex® 8.7 for z/OS User’s Guide
301
Chapter 12: Delta Deck Option
302
Serena® Comparex® 8.7 for z/OS User’s Guide
303
Chapter 12: Delta Deck Option
304
EXAMPLES
A
The following examples illustrate the coding of keywords to meet various testing situations.
The following is a Comparex report based on the above JCL. Comparex scanned for the
variable ‘PKGDATE’ and found two programs, PROG2 and PROG3, with this variable.
SYSUT1=USER15.CPXPROD.SOURCE,SYSUT2=DUMMY
0<M=PROG1,CREDATE=96138,MODDATE=96138,MODTIME=1332,USER=USER15>
<M=PROG10,CREDATE=96138,MODDATE=96138,MODTIME=1350,USER=USER15>
<M=PROG2,CREDATE=96138,MODDATE=96138,MODTIME=1348,USER=USER15>
305
Appendix A: Examples
306
Serena® Comparex® 8.7 for z/OS User’s Guide
SYSUT1=USER15.CPXPROD.SOURCE,SYSUT2=USER15.CPXTEST.SOURCE
0 PROG1
0 PROG10
SYSUT1=USER15.CPXPROD.SOURCE(PROG2),SYSUT2=USER15.CPXTEST.SOURCE(PROG2)
0++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+
D 03 ISPF-XPKGDATE PIC X(06).
--------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7-
I 03 ISPF-XPKGDATE PIC X(08).
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+
0CPX71I - END OF TEXT ON FILE SYSUT1 0CPX72I - END OF TEXT ON FILE SYSUT2
-CPX75I - RECORDS PROCESSED: SYSUT1(1302)/SYSUT2(1302),DIFFERENCES(1)
SYSUT1=USER15.CPXPROD.SOURCE(PROG3),SYSUT2=USER15.CPXTEST.SOURCE(PROG3)
0++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+
D 03 ISPF-XPKGDATE PIC X(06).
--------|---.----1----.----2----.----3----.----4----.----5----.----6----.----7-
I 03 ISPF-XPKGDATE PIC X(08).
++++++++|+++.+<++1++++.++++2++++.++++3++++.++++4++++.++++5++++.++++6++++.++++7+
0CPX71I - END OF TEXT ON FILE SYSUT1 0CPX72I - END OF TEXT ON FILE SYSUT2
-CPX75I - RECORDS PROCESSED: SYSUT1(1302)/SYSUT2(1302),DIFFERENCES(1)
SYSUT1=USER15.CPXPROD.SOURCE,SYSUT2=USER15.CPXTEST.SOURCE
0CPX72I - END OF DIRECTORY ON FILE SYSUT2
0 PROG4
0 PROG5
0 PROG6
0 PROG7
0 PROG8
0 PROG9
0CPX71I - END OF DIRECTORY ON FILE SYSUT1
0CPX78I - MEMBERS PROCESSED: SYSUT1(10)/SYSUT2(2),DIFFERENCES(2,8,0)
EXPLANATION - 2 MEMBERS DIFFER THAT SYNCHRONIZED TO
8 MEMBERS WERE CONSIDERED INSERTED ON 0 MEMBERS WERE CONSIDERED INSERTED ON
0CPX80I - TIME OF DAY AT END OF JOB: 14:20:06 - CONDITION CODE ON EXIT: 4
307
Appendix A: Examples
308
Serena® Comparex® 8.7 for z/OS User’s Guide
SYSUT1=USER15.CPXPROD.SOURCE,SYSUT2=USER15.CPXPROD.LINKLIB
NAME VV.MM CREATED LAST MODIFIED SIZE INIT MOD ID
CMNZVRB
PROG1 01.00 96/05/17 96/05/17 13:32 109 109 0 USER15
PROG10 01.00 96/05/17 96/05/17 13:50 492 492 0 USER15
CPX72I - END OF DIRECTORY ON FILE SYSUT2
PROG4 01.00 96/05/17 96/05/17 13:50 492 492 0 USER15
PROG5 01.00 96/05/17 96/05/17 13:50 492 492 0 USER15
PROG6 01.00 96/05/17 96/05/17 13:50 492 492 0 USER15
PROG7 01.00 96/05/17 96/05/17 13:50 492 492 0 USER15
PROG8 01.00 96/05/17 96/05/17 13:50 492 492 0 USER15
PROG9 01.00 96/05/17 96/05/17 13:50 492 492 0 USER15
CPX71I - END OF DIRECTORY ON FILE SYSUT1
CPX78I - MEMBERS PROCESSED: SYSUT1(10)/SYSUT2(3),DIFFERENCES(2,8,1)
EXPLANATION - 2 MEMBERS DIFFER THAT SYNCHRONIZED TOGETHER 8 MEMBERS WERE
CONSIDERED INSERTED ON SYSUT1
1 MEMBER WAS CONSIDERED INSERTED ON SYSUT2
CPX80I - TIME OF DAY AT END OF JOB: 14:25:43 - CONDITION CODE ON EXIT: 4
The following JCL generates a test file specifying records that are type ‘C’ at displacement 15
for the year 1996 only.
309
Appendix A: Examples
The following test file was created as a result of the COPYDIFF keyword. Three records (for
1996 with ‘C’ at displacement 15) were selected and moved to SYSUT3 to be used as test
data.
SYSUT3:
310
Serena® Comparex® 8.7 for z/OS User’s Guide
SYSUT1:
SYSUT2:
0000103C199604500005621JBRADLEY BARTHOLOMEW J J R.
00001031995004SBRADLEY BARTHOLOMEW J JR.0000000022M
0000404C1996187000013110TELLTALE THOMAS R
00004041996187STELLTALE THOMAS R 0030005746J
0000852C199532100009541JSILVERSTEIN SHARON H
00008521995321SSILVERSTEIN SHARON H 0040004213L
0001000C199613500001311RRADCLIFT RICHARD L
00010001997135SRADCLIFT RICHARD L 0010003214J
0001052C199725000005871NZANE ZACHARY R
00010521996250SSZANE ZACHARY R 0000008465J
0001246C1994276000014210VANDYKE VICTORIA N
00012461994276SVANDYKE VICTORIA N 0080006050P
0005584C199512200003110KELLOGG KIRK O
00055841996122SKELLOGG KIRK O 0000000951R
Following is the JCL to verify that the date field has been inserted and did not overwrite other
fields.
311
Appendix A: Examples
FIELD1=(14,11)
FIELD2=(16,11)
MASK1=(35,5)
FORMAT=26
312
Serena® Comparex® 8.7 for z/OS User’s Guide
The following Comparex report shows that the inserted date field overwrote other fields.
SYSUT1=USER15.CPX.DEMO(ACPXFL1),SYSUT2=USER15.CPX.DEMO(ACPXFL2)
0DSPL |...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....0
0CPX51I - RECORD NUMBER 1 ON FILE SYSUT1
01 0000103C960450000005621JBRADLEY TEST BARTHOLOMEW J JR.
FFFFFFFCFFFFFFFFFFFFFFFDCDCCDCE444ECEE44444444CCDECDDDDCE4444444444D4DD444444444
00001033960450000005621129143580003523000000002193863645600000000001019B00000000
0CPX52I - RECORD NUMBER 1 ON FILE SYSUT2 FIELD=3
01 0000103C199604500005621JBRADLEY BARTHOLOMEW J J R.
FFFFFFFCFFFFFFFFFFFFFFFDCDCCDCE444444444444444CCDECDDDDCE4444444444D4D44D4444444
0000103319960450000562112914358000000000000000219386364560000000000101009B000000
------- -DIFFERENCE+
-CPX51I - RECORD NUMBER 3 ON FILE SYSUT1
01 0000404C9618700000013110TELLTALE TEST THOMAS R
FFFFFFFCFFFFFFFFFFFFFFFFECDDECDC44ECEE44444444ECDDCE444444444444444D444444444444
00004043961870000001311035333135003523000000003864120000000000000009000000000000
0CPX52I - RECORD NUMBER 3 ON FILE SYSUT2 FIELD=3
01 0000404C1996187000013110TELLTALE THOMAS R
FFFFFFFCFFFFFFFFFFFFFFFFECDDECDC44444444444444ECDDCE444444444444444D444444444444
00004043199618700001311035333135000000000000003864120000000000000009000000000000
-- ---- -DIFFERENCE+
-CPX51I - RECORD NUMBER 5 ON FILE SYSUT1
01 0000852C953210000009541JSILVERSTEIN SHARON H
FFFFFFFCFFFFFFFFFFFFFFFDECDECDEECCD44444444444ECCDDD444444444444444C444444444444
00008523953210000009541129355923595000000000002819650000000000000008000000000000
0CPX52I - RECORD NUMBER 5 ON FILE SYSUT2 FIELD=3
01 0000852C199532100009541JSILVERSTEIN SHARON H
FFFFFFFCFFFFFFFFFFFFFFFDECDECDEECCD44444444444ECCDDD444444444444444C444444444444
00008523199532100009541129355923595000000000002819650000000000000008000000000000
------- -DIFFERENCE+
-CPX51I - RECORD NUMBER 7 ON FILE SYSUT1
01 0001000C961250000001311RRADCLIFT RICHARD L
FFFFFFFCFFFFFFFFFFFFFFFDDCCCDCCE44444444444444DCCCCDC44444444444444D444444444444
00010003961250000001311991433963000000000000009938194000000000000003000000000000
0CPX52I - RECORD NUMBER 7 ON FILE SYSUT2 FIELD=2
01 0001000C199613500001311RRADCLIFT RICHARD L
FFFFFFFCFFFFFFFFFFFFFFFDDCCCDCCE44444444444444DCCCCDC44444444444444D444444444444
00010003199613500001311991433963000000000000009938194000000000000003000000000000
- -- ---- -DIFFERENCE+
0CPX51I - RECORD NUMBER 9 ON FILE SYSUT1
01 0001052C972500000005871NZANE TEST ZACHARY R
FFFFFFFCFFFFFFFFFFFFFFFDECDC444444ECEE44444444ECCCCDE44444444444444D444444444444
00010523972500000005871591550000003523000000009138198000000000000009000000000000
0CPX52I - RECORD NUMBER 9 ON FILE SYSUT2 FIELD=3
01 0001052C199725000005871NZANE ZACHARY R
FFFFFFFCFFFFFFFFFFFFFFFDECDC444444444444444444ECCCCDE44444444444444D444444444444
00010523199725000005871591550000000000000000009138198000000000000009000000000000
------- -DIFFERENCE+
0CPX62I - KEY SYNCHRONIZATION MISMATCH - RECORD 11 ON FILE SYSUT2
01 0001246C1994276000014210VANDYKE VICTORIA N
FFFFFFFCFFFFFFFFFFFFFFFFECDCEDC444444444444444ECCEDDCC4444444444444D444444444444
00012463199427600001421051548250000000000000005933699100000000000005000000000000
0CPX61I - KEY SYNCHRONIZATION MISMATCH - RECORD 11 ON FILE SYSUT1
01 0001346C9427600000014210VANDYKE VICTORIA N
FFFFFFFCFFFFFFFFFFFFFFFFECDCEDC444444444444444ECCEDDCC4444444444444D444444444444
00013463942760000001421051548250000000000000005933699100000000000005000000000000
-CPX51I - RECORD NUMBER 13 ON FILE SYSUT1
01 0005584C951220000003110KELLOG KIRK O
FFFFFFFCFFFFFFFFFFFFFFFDCDDDC44444444444444444DCDD44444444444444444D444444444444
00055843951220000003110253367000000000000000002992000000000000000006000000000000
0CPX52I - RECORD NUMBER 13 ON FILE SYSUT2 FIELD=3
01 0005584C199512200003110KELLOGG KIRK O
FFFFFFFCFFFFFFFFFFFFFFFDCDDDCC4444444444444444DCDD44444444444444444D444444444444
00055843199512200003110253367700000000000000002992000000000000000006000000000000
------- -DIFFERENCE+
0CPX71I - END OF DATA ON FILE SYSUT1
0CPX72I - END OF DATA ON FILE SYSUT2
0CPX74I - BYTES UNDERSCORED(41)
-CPX75I - RECORDS PROCESSED: SYSUT1(14)/SYSUT2(14),DIFFERENCES(6,1,1)
EXPLANATION - 6 RECORDS DIFFER THAT SYNCHRONIZED TOGETHER
1 RECORD WAS CONSIDERED INSERTED ON SYSUT1
1 RECORD WAS CONSIDERED INSERTED ON SYSUT2
PASS FAIL STATISTICS
14 14 FILTERIN=(8,EQ,C'C')
SYSUT1=USER15.CPX.DEMO(ACPXFL1),SYSUT2=USER15.CPX.DEMO(ACPXFL2)
0CPX77I - REJECTED BY FILTERS: SYSUT1(7)/SYSUT2(7) - UNUSABLE FILTERS(0)
0CPX80I - TIME OF DAY AT END OF JOB: 17:31:53 - CONDITION CODE ON EXIT: 4
313
Appendix A: Examples
314
Serena® Comparex® 8.7 for z/OS User’s Guide
CAF=DSNG,LASTNME,FIRSTNME,ACCTNUM,PAYDATE;
/*
315
Appendix A: Examples
316
Serena® Comparex® 8.7 for z/OS User’s Guide
//SYSUT2 DD *
CAF=DB2A,NAME,TYPE,PARTNO,PARTNAME;NAME LIKE "PART%";
//*
//COMPARE PROC
//COMPAREX EXEC PGM=COMPAREX,REGION=256K
//SYSPRINT DD SYSOUT=*
// PEND
//*
//EXTRACT EXEC COMPARE
//SYSUT1 DD DUMMY
//SYSUT2 DD DISP=SHR,DSN=somnode.MASTER.FILE
//SYSUT3 DD DISP=(,CATLG,DELETE),DSN=somnode.EXTRACT.FILE,
// UNIT=SYSDA,SPACE=(TRK,(5,5),RLSE),
// DCB=(RECFM=VB,BLKSIZE=6000)
//SYSIN DD *
**********************************
* Extract account # 34567-8 only *
**********************************
SYSUT1=DUMMY
COPYDIFF
MAXDIFF=1
FILTERIN=(9,EQ,X'0345678C')
FILTORIN=(2,EQ,C'234')
EXCLUSIVE FILTERS
We want to send to the comparison routines only those records where position 3 is ‘A’ and
position 7 is ‘X’. We want every record that does not pass both these criteria to be bypassed:
317
Appendix A: Examples
FILTERIN=(3,EQ,C'A')
FILTERIN=(7,EQ,C'X')
or
FILTERIN=(3,EQ,C'A...X')
FILTEROUT=(2,EQ,C'789')
or
FILTERIN=(2,NE,C'789')
FILTOROUT=(22,EQ,C'23')
KEY=(1,9),PRINT=NOMISMATCH
or
KEY=(1,9),FILTEROUT=(10,GE,X'3C')
318
Serena® Comparex® 8.7 for z/OS User’s Guide
COMPLEX FILTERING
We want to send to the compare routines only those records where all these things are true:
• Account balance is not zero
• State code is Texas
• Last name starts with CW or KW or Q
FOUT=(71,EQ,X'0000000.') /* Eliminate zero balances */
FILTERIN=(19,EQ,C'TX') /* Select Texans */
FILTORIN=(21,EQ,C'CW') /* Select 'CW' */
FILTORIN=(21,EQ,C'KW') /* Select 'KW' */
FIELD=(51,10)
TEXT=COBOL
319
Appendix A: Examples
that all execution JCL procedures begin with the letter ‘J’ or ‘XJ’. All COBOL modules are
prefixed with ‘PTXA’. There are a few PL/1 members that are suffixed with the letter ‘P’.
Control card members all start with ‘C’ and have a dollar sign in the fourth position. All the
rest of the members are Assembler Language. We want to compare the new release with the
prior release.
//COMPARE PROC
//COMPAREX EXEC PGM=COMPAREX
//STEPLIB DD DISP=SHR,DSN=somnode.COMPAREX.LOAD
//SYSPRINT DD SYSOUT=*
//PANDD1 DD DISP=SHR,DSN=somnode.PANLIB
//SYSUT2 DD DISP=SHR,DSN=somnode.PDS
// PEND
//*
//JCL EXEC COMPARE
SYSUT1=PAN
TEXT=JCL,FORIN=(MEMBER,1,EQ,C'J'),FIN=(M,1,EQ,C'XJ')
//COBOL EXEC COMPARE
SYSUT1=PAN
TEXT=COBOL,FIN=(M,1,EQ,C'PTXA'),FOROUT=(M,8,EQ,C'P')
//PL1 EXEC COMPARE
SYSUT1=PAN
TEXT=PL/1,FIN=(M,1,EQ,C'PTXA'),FIN=(M,8,EQ,C'P')
//CONTROL EXEC COMPARE
SYSUT1=PAN
TEXT=JCL,FIN=(M,1,EQ,C'C..$')
//BAL EXEC COMPARE
SYSUT1=PAN
TEXT=BAL,FOUT=(M,1,EQ,C'J'),FOUT=(M,1,EQ,C'XJ')
FOUT=(M,1,EQ,C'PTXA'),FOUT=(M,1,EQ,C'C..$')
or
//ALLOFIT EXEC COMPARE
SYSUT1=PAN
WILDCARD=C'*',TEXT=*
320
Serena® Comparex® 8.7 for z/OS User’s Guide
COMPARE TO BACKUP
After the database has been updated by our application programs, we want to compare it
against the backup (just created) to see the changes made.
SYSUT2=(OTH,MEMBER=DBDNAME) /* Read Database again */
MAXDIFF=50,CONTINUE /* Generally advised
*/
SEGMENT=(1,EQ,C'ROOT',(A,9,5)) /* ROOT Segment */
IDENTITY=(1,EQ,C'ROOT')
FIELD=(65,END)
MASK=(98,3)
SEGMENT=(1,EQ,C'APPLES')
ID=(1,EQ,C'APPLES')
321
Appendix A: Examples
FIELD=(65,END)
SEG=(1,EQ,C'STEMS',(A,14,5))
ID=(1,EQ,C'STEMS')
FIELD=(65,END)
MASK=(77,1)
MASK=(81,1)
322
Serena® Comparex® 8.7 for z/OS User’s Guide
//SYSUT1 DD DISP=SHR,DSN=somnode.PDS1.ASSEMBLE
//SYSUT2 DD DISP=SHR,DSN=somnode.PDS2.ASSEMBLE
//SYSUT3 DD DISP=(,CATLG,DELETE),DSN=somnode.IEBUPDTE.AUDIT,
// UNIT=sysda,SPACE=(TRK,(1,5),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000)
//SYSIN DD *
TEXT=BAL /* Assume both libraries contain Assembler Source */
MBRHDR=COND /* Only see the members that have indeed changed */
* Create Audit Trail in IEBUPDTE Format *
COPYDIFF=(IEBUPDTE,SEQFLD='738,765') /* <=== NOTE SEQFLD=.. */
//*
//CPXUPDTE EXEC PGM=IEBUPDTE,PARM=MOD
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DISP=SHR,DSN=somnode.PDS1.ASSEMBLE
//SYSUT2 DD DISP=SHR,DSN=somnode.PDS1.ASSEMBLE <=== Same Name
//SYSIN DD DISP=SHR,DSN=somnode.IEBUPDTE.AUDIT
//*
//VERIFY EXEC PGM=COMPAREX,REGION=1M
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DISP=SHR,DSN=somnode.PDS1.ASSEMBLE
//SYSUT2 DD DISP=SHR,DSN=somnode.PDS2.ASSEMBLE
//SYSIN DD *
TEXT=BAL /* Verify that Matching Members are Identical */
MBRHDR=COND /* This will make for a very short report */
//* EOJ
323
Appendix A: Examples
//SYSIN DD *
TEXT=. /* Dynamically figure out type of source code */
MBRHDR=COND /* Only see the members that have indeed changed */
COPYDIFF=CMN /* Create Audit Trail in Change Man Format */
//*
//CMNDELTA EXEC PGM=CMNDELTA
//SYSPRINT DD SYSOUT=*
//FILE1 DD DISP=SHR,DSN=somnode.PDS1.ASSEMBLE <== original file
//DELTA DD DISP=SHR,DSN=somnode.CMNDELTA.DECK
//*
//VERIFY EXEC PGM=COMPAREX
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DISP=SHR,DSN=somnode.PDS1.ASSEMBLE
//SYSUT2 DD DISP=SHR,DSN=somnode.PDS2.ASSEMBLE
//SYSIN DD *
TEXT=. /* Verify that Matching Members are Identical */
MBRHDR=COND /* This will make for a very short report */
//* EOJ
324
Serena® Comparex® 8.7 for z/OS User’s Guide
325
Appendix A: Examples
326
EFFECTIVE TESTING
C
What you will find in this chapter:
• “Some Effective Testing Flowcharts” on page 328
• “Managing the Testing Function” on page 331
The most important steps in the testing of program and system changes are to compare the
actual results with the expected results, and to reconcile the differences.
This comparison can be done manually or with Comparex. The manual comparison process
is both time consuming and subject to error; each byte of each record produced should be
compared with what was expected. Because the manual process is so lengthy, often the
tester checks only the fields of greatest concern and forgets to examine necessary literals
and keys.
Comparex compares every byte unless specifically instructed not to. Forgotten literals and
keys present themselves boldly on the difference report, and the tester can correct the code
before it is put into production.
Comparex should not be used sparingly. On the first execution during a testing session, you
should specify few keywords and let Comparex use its defaults. On this first run, you can
specify MAXDIFF=10 to limit the differences shown, and specify CONTINUE to ensure that
all records are read and produce statistics if needed.
You review this first difference report to see how many inequalities were found. The end-of-
processing messages show the total number of differing pairs of records. Then, you run
Comparex again, using KEYs, FIELDs, MASKs, and filters to properly synchronize the files,
and to correctly select records and data in those records for comparison.
In this way, each Comparex run reveals more about the differences between the two files
and, at the same time, more about the differences between the two programs that created
them. Errors in programs are first discovered by examining the data they produce, and
additional Comparex jobs can be run, using the TEXT keyword, to compare two versions of
source code to identify added, changed, and deleted source lines.
This chapter on effective testing presents information about using Comparex to check the
correctness of a single program or an entire system. In addition, users interested in
management of testing procedures will find a discussion of test plans and test data at the end
of this chapter.
327
Chapter C: Effective Testing
SYSIN Keywords
Comparex
Application Program
(Program A)
SYSPRINT
Difference Report
SYSUT2 Master
(+1)
The master file from the previous update is used as input to the master file update, along with
a file of transactions.
The previous master file and the master file created by the test run are used as input to
Comparex. In this Comparex run, the old master file (+0) is used as SYSUT1 (original) and
the new master file (+1) is used as SYSUT2 (modified).
Also used as input to Comparex is a file of specifications containing the Comparex keywords.
If master files are being compared, KEY synchronization is usually specified. This allows
Comparex to identify inserted and deleted records. Any date/time stamp on the two files
could be ignored in the comparison by a MASK keyword.
The difference report is the proof of the effectiveness of the program. Each inserted and
deleted record is shown, and you review these to reconcile them to the expected results. Any
changed record is also reviewed. The differing bytes of the record are reconciled to the
expected results. After the difference report has been reviewed, you are either satisfied with
the program’s effectiveness or have a list of deficiencies to be corrected. After any program
corrections, you run Comparex until all differences have been reconciled.
328
Serena® Comparex® 8.7 for z/OS User’s Guide
Comparex
Comparex
SEGMENT or KEY
COPYDIFF, Unload Compare
Flat File
SYS
Updated Difference Report
Data
DBMS
PGM - BC
Prior to running the new code, the database is unloaded to a flat file with Comparex. Then,
the new code is run against the database. Finally, the flat file is compared against the just
updated database. Variations on the SEGMENT keyword or KEY keyword are used to
synchronize between the two databases.
Again, the difference report is the proof of the effectiveness of the program modification. You
review the report to reconcile the actual results to the expected results. You make necessary
program corrections, restore the database, and rerun the program and Comparex until all
differences have been reconciled.
329
Chapter C: Effective Testing
Comparex
Master Comparex
File
(+0)
Application Program
SYSPRINT
Difference Report
TEMP’
The old program is run, using the current master file as input; and the modified program is
run, using this same current master file as input. Then, Comparex is used to compare the
output TEMP and TEMP’ files.
The version of the file created by the production program (the original) are used as SYSUT1
in the Comparex runs, and the version of the file created by the test program (the modified)
are used as SYSUT2 in the Comparex runs.
The difference report is reviewed to evaluate the effectiveness of the program modification.
You correct any deficiencies in the modified program and run the series of programs again.
330
Serena® Comparex® 8.7 for z/OS User’s Guide
Comparex Comparex
SEGMENT or KEY
COPYDIFF, Unload Compare
Flat File
SYSPRINT
Difference Report
Database Database
After Restore
DBMS DBMS
Systems tests come after the completion of unit tests. In the figure above, the database is
restored to use as the starting point for the run of PGM-BC (the original). Then the database
is unloaded to a flat file and saved for a future compare. The database is restored again for
’
execution of PGM-BC (the modified). Now Comparex compares the flat file directly against
the database.
Variations on the SEGMENT keyword or the KEY keyword are used to show Comparex how
to synchronize the two databases. The database produced by program PGM-BC is used as
’
SYSUT1, and the database produced by program PGM-BC is used as SYSUT2.
Again, the difference report is the proof of the effectiveness of the program modification. You
review the report to reconcile the actual results to the expected results. You make necessary
program corrections, restore the database, and rerun the program and Comparex until all
differences have been reconciled.
331
Chapter C: Effective Testing
Two areas that programming managers find especially troublesome are effective
communications about systems requirements and effective testing of requested
modifications.
By careful management of the testing function, the programming manager can nearly
eliminate trouble from these two sources.
These are the steps to take:
• Put requirements in writing
• Develop a test plan for each implementation and modification
• Gain the approval of the functional department for the test plan
• Gain the approval of the functional department for the test results.
332
Serena® Comparex® 8.7 for z/OS User’s Guide
In our payroll and union dues example, the payroll manager will probably want to see a tally
of both gross pay and net pay on the new master. In addition, the payroll manager may want
to review certain sensitive accounts on the new master. The programming manager adds
these items to the test plan, the payroll manager authorizes the time of M. Smith and J. Jones
to review results, and both the payroll manager and the programming manager sign the test
plan.
333
Chapter C: Effective Testing
In our payroll and union dues example, the programmer may decide to do his or her initial
tests on a file extracted from live production data containing only the three accounts to be
tested plus the payroll manager’s sensitive accounts. The programmer could select these off
the master file with a COPYDIFF run and desensitize certain fields:
MAXDIFF=100,CONTINUE,COPYDIFF /* See first 100 taken
SYSUT1=DUMMY
FILTORIN=(9,EQ,X'123456789C')
FILTORIN=(9,EQ,X'234567890C')
FILTORIN=(9,EQ,X'345678901C')
FILTORIN=(9,EQ,X'890123456.')
FILTORIN=(9,EQ,X'901234567.')
DESEN2=(30,C'EMPLOYEE NAME WAS HERE ') /* Desensitizer */
When generating test data, it is necessary to select items that should exercise the new code
and items that should not. In our payroll example, the test data should include members of
Local ABC123, members of other unions where union dues are deducted, members of other
unions where union dues are not deducted, and employees who are not members of any
union.
334
Serena® Comparex® 8.7 for z/OS User’s Guide
335
Chapter C: Effective Testing
336
SAMPLE COBOL CODE
D
COBOL1 - BEFORE CHANGE
000100 IDENTIFICATION DIVISION.
00000100
000200 PROGRAM-ID. COBOL01.
00000200
000300 ENVIRONMENT DIVISION.
00000300
000400 INPUT-OUTPUT SECTION.
00000400
000500 FILE-CONTROL.
00000500
000600 SELECT ONLY-FILE,
00000600
000700 ASSIGN VSAMFILE,
00000700
000800 ORGANIZATION IS INDEXED,
00000800
000900 ACCESS DYNAMIC,
00000900
001000 RECORD KEY IS ONLY-KEY,
00001000
001100 FILE STATUS IS ONLY-FILE-STAT.
00001100
001200 DATA DIVISION.
00001200
001300 FILE SECTION.
00001300
001400 FD ONLY-FILE.
00001400
001500 01 ONLY-REC.
00001500
001600 02 ONLY-KEY.
00001600
001700 03 ONLY-ACCOUNT PIC X(10).
00001700
337
Appendix D: Sample COBOL Code
338
Serena® Comparex® 8.7 for z/OS User’s Guide
004200 GOBACK.
00004200
004300 DO-THE-OPEN.
00004300
004400 OPEN I-O ONLY-FILE.
00004400
004500 IF ONLY-FILE-STAT = '00'
00004500
004600 MOVE 0 TO RETURN-CODE
00004600
004700 ELSE
00004700
004800 EXHIBIT NAMED ONLY-FILE-STAT
00004800
004900 DISPLAY 'OPEN FAILED'
00004900
005000 MOVE 8 TO RETURN-CODE.
00005000
005100 DO-THE-SEQ-READ.
00005100
005200 READ ONLY-FILE NEXT, AT END MOVE 8 TO RETURN-CODE.
00005200
005300 IF ONLY-FILE-STAT = '00'
00005300
005400 MOVE ONLY-REC TO LS-ONLY-REC
00005400
005500 MOVE 'N' TO END-OF-ONLY-FILE-SW
00005500
005600 ELSE
00005600
005700 MOVE 'Y' TO END-OF-ONLY-FILE-SW
00005700
005800 MOVE 8 TO RETURN-CODE.
00005800
005900 DO-THE-CLOSE.
00005900
006000 CLOSE ONLY-FILE.
00006000
339
Appendix D: Sample COBOL Code
340
Serena® Comparex® 8.7 for z/OS User’s Guide
002800 01 SWITCHES.
00002800
002900 02 END-OF-ONLY-FILE-SW PIC X.
00002900
003000 88 END-OF-ONLY-FILE VALUE 'Y'.
00003000
003100 LINKAGE SECTION.
00003100
003200 01 LS-FUNCTION PIC X(8).
00003200
003300 88 OPEN-REQUEST VALUE 'OPEN'.
00003300
003400 88 READSEQ-REQUEST VALUE 'READSEQ'.
00003400
003500 88 CLOSE-REQUEST VALUE 'CLOSE'.
00003500
003600 01 LS-ONLY-REC PIC X(220).
00003600
003700 EJECT
00003700
003800 PROCEDURE DIVISION USING LS-FUNCTION, LS-ONLY-REC.
00003800
003900 MAIN-LINE.
00003900
004000 IF OPEN-REQUEST PERFORM DO-THE-OPEN
00004000
004100 ELSE IF READSEQ-REQUEST PERFORM DO-THE-SEQ-READ
00004100
004200 ELSE IF CLOSE-REQUEST PERFORM DO-THE-CLOSE
00004200
004300 ELSE DISPLAY 'INVALID I/O FUNCTION REQUESTED'
00004300
004400 MOVE 12 TO RETURN-CODE.
00004400
004500 GOBACK.
00004500
004600 DO-THE-OPEN.
00004600
004700 OPEN I-O ONLY-FILE.
00004700
004800 IF ONLY-FILE-STAT = '00'
00004800
004900 MOVE ZERO TO RETURN-CODE
00004900
005000 ELSE
00005000
005100 EXHIBIT NAMED ONLY-FILE-STAT
00005100
341
Appendix D: Sample COBOL Code
342
MESSAGES
E
Throughout a comparison job, Comparex prints messages on SYSPRINT to show the results
of the processing. Three types of messages are produced:
• Messages that show the defaults Comparex used, the keywords you entered that
modified those defaults, and the source of each record shown on the difference report.
• Messages that tell you what actions to take if errors occur. Errors can occur either in the
processing environment or in the set of user-entered keywords.
• Messages that show processing statistics at the end of each job. These messages show
tallies of input records as well as the numbers of differences found.
CPX00I
Message Format
CPX00I input line from installation defaults CSECT or SYSIN file
Each 80-byte line from the SYSIN file is shown to the right of this message.
If “ERROR?” is printed on the right of the report, on the line under the line with message
number CPX00I, this is an ACTION message. If HALT=COND has been specified, then the
utility will terminate with message CPX30A and return code 16 after issuing all informational
messages but before reading any records from SYSUT1 or SYSUT2.
343
Appendix E: Messages
ACTION Examine the line containing the literal “ERROR?” to find the underscores. Under
the line containing the message number CPX00I, Comparex has underscored the characters
that cannot be interpreted.
Change the specification. If a keyword is misspelled or if a keyword’s parameters are
incorrectly given, correct the specification. Refer to the description of the keyword in this
manual for information about keyword parameters and their values.
If the underscores identify notes or comments, precede the comments with a “/*” (but not in
columns 1 and 2) which delineates comments from keywords. Alternatively, specify
HALT=NO, which forces Comparex to continue processing regardless of any syntax errors.
If there are characters on the line containing the message number CPX00I that are not
underscored, Comparex has interpreted these characters as correct keywords, and the utility
has modified its default processing with these keywords.
If “ERROR?” is not printed on the right of the report under the message line, this is an
informational message.
To review: Examine the line to ensure that the keywords and their parameters were correctly
entered.
CPX01I
Message Format
CPX01I - {INPUT PROCESSING KEYWORDS}
{OUTPUT PROCESSING KEYWORDS}
{DATA FILE SYNCHRONIZATION KEYWORDS}
{DISPLAY PROCESSING KEYWORDS}
{TEXT FILE KEYWORDS}
This is an informational message. HELP has been specified. Refer to the description of
“HELP” in Chapter 10.
If the HELP keyword without any option was found or HELP=ALL has been specified,
Comparex lists each valid keyword, along with a short description of the use of each
keyword, on SYSPRINT, following message CPX01I.
If HELP=INPUT was specified, Comparex lists each input processing keyword, along with a
short description of the use of each input processing keyword, on SYSPRINT, following
message CPX01I.
If HELP=OUTPUT was specified, Comparex lists each output processing keyword, along with
a short description of the use of each output processing keyword, on SYSPRINT, following
message CPX01I.
If HELP=DATA was specified, Comparex lists each DATA file synchronization keyword, along
with a short description of the use of each DATA file synchronization keyword, on SYSPRINT,
following message CPX01I.
344
Serena® Comparex® 8.7 for z/OS User’s Guide
If HELP=DISPLAY was specified, Comparex lists each display processing keyword, along
with a short description of the use of each display processing keyword, on SYSPRINT,
following message CPX01I.
If HELP=TEXT was specified, Comparex lists each TEXT file keyword, along with a short
description of the use of each TEXT file keyword, on SYSPRINT, following message CPX01I.
The HELP keyword causes no other change to Comparex’s processing.
CPX02A
Message Format
If keywords were intended for this run of Comparex, this is an ACTION message.
Action Examine JCL to determine why Comparex was unable to open SYSIN.
Possible reason: //SYSIN was missing or misspelled.
Whatever SYSIN file (for example, ABC.SYS) was specified at execution, could not be found
at open time. Possible reason: it was misspelled.
If keywords were not used for this run of Comparex, this is an informational message.
To review: No error correction is necessary. The Comparex run took all defaults.
CPX03I
Message Format
345
Appendix E: Messages
• procstepname: if a procedure is called that invokes Comparex, that name is used. For
example:
//COMPARE PROC
//stepname EXEC PGM=COMPAREX
// PEND
//procstepname EXEC COMPARE
CPX04I
Message Format
CPX04I - MAXDIFF=n1[,CONTINUE][,MAXMATCH=n1m],STOPAFT=n2[,KILLSPIE]
CPX05I
Message Format
CPX05I - PRINT=({MATCH },{MISMATCH} [,FULL]),MBRHDR={YES} ,HALT={NO} ,KILLRC={NO}
[,KEYSONLY]
{NOMATCH} {NOMISMATCH} {NO} {YES} {YES}
{COND} {COND}
{MATCH}
This is an informational message. If an option to PRINT was specified, this message will
show the PRINT parameters from that keyword. The default is PRINT=(MATCH,MISMATCH).
If MBRHDR was specified, this message will show the MBRHDR parameter from that
keyword. The default is MBRHDR=YES.
346
Serena® Comparex® 8.7 for z/OS User’s Guide
If HALT was specified, this message will show the HALT parameter from that keyword. The
default is HALT=COND in the Installation Defaults as distributed.
If KILLRC was specified, this message will show the KILLRC parameter from that keyword.
The default is KILLRC=NO.
If KEYSONLY was specified, this message will show the KEYSONLY is turned on. The
default is not KEYSONLY.
To review: Examine the parameters displayed. If necessary, check the description of the
PRINT keyword in “Display Processing Keywords” in Chapter 10.
CPX06I
Message Format
CPX06I - WILDCARD={C'.'} ,MODE={APPLICATIONS} (ALL DISPLACEMENTS RELATIVE TO {ONE} )
{t'vv'} {SYSTEMS} {ZERO}
CPX07I
Message Format
CPX07I - SYNCHRONIZATION KEY(S):
KEY=(ddd,len[{,C}][{,A}][,N=n])
[{,Z}][{,D}]
[{,P}][{,R}]
[{,B}]
[{,UP}]
[{,UB}]
KEY1=(ddd,len[{,C}][{,A}][,N=n]),KEY2=[(]ddd[,len][{,C}][,N=n][)]
[{,Z}][{,D}] [{,Z}]
[{,P}][{,R}] [{,P}]
[{,B}] [{,B}]
347
Appendix E: Messages
[{,UP}] [{,UP}]
[{,UB}] [{,UB}]
This is an informational message. It is shown if Comparex finds one or more KEY (or KEY1
and KEY2 pairs) specifications.
The KEYs are ordered in the same way they were specified. Comparex processes as if the
first KEY shown under message CPX07I is the most major KEY and the last KEY shown is
the most minor KEY.
If none of A-ascending, D-descending, or R-random was specified for a KEY, Comparex will
assume A next to the KEY to show an ascending key.
If no numeric specification for the type (Z, P, B, UP, or UB) is made, the default of C
(character) is assumed.
To review: Examine the parameters displayed to ensure that the correct set of KEYs were
used for the job.
CPX08I
Message Format
CPX08I - {DECIMAL},{EBCDIC},CASE={UPPER},LINE=(n1,{HORIZONTAL}),PAGE=n2
{HEX} {ASCII} {MIXED} {ALPHA}
{RAISE} {VERTICAL}
{MONO}
This is an informational message. It is shown on every Comparex run.
If HEX was specified, and it was not followed by a DECIMAL keyword, the literal ‘HEX’ is
shown, and Comparex shows the relative displacement of each line of each record on the
difference report in hexadecimal format
If MODE=SYSTEMS was specified and Comparex did not find a DECIMAL specification, the
literal ‘HEX’ is shown and Comparex shows the relative displacement of each line of each
record on the difference report in hexadecimal format; otherwise, the literal ‘DECIMAL’ is
shown and Comparex shows the relative displacement of each line of each record on the
difference report in decimal format.
The alphanumeric representation of the characters in the records on the difference report can
be shown in either EBCDIC or ASCII format.
If ASCII was specified, and it was not followed by an EBCDIC keyword, the literal ‘ASCII’ is
shown and Comparex uses its ASCII translation table to translate each byte in each record
on the difference report to an alphanumeric character for printing; otherwise, the literal
‘EBCDIC’ is shown and Comparex uses its EBCDIC translation table to translate each byte in
each record on the difference report to an alphanumeric character for printing.
If CASE was specified, the proper option, MIXED, LOWER (same as MIXED), UPPER,
RAISE, or MONO is displayed here. In the absence of any CASE specification, the default is
CASE=MIXED.
348
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX09I
Message Format
CPX09I - SKIPUT1=n1,SKIPUT2=n2
CPX10I
Message Format
CPX10I - FILTERS:
349
Appendix E: Messages
FILTERIN=([MEMBER,/CSECT,]d1[-d2],op,t'vvvv'[,N=n])
FILTEROUT=([MEMBER,/CSECT,]d1[-d2],op,t'vvvv'[,N=n])
FILTORIN=([MEMBER,/CSECT,]d1[-d2],op,t'vvvv'[,N=n])
FILTOROUT=([MEMBER,/CSECT,]d1[-d2],op,t'vvvv'[,N=n])
This is an informational message. It is shown only if Comparex finds one or more filtering
specifications.
The filters are ordered in the same way they were specified. Comparex processes the filters
in the order shown under message CPX10I.
Comparex converts the last filtering keyword of each type (record and member) to an ‘AND’
logic filter.
To review: Examine the statements displayed to ensure that the correct set of filters was used
for the job. If necessary, check the descriptions of the FILTERIN, FILTEROUT, FILTORIN,
and FILTOROUT keywords in “Input Processing Keywords” in Chapter 6.
CPX11I
Message Format
CPX11I - DASH={C'-'} ,PLUS={C'+'} [,NIBBLE][,FLDSONLY]
{t'v1'} {t'v2'}
This is an informational message. It is shown on every Comparex run.
If DASH was specified, the value on that keyword is shown instead of ‘t‘v1’’; otherwise, the
literal ‘DASH=C‘-’’ is shown. Comparex will use this character to underscore differing bytes
on the difference report.
If PLUS was specified, the value on that keyword is shown instead of ‘t‘v2’’; otherwise, the
literal ‘PLUS=C‘+’’ is shown. Comparex will use this character to underscore excess bytes
on the difference report if a SYSUT2 record is longer than a paired SYSUT1 record.
If NIBBLE was specified, the word NIBBLE is shown and only differing half-bytes will be
underscored on the difference report.
If FLDSONLY was specified, or if you entered one or more sets of FIELD1 and FIELD2
keywords, the word FLDSONLY is shown and only differing bytes defined by FIELD
statements are underscored with the DASH character.
To review: Examine the parameters displayed to ensure that the keywords were correctly
entered.
CPX12I
Message Format
CPX12I - IDENTITIES, DESENSITIZING, FIELDS, AND MASKS:
FIELD=(dd,len,t[,N=n]) 1 FIELD=(dd,len,t[,N=n])
IDENTITY=(dd,op,t'vv'[,N=n]) 2 IDENTITY=(dd,op,t'vv'[,N=n])
MASK1=(dd,ll),MASK2=(dd,ll) 3 FIELD=(dd,len)
350
Serena® Comparex® 8.7 for z/OS User’s Guide
MASK=(dd,len) 4 FIELD=(dd,len)
FIELD1=(d,l),FIELD2=d 5 FIELD1=(d,l),FIELD2=d
FIELD1=(d,l,dateformat[,N=n]),FIELD2=(d,l,dateformat[,N=n]) 6 FIELD=...
DESEN=(dd,t'vv'[,N=n]) 7 DESEN=(dd,t'vv'[,N=n])
DESEN1=(dd,t'vv'[,N=n]) 8 DESEN1=(dd,t'vv'[,N=n])
DESEN2=(dd,t'vv'[N=n]) 9 DESEN2=(dd,t'vv'[,N=n])
This is an informational message. It is shown only if Comparex finds one or more IDENTITY,
FIELD (or FIELD1 and FIELD2 pair), MASK (or MASK1 and MASK2 pair), or DESEN
(DESEN1 or DESEN2 also) keywords as specifications.
The message has three parts. The left part is the same as specified, the middle part is a
sequence number, and the right part is Comparex’s interpretation of the input for processing.
If no MASK (or MASK1 and MASK2) specifications are made, the right part is not shown.
Comparex always inserts a final IDENTITY test for records which do not pass any of your
IDENTITY tests. This IDENTITY and its associated FIELD are shown in this way:
IDENTITY=(CATCH-ALL)
FIELD=(1,END)
To review: Examine the left part of the message to ensure that the correct set of IDENTITYs,
FIELDs, MASKs, and DESENs was used for the job. Check the order of the keywords if
IDENTITYs are used.
The middle part is a sequence number assigned to each IDENTITY and FIELD. This
sequence number is used to refer to these same IDENTITYs and FIELDs on the GENFLDS
output and on message CPX52I.
The right part is shown if any MASK (or MASK1 and MASK2 pair) specifications were made.
Comparex evaluates the MASKs and creates FIELDs. For example:
MASK=(6,9)
FIELD=(1,5,C)
FIELD=(15,END)
and these two FIELDs would be shown as the right part of message CPX12I.
Here is a more complete example. If the specifications are:
FIELD=(4,009,N=EVERYBODY-HAS-ONE)
ID=(004,LE,C'ABC',N=MOST)
FIELD=(15,END),MASK=(24,3),MASK=(20,1)
IDENTITY=(4,EQ,C'XYZ')
FIELD1=(15,8,Z),FIELD2=(17,5,P)
MASK1=(21,4,B),MASK2=23
MASK=(1,5),MASK=(60,END)
IDENTITY=(7,EQ,X'EF'),MASK=(25,4)
351
Appendix E: Messages
Refer to “IDENTITY, FIELD, MASK, and DESEN Messages” on page 113 for an actual
example.
CPX13I
Message Format
CPX13I - GENFLDS
This is an informational message. It is shown only if Comparex finds the GENFLDS keyword
and one or more IDENTITY or FIELD (or FIELD1 and FIELD2 pair) specifications.
Immediately after the CPX13I message, Comparex advances to the top of the page to create
the first GENFLDS visual representation, using the line length specified by the value of LINE
given in the CPX08I message.
To review: Examine the generated visual representations. Modify IDENTITY, FIELD, and
MASK keywords as necessary to correctly describe the records. See the description of the
GENFLDS keyword in “Display Processing Keywords.”
CPX14I
Message Format
CPX14I - END=(ddd,op,t'vvvv')
This is an informational message. It is shown only if Comparex finds the END keyword.
To review, examine the statements displayed to ensure that the run is correct.
CPX15I
Message Format
352
Serena® Comparex® 8.7 for z/OS User’s Guide
353
Appendix E: Messages
<UPDATE member>
?? member
If COPYDIFF=LIB is specified, suffixing records are written out. At the end of each updated
member, it is:
-EMOD
and at the conclusion of all updates, it is:
-END
To review: examine the statements displayed to ensure that the run is correct.
If COPYSAME is specified, records from SYSUT1 are copied to SYSUT3 provided that the
same record is identical on SYSUT2.CPX16A.
If COPYSPLIT is specified, records from SYSUT1 and SYSUT2 are copied to various
SYSUT3x files.
{COPYSAME}
{SYSUT3x}
354
Serena® Comparex® 8.7 for z/OS User’s Guide
This is an ACTION message. You have entered the COPYSAME or COPYSPLIT keyword,
but Comparex cannot open the SYSUT3 or SYSUT3x files. If you do not want to create
certain output data sets with COPYSPLIT, this may be your desired result and no further
action is necessary.
If Comparex has not been able to open file SYSUT3, the utility terminates, showing a return
code of 16.
If Comparex has not been able to open any of the SYSUT3x files, the utility terminates,
showing a return code of 16.
ACTION Examine the JCL and the user-entered keywords to determine the problem.
Possible reasons:
SYSUT3=DUMMY was specified. If the SYSUT3 file is desired, take out the
SYSUT3=DUMMY specification.
Comparex could not open file SYSUT3. Examine the JCL. //SYSUT3 may have been missing
or misspelled.
CPX16I
Message Format
CPX16I - SYSUT3=dsname.sysut3
or
CPX16I - SYSUT3x=dsname.sysut3
DCB=(DSORG={PS},RECFM={F}[B][S],LRECL=n,BLKSIZE=n)
{IS} {V}
{DA} {U}
[,RKP=rkp,KEYLEN=n]
or
CPX16I - SYSUT3=dsname.sysut3
ACB=({ESDS},LRECL=n,CINV=n,[PASSWORD=xxx])
{KSDS}
{RRDS}
[,RKP=rkp,KEYLEN=n]
355
Appendix E: Messages
RECFM, LRECL, BLKSIZE, RKP, and KEYLEN further describe the file.
If the data set organization is VSAM, the version with ACB= is printed. ESDS, KSDS, RRDS,
LRECL, CINV, RKP, and KEYLEN describe the VSAM file. If the RKP is shown with the ACB
option and the RKP was extracted by Comparex from an operating system control block
(such as a VSAM ACB), the relative key position value is relative to zero, even if the
MODE=APPLICATIONS keyword has been entered.
To review: Examine the parameters of the message to determine if the SYSUT3 file or the
SYSUT3x files were correctly specified.
CPX18I
Message Format
CPX19I
Message Format
CPX19I - DATA BASE SEGMENTING:
SEGMENT=(d1,EQ,t'vvvv')
SEGMENT=(d1,EQ,t'vvvv',({A},d2,len))
{D}
{R}
This is an informational message. It is shown if one or more SEGMENT keyword
specifications and no KEY keywords (or KEY1 and KEY2 pairs) are made.
Comparex displays the parameters from the SEGMENT keywords, in the same order as
specified.
To review: Examine the SEGMENT keywords and their parameters to ensure that they have
been correctly entered. If necessary, see “DATA File Synchronization Keywords” in Chapter 7
for more information about the SEGMENT keyword.
CPX20I
Message Format Example
356
Serena® Comparex® 8.7 for z/OS User’s Guide
This is an informational message. It is shown if Comparex has found the PAN, LIB, or OTH
option to either SYSUT1 or SYSUT2 requesting that the Comparex interface be invoked to
read from those files. The default load module name is CPXIFACE but any other one to eight
character name may have been specified. The only requirement is that the load module
name exist on an accessible library or an abend is certain.
The message reflects information about how the module was generated (and it does not have
to be called CPXIFACE either) through a special call procedure. The standard calls of OPEN,
SRCH, READ, and CLOS are to read exotic files, but INFO is performed to extract date/time
stamps and release level.
CPX21I
Message Format
CPX21I - SYSUT1=dsname.sysut1
DCB=(DSORG={PS},RECFM={F}[B][S],LRECL=n,BLKSIZE=n)
{IS} {V}
{DA} {U}
{PO}
[EN=n],VOL=SER=volser
[,RKP=rkp,KEYLEN=n]
or
CPX21I - SYSUT1=dsname.sysut1
ACB=({ESDS},LRECL=n,CINV=n[,PASSWORD=xxx])
{KSDS}
{RRDS}
[EN=n],VOL=SER=volser
[,RKP=rkp,KEYLEN=n]
or
CPX21I - SYSUT1=({PANVALET}
([DDNAME=ddname,]INCLUDE={NO}[,LEVEL=n])
{LIBRARIAN} {YES}
{OTHER}
PARM='parm data'
This is an informational message. It is shown if SYSUT1=DUMMY has not been specified,
and after Comparex has successfully opened SYSUT1.
The dsname.sysut1 is taken from the data set name of the file that is allocated to SYSUT1.
If the data set organization is not VSAM, the first version (with DCB=) is printed. The original
DSORG found for the file is displayed.
If the data set organization is QSAM, the DSORG is PS; if the data set organization is ISAM,
the DSORG is IS.
357
Appendix E: Messages
CPX22I
Message Format
CPX22I - SYSUT2=dsname.sysut2 DCB=(DSORG={PS},RECFM={F}[B][S],LRECL=n,BLKSIZE=n)
{IS} {V}
{DA} {U}
{PO}
[,RKP=rkp,KEYLEN=n]
or
CPX22I - SYSUT2=dsname.sysut2 ACB=({ESDS},LRECL=n,CINV=n[,PASSWORD=xxx])
{KSDS}
{RRDS}
[,RKP=rkp,KEYLEN=n]
or
CPX22I - SYSUT2=({PANVALET} ([DDNAME=ddname,]INCLUDE={NO}[,LEVEL=n])
{LIBRARIAN} {YES}
{OTHER}
PARM='parm data'
358
Serena® Comparex® 8.7 for z/OS User’s Guide
If the data set organization is direct access, the DSORG is DA. RECFM, LRECL, BLKSIZE,
RKP, and KEYLEN further describe the file.
If the data set organization is VSAM, the version with ACB= is printed. ESDS, KSDS, RRDS,
LRECL, CINV, RKP, and KEYLEN describe the VSAM file.
If the RKP is shown with the ACB option, and if the RKP was extracted by Comparex from an
operating system control block (such as a VSAM ACB), the relative key position value is
relative to zero, even if the MODE=APPLICATIONS keyword has been entered.
To review: Examine the parameters of the message to determine if file SYSUT2 was correctly
specified.
CPX23I
Message Format
CPX24A
Message Format
359
Appendix E: Messages
3. You have entered one or more SEGMENT keywords. TEXT comparison logic does not
use segment synchronization. Delete the TEXT keyword, or delete all SEGMENT
specifications.
4. You have entered at least one IDENTITY keyword, or at least one DESEN (or DESEN1 or
DESEN2). TEXT comparison logic uses neither IDENTITYs nor DESENs. Delete the
TEXT keyword, or eliminate IDENTITYs and/or DESENs.
5. You have entered more than one FIELD keyword, or Comparex compiled more than one
FIELD from the user-specified FIELDs and MASKs. TEXT comparison logic uses only
one FIELD.
If any option to TEXT is specified (such as TEXT=COBOL) except for TEXT=REPORT,
Comparex generates a FIELD specification, and you will not be allowed to enter any
FIELD keyword. With the TEXT=REPORT option, Comparex does not generate a field,
and you cannot enter a FIELD keyword. Delete the TEXT keyword, or delete all but one
FIELD specification.
CPX25I
Message Format
CPX25I - TEXT[=xxxx],MLC=n,BUFF=nn,FRAME={YES},[SQUEEZE=t'vv']
{NO}
{NUM}
or
CPX25I - DIRECTORY[={SPF} ]
[ {PDF} ]
[ {USER}]
or
CPX25I - DATA[=CSECT][,BUFF=nn,]FORMAT=xy,INTERLEAVE,LINELIM=n
CPX25I - DATA,[BUFF=nn,]FORMAT=xy,INTERLEAVE=n,LINELIM=n
(FORMAT EXPLANATION:
{FULL SYSUT1} {FOLLOWED BY} {FULL SYSUT2}
{DIFFERING LINES OF SYSUT1} {INTERLEAVED WITH} {DIFFERING LINES OF SYSUT2}
360
Serena® Comparex® 8.7 for z/OS User’s Guide
To review: Examine the parameters displayed to ensure that the keywords were interpreted
as desired.
You can determine the size of the buffering areas Comparex works with by using the BUFF
keyword on CPX25I. The default is 60K for TEXT and DATA. For CSECTS the default is
256K. You can override this value by setting BUFF=any value(for any value K) up to 1024 for
1024K.
If you specify MODE=SYSTEMS, you can specify any value up to 16 megabytes (where the
value you specify is 16 megabytes/1024). In general, the larger the buffer size, the more CPU
time Comparex will use for the run.
CPX26I
Message Format
CPX26I - SKIP RECORD PROCESSING: SYSUT1(n1)/SYSUT2(n2)
This is an informational message. Comparex has found either a SKIPUT1 or SKIPUT2
specification, and the utility has opened and skipped over (read without passing any record to
the compare routines) the required number of records.
If directory-embedded data sets are being read, this message is issued at the beginning of
each member, after the number of records specified by message CPX09I has been bypassed
for that member.
If the number of records on the file is less than the number of records to be skipped over, n1
and n2 show the number of records on the file; otherwise, n1 and n2 shown the number of
records skipped over.
To review: Compare the numbers of records skipped over to the numbers given in message
CPX09I. If the numbers are different, one or both input files are shorter than you anticipated,
and you may determine that the wrong files were specified.
CPX27I
Message Format
CPX27I - PRINTING OF SYSUT1 ONLY INVOKED [(FOR SCAN)]
If SCAN has been specified, the literal FOR SCAN is appended to the message.
If SYSUT2 should have been present, this is an ACTION message.
If SYSUT2=DUMMY has been specified, or Comparex is unable to open SYSUT2 and
HALT=NO has been specified, or after successfully opening file SYSUT2, finds the file to be a
dummy file (the JCL specifies //SYSUT2 DD DUMMY or //SYSUT2 DD DSN=NULLFILE), the
utility issues this message.
If this message is issued, Comparex sends no records to the comparison routines. Instead,
any SKIPUT1 keyword is used to skip over records, and any filtering keywords select or
reject records. Selected records from SYSUT1 are printed on the difference report.
361
Appendix E: Messages
CPX28I
Message Format
CPX28I - CPXEXIT=cpxexit/MODULE NOT PRESENT, EXIT BYPASSED
Whatever specification for CPXEXIT has been made, this message reflects the resolution
(loading) of that module name.
If the module name could not be loaded, the text “/MODULE NOT PRESENT, EXIT
BYPASSED” is appended.
ACTION Point to correct CPXEXIT module name.
CPX30A
Message Format
This is an ACTION message. It is directly related to the setting of keyword HALT. Either
HALT=COND with syntax errors or HALT=YES has been specified. No files will be read and
compared.
ACTION If HALT=YES was intentionally specified, you now know what happens.
If HALT=COND was specified (could be part of installation defaults), then the syntax errors
underscored and denoted by ERROR? should be corrected for the subsequent rerun.
CPX31A
Message Format
This is an ACTION message. An attempt was made to compare two files that have no chance
of being processed together by Comparex.
ACTION Examine the reason code shown (n).
1. SYSUT1 is specified as DUMMY and SYSUT2 points to a directory-embedded data set.
Either reverse the situation or let them both point to directory-embedded data sets.
2. SYSUT1 points to a sequential data set and SYSUT2 points to a directory-embedded
data set. Let both point to sequential files or both point to directory-embedded data sets.
362
Serena® Comparex® 8.7 for z/OS User’s Guide
3. SYSUT1 and SYSUT2 both point to directory-embedded data sets but both are PAN or
both are LIB and
— DIRECTORY (such as DIR=PDF) has not been specified, or
— A separately named interface module of the SYSUT2 slot and a different DDNAME
has not been specified.
4. SYSUT1 points to a directory-embedded data set but SYSUT2 is sequential. Either set
SYSUT2 to DUMMY of also let it point to a compatible directory-embedded data set.
CPX35A
Message Format
CPX35A - KEY SYNCHRONIZATION VALUES TOO LARGE FOR FILE - FUNCTION TERMINATED - RETURN CODE =
16
This is an ACTION message. You have entered one or more KEY keywords (or KEY1 and
KEY2 pairs), and the displacement given on at least one KEY was greater than the length of
the record being processed. This means that the starting position (displacement) of the KEY
was beyond the end of the record being read if the message was issued. Comparex
terminates, showing a return code of 16.
ACTION Change the displacement on the KEY keyword so that the value is less than the
length of the shortest record in the file. If the short records can be identified with a logical test,
you can filter them out (only records that are filtered in are synchronized by KEY).
CPX36A
Message Format
CPX36A - {KEY} OUT OF SPECIFIED SEQUENCE - RECORD nn1 [(RBA=nn2)]
{SEGMENT}
ON FILE {SYSUT1}
{SYSUT2}
This is an ACTION message. It will only appear once per execution at most. At least one KEY
(or KEY1/KEY2 pair) or SEGMENT has been specified which contained an Ascending or
Descending control field and it was found not to be in that sequence. The message is issued
and then the offending record is displayed right after it.
363
Appendix E: Messages
ACTION Either correct the specification for KEY or SEGMENT, sort the file into a usable
order, or try random as opposed to ascending or descending order.
CPX37A
Message Format
CPX37A - DB SEGMENTING SYNCH. VALUES TOO LARGE FOR FILE - FUNCTION TERMINATED - RETURN CODE
= 16
This is an ACTION message. You have entered one or more SEGMENT keywords, and the
displacement for a synchronizing key on at least one SEGMENT was greater than the length
of the record being processed. This means that the starting position (displacement) of the
SEGMENT was beyond the end of the record being read if the message was issued.
Comparex terminates, showing a return code of 16.
ACTION Change the displacement on the SEGMENT keyword so that the value is less than
the length of the shortest record on the file. If the short records can be identified with a logical
test, you could filter them out (only records that are filtered in are synchronized by
SEGMENT).
CPX39A
Message Format
{DATA}
If parsing CSECTs, the BUFF parameter defaults to 256. You should set BUFF higher, such
as:
BUFF=1000
If the buffer cannot fully contain both load modules (at buffer-stocking time) then the
comparison is terminated with this message.
The xxxxxxxx part of the message can be either a CSECT name or
$RECORD$
If it is a CSECT name, then the ESD entry for this CSECT stated that it would spill beyond the
BUFFer capacity.
The value for nnn is the high decimal number of the beginning address plus the CSECT size
that would otherwise overflow (S0C4) the buffer.
If it is $RECORD$, the message is displayed if actually processing the undefined length
record. Again, the nnn is the high decimal number of the beginning address plus the record
length that would otherwise overflow the buffer.
364
Serena® Comparex® 8.7 for z/OS User’s Guide
This is an ACTION message. You have attempted to compare files with very large records
under TEXT logic, DATA with random KEYs, or CSECT parsing, and not adequately
increased the working buffer (BUFF).
ACTION Either eliminate random KEYs, or specify a larger value for BUFF. A recommended
size is the size of the largest CSECT to be compared plus the blocksize; then tripled.
CPX40A
Message Format
This is an ACTION message. The user has attempted to compare load modules via
DATA=CSECT (CSECT parsing), and Comparex determined that one of the files is not
considered to be an acceptable load module. Comparex checks that the first record of the file
is a legal External Symbol Dictionary (ESD) entry. Probable cause is that two explicit
members of the same or different partitioned data sets are being compared (as opposed to
comparing like named members of different libraries) and the TEST attribute is on for one of
the members.
ACTION Either point to load module libraries or use regular DATA (not DATA=CSECT) logic.
CPX41I
Message Format
CPX41I - CSECT=csectnam DIF O N E
This is an informational message. DATA=CSECT (CSECT parsing) has been specified.
Comparex has determined that csectnam exists in the load module that SYSUT1 points to,
but does not exist in SYSUT2.
To review: No error correction is necessary. Use this information to check the effectiveness of
the comparison.
CPX42I
Message Format
CPX42I - CSECT=csectnam DIF T W O
This is an informational message. DATA=CSECT (CSECT parsing) has been specified.
Comparex has determined that csectnam exists in the load module that SYSUT2 points to
but does not exist in SYSUT1.
To review: No error correction is necessary. Use this information to check the effectiveness of
the comparison.
365
Appendix E: Messages
CPX45A
Message Format
CPX45A - UNACCEPTABLE LOAD MODULE ATTRIBUTES - {OVERLAY}, BYPASSED
{TEST }
{SCATTER}
This is an ACTION message. The user has attempted to compare load modules (from either
SYSUT1 or SYSUT2) with attributes that Comparex considers impossible to process. The
Overlay, Test, or Scatter attribute in any combination will provoke this message. The module
pair is bypassed and precipitates a return code of at least eight, indicating a termination
before reaching end of data.
ACTION Either use regular DATA logic (not DATA=CSECT), or FILTOROUT the load
modules that have the offending attributes.
CPX50I
Message Format
CPX50I - RECORD NUMBER nn1 (RBA=nn2) ON FILE SYSUT1
or
CPX50I - CSECT=csectnam
This is an informational message. The record that immediately follows this message on the
difference report was read from file SYSUT1, and it was selected to be printed because the
matching record on file SYSUT1 and file SYSUT2 were identical. The logical record number
is shown instead of nn1.
If the data set organization for file SYSUT1 is VSAM, the relative byte address of the first byte
of the record is shown instead of nn1.
If DATA=CSECT (CSECT parsing) has been specified, the second form of the message is
used. The specified CSECT csectnam has been isolated in each file, and differences have
been found. The CSECT from SYSUT1 will be displayed.
To review: No error correction is necessary. Use this record to check the effectiveness of a
program or a modification.
CPX51I
Message Format
CPX51I - RECORD NUMBER nnn [(RBA=nnn)] ON FILE SYSUT1 KEY=xxxxxxx
[LIMITED LINES]
or
CPX51I - CSECT=csectnam
366
Serena® Comparex® 8.7 for z/OS User’s Guide
This is an informational message. The record that immediately follows this message on the
difference report was read from file SYSUT1 and it was selected to be printed on the
difference report based on the values of the PRINT and FORMAT keywords. The logical
record number is shown instead of nn1.
IF LINELIM is specified, LIMITED LINES is displayed, indicating the number of lines printed
for the record is limited to the value for LINELIM.
If the data set organization for file SYSUT1 is VSAM, the relative byte address of the first byte
of the record is shown instead of nn2 and the RBA= literal is shown.
If DATA=CSECT (CSECT parsing) has been specified, the second form of the message is
used. The specified CSECT csectnam has been isolated in each file, and differences have
been found. The CSECT from SYSUT1 will be displayed.
To review: No error correction is necessary. Use this record to check the effectiveness of a
program or a modification.
CPX52I
Message Format
CPX52I - RECORD NUMBER nn1 [(RBA=nn2)] ON FILE SYSUT2 [IDENTITY=i,][FIELD=f] [LIMITED LINES]
or
CPX52I - CSECT=csectnam
This is an informational message. The record that this message refers to was read from file
SYSUT2 and selected to be printed on the difference report based on the values of the
PRINT and FORMAT keywords. The logical record number is shown instead of nn1.
This SYSUT2 record has been paired with a SYSUT1 record for comparison, synchronized
by KEYs, SEGMENTs, or by physical locations on the files.
If the data set organization for file SYSUT2 is VSAM, the relative byte address of the first byte
of the record is shown instead of nn2 and the RBA= literal is shown.
If FIELDs or IDENTITYs were specified and message CPX12I was issued, the sequence
number from message CPX12I is shown for the IDENTITY and FIELD identified with the
record.
The IDENTITY sequence number is indicated by i.
If FIELD appears, each field that is printed is preceded by its field number and description.
If FLDSONLY has been specified, or if Comparex has generated a FLDSONLY specification
(see message CPX11I), those bytes that differ in the selected FIELDs are underscored with
the DASH character.
367
Appendix E: Messages
If FLDSONLY has not been specified or generated, all differing bytes are underscored with
the DASH character.
If NIBBLE has been specified with dump format printing, Comparex underscores only
differing half-bytes with the DASH character.
IF LINELIM is specified, LIMITED LINES is displayed, indicating the number of lines printed
for the record is limited to the value for LINELIM.
If the SYSUT2 record is longer than the paired SYSUT1 record, Comparex underscores the
excess bytes on the SYSUT2 record with the plus character.
If DATA=CSECT (CSECT parsing) has been specified, the second form of the message is
used. The specified CSECT csectnam has been isolated in each file and differences have
been found. The CSECT from SYSUT2 will be displayed and the differences underscored.
To review: No error correction is necessary. Use this record to check the effectiveness of a
program or a modification.
CPX55I
Message Format
CPX55I - INVALID PACKED DATA DETECTED IN FIELD
Explanation
Message issued when packed comparison is made against unpacked data.
CPX56I
Message Format
CPX56I - EXTRA RECORD NUMBER nn1 [(RBA=nn2)] ON FILE SYSUT1
This is an informational message. The record that immediately follows this message on the
difference report was read from file SYSUT1. File SYSUT2 has come to end of file and file
SYSUT1 has not come to end of file. This message presents a record that is on the end of file
SYSUT1 that is not able to be synchronized to a record from file SYSUT2.
The logical record number is shown instead of nn1.
If the data set organization for file SYSUT1 is VSAM, the relative byte address of the first byte
of the record is shown instead of nn2 and the RBA= literal is shown.
To review: No error correction is necessary. Use this record to check the effectiveness of a
program or a modification.
CPX57I
Message Format
368
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX61I
Message Format
This is an informational message. The record that immediately follows this message on the
difference report was read from file SYSUT1. File synchronization is being done, for this
execution of Comparex, by KEYs, and this following SYSUT1 record is not matched by KEY
to any SYSUT2 record.
The logical record number is shown instead of nn1.
If the data set organization for file SYSUT1 is VSAM, the relative byte address of the first byte
of the record is shown instead of nn2 and the RBA= literal is shown.
To review: No error correction is necessary. Use this record to check the effectiveness of a
program or a modification.
CPX62I
Message Format
This is an informational message. The record that immediately follows this message on the
difference report was read from file SYSUT2. File synchronization is being done, for this
execution of Comparex, by KEYs, and this following SYSUT2 record is not matched by KEY
to any SYSUT1 record.
The logical record number is shown instead of nn1.
If the data set organization for file SYSUT2 is VSAM, the relative byte address of the first byte
of the record is shown instead of nn2 and the RBA= literal is shown.
To review: No error correction is necessary. Use this record to check the effectiveness of a
program or a modification.
369
Appendix E: Messages
CPX64I
Message Format
This is an informational message. The record that immediately follows this message on the
difference report was read from file SYSUT1. File synchronization is being done, for this
execution of Comparex, by SEGMENTs, and this following SYSUT1 record is not matched by
SEGMENT to any SYSUT2 record.
The logical record number is shown instead of nn1.
If the data set organization for file SYSUT1 is VSAM, the relative byte address of the first byte
of the record is shown instead of nn2 and the RBA= literal is shown.
To review: No error correction is necessary. Use this record to check the effectiveness of a
program or a modification.
CPX65I
Message Format
This is an informational message. The record that immediately follows this message on the
difference report was read from file SYSUT2. File synchronization is being done by
SEGMENTs, and this SYSUT2 record is not matched by SEGMENT to any SYSUT1 record.
The logical record number is shown instead of nn1.
If the data set organization for file SYSUT2 is VSAM, the relative byte address of the first byte
of the record is shown instead of nn2 and the RBA= literal is shown.
To review: No error correction is necessary. Use this record to check the effectiveness of a
program or a modification.
CPX66A
Message Format
CPX66A - SEGMENT ID NOT MATCHABLE - RECORD nnn ON FILE {SYSUT1}
{SYSUT2}
This is an ACTION message. You have specified several SEGMENT keywords, and each
one describes a particular segment identification. If a record was read from either SYSUT1 or
SYSUT2 that does not match any of the SEGMENT specifications, then this message is
issued, followed by a full display of the offending record. The record is discarded from further
processing as if it satisfied a FILTOROUT. No statistics are gathered for this event. The
purpose of this is to allow more accurate synchronization. Unanticipated or misspelled
segment types can have unpredictable results.
370
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX67I
Message Format
This is an informational message. MAXDIFF has been specified, and the number of
differences specified by the MAXDIFF keyword’s parameter has been printed on the
difference report. After message CPX67I is printed, no further records from file SYSUT1 or
file SYSUT2 will be shown on the difference report.
If CONTINUE has also been specified, the second line of message CPX67I is shown. This
indicates that Comparex will continue to read the input files and compare them without writing
any records on the difference report. If CONTINUE is specified, the end-of-processing totals
will reflect the total number of records on the input files and the total number of differences
found.
If CONTINUE has not been specified, Comparex will stop processing immediately after
message CPX67I is printed. This means that Comparex will close its input files and issue its
end-of-processing messages immediately.
To review: Examine the records on the difference report. If more records are needed to check
the effectiveness of a program or a modification, change the MAXDIFF parameter to a higher
number for subsequent runs.
CPX69I
Message Format
CPX69I - STOPAFT [(END)] INVOKED
This is an informational message. Either STOPAFT has been specified and the number of
records specified by the STOPAFT keyword’s parameter has been reached, or the END
(signified by the (END) literal) keyword specification has been reached.
Comparex, after it writes message CPX69I, closes its input files and issues its end-of-
processing messages. In addition, Comparex terminates, showing a return code of 8.
To review: Examine the records on the difference report. If Comparex needs to read more
records to check the effectiveness of a program or a modification, change the STOPAFT
parameter to a higher number for subsequent runs.
If doing foreground compares (Comparex/ISPF option 6), your installation may have set a
limit as to how many records can be read in from each input file. If so, you may have to run
your compare as a background job (option 7 or 8) in order to read each file completely.
371
Appendix E: Messages
CPX71I
Message Format
CPX71I - END OF {DATA} ON FILE SYSUT1 [(EMPTY FILE)]
{TEXT} [(ALL RECORDS FILTERED OUT)]
{DIRECTORY}
CPX72I
Message Format
CPX72I - END OF {DATA} ON FILE SYSUT2 [,(EMPTY FILE)]
{TEXT} [,(ALL RECORDS FILTERED OUT)]
{DIRECTORY}
372
Serena® Comparex® 8.7 for z/OS User’s Guide
If the file was empty, EMPTY FILE will appear at the end of the message. If the file was
empty, ALL RECORDS FILTERED OUT will appear at the end of the message.
To review: No error correction is necessary. Use this message and its location on the
difference report to evaluate the correctness of the Comparex run.
373
Appendix E: Messages
CPX73I
Message Format
CPX73I - COPYSPLIT RECORD COUNTS SYSUT3A(n1)/SYSUT3B(n2)/SYSUT3C(n3)/SYSUT3D(n4)/
SYSUT3E(n5) )
This informational message appears at the end of the Comparex run when COPYSPLIT is
specified. Comparex tallies the number of records written to the SYSUT3x files, and reports
the counts as n1 through n5. If Comparex is unable to open the SYSUT3x file, the record
count is zero (0).
CPX74I
Message Format
CPX75I
Message Format
CPX75I - RECORDS PROCESSED: SYSUT1(n1)/SYSUT2(n2)[/SYSUT3(n3)], DIFFERENCES(d0[,d1,d2])
CSECTS PROCESSED: SYSUT1(c1)/SYSUT2(c2)
i1 i2 IDENTITY=(. . .
374
Serena® Comparex® 8.7 for z/OS User’s Guide
This is an informational message. It appears at the end of every Comparex run unless
nothing is extracted from the database and there are no counts, in which case no CPX751
message appears.
Comparex tallies the number of records read from file SYSUT1, and the utility shows that
number as n1. This counter includes any records that were skipped over as a result of a
SKIPUT1 keyword.
Comparex tallies the number of records read from file SYSUT2, and the utility shows that
number as n2. This counter includes any records that were skipped over as a result of a
SKIPUT2 keyword.
If COPYDIFF was specified and Comparex was able to successfully open file SYSUT3,
Comparex shows the number of records written to file SYSUT3 as n3.
If CSECT parsing (DATA=CSECT) was specified, Comparex shows the number of logical
CSECTs processed as c1 and c2.
If TEXT processing was specified by message CPX25I, d0, d1, and d2 are calculated as
follows:
d0 contains the number of records in each block that differ on a one-to-one basis. For
example, if a block of records from file SYSUT1 is identified as differing from a block of
records from file SYSUT2, and one block contains four records and one block contains
five records, the d0 counter is increased by four. The extra record (the fifth record that did
not differ on a one-to-one basis) is used to increase either counter d1 or counter d2 in this
way:
If the block that contained more records came from file SYSUT1, counter d1 is increased
by the number of records in the block from file SYSUT1, minus the number of records in
the block from file SYSUT2 (in our example, 5 minus 4 equals 1; therefore, counter d1 is
increased by 1).
If the block that contained more records came from file SYSUT2, counter d2 is increased
by the number of records in the block from file SYSUT2, minus the number of records in
the block from file SYSUT1.
If message CPX25I specified DIRECTORY processing and Comparex determined that both
input files were directory-embedded, this message does not appear. Instead, Comparex
issues message CPX78I.
If both input files are directory-embedded and message CPX25I did not specify DIRECTORY
processing, message CPX75I appears at the end of each member, showing the number of:
• input records.
• any SYSUT3 records written.
• differences found for that member.
Then, at the end of the processing, Comparex issues message CPX78I to show the number
of members processed during the run.
If KEY or SEGMENT synchronization was specified for this run:
375
Appendix E: Messages
• d0 contains the number of pairs of records that were synchronized by KEY or SEGMENT
and some difference was detected
• d1 contains the number of records from file SYSUT1 that were not synchronized to any
SYSUT2 record (records inserted into SYSUT1 after end-of-file on SYSUT2
• d2 contains the number of records from file SYSUT2 that were not synchronized to any
SYSUT1 record (records inserted into SYSUT2 or after end-of-file on SYSUT1.
If KEY or SEGMENT synchronization was not specified for this run:
• d0 contains the number of pairs of records that were synchronized by having the same
physical location on the files and some difference was detected.
• d1 contains the number of records on the end of file SYSUT1 that could not be paired to
SYSUT2 records (extra records on SYSUT1).
• d2 contains the number of records on the end of file SYSUT2 that could not be paired to
SYSUT1 records (extra records on SYSUT2).
To review: No error correction is necessary. Use these counters to evaluate the effectiveness
of the Comparex run.
CPX76I
Message Format
This is an informational message. It is shown only if Comparex found one or more FIELD,
IDENTITY, DESEN, or SEGMENT specifications, and the displacement given on any of these
keywords went beyond the length of one or more input records.
If Comparex found one or more FIELD (or FIELD1 and FIELD2 pair) specifications, and
Comparex determined that the displacement of the FIELD was beyond the end of the input
record, Comparex adds 1 to a counter for each field on each record where this out-of-bounds
situation occurs. Comparex shows this counter as n1.
If Comparex found one or more IDENTITY specifications, and Comparex determined that the
displacement of the IDENTITY was beyond the end of the input record, Comparex adds 1 to
a counter for each IDENTITY on each record where this out-of-bounds situation occurs.
Comparex shows this counter as n2.
If Comparex found one or more SEGMENT specifications, and Comparex determined that
the displacement of the SEGMENT ID was beyond the end of the input record, Comparex
adds 1 to a counter for each SEGMENT where this out-of-bounds situation occurs.
Comparex shows this counter as n3.
Note that if Comparex finds a SEGMENT where the starting position of any synchronization
key (displacement) is out-of-bounds, Comparex immediately stops processing, issuing
message CPX37A
376
Serena® Comparex® 8.7 for z/OS User’s Guide
If message CPX76I has been issued, Comparex did not find a SEGMENT where the
displacement was out-of-bounds.
If Comparex found one or more DESEN (or DESEN1 or DESEN2) specifications, and
Comparex determined that the desensitizing field would extend beyond the end of the input
record, Comparex adds 1 to a counter for each DESEN where this out-of-bounds situation
occurs. Comparex shows this counter as n4.
To review: No error correction is necessary. Use these counters to evaluate the correctness
of the Comparex run.
CPX77I
Message Format
This is an informational message. If Comparex found one or more filtering specifications, this
message is issued.
If a record from file SYSUT1 was read and it was not passed to the comparison routines
because of the filtering tests, Comparex adds 1 to counter n1.
If a record from file SYSUT2 was read and it was not passed to the comparison routines
because of the filtering tests, Comparex adds 1 to counter n2.
If Comparex determined that the displacement of a filter was beyond the end of the input
record, Comparex adds 1 to a counter for each filter on each record where this out-of- bounds
situation occurs. Comparex shows this counter as n3.
If the MEMBER option is used in a filtering test, that filter does not cause any increases to the
counters shown with message CPX77I. Instead, the counters shown with message CPX78I
are affected by filters with the MEMBER option.
To review: No error correction is necessary. Use these counters to evaluate the correctness
of the Comparex run.
CPX78I
Message Format
CPX78I - MEMBERS PROCESSED: SYSUT1(n1)/SYSUT2(n2), DIFFERENCES(d0[,d1,d 2])
[- REJECTED BY FILTERS: SYSUT1(f1)/SYSUT2(f2)]
This is an informational message. It is issued if both file SYSUT1 and file SYSUT2 are
directory-embedded data sets.
The number of members in SYSUT1 is n1 and the number of members in SYSUT2 is n2.
377
Appendix E: Messages
d0 reflects the number of matched member names where there was at least one difference.
d1 is the number of members on SYSUT1 that had no corresponding member name in
SYSUT2.
d2 is the number of members on SYSUT2 that had no corresponding member name in
SYSUT1.
If one or more filter keywords contained the MEMBER option, Comparex tallies the number of
members filtered out as a result of these filters. Comparex shows the number of members
filtered out from the SYSUT1 file as f1, and Comparex shows the number of members filtered
out from the SYSUT2 file as f2.
To review: No error correction is necessary. Use these counters to evaluate the effectiveness
of the Comparex run.
CPX80I
Message Format
4 A comparison was performed and at least one differing record was found.
378
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX90A
Message Format
CPX90A - UNABLE TO OPEN FILE {SYSUT1}
{SYSUT2}
or
This is an ACTION message. Comparex has tried to open a specified file, but the open has
not been successful.
If Comparex has not been able to open file SYSUT1, the utility terminates, showing a return
code of 16.
If Comparex has not been able to open file SYSUT2, and you specified HALT=NO, the utility
continues as a print utility, printing SYSUT1 records onto the difference report.
In the case of the Comparex interface (specifying PAN, LIB, or OTH in the SYSUT1 or
SYUST2 keywords), and the particular interface module (in the form CPXabcde) has not
been generated properly, or if there is an open error of some sort, the message is preceded
by a message in the form:
or
which gives assisting diagnostic information as to what happened at this point in opening.
379
Appendix E: Messages
CPX91A
Message Format
CPX91A - VSAM LOGICAL ERROR EXIT - SYSUT{1},RC=rc,RBA=n1,RECNO=n2 -
{2}
{3}
This is an ACTION message. Comparex has tried to read or write a VSAM file, and the VSAM
access routines have returned information that the read or the write was not completed.
ACTION Refer to the VSAM Programmer’s Guide, using the RC, RBA, and RECNO data.
CPX92A
Message Format
CPX92A - SYNCHRONOUS ERROR EXIT - SYSUT{1},RECNO=nnn -
{2}
{3}
This is an ACTION message. Comparex has discovered a physical I/O error. The file name is
shown, and nnn gives the physical record number on the file where the I/O error occurred.
Comparex terminates, showing a return code of 16.
ACTION If the physical I/O error occurred on file SYSUT1 or file SYSUT2
(Comparex’s input files), use IBM utilities to copy the data to another file. If the
physical I/O error occurred on file SYSUT3 (Comparex’s output file), rerun Comparex.
CPX93A
Message Format
This is an ACTION message. An attempt was made to access the load module, as specified
by message CPX20I, and it was unsuccessful.
380
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX94A
Message Format
CPX94A - INTERFACE ERROR EXIT SYSUT{1},{SRCH},RC=n,RECNO=n - FUNCTION TERMINATED -
RETURN CODE = 16
which gives assisting diagnostic information as to what happened at this point in SRCHing or
READing.
ACTION If the return code (RC) is 12, 16, or 20, a very serious error was encountered.
If the return code is 8, an I/O error has occurred.
If the return code is 4, a particular member was not found. Correct and rerun.
In many cases the CPX94A error can be resolved by taking the following steps:
• Build a second copy of CPXIFACE in your load library, calling it CPXIFAC2.
• Add the keywords: CPXIFACE1=CPXIFACE,CPXIFACE2=CPXIFAC2 as the first SYSIN
parameters of the failing job.
CPX97A
Message Format
CPX97A -
PROGRAM INTERRUPT ENCOUNTERED AFTER READING n1 RECORDS (SYSUT1) AND n2 RECORDS(SYSUT2)[FOR
FIELD # n3]
PROGRAM INTERRUPT TYPE S0Cx PSW: pppppppp pppppppp OFFSET: ooooo ILC: n4 CC: n5
REGS 0-7: rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr
REGS 8-15: rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr rrrrrrrr
STACK OFFSETS: sssss sssss sssss sssss sssss sssss sssss sssss sssss [R3 sssss]
381
Appendix E: Messages
SPIE (Specify Program Interrupt Exit) has been turned on early in Comparex and it
preempted an abnormal end situation. Abend codes S0C1 through S0CF are stopped.
However, not all abend situations are caught. Insufficient storage for BUFF getmain will not
be intercepted. The dump (//SYSUDUMP DD SYSOUT=*) has been suppressed.
ACTION For a program interruption (S0C1 through S0CF abend) in Comparex batch, record
the CPX97A message in full and contact Technical Support.
If Technical Support requests a dump, rerun the job using the KILLSPIE parameter and make
sure a //SYSUDUMP (//SYSUDUMP DD SYSOUT=*) card is included to capture the dump.
Be sure to use SYSUDUMP not SYSMDUMP. When forwarding the dump to Serena it is best
to include both the CPX97A message (from the time you didn’t use KILLSPIE) along with the
dump (using KILLSPIE).
To turn ESPIE off, issue the following keyword:
KILLSPIE=YES
The ESPIE will not be issued, and the dump will be generated.
Installations using CA-AbendAid should be sure to include an //ABNLIGNR DD DUMMY card
in the JCL.
For other abends such as an S322, send a dump as described above if requested by
Technical Support.
For abends in COMPAREX/ISPF first try to recreate the problem in batch using JCL or
COMPAREX’s =8 option. If this can’t be done, do the following:
• Go to ISPF’s =6 screen and enter:
ALLOC F(SYSUDUMP) DA(any valid data set name) SPACE (1 1)CYL UNIT(SYSALLDA) VOL(any valid
volume) NEW REUSE BLKSIZE(1632) RECFM(V B) LRECL(125).
• Be sure the data set name and volume are appropriate for your installation’s standards.
Be sure to use SYSUDUMP, not SYSMDUMP.
• Recreate the problem.
• Enter TSO FREE F(SYSUDUMP) on any ISPF COMMAND ===> line.
• Send the dump to Serena.
382
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX99A
Accompanied by User Abend U0001
Message Format
CPX99A - Insufficient virtual storage. The job has exhausted virtual storage.
ACTION Increase region size and/or retry. Occasionally this may be a transient problem.
FOREGROUND: Increase the region size in your TSO logon procedure.
BACKGROUND: Increase the region size on your jobcard.
CPX001
Message Format
This is an error.
ACTION There is most likely an environmental error. See your system administrator.
Member CPXINOPT of a dataset (usually &PREFIX.ISPF.ISPPROF in your session) has
been allocated to one of (ISPTBL/ISPPROF/ISPTABL/others). It was generated during
installation and contains information from DSN=somnode.COMPAREX.SYSGEN that
describes parameters for this allocation. The dataset name should be either
&xxx.CPXyyddd.Thhmmsss.CNTL for 4 nodes or &xxx.Thhmmsss.CNTL for 3 nodes (where
xxx is either &PREFIX or &USERID).
Member CPXINOPT may be corrupted.
CPX002
Message Format
383
Appendix E: Messages
This is an error.
ACTION There is most likely an environmental error. See your system administrator.
Member CPXINOPT of a dataset (usually &PREFIX.ISPF.ISPPROF in your session) has
been allocated to one of (ISPTBL/ISPPROF/ISPTABL/others). It was generated during
installation and contains information from DSN=somnode.COMPAREX.SYSGEN that
describes parameters for this allocation. In this member is the name following “CPXDSN” that
is the name of the dataset that cannot be allocated. This dataset may have been deleted or
renamed.
Member CPXINOPT may be corrupted.
CPX201
Message Format
'Alloc. error'
This is an error.
ACTION Check your SYSUT1/SYSUT2 allocation JCL and/or see your system
administrator.
CPX203
Message Format
This is an error.
384
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX205
Message Format
This is an error.
CPX206
Message Format
'Bad Organization'
This is an error.
CPX207
Message Format
'Select M instead'
This message is a notification that the option has changed from C to M on the primary
COMPAREX panel CPX@PRIM.
CPX301
Message Format
385
Appendix E: Messages
This message is a notification that you must delete an existing profile member name to have
room to add a new one.
CPX303
Message Format
'&PNAM Saved'
This message is a notification that you chose to save your existing profile variables under a
new (or old) name.
CPX304
Message Format
This message is a notification that you chose to not save your existing profile variables at this
time based upon the warning of a profile existing already with the same name.
CPX401
Message Format
'&PNAM Loaded'
This message is a notification the requested profile has been loaded. You are now operating
with a different COMPAREX profile of dialogue variables as you requested. Any previous
COMPAREX dialogue variables that were modified and not saved are no longer available.
386
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX403
Message Format
'Profile(s) Deleted'
'At least one profile has been deleted from reference list'
This message is a notification that you have deleted at least one profile from your list of
COMPAREX profiles.
CPX404
Message Format
CPX501
Message Format
'Background COMPAREX'
This message is a notification that a background COMPAREX job has been started/
completed. This message is written on the log userid.SPFLOGx.LIST which can be saved
upon exit from SPF.
CPX502
Message Format
'Job Submitted'
387
Appendix E: Messages
CPX503
Message Format
This message is a notification that a background print of a COMPAREX job has been
submitted. This message is written on the log userid.SPFLOGx.LIST which can be saved
upon exit from SPF.
CPX504
Message Format
'Variables cleared'
This message indicates that ISPF dialogue variables in COMPAREX have been cleared
except for the High Level Qualifier and USERID on panel 2.4 of COMPAREX. To simplify re-
establishing variables, you may issue a LOAD (option 4) of a nominal profile you have saved
that is your default set of values.
CPX601
Message Format
'Foreground COMPAREX'
This message is a notification that a foreground COMPAREX job has been started/
completed. This message is written on the log userid.SPFLOGx.LIST which can be saved
upon exit from SPF.
388
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX602
Message Format
'Report deleted'
This message is a notification that your report was deleted. This message comes after doing
a foreground compare and entering D to delete the output report dsn.
CPX603
Message Format
This is an error.
ACTION &ERR identifies the 4-digit hex DAIR return code. See your system administrator or
see an IBM manual such as OS/390 V2R7.0 Authorized Assembler Services Guide to identify
the 4-digit hex code. This message comes after doing a foreground compare and entering D
to delete the output report dsn. The dataset is not deleted.
CPX604
Message Format
'Report kept'
This message is a notification that your report was kept. This message comes after doing a
foreground compare and entering K to keep the output report dsn.
CPX605
Message Format
'Report print/keep'
389
Appendix E: Messages
This message is a notification that your report was printed and the dsn has been kept. This
message comes after doing a foreground compare and entering JK to print the report and to
keep the output report dsn.
CPX606
Message Format
'Report print/delete'
This message is a notification that your report was printed and the dsn has been deleted.
This message comes after doing a foreground compare and entering JD to print the report
and to delete the output report dsn.
CPX701
Message Format
This is an error.
ACTION Contact Serena Customer Support for help. There is probably an environmental
ISPF error.
CPX702
Message Format
This is an error.
ACTION Contact Serena Customer Support for help. There is probably an environmental
ISPF error.
390
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX703
Message Format
This is an error.
ACTION Contact Serena Customer Support for help. There is probably an environmental
ISPF error.
CPX704
Message Format
This is an error.
ACTION Contact Serena Customer Support for help. There is probably an environmental
ISPF error.
CPX705
Message Format
This is an error.
ACTION Contact Serena Customer Support for help. There is probably an environmental
ISPF error.
CPX706
Message Format
391
Appendix E: Messages
This is an error.
ACTION Contact Serena Customer Support for help. There is probably an environmental
ISPF error.
CPX707
Message Format
This is an error.
ACTION Contact Serena Customer Support for help. There is probably an environmental
ISPF error.
CPX708
Message Format
This is an error.
ACTION Contact Serena Customer Support for help. There is probably an environmental
ISPF error.
CPX801
Message Format
This is an error.
392
Serena® Comparex® 8.7 for z/OS User’s Guide
ACTION Enter either an “S” to select a COMPAREX profile(s) for loading or “D” to select a
COMPAREX profile(s) for deletion.
CPX802
Message Format
'Insufficent memory'
'CPXPARSE can not map this record; retry with a larger region'
This is an error.
ACTION The copybook has expanded enough to require more memory than available. If
your region is large enough, a S0C4 may result if the record size exceeds the maximum size
for your system – approximately 32760.
FOREGROUND: The region in your TSO logon procedure needs to be increased if possible.
BACKGROUND: The region on your JOBCARD needs to be increased if possible.
CPX803
Message Format
This is an error.
CPX804
Message Format
This is an error.
393
Appendix E: Messages
CPX805
Message Format
This is an error.
CPX806
Message Format
'Out of range'
'The depending on number is out of the range defined for this variable'
This is an error.
CPX807
Message Format
'The number of fields that CPXPARSE can process has been exceeded'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
Alternately reduce the number of fields if possible.
CPX810
Message Format
394
Serena® Comparex® 8.7 for z/OS User’s Guide
This is an error.
ACTION Correct the copybook referenced. Reference the correct data if incorrect data was
used.
CPX811
Message Format
This is an error.
ACTION Correct the copybook referenced or reference the correct data if incorrect data was
used.
CPX812
Message Format
'An invalid packed decimal number was found in the current record'
This is an error.
ACTION Correct the copybook referenced or check the data for validity.
CPX813
Message Format
'INITIAL missing'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
395
Appendix E: Messages
CPX814
Message Format
'Precision missing'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX815
Message Format
'Array invalid'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX816
Message Format
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
This can be caused by level numbers occurring in a column before the level number in an
earlier statement of the copybook.
396
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX817
Message Format
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX818
Message Format
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX819
Message Format
'Invalid OCCURS'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX820
Message Format
'PICTURE missing'
397
Appendix E: Messages
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX821
Message Format
'VALUE missing'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX822
Message Format
'DEPENDING missing'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX823
Message Format
' &CPXMSG2'
398
Serena® Comparex® 8.7 for z/OS User’s Guide
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX824
Message Format
'DEPENDING needed with TO'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX825
Message Format
'PICTURE is invalid'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX826
Message Format
'PICTURE is invalid'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
399
Appendix E: Messages
CPX827
Message Format
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX828
Message Format
'PICTURE is required'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX829
Message Format
'Variable missing'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX830
Message Format
'GETMAIN failed'
400
Serena® Comparex® 8.7 for z/OS User’s Guide
' &CPXMSG2'
This is an error.
ACTION The amount of memory for the copybook work area could not be obtained. This
error may not occur on a subsequent submission because of a transient shortage of memory.
If the trouble is persistent, then increase the region of the job:
Background: increase the region in the jobcard.
Foreground: increase the region in the TSO procedure used for logon, or use 0M as
EXEC PGM=IKJEFT01,REGION=0M
CPX831
Message Format
'OPEN failed'
This is an error.
ACTION The member could not be found as specified. Check the spelling of the name.
CPX832
Message Format
'SYNAD error'
' &CPXMSG2'
This is an error.
ACTION There was an I/O error on the copybook member. Attempt to browse the same
member in TSO BROWSE to determine if it is a permanent error. You may have to recreate
the member and/or copylib.
401
Appendix E: Messages
CPX834
Message Format
' '
'&CPXMSG2'
CPX836
Message Format
'REDEFINES missing'
' &CPXMSG2'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX837
Message Format
'A matching LEVEL 1 element for the current COPYBOOK was not found'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
There is probably a missing LEVEL 1 statement.
CPX839
Message Format
This is an error.
402
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX840
Message Format
'CPXIFACE missing'
This is an error.
ACTION Contact your system administrator to determine correct libraries.
CPX841
Message Format
This is an error.
ACTION Correct the dataset specified. Contact your system administrator to determine the
correct dataset.
CPX842
Message Format
'The CPXIFACE interface SRCH service failed; member was not found'
This is an error.
CPX843
Message Format
403
Appendix E: Messages
CPX844
Message Format
'A matching LEVEL 1 element for the current COPYBOOK was not found'
This is an error.
ACTION Correct the displayed highlighted statement in the copybook referenced if in error.
CPX845
Message Format
This is an error.
ACTION Contact your system administrator to determine correct libraries.
CPX846
Message Format
This is an error.
404
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX847
Message Format
This is an error.
ACTION Enter the correct command. Only “CAN” or “L” are valid commands.
CPX848
Message Format
This is an error message. The user entered the L (locate) command on the command line,
but either did not supply a PDS member name, or entered a member name exceeding 8
characters in length.
ACTION Re-enter the Locate command with a member name, or the first few characters of a
member name.
To review: The Locate commands take a member name operand of from 1 to 8 characters.
CPX850
Message Format
'Statement Invalid'
' &CPXMSG2'
This is an error.
ACTION Correct the statement highlighted. All statements may not be supported.
405
Appendix E: Messages
CPX851
Message Format
'Statement Invalid'
' &CPXMSG2'
This is an error.
ACTION Correct the statement highlighted. All statements may not be supported.
CPX852
Message Format
'Statement Invalid'
' &CPXMSG2'
This is an error.
ACTION Correct the statement highlighted. All statements may not be supported.
CPX853
Message Format
'Statement Invalid'
' &CPXMSG2'
This is an error.
ACTION Correct the statement highlighted. All statements may not be supported.
406
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX900
Message Format
CPX901
Message Format
CPX902
Message Format
CPX903
Message Format
CPX903 Op must be placed on the line above with the 88-level field name
CPX904
Message Format
CPX905
Message Format
CPX905 The table to be modified has not yet been created with the Parse function
CPX906
Message Format
407
Appendix E: Messages
CPX907
Message Format
CPX908
Message Format
CPX909
Message Format
CPX910
Message Format
CPX911
Message Format
CPX912
Message Format
CPX913
Message Format
408
Serena® Comparex® 8.7 for z/OS User’s Guide
CPX914
Message Format
CPX915
Message Format
CPX916
Message Format
CPX917
Message Format
CPX918
Message Format
CPX918A
Message Format
CPX919
Message Format
409
Appendix E: Messages
CPX920
Message Format
CPX921
Message Format
CPX921 Invalid ISPF version - must be Version 3.1 or greater for CPXPARSE
CPX922
Message Format
CPX923
Message Format
CPX924
Message Format
CPX925
Message Format
More: +
410
Serena® Comparex® 8.7 for z/OS User’s Guide
To proceed, first press ENTER to remove the error message window, then correct the
keyword (or remove it entirely). Check that any relational operator has a non-blank keyword
next to it, unless the operator is on an 88-level field name.
Choose the Extended Help pull-down for more information.
In entering keyword, the following abbreviations may be used:
D DESEN
F FIELD
I ID
K KEY
M MASK
FIN FILTERIN
FOUT FILTEROUT
FORIN FILTORIN
FOROUT FILTOROUT
CPX926
Message Format
COMMON ABENDS
If you abend immediately with abend code 1F or decimal 31, it is because you invoked
COMPAREX with PANEL(CPX@PRIM), and you specified PROGRAM(CPX$ISPF), which is
the older methodology in prior versions.
If you abend immediately with abend code 4x08, it is because CPX$ISPF cannot open
(TBOPEN) the table library which is pointed to by DDNAME ISPTLIB. Internally, module
CPX$ISPF makes many calls to module ISPLINK at initialization time.
Each call (defining the variables, VPUT to shared pool, and so on) is counted by adding
decimal 100 to an internal counter. If the return code from any one call is non-zero, the sum
of the calls (times 100) plus the return code (usually 8) is the decimal code for the intentional
abend. One abend that might occur is 12C8, or decimal 4808, which means that the 48th call
received a return code of eight. If this occurs, it means that the table named DSPRINT could
not be found in member CPXINOPT, which was built during the installation process.
411
Appendix E: Messages
Abend 4708 occurs when Comparex cannot find the profile module CPXINOPT in the ISPF
Tables data set concatenation. Make sure that the module exists in the ISPTLIB
concatenation in your logon procedure, clist or LIFDEF clist.
Abend 4908 occurs when CPXINOPT is not found in ISPTLIB. SYSGEN needs to be run and
CPXINOPT placed in the ISPTLIB (table library) concatenation.
412
Serena® Comparex® 8.7 for z/OS User’s Guide
413
Appendix E: Messages
ABEND S0C7
If SEQFLD is being used with sequence numbers, this error will occur. COPYDIFF was
specified.
ABEND S80A
Increase region size on your job card or TSO logon procedure
ABEND S200
Using CALL ATTACH facility, two DB2 databases were attempted to be loaded at the
same time.
ABEND S878
Increase region size on your job card or TSO logon procedure
414
GLOSSARY
F
ACB
Access Control Block. A term describing the attributes of a VSAM file to be read or written.
BASELINE
See ORIGINAL FILE.
BINARY SIGNED
The format to internally store numeric fields where the value has been converted from
decimal to binary and the sign is in the left-most bit of the field. For example: X‘903D’ =
Binary 1001000000111101, Decimal -28611.
BMP
Batch Message Program. A term used in IMS to describe a program running under IMS that
is batch oriented (not online).
BUFF
A keyword that specifies the buffer size for TEXT comparison logic or DATA logic with
Random KEYs.
CINV
An abbreviation for Control Interval. A control interval is a VSAM term roughly the equivalent
of BLKSIZE.
COMPAREX
The Comparison utility.
CONTINUE
A keyword that causes the utility to read records and count differences without printing
differing records. Used with MAXDIFF.
415
Chapter F: Glossary
COPYDIFF
Abbreviation for COPY the DIFFerences to a third file. A keyword that causes Comparex to
write file SYSUT3.
COPYSAME
Abbreviation for COPY the SAME records to a third file. A keyword that causes Comparex to
write file SYSUT3.
CSECT
Abbreviation for Control SECTion. Each executable module can be broken up into one or
more CSECTs, the order and content of which are independent of other CSECTs.
DATA
Either (1) files that have an inter-record relationship; (2) comparison logic based on
synchronization of records; (3) a keyword to specify DATA comparison logic.
DBMS
Database Management System. Global term used to describe monitors whose charge is to
coordinate the efforts of application programs to the data on large random access files
(databases).
Telecommunications support is usually supplied also.
DB2
Data Base/2. IBM’s major entry in the DBMS marketplace.
DCB
Data Control Block. A term describing the attributes of a non-VSAM file to be read or written.
DELTA DECK
A data set (used to be a card deck) containing the changes (Greek letter Delta) in transaction
format such that if it is fed back into a predetermined library management system (Panvalet,
Librarian, Change Man), it will update the old data set to be exactly like the new data set.
DESENSITIZE
The act of obliterating sensitive data fields in live production DATA files.
DIFFERENCE REPORT
The major output from Comparex. The report shows both the processing totals and the
records that differ.
416
Serena® Comparex® 8.7 for z/OS User’s Guide
DIRECTORY
A keyword to specify comparison of only the DIRECTORY portions of directory-embedded
data sets.
A series of 256-byte records at the beginning of a Partitioned Data Set (PDS) that contain an
entry for each member in the data set. Note that it is possible to physically read this special
part of the PDS by specifying “SYSUT1=QSAM” while actually pointing to a PDS.
DUMMY
In JCL, specifying DUMMY forces the associated program opening the data set to go to end
of file at the first read or to nullify every write instruction to the file.
END
Either (1) a keyword to prematurely terminate the difference report; (2) a way of forcing field
comparisons to go to the end of the logical record regardless of the record length.
ESDS
Entry Sequenced Data Set. A VSAM term meaning that the sequence of the data in is
determined by the order in which they are stored. Each new record is stored after the last
record in the data set.
FIELDs
Keywords that cause Comparex to compare only on specified positions of the input records.
FILTER
A keyword that performs a logical test to select or reject records. Selected records are eligible
for comparison.
FILTERING
The process of selecting or rejecting records with the use of filters.
FRAME
A keyword, used with TEXT comparison logic, to specify the surrounding of differing blocks of
records with the PLUS character and the DASH character on the difference report.
GENFLDS
Either (1) an optional part of the difference report that shows a visual representation of each
input record type; (2) a keyword specifying these visual representations.
417
Chapter F: Glossary
HELP
A keyword that causes Comparex to display a listing of valid keywords and their definitions
onto SYSPRINT.
IDCAMS
Access Method Services. IBM's system of creating, deleting, printing, loading, and unloading
files of almost any organization. VSAM mandates the use of IDCAMS to create and
manipulate files.
IDENTITY
A keyword that performs a logical test to identify a record type on the SYSUT1 file.
IMS
Information Management System. One of IBM’s DBMSs.
ISAM
Indexed Sequential Access Method.
JCL
Job Control Language - statements which describe a job to the operating system and inform
the system of how a job is to be processed.
KEY
Either (1) a control field on a file; (2) a keyword specifying this control field.
KEYLEN
The length of a synchronizing key. Typically used in conjunction with RKP.
KEYWORD
An instruction given to Comparex to cause the utility to modify its default processing.
KSDS
Key Sequenced Data Set. A VSAM term meaning that the sequence of the data in is
determined by an indexing key structure. KSDS files may be accessed sequentially or
randomly (by the key).
MASKs
Keywords that cause Comparex to ignore specified positions on the input records when
comparing them.
418
Serena® Comparex® 8.7 for z/OS User’s Guide
MAXDIFF
A keyword to specify the maximum number of differences between files whether the records
synchronize together or not.
MAXMATCH
A keyword to specify the maximum number of differences in a DATA compare between
records that synchronize together.
MEMBER
An independent, sequentially organized data set identified by a unique name in a directory-
embedded data set.
MLC
Matching line count. A keyword to specify the number of exact matches
Comparex makes before deciding that TEXT comparison logic is back into synchronization.
MODE
A keyword to specify the user’s orientation. MODE=APPLICATIONS causes displacements in
other keywords to be relative to one; MODE=SYSTEMS causes displacements to be relative
to zero.
MODIFIED FILE
A set of data and software that is not yet ready to be placed into production mode because of
possible changes.
See also its relation to ORIGINAL FILE.
MPP
Message Processing Program. A term in IMS to describe an online program that is driven by
input messages, usually from a terminal operator.
NIBBLE
A half-byte. Four bits of data.
NULLFILE
Specifying DSN=NULLFILE is the same as specifying DD DUMMY (see DUMMY).
ORIGINAL FILE
A set of data and software that is known to consistently produce correct or at least acceptable
results.
419
Chapter F: Glossary
PACKED DECIMAL
The format to internally store numerics where each digit takes a half-byte (nibble or four bits)
and the sign is at the end of the field. For example, X’903D’, Decimal -903.
PDS
Partitioned Data Set - a collection of independent groups (called MEMBERs) of sequential
records on a direct access volume. Each MEMBER has a unique name and is listed in a
DIRECTORY at the beginning of the data set. It is a directory-embedded data set.
PDSE
Partitioned Data Set extended - the next generation of PDS from IBM. Available only under
System Managed Storage (SMS) volumes of z/OS, MVS/ESA, and DFP 3.2 or better. It has
many advantages including reusability of space and up to 123 extents.
QSAM
Queued Sequential Access Method - also flat file.
RDW
Record Descriptor Word. This word (four bytes) describes the length of a record if it is
variable length QSAM or ISAM. Sometimes referred to as the LLBB.
RKP
Relative Key Position. The relative (to zero) position of a synchronizing key in a record.
Usually used in conjunction with KEYLEN.
RRDS
Relative Record Data Set. A VSAM term meaning that the file has no index. It is a string of
fixed-length slots, each of which is identified by a relative record number from 1 to nnn, where
nnn is the maximum number of records that can be stored in the data set.
SEGMENT
Either (1) a piece of a database; (2) an identifier on a record to delineate at what level of a
database it comes from; (3) a keyword to Comparex that allows synchronizing between two
versions of a database.
SKIPUTs
Keywords that cause Comparex to bypass initial records on the input files.
420
Serena® Comparex® 8.7 for z/OS User’s Guide
SQUEEZE
Either (1) the removal of certain characters before TEXT comparison; (2) a keyword to
specify a character to be removed.
STOPAFT
A keyword that specifies the maximum number of records to be read from either input file.
SYNCHRONIZATION
The pairing of records for comparison by Comparex.
KEY, SEGMENT, and same physical-record number synchronization are supported with
DATA comparison logic.
SYSIN
The input file containing keywords.
SYSPRINT
The output file from Comparex that contains the difference report.
SYSUT1
The first of the two input files to be compared. SYSUT1 is usually the old master or the
unmodified file.
See also ORIGINAL FILE.
SYSUT2
The second of the two input files to be compared. SYSUT2 is usually the new master or the
modified file.
See also MODIFIED FILE.
SYSUT3
An optional output file from Comparex, written if COPYDIFF (or COPYSAME) is specified.
TEXT
Either (1) files that have no inter-record relationship; (2) comparison logic that pairs records
based on record-to-record matching; (3) the keyword to specify TEXT comparison logic.
421
Chapter F: Glossary
UNSIGNED BINARY
A binary number, never negative, where each bit contributes to the magnitude of the number,
including the leftmost bit. For example: X’903D’, Binary 1001000000111101 = Decimal
36925.
UNSIGNED PACKED
A decimal number, never negative, containing 2 digits in every byte, including the rightmost
byte.For example: X’9033’, Decimal 9033.
VSAM
Virtual Storage Access Method.
WILDCARD
A keyword used to specify a character to be used in other keywords to indicate that any value
passes logical tests specified.
ZONED DECIMAL
The format to display numerics where each digit is preceded by its sign and takes a whole
byte; for example: X‘F9F0D3’ = Decimal -903.
422
Index
F FOCUS 237
foreground run 42
fade-in 56 FORMAT 37, 76, 126, 132
fade-out 56 examples 194
FASTPATH 233 keyword
FIELD 36, 87, 90, 91, 100, 104, 137, 319, 376 examples 135
keyword formating
defined 417 audit trail 322, 323
with formats 115 formats
FIELD keyword 82 binary 105
FIELDs character 76, 105
compare ditto 133
equal 66, 69, 72 dump 140
unequal 66, 70, 73 packed 105
differing 46 type
unusable 75 IEBUPDTE 156
using 66, 69, 72 MEMBER 154
file with FIELD 115
synchronization keywords, DATA 63 zoned 105
files formatted screens (PANELS)
attributes 265 for ISPF sessions 23
directory-embedded 38 formatting
DUMMY 64, 150 options, COPYDIFF 153
end of 46 FRAME 36, 44, 55, 73
input 29 keyword
opened 34 defined 417
out of sequence 65 examples 55
output 29 free-form keywords 176
synchronization 75 FULL,with PRINT 346
FILTER 87 functional manager 331, 332
keyword
defined 417
filter out G
all but certain records 318
and filter in 318 GDG (Generation Data Group) 211
one record 318 GEM 213
FILTERIN 88, 89, 108, 109, 318, 319 example 216
examples 317, 318 generating
filtering delta deck control cards 156
complex 319 version, month, and day 155
keywords 38, 87 generating CPXIFACE into CPXDATCM 227
short records 363 GENFLDS 126, 137
filtering, defined 417 keyword
FILTEROUT 88, 89, 110, 318 defined 417
examples 318 statement printout 37
FILTERs Global Data Area 221
with TEXT 319 GO command 198
filters groups
exclusive 317 periodic 221
FILTORIN 88, 89, 110, 319
examples 317
FILTOROUT 88, 89, 111, 318 H
flat file 331
database 152 HALT 32, 85, 126, 137, 343, 346
flat file, defined 420 HALT with NO 344
FLDSONLY 37, 126 HDAM 233
flowcharts 328 U
managing 331
of program and system changes 327 U4608 411
systems 330, 331 U4708 412
units 328, 331 U4808 411
testline U4908 412
modified file 29, 419 underscores 36, 37, 46, 73, 74, 85, 91, 97, 105,
original file 29 128, 129, 131, 145, 362
see modified file 421 unexpected results 128
TEXT 43, 44, 56, 63 UNICODE character encoding 94
comparing records 36 UNICODE keyword 127, 146, 178
comparison logic 43, 45 uninitialized data areas 97
advantages 52 unit testing 328, 331
disadvantages 53 unloading a database to a flat file 152
or DATA, decisions 53 unusable
file processing, defaults 31 DESENs 75
keyword FIELDs 75
about 43, 53 IDENTITYs 75
defined 421 SEGMENTs 75
examples 47, 61 update directive 263
or DATA comparison 25 USER 118
processing 91
order of 45
with FILTERs 319 V
TEXT comparison via short cut 176
TEXT files variables
definition 24 defining 411
examples 24 VERS 155
TEXT keywords 43 versions, find latest 322
TSO batch module 198 vertical hex 133
types of files you can compare VSAM 218, 233
all members 22 VSAM, defined 422
CLIST 22
control card images 23
directories 22 W
documentation 23
executable load modules WILDCARD 89, 109, 112, 122, 347
CSECT parsing or undefined block to block keyword
22 defined 422
ISAM 22 writing of SYSUT3 36
job control language (JCL) 22 writing of SYSUT3x 36
most Database Management Systems written communications procedure 332
(DBMS) 23 WYLBUR 251
object code 22
QSAM 22
ranges of members 22 Y
reports 23
Year 2000 106
selected members 22
YES,with HALT 346
sequential 22
YES,with MBRHDR 346
source code 22
system intermediate files 22
system transaction files 22
VSAM 22
Z
ZEXPAND function 198
zoned
decimal format
defined 422
format 105