When you are developing programs for execution under CICS:
If your CICS programs include files or use macros that contain EXEC CICS statements, you must also use either the MACRO compile-time option or the MACRO option of PP before the CICS option of the PP option as shown in the following example:
pp (macro(...) cics(...) macro(...) )
If you want to compile a CICS and DB2 PL/I program named cicsdb2.pli, you would use the following command:
pli -l/usr/lpp/cics/include -qsystem=CICS -qpp=CICS=noedf:nodebug:nosource:noprint:MACRO -o cicsdb2.ibmpli -bl:/usr/lpp/cics/lib/cicsprIBMPLI.exp -eplicics -L/usr/lib/dce -ldcelibc_r -ldcepthreads -ldb2 -lplishr_r -lc_r cicsdb2.pli
Make sure that INC is specified as an extension on the INCLUDE(EXT) compile-time option, see INCLUDE.
The IBM.SYSLIB or INCLUDE environment variable must specify the CICS include file directories, for example:
set include=d:\cicsnnn\plihdr;
The PL/I declarations generated by the CICSMAP, the Basic Mapping Support (BMS) utility, are placed in the first directory specified in the INCLUDE environment variable. For more information, see Setting compile-time environment variables.
Output produced in one of the following ways is written to the CPLI transient data queue (TDQ):
Output produced by PLIDUMP is always written to the CPLD transient data queue.
The full workstation CICS API is supported for PL/I programs. Support is also provided for PL/I progams to use:
Other PL/I considerations that apply on S/390 CICS apply to CICS on the workstation also. The program behaves as though the STAE option is always in effect. The NOSTAE option is not supported.
If you are developing applications for eventual execution on S/390 CICS subsystems, you can check your PL/I programs for reentrancy violations with the DEFAULT(NONASSIGNABLE) compile-time option.
For compatibility with CICS/ESA, CICS/MVS, and CICS/VSE, make sure that the EXEC CICS commands are in upper case.
You can use PL/I FETCH and RELEASE under CICS.
A CICS program must not have more than one procedure that has OPTIONS(MAIN).
The EXEC CICS ADDRESS and other similar commands that return a pointer to a CICS control block (such as the TWA COMMAREA, and ACEE) might return a SYSNULL() pointer if the control block does not exist. (For example, '00000000'x not 'FF000000'x) Your programs must use the SYSNULL built-in function to test such pointers.
Each PL/I compilation unit processed by the CICS preprocessor generates the following:
dcl IBMMCICS_ID char(n) static init('cics-id-and-version');
The name, version, and release level of the CICS system for which your program was compiled are indicated.
You also need to consider options depending on the nature of your program and which CICS system is used for executing the program.
| If you are using ... | Use compile-time option(s)... |
|---|---|
| CICS for Windows | PP(CICS MACRO) |
| CICS Files containing native data | DEFAULT (ASCII NATIVE IEEE) as appropriate |
| DB2/2 in native mode | DEFAULT (ASCII NATIVE IEEE) as appropriate |
| CICS Files containing host S/390 data | DEFAULT (EBCDIC NONNATIVE HEXADEC) as appropriate |
| DB2/2 in host S/390 mode | DEFAULT (EBCDIC NONNATIVE HEXADEC) as appropriate |
| If you are using ... | Use compile-time option(s)... |
|---|---|
| CICS for Windows | PP(CICS MACRO) |
| CICS Files containing native data | DEFAULT (ASCII NATIVE IEEE) as appropriate |
| UDB in native mode | DEFAULT (ASCII NATIVE IEEE) as appropriate |
You must have CICS installed before you can compile a program containing EXEC CICS statements. To find out how to install CICS on your workstation, refer to the installation instructions for that product.