Importing IMS PL/I data structures

IMS z/OS® Assets require specific considerations for PL/I data structures.

Restrictions

The following restrictions apply to IMS:

  • IMS message segments cannot exceed 32,767 bytes each.
  • The maximum size of an IMS message is 2GB.
    Note: Large IMS messages can impact performance and therefore may require tuning of IMS.

Supported data types

The following table describes which PL/I data description elements are supported. Unsupported PL/I data description elements are either omitted from the table, or marked "Not supported".

Group and elementary arrays are supported only when the following conditions are met:
  • The array has a fixed lower bound (LBOUND).
  • The array is one-dimensional (does not itself define a table).
  • If the array is a REFER, it is declared inside an UNALIGNED 01 structure that does not contain ALIGNED fields nor requires padding.
  • If the array is a REFER, it conforms to one of the two patterns for REFER in Table 1 "PL/I data description elements for z/OS Assets" below.
Table 1. PL/I data description elements for z/OS Assets
PL/I type Support
CHARACTER NON-VARYING:
CHAR(n)
CHAR(n) NON-VARYING

GRAPHIC(n)
GRAPHIC(n) NON-VARYING

WIDECHAR(n)
WIDECHAR(n) NON-VARYING
Supported
CHARACTER VARYING:
CHAR(n) VARYING
CHAR(n) VARYING4
CHAR(n) VARYINGZ

GRAPHIC(n) VARYING
GRAPHIC(n) VARYING4
GRAPHIC(n) VARYINGZ

WIDECHAR(n) VARYING
WIDECHAR(n) VARYING4
WIDECHAR(n) VARYINGZ
Supported
ORDINAL
Not supported
FIXED DECIMAL(n, m)
Supported
PICTURE 999V99
Supported
PICTURE $999.99
Supported
FIXED BINARY (n)
Supported
UNSIGNED FIXED BINARY (n)
Supported
BINARY FLOAT(01<=n<=21)
Supported
BINARY FLOAT(21<=n<=53)
Supported
DECIMAL FLOAT(n) 
where n <= 6
Supported
DECIMAL FLOAT(n) 
where 6 < n <= 16

Values greater than 16 are not supported.

Supported
BIT(n)
where n is a multiple of 8. Other values are not supported.
Supported
Group fixed-length array:
name (n)
where n is a numeric constant indicating the number of occurrences.
Supported
Elementary fixed-length array:
name (n) data description
where:
  • n is a numeric constant indicating the number of occurrences.
  • data description is a non-array data type such as CHAR(80) or FIXED BIN(31).
Supported
Group REFER (variable-length) array:
name (k : m REFER (n))
where:
  • k is a numeric constant for indicating the lower bound (default is 1).
  • m is a numeric field that contains the upper limit and is declared outside of the 01 structure that contains the group REFER array.
  • n is a numeric field that holds a copy of the upper limit (on ALLOCATE) and is declared: 1) inside the 01 structure that contains the group REFER array, 2) before the first REFER array, and 3) not in an array (see Enterprise PL/I documentation for details).
Supported
Elementary REFER (variable-length) array:
name (k : m REFER (n)) data description
where:
  • k is a numeric constant for indicating the lower bound (default is 1).
  • m is a numeric field that contains the upper limit and is declared outside of the 01 structure that contains the elementary REFER array.
  • n is a numeric field that holds a copy of the upper limit (on ALLOCATE) and is declared: 1) inside the 01 structure that contains the elementary REFER array, 2) before the first REFER array, and 3) not in an array (see Enterprise PL/I documentation for details).
  • data description is a non-array data type such as CHAR(80) or FIXED BIN(31).
Supported
The following additional restrictions also apply:
  • The default maximum characters for CHAR, WIDECHAR, and GRAPHIC fields supported by PL/I is 32,767. Fields that are longer than 32,767 characters will automatically be reduced to 32,767 when imported. To increase the maximum, specify the STRING sub-option of the LIMITS compiler option using a *PROCESS statement (see the Enterprise PL/I Programming Guide for more information) and re-import the source.
  • If the COMPLEX attribute is specified for a data item, it is ignored.
  • If the PRECISION attribute is specified for a data item, it is ignored.
  • Enterprise PL/I FLOAT IEEE is not supported.
  • Enterprise PL/I algorithms that pad data items in order to align them on byte, fullword, or doubleword boundaries are not implemented. One of the following two techniques can be used to address this restriction:
    1. Modify the Enterprise PL/I application and specify the UNALIGNED keyword on each 01-level structure that represents the interface to the application. Ensure that you remove any ALIGNED keywords from members of the 01-level structures. Recompile and link the application.
    2. Insert padding items into structure in order to cause data items that require byte, fullword, or doubleword alignment to be aligned correctly. Refer to the Enterprise PL/I for z/OS documentation for more information on PL/I data item alignment characteristics.

Compiler options

*PROCESS statements placed at the start of COBOL and PL/I programs specify compiler options and limits, allowing source data to be interpreted differently.

For the IMS transaction z/OS Asset type, the IMSREMAP importer option is always passed to the compiler when generating walker/visitor metadata (DAI files).

The AGGREGATE compiler option can be used to help indicate where padding is expected in a data structure.

Use the following option to have the compiler flag structures with padding.
*PROCESS RULES(NOPADDING);

Preprocessors

Several preprocessors that are included with the z/OS Connect Designer are used when importing PL/I. These may be configured and invoked to provide alternative syntax, conditional compilation, and tolerating syntax for CICS and Db2 syntax.

The following preprocessors can be invoked:

For IMS z/OS Asset types, PP(MACRO) is the default preprocessor configuration.

The following example demonstrates use of all preprocessors in a specified order. This *PROCESS statement must be included at the top of PL/I source to override z/OS Connect Designer preprocessor defaults.
*PROCESS PP(INCLUDE(‘ID(-INC)’) MACRO(‘CASE(ASIS)’) CICS SQL);