【发布时间】:2020-03-30 13:22:18
【问题描述】:
假设我有一个 COBOL 模块 X,它被另一个程序 Y 调用。
如何在 X 中识别 Y 的名称?
我当然可以在链接部分将它传递给每个子模块,但我宁愿依靠一种更程序化的方式来处理这个问题,而不是开发人员正确编码一些文字。
但是有什么已知的方法可以有效地做到这一点吗?或许是一些晦涩难懂的 LE 功能或特定的控制块需要阅读?
所有程序都在带有 Enterprise COBOL 的 z/OS 上批量运行。
【问题讨论】:
假设我有一个 COBOL 模块 X,它被另一个程序 Y 调用。
如何在 X 中识别 Y 的名称?
我当然可以在链接部分将它传递给每个子模块,但我宁愿依靠一种更程序化的方式来处理这个问题,而不是开发人员正确编码一些文字。
但是有什么已知的方法可以有效地做到这一点吗?或许是一些晦涩难懂的 LE 功能或特定的控制块需要阅读?
所有程序都在带有 Enterprise COBOL 的 z/OS 上批量运行。
【问题讨论】:
您可以返回 DSA(数据保存区,对于 AMODE31 非 XPLINK,指向 DSA 的指针在寄存器 13 中。)到前一帧(也就是您的调用者),然后如果该帧是用高级语言编写的(例如COBOL,C),那么你需要找到EP(入口点)的开始,然后你可以导航到PPA1控制块。 EP 的名称将接近 PPA1 的末尾。 (您将需要使用 PPA1 中的偏移信息以编程方式获取它。)
如果您的代码需要与各种不同的 LE 程序一起使用,您将需要编写足够多的代码来处理它们而不会出现异常情况。 (例如,您的 COBOL 程序 Y 可能由非 LE 汇编程序、LE 汇编程序或其他 COBOL 程序调用。)如果您将检查限制为使用 LE 高级语言编写的调用者,您可以使您的工作更轻松。
【讨论】: