IMS Restrictions for PL/I

In addition to the generic restrictions described earlier in this section, the following restrictions apply to IMS support in PL/I applications.

Call-Level and Command-Level Programming

Only call-level programming (CALL ‘CBLTDLI’) is supported. Command-level programming (EXEC DLI) is not supported.

More than One Value for DBPCB Parameter at IMS CALL

Only one port per operator is allowed in the HyperCode model. If more than one value is found for DBPCB at IMS CALL, then ImsUnknown is generated instead of a list of ports.
Code Sample Ports Found Actual Ports


A:PROC;
...
... IF J>0 THEN
DBPCB = EHL1_1;
ELSE
DBPCB = EUDV_1;
...
... CALLPLITDLI
(K4,GNP,DBPCB,ALT_UKARUK,
SSA_HORUK_U);
END A;

ImsUnknown EHL1.HORUK,EUDV.HORUK

Non-Const Values of DBPCB or OPCODE Parameters

Non-const values of DBPCB or OPCODE parameters are not taken into account when generating IMS ports.
Code Sample Ports Found Actual Ports


A:PROC;
...
DCL P POINTER;
DCL OP CHAR(10);
IF E>0 THEN
BEGIN;
P = EPUF_1;
OP = 'P8CCLA';
END;
... CALLPLITDLI
(K4,ISRT,P,OP,SEG_SSA(10));
END A;

EPUF.P8CCLA EPUF.P8CCLA,ImsUnknown

Multiple Unsupported Ports

Multiple unsupported ports are represented as a single port in the Interactive Analysis model.
Code Sample Ports Found Actual Ports


A:PROC;
...
DCL P POINTER;
DCL OP CHAR(10);
ISRT = 'ISRT';
IF E>0 THEN
ISRT = 'REPL';
... CALLPLITDLI
(K4,ISRT,P,OP,SEG_SSA(10));
...
END A;

ImsREPL ImsISRT, ImsREPL

Called Procedure Rewrites Parameters

During interprogram analysis processing, some values can be lost if a called procedure rewrites parameters either directly or by locator reference.
Code Sample Ports Found Actual Ports


A:PROC;
   DBPCB = EHL1_1;
   CALL B(DBPCB);
   CALL PLITDLI
   (K4,GNP,DBPCB,ALT_UKARUK,
    SSA_HORUK_U);
    …
END A;
/* FILE2.PLI */
B:PROC(DBPCB);
…DBPCB = EUDV_1;

END B;

EHL1.HORUK EUDV.HORUK

Multiple Ports at an IMS CALL inside a Loop Body

DO <VAR>=E1,…,E2 can produce ImsUnknown if there are multiple ports at an IMS CALL inside a loop body.
Code Sample Ports Found Actual Ports
A:PROC(...); … DCL SEG CHAR(10); DBPCB = EPUF_1; DO SEG ='PAMSGS','PPPROF'; CALL PLITDLI (K4,ISRT,DBPCB,P0ROOTX,SEG); END; … END A; ImsUnknown EPUF.PAMSGS,EPUF.PPPROF