Vous êtes sur la page 1sur 30

Enterprise PL/I for z/OS

Version 3 Release 7

Prepared by
CLS-FDW Development Team
Agenda
Pre-requisite
Introduction
Advantages
JCL Changes
Code Changes
Potential Errors/Warnings expected during
Compilation phase
Potential Errors/Warnings expected during run time
error phase
Unexpected Errors faced during Run-time
Pre-requisite
Language Environment Requirements
Enterprise PL/I V3R7 is supported only on Language
Environment for z/OS 1.8 or later.
Introduction
IBMZPLI is IBMs strategic PL1 compiler for zSeries platform and
System 390. IBMZPLI or Enterprise PL1 is comprised of features from
PL1, PL1 for MVS and VM and Visual Age PL1 with additional features
such as Unicode support, XML parsing capabilities improved C and
Java interoperability, integrated CICS preprocessor, and integrated
SQL preprocessor.
Introduction
In order to use Enterprise compiler, it is important to understand,
from the very beginning, that the old and New PL/I compilers are
completely different from each other. The new PL/I compilers are
written in PL/I, and do not make use of certain techniques that the
old PL/I compilers did. They are so different, in fact, that from the
perspective of Language Environment they are considered different
languages, each with its own signature CSECT.

When moving from old to new compiler, The Enterprise PL/I
Compiler find and report more Errors at Compile time. Warning and
Information messages need to be checked very carefully. The changes
are two Types, depending on the warning or messages, one could be
in the PL/1 programs and the other in the JCL Compile list options.

Advantages
The advantages of Enterprise Compiler are as follows:

New Compiler Parameters
No Limit of the compiler options
New DCL Parameters
Over 100 new built-in functions, including: PROCNAME and
SOURCELINE (for tracing)
HEX and HEXIMAGE (for debugging)
No Compiler limit on the no of files
Increased limit
1) Maximum precision for fixed decimal is increased from 15 to 31
2) Maximum precision for fixed binary is increased from 31 to 63
3) Maximum length of an identifier is increased from 31 to 100.
4) Maximum nesting of %include statements is increased from 8 to 2046
5) Maximum number of repetitive DO-specifications in a data list is
increased from 25 to 50
Advantages
6) Maximum number of arguments in a call or function reference is increased
from 64 to 255
7) Maximum number of parameters for a procedure is increased from 64 to
4095
8) Maximum number of numeric picture characters in a numeric picture is
increased from 15 to 31
9) Maximum key length is increased from 8 to 32763


Many powerful new attributes, including:
ABNORMAL (like volatile in C)
NONASSIGNABLE (like const in C)
RESERVED (for C-like static)
Pointer value can be printed in ZPLI which is not possible in 2.3
Integrated CICS Preprocessor
Integrated SQL Preprocessor

JCL Changes
With ZPLI PL/I pre-processor, the DB2 pre compile and
compilation can be done in a single step only.

STEP1:-

In the compile step change PGM=IEL1AA to PGM=IBMZPLI
In steplib replace the library SYS1.ADPLI.LINKLIB ( LE library )
to SYS1.VAPLI.SIBMZCMP
(Enterprise PLI).
JCL Changes
STEP2:-

The parameters to be passed in the COMPILE step for Enterprise
compilation will be done using the dataset CFLR300.R300.PLIOPTS.
The parameters can be included in the compile JCL as below.

//*----------------------------------------------------
//* PERFORM PLI COMPILE
//*----------------------------------------------------
//*
//COMPILE EXEC PGM=IBMZPLI,
// PARM='+DD:OPTIONS',
// REGION=0M
//STEPLIB DD DISP=SHR,DSN=SYS1.VAPLI.SIBMZCMP
//OPTIONS DD DISP=SHR,DSN=CFLR300.R300.PLIOPTS(PLI or PLISQL)
JCL Changes
STEP 3:-
In the compile step the following dataset has to be concatenated
SYS1.DBP1.SDSNLOAD

STEP 4:-
In LINK members
Example:-
INCLUDE SYSLIB(IBMBEERA)
INCLUDE SYSLIB(CFLL06C)
INCLUDE SYSLIB(CFLL17C)
INCLUDE SYSLIB(CFLL16C)
INCLUDE SYSLIB(CFLL12U)
INCLUDE SYSLIB(CFLL08C)
INCLUDE SYSLIB(CFLX03C)
INCLUDE SYSLIB(PLICALLA)
Replace PLICALLA with CEESTART
JCL Changes
Language Restricted Record I/O

The following options of the ENVIRONMENT attribute are
not supported, but their use is flagged only under
LANGLVL(NOEXT):
ADDBUFF NCP
ASCII NOWRITE
BUFFERS REGIONAL(2)
BUFND REGIONAL(3)
BUFNI REREAD
BUFOFF SIS
INDEXAREA SKIP etc
LEAVE(IF statement) TP
TOTAL TRKOFL

JCL Changes
AMODE(24) Restrictions

AMODE(31) and RMODE(ANY) are the default settings for Enterprise PL/I
applications. To run an application in AMODE(24), you must:

compile all the PL/I source with the compiler option NORENT
link with the SIBMAM24 dataset concatenated in front of the SCEELKED
dataset
run with the Language Environment run-time option ALL31(OFF),
HEAP(,,BELOW,,,) and STACK=(,,BELOW,,,)

JCL Changes
Other important changes that need to be done for JCL are as follows:

Job Region for Enterprise PL/I Compiler needs much more Region and
CPU Time. At Compile time, if problems occur with Region, then use
REGION=100M in the Job.
The LRECL for the compiler SYSPRINT listing dataset has changed to
137.
PLISTART entry is replaced by CEESTART.
PLITEST is replaced by DEBUG.
Use INITAUTO Compiler option to initialize the automatic variables
and copybooks.
Use INITSTATIC Compiler option to initialize the static variables and
copybooks.
Use INITBASED Compiler option to initialize the based variables and
copybooks.
Use INITCTL Compiler option to initialize the control variables and
copybooks.
Code Changes
1. Take care that all variables used in the program are declared and initialized.
2. If INITAUTO compiler option is not used, un-initialized variables and
copybooks have to be initialized.
3. Enterprise compiler throws a warning when DATE built-in is used. Try to
change all DATE to DATETIME builtin to remove the warning.
4. If INITSTATIC compiler option is not used, un-initialized variables and
copybooks have to be initialized.
5. If INITBASED compiler option is not used, un-initialized variables and
copybooks have to be initialized.
6. If INITCTL compiler option is not used, un-initialized variables and
copybooks have to be initialized.
7. Using invalid SUBSTR references

Any SUBSTR reference that you use must be such that its use would not raise
the STRINGRANGE condition if that condition were enabled.

Code Changes
If the STRINGRANGE condition is not enabled (and by default, it is
not), then a SUBSTR reference that is invalid can cause the compiled
code to overwrite storage allocated for other purposes and that, in
turn, can lead to data corruptions or abends.

8. Incorrect code that will now loop endlessly

Please change all the loop variables to FIXEDBIN (31) please dont
have any PIC variables.
Potential Errors/Warnings expected during
Compilation phase
1. IBM1200I W - Use of DATE built-in function may cause problems
As per this, DATETIME which returns 4 digit year is recommended
to use by the compiler, instead of DATE which returns 2 digit year.
1. DATE returns value in the format 060807 [ YYMMDD]
2. DATETIME returns value in the format
20060807080231158 [ CCYYMMDDTTTTTTTTT]
Solution:
A Substring and DATETIME Builtin Function should be used to remove the Warning
message.

2. Related to Structures:
In some cases in the piece of code it is coded as one structure (A) is equal to
another structure (B) by name. But the problem is some variables in
Structure A is not defined with same attributes as the same variables in
Structure B. So the problem of String Truncation occurs. Then in such cases
you can define all the structure variables independently and used SUBSTR
function.
Potential Errors/Warnings expected during
Compilation phase
3. IBM1208I W: INITIAL list for the array IDENT contains only one item.
The problem is, for an array if we are giving init('') for initializing that it will initialize
only the first item, the remaining elements in the array will not be initialized.

Solution:
Possible solution is change init('') to init((*)('')), it will initialize all elements in the array
or replace * with the size of the array.

4. IBM1211I W: Source with length xx is longer than the target.
The problem is length of source variable is larger than that of target.

Solution:
Possible solution is instead of assigning directly the source to target, use substring
built-in function in source and move that to target. The result is same, but we can
eliminate the warning. The default truncation will be from right to left.
Potential Errors/Warnings expected during
Compilation phase
5. IBM1085I W: Variable may uninitialized when used

Solution:
Initialize the variable explicitly
Note: After analyzing the code, we found that no action is required for CLS-FDW
Application.

6. IBM1373I E: Variable J is implicitly declared

Variable is not declared, in the old compiler it will take a default declaration as fixed
dec, but in new compiler it will not.
Solution:
We need to explicitly declare the variable.

7. IBM1385I E: Invalid DEFINED - string overlay defining attempted.
This happens when we declare a variable as char, and trying to share the same memory
location with another structure which contains computational data types like fixed
decimal or fixed bin.
Solution:
One possible solution is replace define with Based(addr(...))
Potential Errors/Warnings expected during
Compilation phase
8. IBM1215I W: The variable I is declared without any data attributes.
We can expect this type of error, if we are declaring variables like this DCL I, J Fixed Bin.
Solution:
We can eliminate this warning by declaring it as DCL (I, J) Fixed Bin.

9. IBM1300I E: ERRDLI is contextually declared as CONDITION
In new ZPLIcompiler if we are using any external condition , we have to declare it
explicitly.
Solution:
Declare explicitly the condition as DCL ERRDLI EXTERNAL CONDITION;

10. IBM1209I W: INDEXED environment option for file filename will be treated
ORGANIZATION (INDEXED)
Since ISAM is not being simulated on the OS/2 platform, the file will be treated in a
manner similar to VSAM KSDS.
Solution:
By changing env(indexed) to env(organization(indexed)), we can eliminate the warning.
Potential Errors/Warnings expected during
Compilation phase
11. IBM1099I W FIXED DEC(source-precision,source-scale) operand will
converted to FIXED BIN(target-precision,target-scale). Significant digits may be
lost.
Solution:
The output of earlier compiler and the new compiler will be same , so no
change required. however a compiler, RULES(ANS), option can be passed to
get a correct value.

12. IBM1119I W Code generated for DO group would be more efficient if control
variable were not an aggregate member.
Solution:
The control variable in the DO loop is a member of an array, a structure or an union,
and consequently, the code generated for the loop will not be optimal.

13. IBM1120I W Multiple closure of groups. END statements will be inserted to
close intervening groups.
Solution:
Depending on the program logic, END statement for the corresponding IF/DO
statement should be coded to solve this warning message.
Potential Errors/Warnings expected during
Compilation phase
14. IBM1195I W Argument to MAIN procedure is not CHARACTER VARYING.
Solution: The argument to the MAIN procedure should be CHARACTER VARYING,
except under SYSTEM(CICS), SYSTEM(TSO) and SYSTEM(IMS).

15. IBM1198I W A null argument list is assumed for variable name.
Solution: An ENTRY reference is used where the result of invoking that entry is
probably meant to be used.

Example:
Before code change :-
Variable = Function;
After code change :-
Variable = Function();


Potential Errors/Warnings expected during
Compilation phase
16. IBM1206I W BIT operators should be applied only to BIT operands.
Solution: In an expression of the form x & y, x | y, or x ^ y, x and y should both be
defined as BIT variables.
Example:
Before:
DCL LINE1_IS_EMPTY,
LINE2_IS_EMPTY,
LINE3_IS_EMPTY BIT(1);
After:
DCL (LINE1_IS_EMPTY,
LINE2_IS_EMPTY,
LINE3_IS_EMPTY) BIT(1);

Potential Errors/Warnings expected during
Compilation phase
17. IBM1213I W The procedure proc name is not referenced.
Solution: The named procedure is not external and is never referenced in the
compilation unit. This may represent an error (if it was supposed to be called) or an
opportunity to eliminate some dead code.
Note: After analyzing we found that no action is required for CLS-FDW Application.

18. IBM1660I S The size ( record-size ) of the record conflicts with the RECSIZE
(recsize) specified in the ENVIRONMENT attribute.
Solution: Execution of the statement would raise the RECORD condition.
Example:
DCL datei file record output env( fb recsize (80) total );
DCL satzaus char (100);
WRITE file(datei) FROM(satzaus);
Note: In this case, the structure is greater than the File LRECL, the other way can also
happen. Changing the structure/LRECL of file will solve this error message.
Potential Errors/Warnings expected during
Compilation phase
18. IBM2404I E variable name is declared as BASED on the ADDR of variable
name, but variable name requires more storage than remains in the enclosing
level 1 structure variable name after the location of variable name.
Solution: The amount of storage needed for a BASED variable must be no more than
provided by its base variable.

19. IBM2615I W DO-loop will always execute exactly once. A semicolon
after the DO may be missing.
Solution: DO-loops should normally be iterative, but if the DO-loop specification
consists of just one assignment, then it will always excute once and only once. A
semicolon after the DO may be missing, as in this example

do
edsaup.tprs = ads162.tprs;
edsaup.tops = ads162.tops;
end;
Potential Errors/Warnings expected during
Compilation phase
20. IBM2621I W ON ERROR block does not start with ON ERROR SYSTEM. An
error inside the block may lead to an infinite loop.
Solution: The first statement in an ON ERROR block should usually be an ON ERROR
SYSTEM statement. This will tend to prevent an infinite loop if there is an error in the
rest of the code in the ON ERROR block.

21. IBM7028I W Reference var-name is ambiguous.
Explanation: All references must be unambiguous.
Solution: APAR PK06775 must be installed in the Enterprise compiler.
Potential Errors/Warnings expected during Run time
phase
1. S0C4 abend: Protection Exception
Reason: Tried to read or write a file which was not open, or when program tried to
access a memory area that is not allowed to the program.
Solution: One possible solution is, check in the program whether the particular file is
opened before reading or writing.

2. S0C7 abend: Data exception
Reason: Decimal data is incorrect or improperly overlapped or not initialized properly.
Solution: Check fixed decimal fields in program; whether any invalid character values
are moving to that field.

3. S806 abend: Module not found
Reason: The module not found in the STEPLIB specified
Solution: Check whether the module is present in the library.
Potential Errors/Warnings expected during Run time
phase
4. S913 abend: An open macro was issued for a protected dataset for which this type of
access is not allowed.
Reason: We will get this type of error messages, if we are trying to access a RACF
protected dataset for which we dont have the access to perform the requested
operation.

5. Abend U0073: This abend occurs if we have not specified a dataset for
keeping logs of IMS database updates.
Solution: Specify a dataset for IEFRDER in the JCL (dataset with following dataset
org( RECFM=VB,LRECL=4092, BLKSIZE=4096), for keeping logs.

6. S0CA Abend: One or more nonzero digits were lost due to the destination field
being too short to contain the result of a decimal operation.
Reason: We will get this type of abend, when the target of an arithmetic operation is
smaller than the result and the truncating digits are not zero.
Solution: We have two solutions to resolve it, 1) Use ON FIXEDOVERFLOW Condition
to handle that condition or 2) Increase the size of the target to accommodate the
full result.
Unexpected Errors faced during Run-time

1.Fixed Overflow Condition

Problem:- In one of the PLI modules, these is an assignment from FLOAT BIN (53)
to FIXED DEC (14,13) . During compilation(using Enterprise Compiler),no warning
message was displayed for this program but while testing this module,a FIXED
OVERFLOW condition was raised.

Solution:- Assignment of the FLOAT BIN variable to a larger FIXED DECIMAL
variable and then assigning the larger FIXED DEC variable to the target variable (ie
the smaller FIXED DECIMAL variable), using the compiler options
DECIMAL(NOFOFLONASGN) and LIMITS(FIXEDDEC(31))

Eg:-
Before:DCL A FLOAT BIN (53); After: DCL A FLOAT BIN (53);
DCL C FIXED DEC (13,12); DCL B FIXED DEC (31,12);
C=A; DCL C FIXED DEC (13,12);
B=A;
C=B;



2.Abend 4093

Problem:- As part of the LINK card changes,the PLICALLA had to be
replaced with CEESTART.But since one link card had both PLICALLA and
CEESTART,the PLICALLA was removed/deleted.This change gave no
errors during compilation/link editing but at run time the program using
this link card caused abend 4093.

Solution:- The PLICALLA include statement had to be added to the link
card.
Reference documents
ZPL/1 Migration documents is available online in the following
Link:
http://www-306.ibm.com/software/awdtools/pli/plizos/library/

The documents present in the above link under Enterprise PL/I for z/OS
Version 3 Release 7 Publications - English :
1. Enterprise PL/I Online Book Shelf
2. Enterprise PL/I Online Book Index
3. Compiler and Run-Time Migration Guide
4. Language Reference
5. Messages and Codes
6. Programming Guide
7. Program Directory

Vous aimerez peut-être aussi