Идентификация подмодуля вызова программы в COBOL - PullRequest
3 голосов
/ 30 марта 2020

Скажем, у меня есть COBOL-модуль, X, который вызывается другой программой, Y.

Как мне определить имя Y в X?

Я мог бы, конечно, пройти это в разделе связей с каждым подмодулем, но я бы предпочел использовать более программируемый c способ решения этой проблемы, чем разработчики, правильно кодирующие некоторые литералы.

Но есть ли какой-нибудь известный способ сделать это эффективно? Возможно, какая-то неясная функция LE или специфицированные c блоки управления для чтения?

Все программы выполняются в пакетном режиме в z / OS с Enterprise COBOL.

1 Ответ

4 голосов
/ 30 марта 2020

Вы можете вернуться назад по DSA (Область сохранения данных, для AMODE31 nonXPLINK, указатель на DSA находится в регистре 13.) к предыдущему кадру (он же ваш вызывающий), затем, если этот кадр написан на языке высокого уровня (например, COBOL, C), затем вам нужно найти начало EP (точки входа), затем вы можете перейти к блоку управления PPA1. Название EP будет ближе к концу PPA1. (Вам нужно будет использовать информацию о смещении в PPA1, чтобы получить к ней программным c способом.)

Если ваш код должен работать с разными программами LE, вам потребуется достаточно кодировать обращаться с ними без ABENDING. (Например, ваша программа Y на языке COBOL может быть вызвана не ассемблером LE, или ассемблером LE, или другой программой COBOL.) Вы можете упростить свою работу, если просто ограничите проверку вызывающей стороной, написанной на языках высокого уровня LE.

...