EXEC CICS 命令的翻译代码
EXEC CICS
命令。 CICS®会翻译这些程序,并创建一个等效的源程序,其中每条命令现在都被翻译成原始源程序语言中的调用宏或语句。翻译注意事项:EXEC CICS
命令中的 LENGTH 选项
在 COBOL、PL/I 和汇编语言中,如果未指定 NOLENGTH 翻译选项,翻译器会默认某些长度。 这意味着它们在指定数据区的程序中是可选的。 在 C 语言中,必须指定所有 LENGTH 选项。
LENGTH 选项指定一个半字二进制值,即 COMMAREA(通信区域)的长度(以字节为单位)。 如果请求是到 CICS TS 5.5 或更早版本的区域的 DPL,或者是通过 ISC 连接的 DPL,则该值不应超过 24 KB。 这一限制为 COMMAREA 和页眉留出了空间。
该 24 KB 限制不适用于 CICS 命令上的 FLENGTH 选项(由于架构限制,与终端相关的 SEND 和 RECEIVE 命令除外)。 FLENGTH 选项用于与容器和日志等相关的命令。
对于临时存储、暂存数据和文件控制命令,数据集定义本身可能会施加更多限制。
COBOL 转换输出
EXEC CICS 命令将转换为对 CICS 接口 DFHEI1的调用。
EXEC CICS RETURN TRANSID('fred')
COMMAREA(mycommarea) END-EXEC.
Move length of mycommarea to dfhb0020
Call 'DFHEI1' using by content
x'0e08e0000700001000f0f0f0f2f7404040'
by content 'fred' by reference mycommarea
by reference dfhb0020 end-call.
C 转换输出
对于 C 应用程序,每条命令都由重定向语句取代,后面是传递参数的 DFHEXEC 语句。
PL/I 转换输出
对于 PL/I 应用程序,每个命令总是替换为 DO 语句,生成的条目名称的声明, CALL 语句和 END 语句。 ENTRY 声明确保对自变量值进行相应的转换。
EXEC CICS
命令组成,则该命令应位于 BEGIN 块内,如下例所示。- 示例
ON ERROR BEGIN; EXEC CICS RETURN; END;
EXEC CICS
命令与 PL/I 条件前缀相关联,则该命令应位于 BEGIN 块内,如下例所示。- 示例
(NOZERODIVIDE): BEGIN; EXEC CICS GETMAIN SET(ptr-ref) LENGTH(data-value); END;
如果指定了 OPTIONS (MAIN) ,那么转换程序将通过插入 EIB 结构指针作为第一个参数来修改参数列表。 如果未指定 OPTIONS (MAIN) (即,如果要将程序链接到主模块) ,那么不会修改参数列表,如果需要访问链接编辑的程序,那么应用程序员负责在链接编辑的程序中处理 EIB 结构。 在任一情况下,如果程序以有效的 PL/I PROCEDURE 语句开始,那么转换程序将插入 EIB 结构的声明。
汇编程序转换输出
CICS 汇编语言应用程序的调用遵循系统标准。
- 寄存器 1 包含参数列表的地址。 此列表至少有两个条目:
- EIB (EXEC 接口块) 的地址
- COMMAREA 的地址; 如果没有 COMMAREA ,那么条目为 X'00000000 '
- 寄存器 15 包含入口点的地址。
- 寄存器 14 包含返回点的地址。
- 寄存器 13 包含保存区域的地址。
所有其他寄存器都未定义。
对于汇编语言应用程序,当 CICS 翻译器检测到 EXEC CICS
命令时,每个命令都会被 DFHECALL 宏的调用所取代。 DFHECALL 宏设置命令参数,并调用初始 CICS 命令处理器处理命令。 此宏扩展为使用寄存器 15,14 , 0 和 1 的系统标准调用序列。 有关详情,请参阅 DFHECALL 宏。
- 如果在批处理或联机 CICS 应用程序中使用 EXEC DLI,DFHEIGBL 宏将设置全局。 在 DFHEIGBL 中,如果 DFHEIDL 设置为 1 ,那么这意味着程序包含 EXEC DLI 命令。 如果 DFHEIDB 设置为 1 ,这意味着程序是批处理 DL/I。 如果您未使用 DL/I ,那么会将其注释并设置为 0。
- DFHEIENT 宏插入在第一条 CSECT 或 START 指令之后。 它执行 prolog 代码来分配工作存储空间,以保存任何用户变量并供 CICS 使用。 有关详情,请参阅 DFHEIENT 宏。
对于 AMODE (24) 和 AMODE (31) 程序,转换程序自动插入的 DFHEIENT 宏提供的值可能不足以用于产生大于 4095 字节的转换输出的应用程序。 在此情况下,您可以提供自己的 DFHEIENT 宏版本。 有关更多信息,请参阅 编码 DFHEIENT for AMODE (24) 和 AMODE (31) 汇编语言程序。
对于 AMODE (64) 程序,必须指定 DFHEIENT 宏参数以指定程序使用相对寻址指令,因为仅支持相对寻址。 有关更多信息,请参阅 编码 DFHEIENT for AMODE (64) 汇编语言程序。
- DFHEIRET 宏执行后记代码,释放应用程序的工作存储:
- 它会恢复寄存器。
DFHEIRET RCREG=nn,其中 nn(除 13 以外的任何寄存器编号)包含寄存器恢复后放在寄存器 15 中的返回代码。 有关详细信息,请参阅 为汇编语言程序编码 DFHEIRET。
- 它将控制权返回到寄存器 14 中的地址。
有关参考信息,请参阅 DFHEIRET 宏。
- 它会恢复寄存器。
- DFHEISTG 和 DFHEIEND 宏定义了动态存储,包括参数列表和保存区域所需的存储。 有关详细信息,请参阅 为汇编语言程序扩展动态存储。 有关参考信息,请参阅 DFHEISTG 宏 和 DFHEIEND 宏。
包含描述 EIB 的 DSECT 的副本 DFHEIBLK 也会自动包含在内。
程序必须具有 END 语句,因为转换程序不会以其他方式插入缺省宏。 此外, CSECT 或 START 和 END 必须大写才能使转换程序识别它们。
- 示例
本例显示了一个简单的汇编语言应用程序,该程序使用 BMS 命令 SEND MAP 向终端发送地图,随后显示了程序 INSTRUCT 翻译后的输出结果。
图 2 显示了源程序代码。
图 2。 源程序 INSTRUCT CSECT EXEC CICS SEND MAP('DFH$AGA') MAPONLY ERASE END
该源程序被转换为 图 3 中所示的输出。
图 3。 翻译代码 DFHEIGBL , INSERTED BY TRANSLATOR INSTRUCT CSECT DFHEIENT INSERTED BY TRANSLATOR * EXEC CICS SEND MAP('DFH$AGA') MAPONLY ERASE DFHECALL =X'1804C0000800000000046204000020', (CHA7,=CL7'DFH$AGA*'),(______RF,DFHEIV00) DFHEIRET INSERTED BY TRANSLATOR DFHEISTG INSERTED BY TRANSLATOR DFHEIEND INSERTED BY TRANSLATOR END