VM/370CE下Kicks环境COBOL程序COMMAREA大小设置咨询
我正在VM/370CE V1R1.2环境下为Kicks开发COBOL程序,此前跟着Moshix和Rene Ferland的YouTube教程完成了基础功能开发,现在需要实现程序间通信,因此必须调整COMMAREA的大小。
如果不显式声明LINKAGE SECTION,调用预处理器和编译器的k2kcobcl命令会自动生成如下代码:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- LINKAGE SECTION. COPY KIKEIB. 01 KIKCOMMAREA PIC X. PROCEDURE DIVISION USING KIKEIB, KIKCOMMAREA.
可以看到默认生成的COMMAREA仅为1字节(PIC X),完全无法满足程序间通信的数据传输需求。
根据Kicks官方文档的说明:
预处理器会向程序的LINKAGE SECTION添加KIKEIB复制本(必要时创建LINKAGE SECTION),且与CICS类似,EIB始终是KICKS处理器添加到程序PROCEDURE DIVISION语句USING子句的第一个参数
COMMAREA与EIB类似;当在LINKAGE SECTION中编码KIKCOMMAREA(或DFHCOMMAREA)的01层定义时,预处理器会将其添加到程序的USING子句中
按照第二段文档说明,我尝试显式声明自定义大小的COMMAREA,代码如下:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- LINKAGE SECTION. 01 DFHCOMMAREA PIC X(8). PROCEDURE DIVISION.
但在VM/370CE V1R1.2的Kicks环境下,这段代码编译失败,报错信息为LINKAGE SECTION DEFINED BUT EMPTY。
为了绕过这个错误,我先后尝试了三种方案:
方案一
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- LINKAGE SECTION. 01 DFHCOMMAREA PIC X(8). PROCEDURE DIVISION USING DFHCOMMAREA.
结果:编译错误。
方案二
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- LINKAGE SECTION. COPY DFHEIB. 01 DFHCOMMAREA PIC X(8). PROCEDURE DIVISION USING DFHEIB, DFHCOMMAREA.
结果:编译错误。
方案三
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- LINKAGE SECTION. COPY DFHEIB. 01 DFHCOMMAREA PIC X(8). PROCEDURE DIVISION.
结果:编译成功,但预处理器输出的代码中(预处理器会自动将“DFH”替换为“KIK”),COMMAREA并未被添加到USING子句中,导致无法正常使用:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- LINKAGE SECTION. COPY KIKEIB. 01 KIKCOMMAREA PIC X(8). PROCEDURE DIVISION USING KIKEIB.
我应该遗漏了某些关键步骤,请问在VM/370CE V1R1.2的Kicks环境下,设置COMMAREA大小的推荐方法是什么?
内容的提问来源于stack exchange,提问作者Zug

