ZONEDATA
The ZONEDATA
option tells
the compiler whether the data in
USAGE DISPLAY
and PACKED-DECIMAL
data
items is valid, and if not, what the behavior of the compiler should
be.
- Default
- ZONEDATA=PFD
- PFD
- When
ZONEDATA=PFD
is in effect, the compiler assumes thatall data in
USAGE DISPLAY
andPACKED-DECIMAL
data itemsis valid, and generates the most efficient code possible to make numeric comparisons. For example, the compiler might generate a string comparison to avoid numeric conversion.
- MIG
- When
ZONEDATA=MIG
is in effect, the compiler generates instructions to do numeric comparisons that ignore the zone bits of each digit in zoned decimal data items. For example, the zoned decimal value is converted to packed-decimal with a pack instruction before the comparison. The compiler will also avoid performing known optimizations that might produce a different result than COBOL V4 (or earlier versions) whena zoned decimal or packed decimal data item has invalid digits or an invalid sign code, or when a zoned decimal data item has invalid zone bits
.
- NOPFD
- When
ZONEDATA=NOPFD
is in effect, the compiler generates instructions for numeric comparisonsor an alphanumeric comparison
of zoned decimal data in the same manner as COBOL V4 (or earlier versions) does when using
NUMPROC=NOPFD|PFD
with COBOL V4 (or earlier versions):- In the cases where COBOL V4 (or earlier versions) considered the
zone bits,
the compiler generates an alphanumeric comparison which will also
consider the zone bits of each digit in zoned decimal data items. The zoned decimal value remains as zoned decimal.
- In the cases where COBOL V4 ignored the zone bits,
the compiler generates numeric comparisons
that ignore the zone bits of each digit in zoned decimal data items. The zoned decimal value is converted to packed-decimal with a
PACK
instruction before the comparison.
In order for the compiler to generate comparisons of zoned decimal data in the same way that COBOL V4 (or earlier versions) did, the
NUMPROC
suboption used in COBOL V6 must match theNUMPROC
suboption used in COBOL V4 (or earlier versions):- To get the COBOL V4 (or earlier versions)
NUMPROC=NOPFD
behavior in COBOL V6, useZONEDATA=NOPFD
andNUMPROC=NOPFD
in COBOL V6. - To get the COBOL V4 (or earlier versions)
NUMPROC=PFD
behavior in COBOL V6, useZONEDATA=NOPFD
andNUMPROC=PFD
in COBOL V6.
The compiler will also avoid performing known optimizations that might produce a different result than COBOL V4 (or earlier versions) when
a zoned decimal or packed decimal data item has invalid digits or an invalid sign code, or when a zoned decimal data item has invalid zone bits
.
Note:The sign code
must be a valid sign
code
according to the
NUMPROC
compiler option setting. In addition, the low-order byte must have a valid zone (x'F'
) for unsigned and signed with eitherSIGN IS LEADING
orSIGN IS SEPARATE
. - In the cases where COBOL V4 (or earlier versions) considered the
zone bits,
In all, to ease your migration to COBOL V6:
- If your
digits, sign code, and zone bits
are valid, use
ZONEDATA=PFD
and the sameNUMPROC
setting that you used with COBOL V4 when using COBOL V6. - If you have
invalid digits, invalid sign code, or invalid zone bits
:
- If you used
NUMPROC=MIG
with COBOL V4, useZONEDATA=MIG
andNUMPROC=NOPFD
with COBOL V6. - If you used
NUMPROC=NOPFD
with COBOL V4, useZONEDATA=NOPFD
andNUMPROC=NOPFD
with COBOL V6. - If you used
NUMPROC=PFD
with COBOL V4, useZONEDATA=NOPFD
andNUMPROC=PFD
with COBOL V6.
- If you used
Note:
It is not always possible to entirely match
the behaviour of the old compiler even with these options when faced
with clearly invalid data. For example, even for compares, 

ZONEDATA(NOPFD)
isn't
going to give the same result in all cases as COBOL V4.
Performance consideration:ZONEDATA=PFD
gives
better runtime performance than ZONEDATA=NOPFD|MIG
does. ZONEDATA=NOPFD|MIG
disables
some of the optimizations that NUMPROC=PFD
can give.