ZONEDATA

The ZONEDATA option tells the compiler whether Start of changethe data in USAGE DISPLAY and PACKED-DECIMALEnd of change data items is valid, and if not, what the behavior of the compiler should be.

Syntax

Read syntax diagramSkip visual syntax diagramZONEDATA=*PFDMIGNOPFD
Default
ZONEDATA=PFD
PFD
When ZONEDATA=PFD is in effect, the compiler assumes that Start of changeall data in USAGE DISPLAY and PACKED-DECIMAL data itemsEnd of change is 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) when Start of changea 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 bitsEnd of change.
NOPFD
When ZONEDATA=NOPFD is in effect, the compiler generates instructions for numeric comparisons Start of changeor an alphanumeric comparisonEnd of change 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, Start of changethe compiler generates an alphanumeric comparison which will alsoEnd of change 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, Start of changethe compiler generates numeric comparisonsEnd of change 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.
Start of changeIn 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 the NUMPROC suboption used in COBOL V4 (or earlier versions):End of change
  • To get the COBOL V4 (or earlier versions) NUMPROC=NOPFD behavior in COBOL V6, use ZONEDATA=NOPFD and NUMPROC=NOPFD in COBOL V6.
  • To get the COBOL V4 (or earlier versions) NUMPROC=PFD behavior in COBOL V6, use ZONEDATA=NOPFD and NUMPROC=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 Start of changea 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 bitsEnd of change.

Note: Start of changeThe sign codeEnd of change must be a valid sign Start of changecodeEnd of change 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 either SIGN IS LEADING or SIGN IS SEPARATE.
In all, to ease your migration to COBOL V6:
  • If your Start of changedigits, sign code, and zone bitsEnd of change are valid, use ZONEDATA=PFD and the same NUMPROC setting that you used with COBOL V4 when using COBOL V6.
  • If you have Start of changeinvalid digits, invalid sign code, or invalid zone bitsEnd of change:
    • If you used NUMPROC=MIG with COBOL V4, use ZONEDATA=MIG and NUMPROC=NOPFD with COBOL V6.
    • If you used NUMPROC=NOPFD with COBOL V4, use ZONEDATA=NOPFD and NUMPROC=NOPFD with COBOL V6.
    • If you used NUMPROC=PFD with COBOL V4, use ZONEDATA=NOPFD and NUMPROC=PFD with COBOL V6.
Note: Start of changeIt 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.End of change

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.