-1

次の呼び出しステートメントがあります。

038060     CALL        PROG USING
038070                 DFH
038080                 L000
038090                 ZONE-E
038100                 ZONE-S.

この呼び出しは動的で、PROGを使用します。

PROGは次のように定義されたグループです。

018630 01                 XX00.
018640        10          PROG.
018650         15         XX00-S06  PICTURE X(6)
018660                         VALUE  SPACE.
018670         15         XX00-S02  PICTURE X(2)
018680                         VALUE  SPACE.
018690        10          XX00-S92  PICTURE 9(02)
018700                         VALUE  ZERO.
018710        10          XX00-S91  PICTURE 9(1)
018720                         VALUE  ZERO.
018730        10          XX00-S9Z PICTURE 9(1)
018740                         VALUE  ZERO.
018750        10          XX00-9B0 PICTURE X(05)
018760                         VALUE  SPACE.
018770        10          XX00-0B0 PICTURE X(02)
018780                         VALUE  SPACE.
018790        10          XX00-BB1 PICTURE X(01)
018800                         VALUE  SPACE.
018810        10          XX00-SFN PICTURE X(07)
I cut here but there is a lot of field after...

使用する実際のプログラム名は次の場所に保存されているようです:

XX00-S06

XX00-S02

名前が 3 つまたは 4 つのフィールドにあり、progname の長さが常に 8 ではない場合もあります。

だから私の質問は、Cobol がグループ内の適切なプログラム名を選ぶ場所をどのように知っているかということです。解決規則とは何ですか?

構成: Microfocus Net Express コンパイラを使用し、環境は UniKix です。

4

2 に答える 2

3

COBOL の動的呼び出し規則はかなり単純です。次のようなものが与えられます:

    CALL WS-NAME USING...

COBOL は、現在格納されているプログラム名WS-NAMEを、線形検索に基づいて使用可能なロード モジュール ライブラリに対して解決します。最初に一致したロード モジュール エントリ ポイント名WS-NAMEが使用されます。

の定義がどれほど複雑か単純かは関係ありませんWS-NAME。名前に使用される全長は、 の長さが何であれWS-NAMEです。例えば:

   01 WS-NAME.
      05 WS-NAME-FIRST-PART     PIC X(3).
      05 WS-NAME-MIDDLE-PART    PIC X(2).
      05 WS-NAME-LAST-PART      PIC X(3).

WS-NAME3 つの従属フィールドで構成され、合計 8 文字になります。これらを個別に設定することWS-NAMEも、全体として何かを移動することもできます。の長さがWS-NAME8 文字未満の場合、受信フィールドの末尾の文字はスペースに設定されます。例えば:

  01 WS-SHORT-NAME.
     05 WS-SHORT-NAME-FIRST-PART          PIC X(4) VALUE 'AAAA'.
     05 WS-SHORT-NAME-LAST-PART           PIC X(2) VALUE 'BB'.

ここでWS-SHORT-NAMEは 6 文字の長さしかありません。MOVING WS-SHORT-NAME次のように、より長いPIC X型変数に

  MOVE WS-SHORT-NAME TO WS-NAME

WS-NAME は値 'AAAABB bb ' を取ります (末尾の 2 つのスペースに注意してください)。一致するエントリ ポイント名のライブラリ検索では、末尾のスペースは重要ではないため、CALL ステートメントでは次のいずれかを使用できます。

  CALL WS-NAME

また

  CALL-WS-SHORT-NAME

そして、それらは同じエントリ ポイントに解決されます。

MicroFocus COBOL の長さの規則がどのようなものかはわかりませんが、動的に呼び出される IBM z/os の場合、プログラム名は 8 文字を超えることはできません (超えている場合、名前は 8 文字に切り捨てられます)。

于 2012-02-13T15:28:24.913 に答える
1

Micro Focus COBOLに関する特定の情報を使用して、NeilBにもう少し追加します。

fyi:PROGRAM-ID、ENTRY-POINTSは30〜31文字に制限されています(ドキュメントの「システム制限とプログラミング制限」セクションを確認してください)。

于 2012-04-20T08:21:46.527 に答える