Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


例: 静的および動的 CALL ステートメント

この例は、静的呼び出しおよび動的呼び出しのコーディング方法を示しています。

この例は次の 3 つの部分から構成されます。

次の例は、静的呼び出しをコーディングする方法を示しています。

PROCESS NODYNAM NODLL
IDENTIFICATION DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  RECORD-2                   PIC X.              (6)
01  RECORD-1.                                      (2)
    05  PAY                    PICTURE S9(5)V99.
    05  HOURLY-RATE            PICTURE S9V99.
    05  HOURS                  PICTURE S99V9.
. . .
PROCEDURE DIVISION.
    CALL "SUBPROG" USING RECORD-1.                 (1)
    CALL "PAYMASTR" USING RECORD-1 RECORD-2.       (5)
    STOP RUN. 

次の例は、動的呼び出しをコーディングする方法を示しています。

DATA DIVISION.
WORKING-STORAGE SECTION.
77  PGM-NAME                   PICTURE X(8).
01  RECORD-2                   PIC x.              (6)
01  RECORD-1.                                      (2)
    05  PAY                    PICTURE S9(5)V99.
    05  HOURLY-RATE            PICTURE S9V99.
    05  HOURS                  PICTURE S99V9.
. . .
PROCEDURE DIVISION.
. . .
    MOVE "SUBPROG" TO PGM-NAME.
    CALL PGM-NAME USING RECORD-1.                  (1)
    CANCEL PGM-NAME.
    MOVE "PAYMASTR" TO PGM-NAME.                   (4)
    CALL PGM-NAME USING RECORD-1 RECORD-2.         (5)
    STOP RUN.

次の例は、呼び出されるサブプログラムです。これは、前の 2 つの呼び出し側プログラムのそれぞれによって呼び出されます。

IDENTIFICATION DIVISION.
PROGRAM-ID. SUBPROG.
DATA DIVISION.
LINKAGE SECTION.
01  PAYREC.                                        (2)
    10 PAY            PICTURE S9(5)V99.
    10 HOURLY-RATE    PICTURE S9V99.
    10 HOURS          PICTURE S99V9.
77  PAY-CODE          PICTURE 9.                   (6)
PROCEDURE DIVISION USING PAYREC.                   (1)
. . .
    EXIT PROGRAM.                                  (3)
    ENTRY "PAYMASTR" USING PAYREC PAY-CODE.        (5)
    . . .
    GOBACK.                                        (7)
(1)
処理は呼び出し側プログラムで開始されます。最初の CALL ステートメントが実行されると、SUBPROG (呼び出されるプログラム) の PROCEDURE DIVISION の先頭のステートメントに制御権が移動します。

CALL ステートメントでは、最初の USING オプションのオペランドが RECORD-1 として識別されます。

(2)
SUBPROG が制御権を受け取ると、RECORD-1 内の値が SUBPROG で使用可能になります。ただし、SUBPROG では、この値は PAYREC として参照されます。

PAYREC および PAY-CODE 内の PICTURE 文字ストリングの文字数は、記述は同一ではありませんが、RECORD-1 および RECORD-2 の文字数と同じです。

(3)
SUBPROG 中の処理が EXIT PROGRAM ステートメントに達すると、呼び出し側プログラムに制御権が戻されます。このプログラムでの処理は、2 番目の CALL ステートメントが発行されるまで継続されます。
(4)
動的に呼び出されるプログラムの例では、2 番目の CALL ステートメントは SUBPROG 内の別の入り口点を参照するため、2 番目の CALL ステートメントの前に CANCEL ステートメントが出されます。
(5)
呼び出し側プログラム中の 2 番目の CALL ステートメントによって制御権は再び SUBPROG に移動しますが、今回の処理は SUBPROG 中の ENTRY ステートメントの次のステートメントから開始されます。
(6)
RECORD-1 内の値が再び PAYREC で使用可能になります。さらに、SUBPROG は対応する USING オペランド PAY-CODE を使用して、RECORD-2 中の値も使えるようになります。

静的にリンクされたプログラムから 2 度目に制御権が移動すると、SUBPROG は最後に使われた状態で使えるようになります (したがって、最初の実行時に SUBPROG ストレージ内の任意の値が変更されていると、その変更された値は依然として有効です)。しかし、動的にリンクされたプログラムから制御権が移動すると、CANCEL ステートメントが実行されているため、SUBPROG は初期状態で使用可能になります。

(7)
処理が GOBACK ステートメントに達すると、呼び出し側プログラム中の 2 番目の CALL ステートメントの直後のステートメントに制御権が戻されます。

呼び出し先プログラムと 2 つのいずれかの呼び出し側プログラムの特定の実行において、最初の CALL と 2 番目の CALL の間で RECORD-1 内の値が変更された場合は、2 番目の CALL ステートメントの実行時に渡される値は、元の値ではなく、変更された値になります。元の値を使用する場合は、その値を保管しなければなりません。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)