将 EXEC 接口模块用于 AMODE (24) 和 AMODE (31) 应用程序

对于 AMODE (24) 和 AMODE (31) 应用程序,语言转换程序生成的 CALL 语句将调用 EXEC 接口模块,这些模块提供代码与 CICS® EXEC 接口程序 DFHEIP 之间的通信。

语言转换程序将读取您的源程序并创建一个新程序。 正常语言语句保持不变,但 CICS 命令会转换为您要编码的语言所需的格式的 CALL 语句。 调用调用 CICS提供的 EXEC 接口模块或 存根 ; 即, CICS 高级编程接口所使用的依赖于功能的代码部分。 必须与应用程序链接编辑 SDFHLOAD 库中提供的存根。 在执行 EXEC CICS 和 EXEC DLI 命令期间调用这些存根。 为每种编程语言提供了存根。

表 1. 接口模块 (存根)
语言 接口模块名称
汇编语言 DFHELII 和 DFHEAI0
所有使用 LEASM 选项的 HLL 语言和汇编程序 MAIN 程序 DFHELII

CICS提供的存根例程与内部编程接口 (即 CICS 命令级别接口) 配合使用,从不以不兼容的方式进行更改。 因此,这些存根模块与较早版本和更高版本兼容,并且无需重新链接 CICS 应用程序模块以包含任何这些存根的更高级别。

除了 DFHEAI0之外,这些存根都提供相同的功能,即提供从 EXEC CICS 命令到所需 CICS 服务的链接。 为此,存根提供了从转换后的 EXEC CICS 命令调用的各种入口点,然后执行将控制权传递给 CICS的 EXEC 接口函数的一系列指令。

DFHELII 包含多个入口点,其中大多数入口点为旧版本的 CICS PL/I 转换程序提供兼容性。 它包含条目 DFHEXEC (针对 C 和 C++ 应用程序) , DFHEI1 (针对 COBOL 和汇编程序) 和 DFHEI01 (针对 PL/I)。

每个存根都以 8 byte eyecatcher 开头,格式为 DFHY xnnn ,其中 x 指示存根支持的语言 (A 指示汇编程序, I 指示存根与语言无关) , nnn 指示包含存根的 CICS 发行版。 识别器中的字母 Y 指示存根为只读。 CICS 的早期发行版随附的存根包含格式为 DFHE xxxx 的 eyecatcher ,其中字母 E 表示存根不是只读的。 z/OS® 的 CICS 事务服务器, V 5 发行版 4 中 DFHELII 的 eyecatcher 为 DFHYI 710

eyecatcher 可以帮助确定最近链接了 CICS 应用程序装入模块的 CICS 发行版。

COBOL

每个 EXEC 命令都将转换为引用条目 DFHEI1的 COBOL CALL 语句。

以下示例显示了转换程序在处理简单 EXEC CICS RETURN 命令时生成的输出:
 *EXEC CICS RETURN END-EXEC
Call 'DFHEI1' using by content x'0e0800000600001000'
end-call.
通过在 CICS提供的过程 (例如 DFHYITVL 或 DFHZITCL) 的链接编辑器步骤中包含 DFHELII 存根例程来解析对 DFHEI1 的引用。

PL/I

转换 PL/I 程序时,每个 EXEC 命令都会生成对入口点 DFHEI01的调用。 这是使用与条目 DFHEI01关联的变量入口点 DFHEI0 完成的。 转换程序通过在每个已翻译程序的开头附近插入以下语句来启用此功能:
 DCL DFHEI0 ENTRY VARIABLE INIT(DFHEI01) AUTO;
DCL DFHEI01 ENTRY OPTIONS(INTER ASSEMBLER);
转换程序根据 DFHEI0 为每个成功转换的 EXEC 命令创建唯一的条目名称。 以下示例显示了转换程序在处理简单 EXEC CICS RETURN 命令时生成的输出:
 /* EXEC CICS RETURN TRANSID(NEXT) */
DO;
DCL DFHENTRY_B62D3C38_296F2687 BASED(ADDR(DFHEI0)) OPTIONS(INTER ASSEM
BLER) ENTRY(*,CHAR(4));
CALL DFHENTRY_B62D3C38_296F2687('xxxxxxxxxxxxxxxxx' /* '0E 08 80 00 03
00 00 10 00 F0 F0 F0 F0 F0 F0 F1 F0 'X */, NEXT);
END;

在上一个示例中, DFHENTRY_B62D3C38_296F2687 基于与实际条目 DFHEI01关联的条目变量 DFHEI0 。 此方法允许转换程序为每个变量条目名称创建 PL/I 数据描述符列表。 然后, PL/I 编译器可以检查 EXEC 命令中引用的变量名是否是使用与数据描述符列表中的转换程序定义的属性一致的属性定义的。 在此示例中, ENTRY (* , CHAR (4)) 指定与 TRANSID 选项关联的变量 (名为 NEXT) 应该是长度为 4 的字符串。

通过在其中一个 CICS提供的过程 (例如 DFHYITPL) 的链接编辑器步骤中包含 DFHELII 存根例程来解析对 DFHEI01 的引用。

C 和 C++

在 C 和 C++ 程序中,每个 EXEC CICS 命令都由命令转换程序转换为对函数 DFHEXEC 的调用。

转换程序通过在每个已翻译程序的开头附近插入以下语句来启用此功能:
#pragma linkage(DFHEXEC,OS) /* force OS linkage */
void DFHEXEC(); /* function to call CICS */
以下示例显示了转换程序在处理简单 EXEC CICS RETURN 命令时生成的输出:
 /* EXEC CICS RETURN */
{
DFHEXEC(
"\x0E\x08\x00\x2F\x00\x00\x10\x00\xF0\xF0\xF0\xF0\xF1\xF8\xF0\xF0");
}

通过在其中一个 CICS提供的过程 (例如 DFHYITDL , DFHZITDL , DFHZITEL , DFHZITFL 或 DFHZITGL) 的链接编辑器步骤中包含 DFHELII 存根例程来解析对 DFHEXEC 的引用。

汇编语言

每个 EXEC 命令都转换为 DFHECALL 宏的调用。

以下示例显示了转换程序在处理简单 EXEC CICS RETURN 命令时生成的输出:
* EXEC CICS RETURN
DFHECALL =X'0E0800000800001000'
所显示的 DFHECALL 宏调用的组合件将生成代码,这些代码用于构建由寄存器 1 寻址的参数列表,装入寄存器 15 中的条目 DFHEI1 的地址,并发出 BALR 指令以调用存根例程。
 DS 0H
LA 1,DFHEITPL
LA 14,=x'0E08000008001000'
ST 14,0(,1)
OI 0(1),x'80'
L 15,=V(DFHEI1)
BALR 14,15
通过在其中一个 CICS提供的过程 (例如 DFHEITAL) 的链接编辑器步骤中包含 DFHEAI 存根例程来解析对 DFHEI1 的引用。 z/OS 的 CICS 事务服务器, V 5 发行版 4 中 DFHEAI 的 eyecatcher 为 DFHYA 710 ,发行版号指示此存根是随 z/OS 的 CICS 事务服务器, V 5 发行版 4提供的。

汇编程序应用程序的 DFHEAI0 存根由链接编辑器或绑定程序实用程序的自动调用工具包含。 它由 DFHEIENT 和 DFHEIRET 宏生成的代码调用,以分别获取和释放汇编程序应用程序的动态存储区域。 仅在汇编程序应用程序中需要此存根; 不需要或提供任何存根来为使用高级语言编写的程序提供等效功能。

DFHEAI 存根必须包含在链接编辑的输出中程序的开头。 要实现此目的, DFHEAI 的 ORDER 和 INCLUDE 语句必须在 JCL 的链接编辑步骤中。 当您在 SDFHPROC 库中使用 CICS提供的汇编程序过程 DFHEITAL 来翻译,汇编和链接编辑以汇编语言编写的应用程序时,此过程的 COPYLINK 步骤将复制 SDFHMAC (DFHEILIA)。 DFHEILIA 包含必须包含的以下语句:
  ORDER DFHEAI
  INCLUDE SYSLIB(DFHEAI)
这些语句将放入临时文件中,在过程的 LKED 步骤中的组装应用程序之前并置该临时文件。