サーチ…


備考

COBOL CALL文は、コンパイルされたライブラリルーチンへのアクセスを提供します。

ここに画像の説明を入力

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呼び出し可能サービス - スリープ



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow