DSM (Data Set Compare)

Purpose
Use the DSM function to:
  • Compare data from any partitioned, sequential or VSAM data set, HFS file, MQ queue, or CICS® resource to data in any other partitioned, sequential or VSAM data set, HFS file, MQ queue, or CICS® resource.
  • Perform a field level comparison. By using an “Old” copybook or template with a “New” copybook or template, you can compare selected fields with the result of the comparison reflecting the types of data in the fields.
  • Perform a load module comparison. Load module and CSECT information from both the "Old" and "New" versions of the module is extracted and compared. By specifying compare criteria, you can see differences between specific properties of the load modules, such as load module size, link date, CSECT names, and compilers used.
  • Produce a comparison report, showing information such as where insertions, deletions or changes have occurred in the “New” data set. The report's content and structure reflects the various comparison options used.
  • Create output data sets containing records identified as inserted, deleted, old and new changed records, and old and new matched records.

    You can define the same data set to save both the inserted and new changed records. Similarly, you can define the same data set to save both the deleted and old changed records.

Usage notes
  • Select the records to be compared, using:
    • The start key (VSAM only)
    • The skip field
    • The compare count field
    • Conditional expressions defined in the “Old” and/or “New” templates.
    • The "Number of differences to report" option

    To perform a field level comparison, you must provide an “Old” and a “New” copybook or template and use the TYPE=FORMATTED comparison option. You can use the field mapping specified in a “New” template (created online), or you can use the default mapping generated from the template or copybook contents, or you can specify the field mapping in the batch file, using the FIELDOLD and FIELDNEW keywords.

  • Specify the way in which the comparison is performed, using:
    • The compare options
    • The synchronization options

    If SYNCH=KEYED is used, up to sixteen key segments can be specified to create a single composite key.

  • Specify the type of output produced and the way in which the output is displayed, using:
    • The listing type
    • The listing options
  • To specify a field name containing lowercase or mixedcase characters, use the character literal form of the name surrounded by quotation marks and preceded with character C. For example, C'aBc'.
Performance tips
  • DSM was designed with a focus on comparing data in fields using templates or copybooks. See the template performance tips in General tips about performance when you use File Manager functions.
  • The ISPF utility SuperC may perform more efficiently when comparing ordinary text data sets, since the special features of File Manager are not required. For more details on SuperC, see the z/OS ISPF User's Guide Vol II .
Return codes
The default return codes from the DSM function have the following modified meanings:
0
The function was completed successfully and the compare sets match.
1
The function was completed successfully and the compare sets do not match.
2
One of the compare sets was empty, so no comparison was performed.
4
Both of the compare sets were empty, so no comparison was performed.
4
No comparison was performed because one of the input data sets or members in ISPF Packed Data format and the “PACK=SKIP” option was specified.
4
At least one record with an unmapped type was encountered.
8
A data error occurred, for example, a key sequence error was found when using a keyed comparison. The conditions that result in a return code of 8 are:
For keyed synchronization:
key truncation error
A key truncation error occurs when a key segment falls outside the record.
key sequence error
A key sequence error occurs when the key for a record is found to be less than or equal to the key for the previous record.
For read-ahead synchronization:
read-ahead resynchronization failure
Read-ahead resynchronization fails when matching records cannot be found within the read-ahead limit.
16
No records compared because input and output physically the same.
16
Invalid data in template.
16
Data set or member in use.
16
Data set or member open error.
16
Data set or member not found.
16
Other input or output error occurred.
16
Member name required and not specified.
16
Insufficient storage available.
16
DSM abended
16
Input data appears ISPF packed but is not valid.
16
Other serious error that stops processing occurred.
16
A severe error occurred, causing File Manager to terminate.
Tip: When handling return codes 0, 1, 2, and 4 in your JCL, you might choose to deal with each code separately or you might choose to deal with return codes 0 and 4 as a single result (the compare sets match) and 1 and 2 as another result (the compare sets do not match).
Note: Return codes can be customized during installation. If you receive return codes that do not match those listed above, your site might have customized the return codes for this function. File Manager may also issue the 999 abend, if the return code in batch is equal to or greater than the ABENDCC value. Contact your File Manager systems administrator for details.
Figure 1. Syntax

1 DSM
1 DSCMP
2?  %Old data set
2?  %New data set
2?  %Comparison options
2?  %Template reporting options
Old data set

1! DDOLD=DDOLD
1 DDOLD=ddold
1 DSNOLD=
2.1  dsnold? VOLSEROLD=volserold
2.1 MQ:manager:queuename
2.1 rt:applid:rname
1 ?MEMSTART=startstring?MEMEND=endstring
1 MEMOLD=memold
3? XMEMBERS=(+ ,xmem_filter)
1! GENOLD=0
1 GENOLD=generation
1 ? CRESTART=crestart? CREEND=creend
1 CREATED=created
1 ? CHGSTART=chgstart? CHGEND=chgend
1 CHANGED=changed
1 ? UIDSTART=uidstart? UIDEND=uidend
1 USERID=userid
7? MEMLIST=(+ ,comp_mem)
1! USEIOXOLD=NO
1 USEIOXOLD=YES
2.1! IOXOLD=sysexit
2.1? IOXOLD=ioxname
8? BINRECOLD=binrecold-len
8? KEYOLD=keyold
1! SKIPOLD=0
1 SKIPOLD=skipold
1! CMPOLD=ALL
1 CMPOLD=cmpold
1 IGNLEN=NO
1! IGNLEN=YES
Old template processing

1! TOLD=TDOLD
1 TOLD=ddname?TOLDMEM=member
1 TCOLD=tcold(tcomem)
2? OFFSETOLD=(
3.1 value?,ALL
3.1 ?value,ALL,+ ,value,fieldname
2)
1? FIELDOLD=(+ , oldfield)
3?  %Copybook processing
New data set

1 
2.1! DDNEW=DDNEW
2.1 DDNEW=ddnew
2.1 DSNNEW=
2.2.1  dsnnew? MEMNEW=memnew? VOLSERNEW=volsernew
2.2.1 MQ:manager:queuename
2.2.1 rt:applid:rname
1! GENNEW=0
1 GENNEW=generation
1! USEIOXNEW=NO
1 USEIOXNEW=YES
2.1! IOXNEW=sysexit
2.1? IOXNEW=ioxname
4? BINRECNEW=binrecnew-len
4? KEYNEW=keynew
1! SKIPNEW=0
1 SKIPNEW=skipnew
1! CMPNEW=ALL
1 CMPNEW=cmpnew
6? %New template processing
New template processing

1! TNEW=TDNEW
1 TNEW=ddname?TNEWMEM=member
1 TCNEW=tcnew(tcnmem)
2? OFFSETNEW=(
3.1 value?,ALL
3.1 ?value,ALL,+ value,fieldname
2)
1 FIELDNEW=(+  newfield)
3?  %Copybook processing
Copybook processing

1! LANG=AUTO
1 LANG=
2.1 COBOL
2.1 PLI
2.1 HLASM
1  %COBOL options
1  %PL/I options
1  %HLASM options
COBOL options

1! DBCS=NO
1 DBCS=YES
1! CDPC=NO
1 CDPC=YES
1! CAE=NO
1 CAE=YES
1 +  RFROMn=operand1 RTOn=operand2
1! CBLMAXRC=4
1 CBLMAXRC=num
1 CBLLIBS=(+  dsname)
7? CBLADDOP=options
PL/I options

1! BIN63=NO
1 BIN63=YES
1! DEC31=NO
1 DEC31=YES
1! GRAPHIC=NO
1 GRAPHIC=YES
1! UNALIGNED=NO
1 UNALIGNED=YES
1! PLIMAXRC=4
1 PLIMAXRC=num
1 PLILIBS=(+  dsname)
7? PLIADDOP=options
HLASM options

1! DBCS=NO
1 DBCS=YES
1! NOALIGN=NO
1 NOALIGN=YES
1! ASMMAXRC=4
1 ASMMAXRC=num
1 ASMLIBS=(+  dsname)
5? ASMADDOP=options
Comparison options

1! TYPE=RECORD
1?  %Formatted type options
1! CORRESP=NO
1 CORRESP=YES
1! 
2.1 SYNCH=ONETOONE
2.1 SYNCH=121
1 
2.1 SYNCH=READAHEAD
2.1 SYNCH=RA
2.1! LIMIT=100
2.1 LIMIT=ralim
2.1! LENGTH=1
2.1 LENGTH=ralen
1  %Keyed synchronization options
1  %Read-ahead Keyed synchronization options
1  %Load module compare options
1! LIST=SUMMARY
1 LIST=DELTA
1 LIST=MATCHING
1 LIST=LONG
1 LIST=NONE
1 EXCLUDE=(+ , exclude_type)
1! NUMDIFF=ALL
1 NUMDIFF=numdiff
7? RCDIFF=(numdiff,return_code)
1! WIDE=NO
1 WIDE=YES
1! HEX=NO
1 HEX=YES
1! HILIGHT=NO
1 HILIGHT=YES
1! SHOWATTR=NO
1 SHOWATTR=YES
1! CHNGDFLD=NO
1 CHNGDFLD=YES
2.1! SLCTDFLD=NO
2.1 SLCTDFLD=YES
2.1! SUPIDFLD=NO
2.1 SUPIDFLD=YES
1! PACK=UNPACK
1 PACK=
2.1 NONE
2.1 SKIP
1! SORT=NO
1 SORT=YES
1! JUST=NO
1 JUST=YES
1! INCLUDEMD=NO
1 INCLUDEMD=YES
16  %Comparison output data sets
Comparison output data sets

1! IOUTPUT=FMINSOUT
1 IOUTPUT=ddname?IOUTMEM=member
1 IOUTDSN=ioutdsn(member)
2? IBINREC=binrec_len
1! IDISP=MOD
1 IDISP=OLD
1! DOUTPUT=FMDELOUT
1 DOUTPUT=ddname?DCOUTMEM=member
1 DOUTDSN=doutdsn(member)
4? DBINREC=binrec_len
1! DDISP=MOD
1 DDISP=OLD
1! NCOUTPUT=FMNCHOUT
1 NCOUTPUT=ddname?NCOUTMEM=member
1 NCOUTDSN=coutdsn(member)
6? NCBINREC=binrec_len
1! NCDISP=MOD
1 NCDISP=OLD
1! OCOUTPUT=FMOCHOUT
1 OCOUTPUT=ddname?OCOUTMEM=member
1 OCOUTDSN=ocoutdsn(member)
8? OCBINREC=binrec_len
1! OCDISP=MOD
1 OCDISP=OLD
1! NMOUTPUT=FMNMTOUT
1 NMOUTPUT=ddname?NMOUTMEM=member
1 NMOUTDSN=nmoutdsn(member)
10? NMBINREC=binrec_len
1! NMDISP=OLD
1 NMDISP=MOD
1! OMOUTPUT=FMOMTOUT
1 OMOUTPUT=ddname?OMOUTMEM=member
1 OMOUTDSN=omoutdsn(member)
12? OMBINREC=binrec_len
1! OMDISP=OLD
1 OMDISP=OMOD
Formatted type options

1 TYPE=FORMATTED
1! IGNORELB=NO
1 IGNORELB=YES
1! IGNORETB=NO
1 IGNORETB=YES
1! MATCHREF=NO
1 MATCHREF=YES
1! IGNORECASE=NO
1 IGNORECASE=YES
Keyed synchronization options

1 SYNCH=KEYED(1)
1 KEYTCOLD=
2.1! YES
2.1 NO
1 KEYTCNEW=
2.1! YES
2.1 NO
1 KEYFLDOLD=(+ , okeyfld)
1 KEYFLDNEW=(+ , nkeyfld)
1 KEYLOCOLD=(+ , okeyloc)
1 KEYLOCNEW=(+ , nkeyloc)
1 KEYLEN=(+ , keylen)
1 KEYTYPE=(+ ,
2.1! CHAR
2.1 BINARY
2.1 PACKED
2.1 FLOAT
2.1 ZONED)
1 KEYLENNEW=(+ , keylen)
1 KEYTYPNEW=(+ ,
2.1! CHAR
2.1 BINARY
2.1 PACKED
2.1 FLOAT
2.1 ZONED)
1! KEYORD=(+ , A)
1 KEYORD=(+ , D)
1! KEYMATCH=NO
1 KEYMATCH=Yes
1! KEYDUPOK=NO
1 KEYDUPOK=Yes
Notes:
  • 1 All of the following keywords are shown as optional in the syntax, but in practice the actual requirements are dependent on a number of factors, as described in the SYNCH=KEYED definition below the syntax diagram.
Read-ahead Keyed synchronization options

1 SYNCH=RAKEY
1! LIMIT=100
1 LIMIT=ralim
1! LENGTH=1
1 LENGTH=ralen
1 KEYTCOLD=
2.1! YES
2.1 NO
1 KEYTCNEW=
2.1! YES
2.1 NO
1 KEYFLDOLD=(+ , okeyfld)
1 KEYFLDNEW=(+ , nkeyfld)
1 KEYLOCOLD=(+ , okeyloc)
1 KEYLOCNEW=(+ , nkeyloc)
1 KEYLEN=(+ , keylen)
1 KEYTYPE=(+ ,
2.1! CHAR
2.1 BINARY
2.1 PACKED
2.1 FLOAT
2.1 ZONED)
1 KEYLENNEW=(+ , keylen)
1 KEYTYPNEW=(+ ,
2.1! CHAR
2.1 BINARY
2.1 PACKED
2.1 FLOAT
2.1 ZONED)
1! KEYMATCH=NO
1 KEYMATCH=Yes
1! KEYDUPOK=NO
1 KEYDUPOK=Yes
Template reporting options

1! PBK=NONE
1 PBK=LAYOUTS
1 PBK=CRITERIA
1 PBK=ALL
1! MAP=NONE
1 MAP=MAPPED
1 MAP=UNMAPPED
1 MAP=ALL
1! ARRAY=NO
1 ARRAY=YES
1! FSTATS=NO
1 FSTATS=YES
1! HEXLOC=NO
1 HEXLOC=YES
1! HEXLEN=NO
1 HEXLEN=YES
Load module compare options

1 SYNCH=LMOD
1! CMPLVL=LMOD
1 CMPLVL=CSECT
1! DATEFORM=YYYYDDD
1 DATEFORM=YYMMDD(1)
Notes:
  • 1 Provide closing bracket when opening bracket has been used.
Old data set specifications
The “Old” data set can be specified as follows:
DDOLD=ddold
Defines a reference to a DD or TSO ALLOC statement for the “Old” data set or HFS file. The default is DDOLD.
DSNOLD=dsnold
Defines the name of the “Old” data set or an absolute path to the Old HFS file. If any DD statements are specified, they are not used. The name may include a member name in parenthesis. If the member is specified here, the associated MEMOLD parameter must be empty. An absolute path to an HFS file must be enclosed in apostrophes. If it does not fit on one line, you can split it over more than one line. To further describe the data set, use the following:
VOLSEROLD=volserold
The VOLUME serial number for a non-cataloged “Old” data set.
MEMOLD=memold
The name of a single member in a PDS, or a member name pattern representing one or more members in a PDS library. You can specify this parameter, or a member name in the DD statement for ddname, or specify a member or members in the MEMLIST parameter, or specify a range of member names with the MEMSTART and MEMEND keywords.

A member name pattern can consist of any characters that are valid in a member name, and two special pattern characters: the asterisk (*) and the percent symbol (%).

An * represents any number of characters. As many asterisks as required can appear anywhere in a member name pattern. For example, if you enter a member name pattern of *d*, all members in the PDS whose name contains "d" are processed.

A % is a place-holding character that represents a single character. As many percent symbols as necessary can appear anywhere in a member name pattern. For example, if you enter a member name pattern of %%%%, all members in the PDS with a 4-character name are processed.

MEMOLD is ignored if the data set is not a PDS.

MEMSTART=startstring
Is used to specify the start of a range of member names to be included in the compare. If MEMSTART is specified but MEMEND is omitted, all members of the PDS(E) from the startstring value onwards are included. startstring can have the same values, including wild cards, as for the memold parameter of the MEMOLD keyword.
MEMEND=endstring
Is used to specify the end of a range of member names to be included in the compare. If MEMEND is specified but MEMSTART is omitted, all members of the PDS(E) up to the endstring value onwards are included. endstring can have the same values, including wild cards, as for the memold parameter of the MEMOLD keyword.
XMEMBERS
Provides a way to exclude from processing library members that would otherwise be selected using the MEMSTART, MEMEND, and MEMBER options.
xmem_filter
A member name filter identifying one or more members that are to be excluded from processing. A filter can be a member name pattern representing multiple members.

To specify a member name filter containing lowercase characters, use a character string in the format c'string'. Filter values can also be specified as hexadecimal strings in the format x'hex-digits'.

MQ:manager:queuename
You can specify a MQ queue in place of a data set name, where:
managerold
The “Old” MQ manager to be used. If you specify a generic name, File Manager displays a list of matching managers to select from.
queuenameold
The “Old” queue to be used. If you specify a generic name, File Manager displays a list of matching queues to select from.
rt:applid:rname
You can specify a CICS® resource in place of a data set name, where:
rt
Resource type. Valid values are:
FI
For a CICS® file.
TD
For a Transient Data Queue.
TS
For a Temporary Storage Queue.
applid
The VTAM® applid of the CICS® system.
rname
The name of the resource.
GENOLD=generation
Specifies the generation of the old member to be compared. A value of 0 refers to the current member. A negative value refers to the relative generation number. A positive value refers the absolute generation number.
Tip: The GENOLD and GENNEW keywords can be used to compare different generations of the same member in the same data set.

If the input data set is not a PDSE that supports member generations, the GENOLD keyword is ignored.

CREATED=created
The date on which a member was created, in YYYY/MM/DD format.

If the “Old” data set is a PDS(E), you can specify this parameter, or specify a range of creation dates with the CRESTART and CREEND keywords.

You can specify an asterisk (*) as the last character to indicate a range of dates, or a percent sign (%) in place of a single character to indicate a selection of dates.

created is ignored if the data set is not a PDS.

CRESTART=crestart
The start of a range of creation dates in YYYY/MM/DD format to be included in the compare.

If CRESTART is specified but CREEND is omitted, all members of the PDS(E) from the crestart value onwards are included.

If omitted, or you do not enter a full date, or you specify an asterisk (*) as the last character, the unspecified portion of crestart defaults to the right as follows:
DD
= 01
MM
= 01
YYYY
= 0000
No other wildcarding is allowed.
CREEND=creend
The end of a range of creation dates in YYYY/MM/DD format to be included in the compare.
If omitted, or you do not enter a full date, or you specify an asterisk (*) as the last character, the unspecified portion of creend defaults to the right as follows:
DD
= 31
MM
= 12
YYYY
= 9999
No other wildcarding is allowed.
CHANGED=changed
The date on which a member was last modified, in YYYY/MM/DD format.

If the “Old” data set is a PDS(E), you can specify this parameter, or specify a range of modification dates with the CHGSTART and CHGEND keywords.

You can specify an asterisk (*) as the last character to indicate a range of dates, or a percent sign (%) in place of a single character to indicate a selection of dates.

changed is ignored if the data set is not a PDS.

CHGSTART=chgstart
The start of a range of modification dates in YYYY/MM/DD format to be included in the compare.

If CHGSTART is specified but CHGEND is omitted, all members of the PDS(E) from the chgstart value onwards are included.

If omitted, or you do not enter a full date, or you specify an asterisk (*) as the last character, the unspecified portion of chgstart defaults to the right as follows:
DD
= 01
MM
= 01
YYYY
= 0000
No other wildcarding is allowed.
CHGEND=chgend
The end of a range of modification dates in YYYY/MM/DD format to be included in the compare.
If omitted, or you do not enter a full date, or you specify an asterisk (*) as the last character, the unspecified portion of chgend defaults to the right as follows:
DD
= 31
MM
= 12
YYYY
= 9999
No other wildcarding is allowed.
USERID=userid
The TSO user ID by which the member was last updated.

If the “Old” data set is a PDS(E), you can specify this parameter, or specify a range of user IDs with the UIDSTART and UIDEND keywords.

You can enter a generic user ID by using asterisks and percent signs.

userid is ignored if the data set is not a PDS.

UIDSTART=uidstart
The start of a range of user IDs to be included in the compare.

If UIDSTART is specified but UIDEND is omitted, all members of the PDS(E) from the uidstart value onwards are included.

If omitted, or you do not enter a full 7-character user ID, or you specify an asterisk (*) as the last character, File Manager replaces the asterisk and pads the unspecified portion of uidstart to the right with low values (X'00').

UIDEND=uidend
The end of a range of user IDs to be included in the compare.

If you omit this field, it defaults to high values (X'FF').

If you specify less than 7 characters (without an asterisk as the last character), File Manager pads uidstart to the right with low values (X'00'). If you specify an asterisk (*) as the last character, File Manager replaces the asterisk and pads the unspecified portion of uidend with high values (X'FF').

MEMLIST
Provides a means of selecting members from a PDS where no generic name pattern and no member name range has been specified. If the MEMLIST keyword is specified, only those members included in the MEMLIST arguments are compared with the corresponding members in the output data set. Members selected by the MEMBER=memold that are not included in the MEMLIST arguments are not compared.
comp_mem
The name of the member to be compared. Generic name masks are not allowed.
USEIOXOLD
Specifies whether to invoke a user I/O exit, to process the “Old” data set.
NO
Default. Do not invoke a user I/O exit.
YES
Invoke a user I/O exit to process the “Old” data set. This option is only available if the person who did the site customization for File Manager allowed user I/O exits on a site-wide basis.
IOXOLD
Specifies the name of the user I/O exit used for the “Old” data set. There are no restrictions on the programming language that you can use to write an exit. The exit must be provided to File Manager in the STEPLIB/ISPLLIB concatenation or their extensions (LINKLIST, LPA, and so on).
sysexit
Default. If you specify USEIOXOLD=YES and do not supply a user I/O exit name, File Manager uses the name of the exit provided in the installation customization options. If USEIOXOLD has been set to YES and no installation default has been provided, you must specify IOXOLD=ioxname.
Note: If you have selected batch processing in an online panel, the generated JCL statements use the default name provided in your Set System Processing Options panel.
ioxname
The name of a PDS(E) member of a data set that has been provided to File Manager in the STEPLIB concatenation.
BINRECOLD=binrecold-len
Specifies the record length used for processing the Old HFS file. Valid range: 1 to 32760.

The file is processed in Binary mode (fixed-length records derived from the file, delimiters not distinguished). If you do not specify this parameter, the file is processed in Text mode (variable-length records, boundaries determined by delimiters).

KEYOLD=keyold
A key for KSDS records or a slot number for RRDS records, for the “Old” data set. The maximum key length is 30 characters. The first record with a key or slot value greater than or equal to key is the first record compared. If you omit the keyold and skipold values, the comparison begins with the first record in the data set.

If the key contains lowercase characters, blanks, or commas, enclose it in quotation marks. You can also specify a key in hexadecimal format (for example, X'C1C2C3').

SKIPOLD=skipold
Number of logical records to be skipped from the beginning of the “Old” data set. The default is 0.
CMPOLD=cmpold
Number of records from the “Old” data set to be compared. The maximum number is 999 999 999. If you specify ALL or omit the parameter, all the remaining records are compared.
IGNLEN
Specifies whether or not File Manager ignores length mismatches when selecting records for processing.
NO
Do not ignore length mismatches. Records that are shorter than the matching structure length in the template are not selected for processing.
YES
Use this option to ignore length mismatches.
Old template processing
Use these options to specify the “Old” copybook or template that describes the record structure of your “Old” data set.
TOLD=ddname
Defines a reference to a DD or TSO ALLOC statement for the data sets which contain the copybook or template that describes the record structure of your "Old" data set. The default is TDOLD.

If you specify a concatenated DD, then you must provide the member name, member.

TOLDMEM=member
The name of the copybook or template member in the datasets identified by the TOLD parameter if it has not been specified on the DD statement. This parameter must not be specified if the TCOLD parameter is specified.
TCOLD=tcold(tcomem)
PDS and member name of the "Old" copybook or template that describes the record structure of your "Old" data set.
OFFSETOLD
The length of the 01 field in the “Old” template and the start locations of the fields within that 01 field are adjusted by the value provided.
value
The offset value, which must be in the range -32760 to 32760, to be applied to the corresponding field identifier. If no field identifier is supplied and ALL is not used, the value is applied to the first Level 01 field in the “Old” template.
ALL
Where the template contains multiple record structures, this keyword applies the corresponding value to all Level 01 fields within the “Old” template.
Note: You can specify a value for ALL and then override this value for individual layouts by providing subsequent value and fieldname combinations.
fieldname
The name of the Level 01 field to which value is to be applied. The default is the first Level 01 field in the “Old” template.
FIELDOLD=(oldfield1,oldfield2,...)
Field name or names in the “Old” template, used to create a mapping for a formatted comparison. This keyword is used in conjunction with the FIELDNEW keyword to define mapping within the batch file. The parentheses are optional when only one field is specified but mandatory when more than one field is included. The names are mapped in the order given, that is, oldfield1 is mapped to newfield1 and so on, overriding any default or existing mapping.

FIELDOLD and FIELDNEW can be used with or without an existing mapping in the template and with or without the CORRESP keyword setting, as follows:

Table 1. Batch mapping behavior

This table has four columns. In the header, the first header, "Specifications", spalns three columns. Underneath are the subheadings '"New" template contains mapping?', "CORRESP=?" and "FIELDxxx specified?". The fourth heading is "Behavior". In the body of the table, in the first column, "no" spans four rows, and "yes" spans four rows. In the second row, "NO" spans two rows, then "YES" spans two rows, then "NO" spans two rows, and "YES" spans two rows. For the remaining two columns, each cell occupies one row and one column.

Specifications Behavior
“New” template contains mapping? CORRESP=? FIELDxxx specified?
no NO no map corresponding fields
yes map specified fields
YES no map corresponding fields
yes map corresponding fields then remap specified fields
yes NO no use mapping in TCNEW template
yes use mapping in TCNEW template then remap specified fields
YES no map corresponding fields
yes map corresponding fields then remap specified fields
Note: “Specified fields” refers to those fields specified in the FIELDOLD and FIELDNEW arguments.

Handling multiple 01s and duplicate field names

Field mapping specifications that are created via the FIELDOLD and FIELDNEW keywords are applied on a first match basis. For example, if the “Old” template came from a copybook containing:
       01 OLD-TYPE01.
          03 BINARY-X              PIC 999999999 USAGE BINARY.
       01 OLD-TYPE02.
          03 BINARY-1              PIC 999999999 USAGE BINARY.
       01 OLD-TYPE03.
          03 BINARY-1              PIC 999999999 USAGE BINARY.
and the “New” template came from a copybook containing:
       01 NEW-TYPE01.
          03 BINARY-2              PIC 999999999 USAGE BINARY.
       01 NEW-TYPE02.
          03 BINARY-2              PIC 999999999 USAGE BINARY.
          05 DUP-FIELD.
          07 BINARY-2              PIC 999999999 USAGE BINARY.
       01 NEW-TYPE03.
          03 BINARY-2              PIC 999999999 USAGE BINARY.
a mapping specification of:
$$FILEM FIELDOLD=BINARY-1,
$$FILEM FIELDNEW=BINARY-2,
maps the 03 BINARY-2 field in NEW-TYPE02 to the BINARY-1 field in OLD-TYPE02. This is because the 03 BINARY-2 field in NEW-TYPE02 is the first “New” template field found named BINARY-2, where the corresponding 01-level, OLD-TYPE02, contains a field called BINARY-1. The 03 BINARY-2 field in NEW-TYPE01 is not mapped because the corresponding 01-level, OLD-TYPE01, does not contain a 03 BINARY-1 field.
You can override this default behavior to specify different field mappings by using a dot qualification. For example,
$$FILEM FIELDOLD=BINARY-1,
$$FILEM FIELDNEW=DUPFIELD.BINARY-2,
would map the 07 BINARY-2 field in NEW-TYPE02 to the BINARY-1 field in OLD-TYPE02.
$$FILEM FIELDOLD=BINARY-1,
$$FILEM FIELDNEW=NEW-TYPE03.BINARY-2,
would map the 03 BINARY-2 field in NEW-TYPE03 to the BINARY-1 field in OLD-TYPE03.
Note:
  1. This only affects the mapping. Normal record identification procedures must be understood and employed to ensure the correct 01 is in effect for each record comparison.
  2. The qualifiers are resolved from left to right, skipping over levels not present in the qualification so that only enough information to uniquely identify a field need be provided.
New data set specifications
The “New” data set can be specified as follows:
DDNEW=ddnew
Defines a reference to a DD or TSO ALLOC statement for the “New” data set or HFS file. The default is DDNEW.
DSNNEW=dsnnew
Defines the name of the “New” data set or an absolute path to the New HFS file. If any DD statements are specified, they are not used. The name may include a member name in parenthesis. If the member is specified here, the associated MEMNEW parameter must be empty. An absolute path to an HFS file (directory) must be enclosed in apostrophes. If it does not fit on one line, you can split it over more than one line. To further describe the data set, use the following:
VOLSERNEW=volsernew
The VOLUME serial number for a non-cataloged “New” data set.
MEMNEW=memnew
The name of a single member in a PDS library, or a member name pattern representing one or more members in the library. You can specify this parameter, or a member name in the DD statement for ddname.

A member name pattern can consist of any characters that are valid in a member name, and two special pattern characters: the asterisk (*) and the percent symbol (%).

An * represents any number of characters. As many asterisks as required can appear anywhere in a member name pattern. For example, if you enter a member name pattern of *d*, all members in the library whose name contains "d" are processed.

A % is a place holding character that means a single character. As many percent symbols as necessary can appear anywhere in a member name pattern. For example, if you enter a member name pattern of %%%%, all members in the library with a 4-character name are processed.

Specification of MEMNEW (or a member in DSNNEW) depends on the parameters used in MEMOLD (or member used in DSNOLD). If MEMOLD (member in DSNOLD) specifies one member, MEMNEW (member in DSNNEW) must also point at one member. If MEMOLD (member in DSNOLD) contains a member name pattern, the specification of MEMNEW (member in DSNNEW) must use the same pattern or an "*".

MEMNEW is ignored if the data set is not a PDS.

MQ:manager:queuename
You can specify a MQ queue in place of a data set name, where:
managernew
The “New” MQ manager to be used. If you specify a generic name, File Manager displays a list of matching managers to select from.
queuenamenew
The “New” queue to be used. If you specify a generic name, File Manager displays a list of matching queues to select from.
rt:applid:rname
You can specify a CICS® resource in place of a data set name, where:
rt
Resource type. Valid values are:
FI
For a CICS® file.
TD
For a Transient Data Queue.
TS
For a Temporary Storage Queue.
applid
The VTAM® applid of the CICS® system.
rname
The name of the resource.
GENNEW=generation
Specifies the generation of the new member to be compared. A value of 0 refers to the current member. A negative value refers to the relative generation number. A positive value refers the absolute generation number.
Tip: The GENOLD and GENNEW keywords can be used to compare different generations of the same member in the same data set.

If the input data set is not a PDSE that supports member generations, the GENNEW keyword is ignored.

USEIOXNEW
Specifies whether to invoke a user I/O exit, to process the “New” data set.
NO
Default. Do not invoke a user I/O exit.
YES
Invoke a user I/O exit to process the “New” data set. This option is only available if the person who did the site customization for File Manager allowed user I/O exits on a site-wide basis.
IOXNEW
Specifies the name of the user I/O exit used for the “New” data set. There are no restrictions on the programming language that you can use to write an exit. The exit must be provided to File Manager in the STEPLIB/ISPLLIB concatenation or their extensions (LINKLIST, LPA, and so on).
sysexit
Default. If you specify USEIOXNEW=YES and do not supply a user I/O exit name, File Manager uses the name of the exit provided in the installation customization options. If USEIOXNEW has been set to YES and no installation default has been provided, you must specify IOXNEW=ioxname.
Note: If you have selected batch processing in an online panel, the generated JCL statements use the default name provided in your Set System Processing Options panel.
ioxname
The name of a PDS(E) member of a data set that has been provided to File Manager in the STEPLIB concatenation.
BINRECNEW=binrecnew-len
Specifies the record length used for processing the New HFS file. Valid range: 1 to 32760.

The file is processed in Binary mode (fixed-length records derived from the file, delimiters not distinguished). If you do not specify this parameter, the file is processed in Text mode (variable-length records, boundaries determined by delimiters).

KEYNEW=keynew
A key for KSDS records or a slot number for RRDS records, for the “New” data set. The maximum key length is 30 characters. The first record with a key or slot value greater than or equal to key is the first record compared. If you omit the keynew and skipnew values, the comparison begins with the first record in the data set.

If the key contains lowercase characters, blanks, or commas, enclose it in quotation marks. You can also specify a key in hexadecimal format (for example, X'C1C2C3').

SKIPNEW=skipnew
Number of logical records to be skipped from the beginning of the “New” data set. The default is 0.
CMPNEW=cmpnew
Number of records from the “New” data set to be compared. The maximum number is 999 999 999. If you specify ALL or omit the parameter, all the remaining records are compared.
New template processing
Use these options to specify the “New” copybook or template that describes the record structure of your “New” data set.
TNEW=ddname
Defines a reference to a DD or TSO ALLOC statement for the data sets which contain the copybook or template member that describes the record structure of your "New" data set. The default is TDNEW.

If you specify a concatenated DD, then you must provide the member name, member.

TNEWMEM=member
The name of the copybook or template member in the datasets identified by the TNEW parameter if it has not been specified on the DD statement. This parameter must not be specified if the TCNEW parameter is specified.
TCNEW=tcnew(tcnmem)
PDS and member name of the "New" copybook or template that describes the record structure of your "New" data set.
OFFSETNEW
The length of the 01 field in the “New” template and the start locations of the fields within that 01 field are adjusted by the value provided.
value
The offset value, which must be in the range -32760 to 32760, to be applied to the corresponding field identifier. If no field identifier is supplied and ALL is not used, the value is applied to the first Level 01 field in the “New” template.
ALL
Where the template contains multiple record structures, this keyword applies the corresponding value to all Level 01 fields within the “New” template.
Note: You can specify a value for ALL and then override this value for individual layouts by providing subsequent value and fieldname combinations.
fieldname
The name of the Level 01 field to which value is to be applied. The default is the first Level 01 field in the “New” template.
FIELDNEW=(newfield1,newfield2,...)
Field name or names in the “New” template, used to create a mapping for a formatted comparison. This keyword is used in conjunction with the FIELDOLD keyword to define mapping within the batch file. The parentheses are optional when only one field is specified but mandatory when more than one field is included. The names are mapped in the order given, that is, oldfield1 is mapped to newfield1 and so on, overriding any default or existing mapping.
FIELDOLD and FIELDNEW can be used with or without an existing mapping in the template and with or without the CORRESP keyword setting. See Batch mapping behavior for details.
Copybook processing
If you specify a copybook (instead of an existing template) for either TCOLD or TCNEW, then File Manager uses these processing options to compile the copybook into a template:
LANG
Determines whether File Manager automatically detects the copybook language or interprets the language as COBOL,PL/I, or HLASM.
Note: The COMPLANG setting in FMN0POPT is the equivalent of the LANG parameter in batch functions.
  • If COMPLANG is set it determines the installation default language for online and batch compilation.
  • If COMPLANG is not specified then COBOL is the installation default for online compilation and AUTO is the default for batch compilation.
  • If a value of COBOL, HLASM, PL/1, or AUTO is specified (in the Compiler Language Selection panel or through the LANG parameter in a batch job) it overrides the default language.
AUTO
Automatically detect whether the copybook language is COBOL or PL/I, and invoke the appropriate compiler. If the compilation results in a return code greater than 4, then invoke the compiler for the other language. If the second compilation also results in a return code greater than 4, then retry the first compiler and report the compilation errors. If File Manager successfully creates a template (despite the compilation errors), then continue processing with the template.
COBOL
Invoke the COBOL compiler to create a template from the copybook. (Do not invoke the PL/I compiler, even if the COBOL compilation results in errors.)
PLI
Invoke the PL/I compiler to create a template from the copybook. (Do not invoke the COBOL compiler, even if the PL/I compilation results in errors.)
HLASM
Invoke the HLASM compiler to create a template from the copybook.
COBOL options
The following options are used to compile a COBOL copybook into a template:
DBCS=YES
Use the DBCS compiler option.
DBCS=NO
Use the NODBCS compiler option.

For details on the effect of the DBCS and NODBCS compiler options, see the IBM COBOL Programming Guide for OS/390 & VM.

CDPC=NO
Do not use the COBOL SPECIAL-NAMES paragraph "Decimal-point is comma".
CDPC = YES
Use the COBOL SPECIAL-NAMES paragraph "Decimal-point is comma".
CAE=NO
Do not use the COBOL compile option ARITH(EXTEND).
CAE = YES
Use the COBOL compile option ARITH(EXTEND).
MIXED = NO
Field names stored in the template in uppercase.
MIXED = YES
Field names stored in the template in the original case as coded in the COBOL copybook.
RFROM1=RTO1 … RFROM5=RTO5
Up to five pairs of “From” and “To” pseudo-text character strings for the COBOL REPLACE compiler-directing statement.

If your COBOL copybooks contain characters that you want to remove or replace with other characters before compiling the copybooks into templates, then use these replacing options.

For example, if your copybooks contain colon characters (:) that you want to remove before compiling, then specify '==:==' as operand1 and '=====' as operand2.

For details on specifying “From” and “To” strings for COBOL REPLACE, see the IBM COBOL Language Reference.

CBLMAXRC
Sets the maximum acceptable return code for a copybook compile. A return code higher than the specified level causes the function to stop. Default is 4.
Note: The COMPMAXRC parameter is still supported but it is recommended that the CBLMAXRC parameter is used instead. If you do specify the COMPMAXRC parameter, it takes precedence over the language MAXRC.
CBLLIBS
Allows you to specify a list of up to ten data set names to be specified in the SYSLIB concatenation list. These data sets are searched in the order specified for COPY and INCLUDE members for the compilation.
dsname
The name of the data set name to be processed. Generic name masks are not allowed.
CBLADDOP
Additional COBOL compiler options which are included in a CBL statement when compiling COBOL copybooks.
PL/I options
The following options are used to compile a PL/I copybook into a template:
BIN63=YES
Use the LIMITS(FIXEDBIN(63)) compiler option.
BIN63=NO
Use the LIMITS(FIXEDBIN(31)) compiler option.
DEC31=YES
Use the LIMITS(FIXEDDEC(31)) compiler option.
DEC31=NO
Use the LIMITS(FIXEDDEC(15)) compiler option.
GRAPHIC=YES
Use the GRAPHIC compiler option.
GRAPHIC=NO
Use the NOGRAPHIC compiler option.
UNALIGNED=YES
Use the DEFAULT RANGE (*) UNALIGNED, language statement to change the default alignment.
UNALIGNED=NO
Use the PL/I default.
PLIMAXRC
Sets the maximum acceptable return code for a copybook compile. A return code higher than the specified level causes the function to stop. Default is 4.
Note: The COMPMAXRC parameter is still supported but it is recommended that the PLIMAXRC parameter is used instead. If you do specify the COMPMAXRC parameter, it takes precedence over the language MAXRC.
PLILIBS
Allows you to specify a list of up to ten data set names to be specified in the SYSLIB concatenation list. These data sets are searched in the order specified for COPY and INCLUDE members for the compilation.
dsname
The name of the data set name to be processed. Generic name masks are not allowed.
PLIADDOP
Additional PL/I compiler options which are included in a *PROCESS statement when compiling PL/I copybooks.

For details on the effect of these compiler options, see the IBM VisualAge PL/I for OS/390 Programming Guide.

HLASM options
The following options are used to compile a HLASM copybook into a template:
DBCS=YES
Use the DBCS compiler option.
DBCS=NO
Use the NODBCS compiler option.
NOALIGN=YES
Use the NOALIGN compiler option.
NOALIGN=NO
Use the ALIGN compiler option.
ASMMAXRC
Sets the maximum acceptable return code for a copybook compile. A return code higher than the specified level causes the function to stop. Default is 4.
Note: The COMPMAXRC parameter is still supported but it is recommended that the ASMMAXRC parameter is used instead. If you do specify the COMPMAXRC parameter, it takes precedence over the language MAXRC.
ASMLIBS
Allows you to specify a list of up to ten data set names to be specified in the SYSLIB concatenation list. These data sets are searched in the order specified for COPY and INCLUDE members for the compilation.
dsname
The name of the data set name to be processed. Generic name masks are not allowed.
ASMADDOP
Additional HLASM compiler options which are included in a *PROCESS statement when compiling COPY and MACRO members.

For details on the effect of these compiler options, see the HLASM V1R6 Programmer's Guide.

Note: You cannot specify different options for compiling “Old” and “New” copybooks; the same copybook options are used for both.
Comparison options
TYPE=RECORD
Record comparison.
CORRESP=NO
Use this option if the field mapping you want to use is in the TCNEW member. If the TCNEW member is a copybook, or no field mapping is supplied, then File Manager ignores this option and performs a compare as if you had specified CORRESP=YES.
CORRESP=YES
This option instructs File Manager to map output fields to input fields with the corresponding name.

If you want to use the existing mapping in the “New” template, specify CORRESP=NO.

SYNCH=ONETOONE
One-to-one synchronization.
SYNCH=READAHEAD
Read-ahead synchronization. If specified, you can use the following option:
LIMIT=ralim
Limit for read-ahead synchronization.
LENGTH=ralen
The number of records that must match during read-ahead processing for synchronization to occur.
LIST=SUMMARY
Summary listing.
LIST=DELTA
Delta listing.
LIST=MATCHING
Matching listing.
LIST=LONG
Long listing.
LIST=NONE
No listing.
Listing Options
The following option takes effect if the LIST=LONG parameter is specified:
EXCLUDE=exclude_type
The specified compare result types are not reported.
exclude_type can have the following values:
INSERTED
Excludes inserted records from the report.
DELETED
Excludes deleted records from the report.
CHANGED
Excludes changed records from the report.
MATCHED
Excludes matched records from the report.
The following options take effect if the LIST keyword is not specified (that is, it defaults to SUMMARY) or is set to anything other than NONE:
NUMDIFF=numdiff
The number of differences after which the Compare Utility stops processing the data sets. A numdiff value of zero results in all differences being reported.
RCDIFF=(numdiff,return_code)
Sets the batch return code when a threshold of changes has been met, where:
numdiff
The minimum number of differences to trigger the return code. A numdiff value of zero always trigger the return code.
return_code
The batch return code value that is set if the number of differences have been detected.
WIDE=NO
Narrow listing.
WIDE=YES
Wide listing. The WIDE listing is limited in width to approximately 32K bytes of (record) data. When working with records longer than 32K, the record data, and optional change hilighting, is truncated past 32K bytes of data because of the SYSPRINT output record limitation. The entire record length is used to perform the comparison so records ar marked correctly as "changed" regardless of length.
HEX=NO
No hex formatting.
HEX=YES
Show hex formatting.
Note: The print processing option, DUMP, is ignored and the hexadecimal print output is in updown format.
HILIGHT=NO
No highlighting of changed fields.
HILIGHT=YES
Highlight changed fields.
Note: For SYNCH=READAHEAD this option has no effect because read-ahead synchronization can only produce matched records and inserted/deleted records. By definition there cannot be changed records.
SHOWATTR=NO
Suppress attribute information in headings (affects formatted comparisons only).
SHOWATTR=YES
Show attribute information in headings (affects formatted comparisons only).
CHNGDFLD=NO
Show all fields in the formatted comparison reports.
CHNGDFLD=YES
Show only changed fields in formatted comparison reports. This option has no effect if the 'Wide listing' (WIDE=YES) option has been selected, for record type comparisons, or for SYNCH=READAHEAD.
SLCTDFLD=NO
Fields selected in the template are not shown in addition to changed fields. This option has effect only if CHNGDFLD=YES is also specified.
SLCTDFLD=YES
Fields selected in the template are always shown. This option takes effect only if CHNGDFLD=YES is also specified.
SUPIDFLD=NO
Fields for inserted and deleted records are printed. This option takes effect only if CHNGDFLD=YES is also specified.
SUPIDFLD=YES
Fields for inserted and deleted records are suppressed. This option takes effect only if CHNGDFLD=YES is also specified.
PACK=UNPACK
Allow detection of ISPF packed data and unpack the records if they are packed before passing to the processing routine or printing.
JUST=NO
Do not left-justify numeric fields if Formatted Compare Type option has been selected.
JUST=YES
Left-justify numeric fields if Formatted Compare Type option has been selected.
SORT=NO
Do not sort the old and new data sets before the records are compared.
SORT=YES
Sort the records in the old and new data sets before they are compared. This option is only valid when the SYNCH=KEYED or SYNCH=RAKEY options are used. The records are sorted based on the old and new key field or key location, length and type values specified with the keyed synchronization options.
A sort request is ignored if the old or new data set has any of the following characteristics:
  • RECFM=U
  • VSAM linear file
  • VSAM file with maximum record length greater than 32K
  • QSAM spanned file with a record length greater than 32K
  • The template indicates that the file has segmented records
  • PDS or PDSE file
A sort request is also ignored when any of the following conditions is true:
  • I/O exits are used to process the data sets
  • The comparison involves MQ queues
  • The comparison involves remote files
  • The comparison involves HFS files
Note: Using PDS or PDSE files with SORT=YES is possible when the data sets are allocated to DD names that are specified using the DDOLD and DDNEW DSM parameters.
INCLUDEMD
This parameter determines what happens to the descriptor for an Websphere MQ message.
YES
The descriptor is added as a prefix as the data is compared.
NO
Just the message data is compared. This is the default.

This parameter applies only when the input describes an MQ queue.

PACK=SKIP
Check for ISPF packed data and if packed, skip processing of this data set or member.
Comparison output data sets
IOUTPUT=ddname
Defines a reference to a DD or TSO ALLOC statement for the data set or HFS file the "inserted" records are to be written to.
IOUTMEM=member
The name of the member in the dataset identified by the COUTPUT parameter if it has not been specified on the DD statement.
IOUTDSN=ioutdsn(member)
The name of the output data set, or an absolute path to the output HFS file, the "inserted" records are to be written to. The name can include a member name in parenthesis.

An absolute path to an HFS file (directory) must be enclosed in apostrophes. If it does not fit on one line, you can split it over more than one line.

IBINREC=binrec_len
Specifies the record length to be used for processing the inserted HFS output data set. Valid range is 1–32760. The file is processed in binary mode. If you do not specify this parameter, the file is processed in text mode.
IDISP=MOD
Writes inserted records to the existing output data set, starting from the beginning.
IDISP=OLD
Appends inserted records to the existing output data set.
DOUTPUT=ddname
Defines a reference to a DD or TSO ALLOC statement for the data set or HFS file the "deleted" records are to be written to.
DOUTMEM=member
The name of the member in the dataset identified by the COUTPUT parameter if it has not been specified on the DD statement.
DOUTDSN=doutdsn(member)
The name of the output data set, or an absolute path to the output HFS file, the "deleted" records are to be written to. The name can include a member name in parenthesis.

An absolute path to an HFS file (directory) must be enclosed in apostrophes. If it does not fit on one line, you can split it over more than one line.

DBINREC=binrec_len
Specifies the record length to be used for processing the deleted HFS output data set. Valid range is 1–32760. The file is processed in binary mode. If you do not specify this parameter, the file is processed in text mode.
DDISP=MOD
Writes deleted records to the existing output data set, starting from the beginning.
DDISP=OLD
Appends deleted records to the existing output data set.
NCOUTPUT=ddname
Defines a reference to a DD or TSO ALLOC statement for the data set or HFS file the new "changed" records are to be written to. The default is FMNCHOUT.
NCOUTMEM=member
The name of the member in the dataset identified by the NCOUTPUT parameter if it has not been specified on the DD statement.
NCOUTDSN=ncoutdsn(member)
The name of the output data set, or an absolute path to the output HFS file, the new "changed" records are to be written to. The name can include a member name in parenthesis.

An absolute path to an HFS file (directory) must be enclosed in apostrophes. If it does not fit on one line, you can split it over more than one line.

NCBINREC=binrec_len
Specifies the record length to be used for processing the New Change HFS output data set. Valid range is 1–32760. The file is processed in binary mode. If you do not specify this parameter, the file is processed in text mode.
NCDISP=MOD
Writes new changed records to the existing output data set, starting from the beginning.
NCDISP=OLD
Appends new changed records to the existing output data set.
OCOUTPUT=ddname
Defines a reference to a DD or TSO ALLOC statement for the data set or HFS file the new "changed" records are to be written to. The default is FMOCHOUT.
OCOUTMEM=member
The name of the member in the dataset identified by the OCOUTPUT parameter if it has not been specified on the DD statement.
OCOUTDSN=ocoutdsn(member)
The name of the output data set, or an absolute path to the output HFS file, the old "changed" records are to be written to. The name can include a member name in parenthesis.

An absolute path to an HFS file (directory) must be enclosed in apostrophes. If it does not fit on one line, you can split it over more than one line.

OCBINREC=binrec_len
Specifies the record length to be used for processing the New Change HFS output data set. Valid range is 1–32760. The file is processed in binary mode. If you do not specify this parameter, the file is processed in text mode.
OCDISP=MOD
Writes old changed records to the existing output data set, starting from the beginning.
OCDISP=OLD
Appends old changed records to the existing output data set.
NMOUTPUT=ddname
Defines a reference to a DD or TSO ALLOC statement for the data set or HFS file the new "matched" records are to be written to. The default is FMNMTOUT.
NMOUTMEM=member
The name of the member in the dataset identified by the COUTPUT parameter if it has not been specified on the DD statement.
NMOUTDSN=nmoutdsn(member)
The name of the output data set, or an absolute path to the matched HFS file, the new "matched" records are to be written to. The name can include a member name in parenthesis.

An absolute path to an HFS file (directory) must be enclosed in apostrophes. If it does not fit on one line, you can split it over more than one line.

NMBINREC=binrec_len
Specifies the record length to be used for processing the new matched HFS output data set. Valid range is 1–32760. The file is processed in binary mode. If you do not specify this parameter, the file is processed in text mode.
NMDISP=MOD
Writes new matched records to the existing output data set, starting from the beginning.
NMDISP=OLD
Appends new matched records to the existing output data set.
OMOUTPUT=ddname
Defines a reference to a DD or TSO ALLOC statement for the data set or HFS file the old "matched" records are to be written to. The default is FMOMTOUT.
OMOUTMEM=member
The name of the member in the dataset identified by the COUTPUT parameter if it has not been specified on the DD statement.
OMOUTDSN=omoutdsn(member)
The name of the output data set, or an absolute path to the matched HFS file, the old "matched" records are to be written to. The name can include a member name in parenthesis.

An absolute path to an HFS file (directory) must be enclosed in apostrophes. If it does not fit on one line, you can split it over more than one line.

OMBINREC=binrec_len
Specifies the record length to be used for processing the old matched HFS output data set. Valid range is 1–32760. The file is processed in binary mode. If you do not specify this parameter, the file is processed in text mode.
OMDISP=MOD
Writes old matched records to the existing output data set, starting from the beginning.
OMDISP=OLD
Appends old matched records to the existing output data set.
Formatted type options
If you specify TYPE=FORMATTED, for a formatted comparison, you can use the following options:
IGNORELB=NO
Respect leading blanks when comparing alphanumeric fields.
IGNORELB=YES
Ignore leading blanks when comparing alphanumeric fields.
IGNORETB=NO
Respect trailing blanks when comparing alphanumeric fields.
IGNORETB=YES
Ignore trailing blanks when comparing alphanumeric fields.
MATCHREF=NO
Ignore leading blanks (unless IGNORELB=NO is also specified), trailing blanks (unless IGNORETB=YES also specified) and embedded blanks when comparing alphanumeric fields.
MATCHREF=YES
Respect leading blanks, trailing blanks and embedded blanks when comparing alphanumeric fields.
Note: Any setting of IGNORELB or IGNORETB is ignored if MATCHREF=YES is also specified.
IGNORECASE=NO
Respect case when comparing alphanumeric fields.
IGNORECASE=YES
Ignore case when comparing alphanumeric fields.
Keyed synchronization options
If you specify SYNCH=KEYED, you are requesting keyed synchronization.

If specified, you can define up to sixteen key segments to be concatenated to form a single key. A key segment consists of the key's location in the “Old” and “New” data sets and the key's length and data type. These values are built using one of the following sources or a combination of these elements:

  • The intrinsic data set keys (where the data set is keyed, for example, VSAM KSDS).

    If only one of the data sets is keyed, the location and length values for the first segment is initialized from the available data set key information, and the keywords corresponding to the initialized values are not required. However, you need to supply the location value and, optionally, the data type for the non-keyed data set. If you do not specify the data type, the default type of AN is used.

    If both data sets are keyed, you do not need to supply any of the keywords and the location values is initialized from the data set key. The length value is that of the shorter of the two keys.

    If used in a multi-segment key, this defines the first segment. To prevent other segment sources from overriding the intrinsic key, leave the first argument in the KEYxxx keyfields as a void, for example, KEYLOCOLD=(,keylocold).

  • The key segment sequence information stored in your templates.
  • The KEYFLDOLD and KEYFLDNEW keyfields (when a template has been specified)
  • The KEYLOCOLD, KEYLOCNEW, KEYLEN, and (optionally) KEYTYPE keyfields.

In most situations, you would use only one of these sources to define your key segments, however, all of them can be intermixed to define the key segments, with the caveat that KEYLOCOLD, KEYLOCNEW, KEYLEN, KEYTYPE, KEYLENNEW, KEYTYPNEW and KEYORD override KEYFLDOLD and KEYFLDNEW when both specify data for the same segment.

Up to 16 values can be specified for each keyword, and the parentheses can be omitted if only one value is provided. The same number of key segments must be defined for both data sets, and the data type and length of corresponding segments must match. Each set of corresponding values then defines a key segment.

Note:
  1. KEYFLDOLD and KEYFLDNEW can only be specified if a template is specified for the corresponding data set.
  2. Any segment whose presence is implied by a keyword must be fully specified, except that the data type for the segment can default as described in KEYTYPE below.
KEYTCOLD
Determines whether or not any key segment information stored in the “Old” template is used.

If unspecified, the default behavior is that key segment information stored in the “Old” template is only used when all of the following conditions are met:

  • TCOLD=tcold has been specified.
  • The “Old” template contains key segment information.
  • No other keyed synchronization options have been specified for either the “Old” or the “New” data sets.

If any of these conditions are not met, key segment information in an “Old” template is ignored.

If specified, the setting given overrides the default behavior.

YES
The key segment information in the “Old” template is loaded regardless of whether or not other KEY... keywords have been specified. Where present, the other KEY... keywords function as overrides to the template specifications.
NO
The key segment information in the “Old” template is ignored regardless of whether or not other KEY... keywords have been specified.
KEYTCNEW
Determines whether or not any key segment information stored in the “New” template is used.

If unspecified, the default behavior is that key information stored in the “New” template is only used when all of the following conditions are met:

  • TCNEW=tcnew has been specified.
  • The “New” template contains key segment information.
  • No other keyed synchronization options have been specified for either the “Old” or the “New” data sets.

If any of these conditions are not met, key segment information in an “New” template is ignored.

If specified, the setting given overrides the default behavior.

YES
The key segment information in the “New” template is loaded regardless of whether or not other KEY... keywords have been specified. Where present, the other KEY... keywords function as overrides to the template specifications.
NO
The key segment information in the “New” template is ignored regardless of whether or not other KEY... keywords have been specified.
KEYFLDOLD=(keyfieldold,...)
Specifies the name of the field or fields in the “Old” template to be used as key segments. When used in combination with other key segment sources, empty arguments must be included to indicate the position of the keyfieldold value or values in the concatenated key.
KEYFLDNEW=(keyfieldnew,...)
Specifies the name of the field or fields in the “New” template to be used as key segments. When used in combination with other key segment sources, empty arguments must be included to indicate the position of the keyfieldnew value or values in the concatenated key.
KEYLOCOLD=(keylocold,...)
Key locations in “Old” data set for keyed synchronization. When used in combination with other key segment sources, empty arguments must be included to indicate the position of the keylocold value or values in the concatenated key.
KEYLOCNEW=(keylocnew)
Key location in “New” data set for keyed synchronization. When used in combination with other key segment sources, empty arguments must be included to indicate the position of the keylocnew value or values in the concatenated key.
KEYLEN=keylen
Key length for keyed synchronization. When used in combination with other key segment sources, empty arguments must be included to indicate the position of the keylen value in the concatenated key.
KEYTYPE
Defines the data type of the key segment. Can be used to override the data type of an existing template field. When used in combination with other key segment sources, empty arguments must be included to indicate the position of the keytype value in the concatenated key.

KEYTYPE is optional - any key segments defined by KEYLOCxxx/KEYLEN that do not have a corresponding KEYTYPE keyword is given type CHAR.

Key segments defined using KEYFLDOLD and KEYFLDNEW inherit the type of the template field on which they are based, and the expected record sequence is assumed to follow accordingly. In practice this is only likely to be significant for signed binary and packed decimal fields (though internal floating point is also supported). For example, if a key were defined on a two-byte field by location and length, then a value of '001C'x would be less than a value of '001D'x. However if the key were defined via a packed-decimal template field then '001D'x (-1) would be less than '001C'x (+1). Equivalent results can be obtained by using KEYTYPE with KEYLOCxxx and KEYLEN.

CHAR
This is equivalent to the internal C/AN data type. CHAR data type segments are synchronized using the normal EBCDIC collating sequence.
BINARY
This is equivalent to the internal B/BI data type. BINARY data type segments are synchronized as signed binary integers. They must have a length of 2, 4 or 8.
PACKED
This is equivalent to the internal P/PD data type. PACKED data type segments are synchronized as signed packed decimal integers. They must have a length less than or equal to 16.
FLOAT
This is equivalent to the internal FP data type. FLOAT data type segments are synchronized as signed floating point numbers. They must have a length less of 4 or 8.
ZONED
This is equivalent to the internal ZD data type. ZONED data type segments are synchronized as numeric fields. They must have a length less than or equal to 32.
Note: Template fields that are selected as key segments but do not have one of the above data types, is treated as CHAR. In particular, this means that the actual data lengths of varying fields is ignored.
KEYLENNEW=keylen
The key length in New data set for keyed synchronization.
This is required only if the length is different from what was specified on the KEYLEN keyword. When you use this option with other key segment sources, you must include empty arguments to indicate the position of the keylennew value in the concatenated key.
Note: If the new key length is different from the old key length, the shorter key is padded with hex zeros or the pad character (normally blank) in alphanumeric fields if the pad option is on, before comparison is performed.
KEYTYPNEW
Defines the data type for the New data set of the key segment.

This is required only if the type is different from what was specified on the KEYTYPE keyword. You can use this option to override the data type of an existing template field. When you use this option with other key segment sources, you must include empty arguments to indicate the position of the keytypnew value in the concatenated key.

KEYORD
Defines the order of the key segment. Specify A for ascending. Specify D for descending. When you use this option with other key segment sources, you must include empty arguments to indicate the position of the keyord value in the concatenated key. The default value is A (ascending).
KEYMATCH
Specify YES to match records when all of the key fields match.
KEYDUPOK
Specify YES to suppress sequence error messages for duplicate key values. The default is NO.
Read-ahead Keyed synchronization options
If you specify SYNCH=RAKEY, you are requesting read-ahead keyed synchronization. This option is similar to SYNCH=READAHEAD except the fact that instead of record matching, key field matching is performed when synchronizing records. As a result, it can detect changes to records that match according to key field data but differ according to record comparison. Therefore, both the SYNCH=READAHEAD and the SYNCH=KEYED suboptions apply with the exception of KEYORD.
Load module compare options
If you specify SYNCH=LMOD, you are requesting load module comparison.

Load module comparison has these specific options:

CMPLVL
Determines the level of load module comparison.
LMOD
Only information on the load module level is extracted and compared. CSECT information (and differences at CSECT level) is ignored. This results in a less detailed comparison.
CSECT
Information on both the load module and CSECT levels is extracted and compared. This results in a detailed comparison.
DATEFORM=YYYYDDD
Reported dates (link and compile dates) shown in YYYY.DDD format.
DATEFORM=YYMMDD
Reported dates (link and compile dates) shown in YY/MM/DD format.
LMODC
Determines what information at the load module level is to be included in the compare. The criteria correspond with load module properties; only those specified are compared and displayed. Each of the options below can be specified in any sequence, enclosed in parenthesis:
SIZE
The load module size is compared.
ADDRESS
The entry point address of load module is compared.
LINKER | BINDER
The version of the linkage editor or binder used to prepare the load module is compared. LINKER and BINDER are mutually exclusive.
DATE | TIME
The load module link (bind) date and time are compared. DATE and TIME are mutually exclusive.
MODE
The AMODE and RMODE of the load module are compared.
AC | AUTH
The load module authorization code is compared. AC and AUTH are mutually exclusive.
ATTR
The load module link (bind) attributes are compared.
CSECTC
Determines what information at the CSECT level is to be included in the compare. The criteria correspond with the CSECT properties; only those specified are compared and displayed. Each of the options below can be specified in any sequence, enclosed in parenthesis. If CMPLVL=LMOD, this parameter is ignored.
SIZE
The CSECT size is compared.
ADDRESS
The address of the CSECT is compared.
COMPILER
The versions of the language compilers used to compile the CSECT are compared
DATE
The date of the CSECT compile is compared.
MODE
The AMODE and RMODE of the CSECT are compared.
IDRZAP | ZAP
The AMSPZAP IDR data is compared. The IDR ZAP data is an extension of the CSECT information, but is formatted into separate records. ISRZAP and ZAP are mutually exclusive.
TEXT
The CSECT content is compared. The CSECT content is an extension of the CSECT information, but is formatted into separate, 32-byte records shown in "memory dump" format (hexadecimal and character).
Note: If you specify TEXT, the listing option is set to WIDE=YES to accommodate the dump format comparison.
COPT
The compiler options for each CSECT are compared if they can be determined.
Template reporting options
PBK=NONE
Template layout and criteria information not reported.
PBK=LAYOUTS
Template layout information reported if TYPE=FORMATTED is also specified.
PBK=CRITERIA
Template criteria information reported. In this case, a terse layout report is also generated, containing only the fields referred to in the criteria expressions.
PBK=ALL
Template layout and criteria information reported. If TYPE=RECORD is specified, a terse layout report is generated, containing only the fields referred to in the criteria expressions. If TYPE=FORMATTED is specified, a full layout report is generated.
MAP=NONE
Template mapping information not reported.
MAP=MAPPED
Mapped template fields reported if TYPE=FORMATTED is also specified.
MAP=UNMAPPED
Unmapped template fields reported if TYPE=FORMATTED is also specified.
MAP=ALL
Both mapped and unmapped template fields reported if TYPE=FORMATTED is also specified.
ARRAY=YES
If field information is reported, all occurrences of any array elements are reported.

For COBOL OCCURS DEPENDING ON tables, the maximum occurrences are reported.

For PL/1 REFER arrays, the minimum occurrences are reported.

ARRAY=NO
Occurrences of array elements not reported.
FSTATS=NO
The Field Statistics report is not to be generated.
FSTATS=YES
The Field Statistics report is to be generated.
HEXLOC=YES
If field information is reported, all field start and end positions are reported as hexadecimal offsets.
HEXLOC=NO
Field start and end positions not reported as hexadecimal offsets.
HEXLEN=YES
If field information is reported, all field lengths are reported in hexadecimal.
HEXLEN=NO
Field lengths not reported in hexadecimal.
//DSM JOB (ACCT),'NAME'
//* COMPARE DATA SETS
//*
//FMBAT    PROC
//FMBAT    EXEC PGM=FILEMGR
//STEPLIB  DD DSN=FMN.SFMNMOD1,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//         PEND
//*
//STPSSEX     EXEC FMBAT
//SYSIN    DD *
$$FILEM VER
$$FILEM DSM TYPE=RECORD,
$$FILEM     SYNCH=ONETOONE,
$$FILEM     LIST=LONG,
$$FILEM     WIDE=YES,
$$FILEM     HILIGHT=YES,
$$FILEM     DSNOLD=FMN.SFMNSAM1(FMNCDATA),
$$FILEM     SKIPOLD=0,
$$FILEM     CMPOLD=20,
$$FILEM     DSNNEW=FMN.SFMNSAM1(FMNCDATA),
$$FILEM     SKIPNEW=20,
$$FILEM     CMPNEW=20
$$FILEM     EOJ
/*
$$FILEM DSCMP TYPE=RECORD,
$$FILEM SYNCH=KEYED,
$$FILEM LIST=LONG,
$$FILEM WIDE=YES,
$$FILEM HILIGHT=YES,
$$FILEM HEX=YES,
$$FILEM DSNOLD=USERID.COMPARE.KSDS1,1
$$FILEM KEYLOCOLD=(,11),2
$$FILEM DSNNEW=USERID.COMPARE.FLAT2,3
$$FILEM TCNEW=USERID.TEMPLATE(FLAT2),4
$$FILEM KEYTCNEW=YES,5
$$FILEM KEYFLDNEW=(,FIELD-3),6
$$FILEM KEYLEN=(,1),7
$$FILEM KEYTYPE=(,CHAR)8
$$FILEM     EOJ
Note:
  1. DSNOLD is intrinsically keyed with key position 1 and length 10.
  2. KEYLOCOLD provides a position for the second segment of the “Old” key.
  3. DSNNEW is not intrinsically keyed.
  4. TCNEW specifies a new template: the template specifies FIELD-1 (position 1, length 10, type AN) as key segment 1.
  5. KEYTCNEW forces the loading of the TCNEW key segment information, in spite of the presence of the other KEY... keywords, which act as overrides wherever they clash with the information from the template.
  6. KEYFLDNEW specifies FIELD-3 (position 12, length 2, type BI) as the second segment of the “New” key
  7. KEYLEN overrides the length of the second key segment
  8. KEYTYPE overrides the type of the second key segment

The resulting key segments are shown in the following table:

Segment number “Old” key position “New” key position Key length Key type
1 11 12 103 AN4
2 115 126 17 AN8

Source of key information:

  1. DSNOLD catalog entry
  2. Template field FIELD-1
  3. DSNOLD catalog entry and template field FIELD-1 (must be consistent)
  4. Template field FIELD-1 (consistent with AN default for key type)
  5. KEYLOCOLD
  6. Template field FIELD-3 via KEYFLDNEW
  7. KEYLEN
  8. KEYTYPE