サーチ…
備考
CALLステートメント
COBOLは、次の文に静的リンケージを使用できます。 GnuCOBOLは、シンボルがリテラルであっても、コンパイル時に知られているすべての外部シンボルに対して、デフォルトで動的リンケージを使用します。
CALL "subprogram" USING a b c *> run a (possibly static linked) sub program
*> passing three fields
CALL some-prog USING a b c *> some-prog is a PIC X item and can be changed
*> at run-time to do a dynamic lookup
このステートメントはコンパイル時のリンク編集の解決を強制します。 (非標準、構文拡張) :
CALL STATIC "subprogram" USING a b c
COBOLのフィールドは、 BY REFERENCE
(デフォルト、オーバーライドされるまで - オーバーライドは左から右の順序でsticky
)、 BY CONTENT
(コピーはREFERENCEによって渡される)、または場合によっては直接BY VALUE
によって渡すことができます。
CALL "calculation" USING BY REFERENCE a BY VALUE b BY CONTENT c RETURNING d
ON EXCEPTION DISPLAY 'No linkage to "calculation"' UPON SYSERR
END-CALL
COBOLはBY REFERENCE
言語として設計されているため、 BY VALUE
を使用すると問題が発生する可能性があります。たとえば、リテラル数値には明示的な型はなく、COBOL仕様には明示的な型昇格規則がありません。したがって、開発者はBY VALUE
リテラルを使用してコールフレーム設定を心配する必要があります。
詳細はhttp://open-cobol.sourceforge.net/faq/index.html#callをご覧ください。
眠い時間
CALLは、COBOLの機能を拡張し、コードの再利用を可能にする方法でもあります。また、「システム」機能にアクセスすることもできます。
この例は、IBM Mainframe COBOLに「スリープ」機能を提供する方法を示しています。そのような要求は、何らかの理由で誰かが "スリープ"する必要があると思っているときは、まれにしかありません。それは間違ったことです。
ILBOWAT0は、メインフレーム上の古いCOBOL固有の実行時代のものです。 BXP1SLPおよびBXP4SLPは、任意の言語で使用できるUnix System Services(USS)ルーチンです。効果的に彼らはUnixの "スリープ"要求です。
現在のIBMメインフレーム・ランタイム(言語環境(LE))は言語間通信を提供し、CEE3DLY LEサービスは別の例であるz / OS言語環境のスレッド遅延サービスの使用で示されています 。
ILBOWAT0は、非常に長い時間(おそらく40年以上)周囲にいましたが、あなたはまだそれに出くわすかもしれません。それはCEE3DLYまたはBXP1SLPに置き換えてください、どちらか特定の要件に適しています。
場合によっては、通常は別のジョブとして実行されるプログラムをスリープ状態にしたり、ジョブを(FTPまたはNDMステップの後に)スリープさせたりする必要があり、結果のデータセットを探すためにスリープ/ループする必要があります。
ここでは、OS / VSやおそらく他のレガシーと現在のメインフレームオペレーティング環境で利用可能なCOBOLスリーププログラムを呼び出す、上記の作業を行うかわいいCOBOLプログラムがあります。
IDENTIFICATION DIVISION.
PROGRAM-ID. SLEEPYTM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WAIT-PARM.
05 WAIT-TIME PIC S9(8) COMP VALUE 90.
05 WAIT-RESPONSE PIC S9(8) COMP VALUE 0.
05 WAIT-PROGRAM-24BIT PIC X(8) VALUE 'ILBOWAT0'.
05 WAIT-PROGRAM-31BIT PIC X(8) VALUE 'BPX1SLP '.
05 WAIT-PROGRAM-64BIT PIC X(8) VALUE 'BPX4SLP '.
PROCEDURE DIVISION.
GENESIS.
DISPLAY 'START CALLING WAIT PROGRAM'
CALL WAIT-PROGRAM-24BIT USING WAIT-TIME WAIT-RESPONSE
DISPLAY 'END CALLING WAIT PROGRAM'
GOBACK
PERIOD .
マイクロフォーカス方式
Microfocusでは、 "SleepEx" APIを使用します。一例として、
environment division.
special-names.
call-convention 74 is winAPI.
:
:
01 wSleep-time pic 9(8) comp-5.
01 wSleep-ok pic 9(8) comp-5.
:
:
move 10000 to wSleep-time *>10seconds
call winAPI "SleepEx" using by value wSleep-time
by value 0 size 4
returning wSleep-ok
end-call.
z / OS言語環境のスレッド遅延サービスの使用
CEE3DLYサービスを24-31または64ビットモードで呼び出して、タスクを最も近い秒に遅延させることができます。これはCICSセーブであり、スレッドのみを遅延させます。
例:
IDENTIFICATION DIVISION.
PROGRAM-ID. SLEEPYTM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WAIT-PARM.
05 WAIT-SECS PIC S9(8) COMP VALUE 90.
05 WAIT-FC PIC X(12).
PROCEDURE DIVISION.
CALL CEE3DLY USING WAIT-SECS WAIT-FC
GOBACK.
詳細はこちらをご覧ください:
IBM Language Environment呼び出し可能サービス - スリープ