STOP 文

STOP 文は、実行単位の実行を永続的または一時的に停止させる。

ANS85 「STOP literal」文は、ANSI'85 規格では廃要素に分類されており、ANSI 規格の次回の全面改訂の際に削除される予定である。

MF この構文は、この COBOL 実装内のすべての方言で全面的にサポートされている。FLAGSTD コンパイラ指令を使用すると、この構文を使用するすべての箇所を検出できる。

XOPEN 標準 COBOL 定義の一部を構成するにもかかわらず、X/Open の COBOL 言語定義では、「STOP literal」の書き方は明示的に除外されている。したがって、X/Open の COBOL に準拠するソース プログラム内ではこの文を使用するべきではない。

書き方 1 の一般形式


*
MF 

書き方 2 の一般形式


*
NETJVM 

書き方 3 の一般形式

構文規則

  1. literal-1 は語 ALL で始まる表意定数であってはならない。
  2. literal-1 が数値定数の場合、符号なしの整数とする。

    OSVSVSC2 符号付きの整数を使用できる。

  3. MF integer-1 は符号付きでもよい。
  4. 完結文の中の一連の無条件文の中に STOP RUN 文を書く場合、その中の最後の文にする。

    OSVSVSC2MF 必ずしも、一連の無条件文の最後に STOP RUN 文を書かなくてもよい。しかし、一連の文の中で STOP RUN 文よりも後ろにあるものは実行されない。

  5. MF GIVING および RETURNING は同等である。
  6. MF identifier-1 のサイズは 8 バイト以下とする。
  7. MF STOP RUN GIVING 文が、START 文で作成されたスレッド (書き方 3 のスレッド) 内で実行され、ADDRESS OF 句が指定されていない場合、identifier-1 は USAGE POINTER またはサイズが 4 バイトのデータ項目として定義しなければならない。この定義は、START 文中の RETURNING 項目の定義により異なる。identifier-1 を USAGE POINTER 項目として定義する場合、関数一意名であってはならない。
  8. NETJVM STOP ITERATOR は反復子の文でのみ指定できる。「反復子名」を参照。

一般規則

  1. RUN 指定を書くと、実行単位の実行が停止され、制御はオペレーティング システムに移される。
  2. STOP RUN 文を実行中に、実行単位内の開かれている各ファイルに関して、選択可能指定が何もない CLOSE 文が暗黙的に実行される。それらのファイルのいずれかに USE 手続きが関連付けられていても、実行されない。
  3. MF STOP RUN 文を実行すると、返却値がシステム領域に設定される。その領域は一般に、COBOL 以外の実行時要素が値を戻すために使用できる。実行されたプログラムからオペレーティング システム環境に値を戻す機能がサポートされている場合には、システム領域から返却値が返される。

    GIVING 指定を書かないと、実行単位の動作は以下のようになる。具体的には、システム領域が COBOL の数値データ項目であり、それに USAGE COPM-5 が指定されていて、そのサイズは COBOL システムの外の操作環境によって決められているものとして宣言されている状態で、RETURN-CODE を送り出し側としシステム領域を受け取り側として、MOVE 文を実行したかのように動作する(RETURN-CODE の詳細については、「COBOL 言語の概念」の章の「特殊レジスタ」のトピックを参照)。

    「GIVING identifier-1」指定を書いた場合、identifier-1 はシステム領域に返却値を収めるのにちょうど必要な長さであり、オペレーティング システムによって期待される型および用途のものでなければならない。通常、identifier-1 は PIC S9(9) USAGE COMP-5 を明示的または暗黙的に指定して宣言する必要がある。この宣言は RTNCODE-SIZE コンパイラ指令の値に依存する。実行単位は、identifier-1 を送り出し側としシステム領域を受け取り側として、MOVE 文を実行したかのように動作する。

    「GIVING integer-1」を指定した場合、integer-1 の値はシステム領域に保持できる値以下とする。実行単位は、integer-1 を送り出し側としそのシステム領域を受け取り側として、MOVE 文を実行したかのように動作する。

  4. 「STOP literal-1」を指定すると、実行単位の実行が中断され、オペレーターに literal-1 が通知される。実行単位の実行が再開されると、次の実行文から処理が継続される。実行キーまたはそれと機能的に等しいキーを押すと実行が再開される。
    注: この動作は JCL バッチ ジョブから開始された場合はサポートされず、オペレーターの介入なしで処理が継続される。JCL での実行で同様の効果を得るには、代わりに ACCEPT FROM CONSOLE 構文を使用する。
  5. START 文または CBL_THREAD_CREATE ライブラリ ルーチンで作成されたスレッド中で実行されると、STOP RUN GIVING 文は実行単位を終了しない。単に、返却値を返し、スレッドを終了させる。以下の文と同じである。
    CALL 'CBL_THREAD_EXIT' USING BY VALUE ADDRESS OF thread-parm
  6. MF START 文または CBL_THREAD_CREATE ライブラリ ルーチンで作成されたものでないスレッド (つまり、主スレッドまたは別のプログラム言語で書かれたプログラムで作成されたスレッド) 中の STOP RUN は、実行中の CBL_THREAD_CREATE スレッドがすべて終了するまで待ち、その後に実行単位を終了する。
  7. NETJVM STOP ITERATOR 文には反復子を終了させる効果がある。