在 COBOL 中识别程序调用子模块

Identifying program calling sub-module in COBOL

假设我有一个 COBOL 模块 X,它被另一个程序 Y 调用。

如何在 X 中识别 Y 的名称?

我当然可以在链接部分将它传递给每个子模块,但我宁愿依赖一种更具编程性的方式来处理这个问题,而不是开发人员正确编码一些文字。

但是有什么已知的方法可以有效地做到这一点吗?也许有一些晦涩的 LE 功能或特定的控制块需要阅读?

所有程序 运行 在 z/OS 上使用 Enterprise COBOL 批量处理。

您可以将 DSA(数据保存区,对于 AMODE31 非 XPLINK,指向 DSA 的指针在寄存器 13 中。)返回到前一帧(也就是您的调用者),然后如果该帧写入高电平级语言(例如COBOL、C),那么你需要找到EP(入口点)的开始,然后你可以导航到PPA1控制块。 EP 的名称将接近 PPA1 的末尾。 (您将需要使用 PPA1 中的偏移信息以编程方式获取它。)

如果您的代码需要与各种不同的 LE 程序一起工作,您将需要编写足够的代码来处理它们而不会 ABENDing。 (例如,您的 COBOL 程序 Y 可能会被非 LE 汇编器、LE 汇编器或其他 COBOL 程序调用。)如果您将检查限制为用 LE 高级语言编写的调用者,则可以使您的工作更轻松。