Previous 手続き部 - 組み込み関数 手続き部 - ENTER - INVOKE Next

第 12 章 : 手続き部 - ACCEPT - DIVIDE

12.1 ACCEPT(受取り)文

ACCEPT(受取り)文は、操作卓からキー入力されるデータ、またはオペレーティングシステムから提供されるデータを、指定されたデータ項目に入れてプログラムで利用できるようにする。

一般形式

形式 1

形式 2

形式 3

形式 4

形式 5

指令

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。

構文規則

形式 1
  1. 形式 1の呼び名は、環境部の特殊名段落中の機能名に関連させる。 有効な機能名に関しては、環境部の章の特殊名段落節の中の一般規則12 を参照。

  2. 機能名に関連する呼び名の代わりに、機能名そのものを使用できる。

  3. 呼び名が特殊名段落中のARGUMENT-NUMBERと関連するときは、一意名は符号の付かない整数とする。

  4. 呼び名が特殊名段落中のARGUMENT-VALUEまたはENVIRONMENT-VALUEと関連するときは、一意名は英数字データ項目とする。

  5. 一意名は、USAGE DISPLAY-1(2バイト文字)項目でも、外部浮動小数点数データ項目でもよい。

    一意名は、内部浮動小数点数データ項目でもよい。

  6. EXCEPTION 指定は、FROMがENVIRONMENT-NAMEかARGUMENT-VALUEと共に指定された時、またはこれと関連する呼び名で指定された時にだけ、指定することができる。
形式 2
  1. 一意名は、内部浮動小数点数データ項目でも、外部浮動小数点数データ項目でもよい。
形式 3
  1. 一意名の字類、項類、用途には何の制限もない。しかし、一意名に入れられる実際の値およびその値を一意名に転記することの妥当性は、FROM指定に左右される。(詳細については、形式 3に関する一般規則を参照)。
形式 4
  1. 画面名は、OCCURS句に含まれる項目であってはならない。
形式 4 および 5
  1. LINE指定およびCOLUMN指定は、どちらから先に書いてもよい。

  2. EXCEPTIONとESCAPEは同義であり、どちらを書いてもよい。

  3. 一意名-4は、PIC 9(4)またはPIC 9(6)のデータ項目とする。
形式 5
  1. 一意名-8は整数とする。符号付きとすることができる。

  2. 整数-7は符号付きとすることができる。

  3. 形式 5に該当するACCEPT文は作用対象が画面名でなく、AT指定、CRTオプションを伴うFROM指定、WITH指定、MODE IS BLOCK指定、EXCEPTION指定のどれかが指定されているもの、またはFROM指定は指定されていないが特殊名段落にCONSOLEオプション句が指定されているものである。CONSOLEオプション句を伴うFROM指定が指定されているか、FROM指定が指定されておらず特殊名段落にCONSOLE IS CRT句も指定されていないACCEPT文は、形式 1のACCEPT文として扱われる。

  4. 一意名の後ろに続ける指定は、どのような順序で書いてもよい。

  5. SPACE-FILL, ZERO-FILL, LEFT-JUSTIFY, RIGHT-JUSTIFY, PROMPT, TRAILING-SIGNオプションを指定できるのは、作用対象が基本項目の場合だけである。

  6. 一意名-1に属する基本項目の用途は、USAGE DISPLAYとする。

  7. 一意名-1に属する非基本項目は8191バイトより大きいことがある。MODE IS BLOCK句を使用した場合、一意名-1の全体の長さは8191バイト以下にすること。

一般規則

すべての形式
  1. END-ACCEPT指定はACCEPT文の範囲を区切る。(COBOL言語の概念の章の明示範囲符と暗黙範囲符節を参照。)MF(4)コンパイラ指令を設定した場合にのみ、END-ACCEPTは予約語として扱われる。
形式 1
  1. ACCEPT文は論理装置または物理装置からデータを移送する働きをする。そのデータによって、一意名が指すデータ項目の内容が置き換えられる。一意名が指すデータ項目に用途としてDISPLAYが明示的または暗黙的に指定されている場合、フォーマットの変換なしに直ちにその置換が行われる。そうでない場合には、正しいフォーマットへの変換が行われる。

    データ移送のサイズは装置とランタイム環境とによって決まる(使用可能な機能名のリストについては、環境部の章の特殊名段落節を、装置およびデータ移送サイズの制限の詳細についてはCOBOLシステムのマニュアルを、それぞれ参照)。

    装置が受取り側データ項目と同じサイズのデータを移送できる場合には、移送されたデータが受取り側データ項目に収められる。そうでない場合は、下記のように扱われる。

    1. 受取り側データ項目(または現在まだ移送されたデータによって占められていない部分)のサイズが移送されるデータのサイズを超える場合は、移送されたデータが受取り側データ項目(またはまだ空いている部分)中に左詰に収められ、さらにデータが要求される。

    2. 移送されたデータのサイズが受取り側データ項目(または現在まだ移送されたデータによって占められていない部分)のサイズを超える場合は、移送されたデータの左端から受取り側データ項目(または残りの部分)に収まる分だけが受け取られる。移送されたデータのうちの受取り側データ項目に収まらない残りの部分は無視される。

    FROMオプションを指定しなかった場合は、FROM CONSOLEと指定したのに等しい。

  2. COMMAND-LINE、またはそれに関連する呼び名を指定すると、受取り側データ項目はシステムのコマンド行バッファによって上書きされる。

  3. 機能名ARGUMENT-NUMBERに関連する呼び名を使用すると、一意名はコマンド行中に含まれる引数を受け取る。(これには、すべての引数が含まれる。つまり、プログラム名の前にある引数、プログラム名自体、プログラム名の後ろに続く引数が含まれる。したがって、プログラム呼出しの種類によっては移植性を期待できない)。

  4. 呼び名がARGUMENT-NUMBERに関連する時、一意名は現在のコマンド行の引数になる。どのコマンド行の引数を現在のものとするかの決定は、下記の通りである。

    1. はじめに、最初のコマンド行の引数を現在のものとする。

    2. ARGUMENT-NUMBERに関連する呼び名をもつDISPLAYが、現在のコマンド行の引数の数をDISPLAY文で指定された一意名または定数の値に設定する。

    3. ARGUMENT-NUMBERに関連する呼び名をもつDISPLAYが最後に実行されてから、ARGUMENT-VALUEに関連する呼び名をもつACCEPTが実行された時は、現在のコマンド行の引数の数はこのACCEPT文が使用される前に増やされる。

    現在の引数の数が0に設定されていると、これは、実行単位の主プログラムのプログラム名が返されることを意味する。しかし、プログラムの呼出しにいろいろな変形があるため、主プログラム名の代わりにユーティリティプログラムまたは呼ぶプログラムの名前が返されることがある。

    ACCEPT文の実行時に現在の引数の数が

    99より大きいか、0より小さいか、

    コマンド行上の実際の引数の数よりも大きい場合、無条件文-1が指定されていると、これが実行される。

  5. 機能名ENVIRONMENTAL-VALUEに関連する呼び名を使用した場合、下記のようになる。

    1. ENVIRONMENT-NAMEに関連する呼び名をもつDISPLAYが前に実行されていると、指定された環境変数の値が一意名に入れられる。

    2. ENVIRONMENT-NAMEに関連する呼び名をもつDISPLAYが前に実行されていないか、または指定された環境変数が存在しないと、ON EXCEPTION指定に指定されている無条件文が実行される。この場合、一意名の値はどうなるかわからない。

  6. 他のプログラムによって呼ばれたプログラムの中で、コマンド行の引数および引数の数を検索する効果は、それらを実行単位中の最初のプログラムによって検索する場合と同じである。
形式 2
  1. ACCEPT文は、要求された情報を一意名によって指定されたデータ項目に取り込む。その際、MOVE文の規則が適用される。DATE、DAY、

    DAY-OF-WEEK、

    およびTIMEは概念的なデータであり、COBOLプログラム中には記述されていない。

  2. 指定 YYYYMMDDを含まないDATEは、(1世紀の中の)年、(1年の中の)月、(1ヶ月の中の)日のデータ要素から構成される。指定 YYYYMMDDを含まないDATEは、COBOLプログラムからアクセスされると、用途がDISPLAYで、6桁の符号なしの基本整数データ項目として記述されたものとして動作する。このデータ項目の文字位置(左から右に)は以下の通り。

    文字位置 内容
    1-2 グレゴリオ歴(西暦)の年号の下2桁の数字
    3-4 1年の範囲内で、月を表す01から12までの2桁の数字。
    5-6 1ヶ月の範囲内で、日を表す01から31までの2桁の数字。

  3. 指定 YYYYMMDDを含むDATEは、グレゴリオ歴の年号、(1年の中の)月、(1月の中の)日のデータ要素から構成される。指定 YYYYMMDDを含むDATEは、COBOLプログラムからアクセスされると、用途がDISPLAYで、8桁の符号なしの基本整数データ項目として記述されたものとして動作する。このデータ項目の文字位置(左から右に)は以下の通り。

    文字位置 内容
    1-4 グレゴリオ歴の年号の4桁の数字
    5-6 1年の範囲内で、月を表す01から12までの2桁の数字。
    7-8 1ヶ月の範囲内で、日を表す01から31までの2桁の数字。

  4. 指定 YYYYDDDを含まないDAYは、(1世紀の中の)年、(1年の中の)日のデータ要素から構成される。指定 YYYYDDDを含まないDAYは、COBOLプログラムからアクセスされると、用途がDISPLAYで、5桁の符号なしの基本整数データ項目として記述されたものとして動作する。このデータ項目の文字位置(左から右に)は以下の通り。

    文字位置 内容
    1-2 グレゴリオ歴の年号の下2桁の数字
    3-5 1年の範囲内で、日を表す01から366までの3桁の数字。

  5. 指定 YYYYDDDを含むDAYは、グレゴリオ歴の年号および (1年の中の)日のデータ要素から構成される。指定 YYYYDDDを含むDAYは、COBOLプログラムからアクセスされると、用途がDISPLAYで、7桁の符号なしの基本整数データ項目として記述されたものとして動作する。このデータ項目の文字位置(左から右に)は以下の通り。

    文字位置 内容
    1-4 グレゴリオ歴の年号の4桁の数字
    5-7 1年の範囲内で、日を表す01から366までの3桁の数字。

  6. DAY-OF-WEEKは、曜日を表わす単一のデータ要素から構成される。COBOLプログラムからDAY-OF-WEEKを呼び出すと、そのプログラムの中で、1桁の符号の付かない整数の基本データ項目として記述してあるように取り扱うことができる。DAY-OF-WEEKは1から7までの値をとり、それぞれ月曜日から日曜日を表わす。

  7. TIMEは、時間、分、秒、百分の1秒の4つの要素から構成される。この時間は夜中の0時から24時間制で測られる。たとえば、午後2時41分は14410000と表わされる。COBOLプログラムからTIMEを呼び出すと、そのプログラムの中で、符号の付かない8桁の整数の基本データ項目として記述してあるように取り扱うことができる。TIMEの最小値は00000000であり、最大値は23595999である。 ハードウエアの時間測定の精度が上記よりも低い場合は、得られた値は最も近い近似値に変換される。

形式 3
  1. ACCEPT FROM LINE NUMBER句から返される値は、つねに数字である。この値は、使用しているシステムによって異なる。

  2. FROM USER NAMEオプションは、UNIXシステム上のユーザー識別番号を返す。このような概念のないシステム上では、このオプションは空白を返す。

  3. FROM ESCAPE KEYオプションは、終了キーによって発生させられた2文字のコードを返す。

  4. EXCEPTION STATUS項目には、3桁のコードが入っている。このコードは、CALL文を実行中に発生した、例外条件の種類を識別する。

    EXCEPTION STATUSを調べる場合は、CALL文の直後で行うのがよい。 CALLとACCEPT FROM EXCEPTION STATUSとの間には、何もあってはならない。たとえば、その間にファイル入出力をはさむと、EXCEPTION STATUSが変えられてしまうので、その内容を調べる意味がなくなってしまう。 .

形式 4
  1. ACCEPT文のこの書き方は、画面節中に定義されている画面項目を受け取って、拡張画面操作機能によって全面的に処理できるようにする。

形式 4 および 5
  1. ACCEPT文の実行順序は、つねに以下のとおりである。

    1. AT指定

    2. BLANK指定

    3. コンパイラ指令ACCEPTREFRESHまたはXOPENのどちらかが指定されていると、USING指定で現在の画面項目の内容が表示される。

    4. BELL指定

    5. ACCEPT操作

  2. AT指定は、ACCEPT処理を開始する画面上の絶対番地を指定する。

  3. 整数-3または整数-4の長さが4桁ならば、上2桁は行を表わし、下2桁はカラムを表わす。整数-3の長さが6桁ならば、上3桁は行を表わし、下3桁はカラムを表わす。

  4. 行番号とカラム番号の組合わせの中には、特殊な意味をもつものがある。それらは下記のとおり。

    1. カラムの値が1行のカラム数よりも大きいと、その値から1行のカラム数が差し引かれ、行数に1が加えられる。カラムの値が1行のカラム数の範囲内におさまるまで、この処理が繰り返される。

    2. 行の値が画面の範囲から外れると、画面が1行上にスクロールされる。この効果は、画面の下端の行を指定したのと同じである。

    3. 与えられた行番号とカラム番号がともにゼロであると、形式 4または5の前のACCEPT処理が終わった位置の直後から、ACCEPTが開始される。各行のカラム1は、前の行の最後のカラムに続くものとみなされる。

    4. 指定された行番号がゼロであるがカラム番号はゼロでないと、形式 4または5の前のACCEPT処理が終わった位置の次の行の指定されたカラムから、ACCEPTが開始される。

    5. 指定されたカラム番号がゼロであるが行番号はゼロでないと、形式 4または5の前のACCEPT処理が終わった位置の次のカラムの指定された行から、ACCEPTが開始される。

  5. この ACCEPT文を実行する前に、このACCEPT文に指定されたのと同じ画面名または一意名-1が指定されているDISPLAY文が実行されていなければならない。それ以降に何らかのACCEPT文またはDISPLAY文が実行されていてはならない。

  6. ON EXCEPTION指定を書くと、ACCEPT処理が正常終了しなかった場合に、無条件文-1が実行される。NOT ON EXCEPTION指定を書くと、ACCEPT処理が正常終了した場合に、無条件文-2が実行される。(終了の種類については、環境部の章の特殊名段落節のCRT STATUS句の規則を参照。)

形式 5

  1. AT指定を指定しないと、ACCEPT処理は行1、カラム1から開始される。

  2. MODE IS BLOCK指定を指定しないと、一意名が集団項目であれば、それに属する基本項目で名前がFILLERでないものが受け取られる。受け取られる項目は、データ部内でそれらが記述されている順に画面に配置され、集団内のFILLERの長さによって区切られる。この用途では、ある行の最初の位置は、その前の行の最後の位置の直後に続くものとみなされる。項目は、同じ順序で受け取られる。

    CURSOR IS句(環境部の章の特殊名段落節のCURSOR IS句の規則を参照)内で別途指定しないかぎり、カーソルは最初の項目の始点に位置付けられる。各項目へのACCEPT処理が終わるにつれて、カーソルは次の項目の始点に移動される。

  3. 一意名-1が集団項目であり、その下位に可変反復データ項目がある場合、ACCEPT文はMODE IS BLOCK句が指定されているかのように動作する。

  4. 一意名-1が集団項目であり、その下位に可変反復データ項目がある場合、ACCEPT文はMODE IS BLOCK句が指定されているかのように動作する。

  5. MODE IS BLOCK指定は、一意名を基本項目として扱うように指定する。こうすると、一意名が集団項目であっても、1つの項目として表示される。

  6. PROMPTオプションを指定した効果は、データ部 - 画面節の章の PROMPT(プロンプト)句節で解説している。

  7. PROMPTオプションを指定しないと、空の文字位置を示すための文字は表示されない。CHARACTERオプションを抜かしてPROMPTを指定すると、構成時にプロンプト用に設定されている文字が文字位置の表示に用いられる。

  8. WITH指定を用いると、ある種のオプションをACCEPT処理の実行時に指定できる。(これらのオプションの説明については、データ部 - 画面節の章を参照。)

    画面記述句に指定できるオプションの他に、WITH指定にはいくつかのオプションが加えられている。SPACE-FILL, ZERO-FILL, LEFT-JUSTIFY, RIGHT-JUSTIFY, TRAILING-SIGN, UPDATEである。ZERO-FILLはこのリストにも画面記述句にも現れている。これは、ZERO-FILLには2つの用法があるからである。2番目の用法については、この章で後述する。

    自由方式で、数字および数字編集の画面項目にデータを入力できるようにする構成オプションがある。COBOLでは、非編集数字データ項目は、内部形式でデータを保持することを目的としたものである。しかし、この形式を用いると、そのようなデータ項目を画面上に表示できる(詳細は、ユーザーインターフェイスに関するCOBOLシステムのマニュアルを参照のこと)。自由方式がとられているときは、データは自動的に下記のように編集されて表示される。

    SPACE-FILL、ZERO-FILL、LEFT-JUSTIFY、RIGHT-JUSTIFY、およびTRAILING-SIGNオプションを使用すると、上記の形式を補正できる。

  9. SPACE-FILLオプションは、自由方式の非編集数字データ項目の、すべての整数文字位置の先行ゼロを抑制して、画面に表示するようにする。このオプションは、自由方式の非編集数字データ項目に対してだけ働く。この機能は、データ項目中の初期データが表示されるときに効力を発揮し、そのデータ項目へのACCEPT処理が終了するときにも再び効力を発揮する。左端に付された符号があれば、右端に表示される。

  10. ZERO-FILLオプションは、自由方式の非編集数字データ項目をゼロ抑制しないで、画面に表示するようにする。この機能は、データ項目中の初期データが表示されるときに効力を発揮し、そのデータ項目へのACCEPT操作が終了するときにも再び効力を発揮する。(英字または英数字のデータ項目にこのオプションを適用したときの効果については、データ部 - 画面節の章のZERO-FILL(ゼロ補填)句節を参照)。

  11. LEFT-JUSTIFYオプションは、注記にすぎない。

  12. RIGHT-JUSTIFYオプションは、入力されたデータを項目の右に桁寄せして、画面に表示するようにする。このオプションは、自由方式の非編集数字データ項目に対してだけ働く。この機能は、データ項目中の初期データ(表示された現在の内容)が表示されるときに効力を発揮し、そのデータ項目へのACCEPT処理が終了するときにも再び効力を発揮する。

  13. TRAILING-SIGNオプションは、演算符号を項目の右端の文字位置に表示するようにする。この機能は、データ項目中の初期データが表示されるときに効力を発揮し、そのデータ項目へのACCEPT処理が終了するときにも再び効力を発揮する。このオプションは、自由方式の非編集数字データ項目に対してだけ働く。

  14. UPDATEオプションは、データ項目の現在の内容(初期データ)を表示してから、新しいデータの入力を促すようにする。新しいデータが何も入力されないと、初期データが入力されたかのように扱われる。UPDATEオプションを指定しないと、初期データが表示されるか否かは構成オプションによる(構成オプションの詳細については、ユーザーインターフェイスに関するCOBOLシステムのマニュアルを参照のこと)。

  15. UPPERオプションは、入力された文字を強制的に大文字にする。

  16. LOWERオプションは、入力された文字を強制的に小文字にする。

  17. 一意名-1にREDEFINESがかかっている場合、再定義データ領域の最初の記述が使用され、以降の記述は無視される。OCCURSまたは入れ子になったOCCURSが指定されている場合、反復されるデータ項目はその反復回数だけ展開される。したがって、1つの定義が多数の項目にわたって繰り返されることになる。

  18. 一意名-8または整数-7の値が負の場合、時間切れによる"例外条件"を発生させないという要求を表わす。この場合、キーが打鍵されるまでの時間またはキーの打鍵間隔がどんなに長くなっても、例外条件は発生しない。

  19. 一意名-8または整数-7の値がゼロの場合、入力待ちの間は時間切れを起こさせないことを意味する。しかし、入力待ちでない(ACCEPTが処理された)ときには、直ちに時間切れとする。

  20. ON EXCEPTION指定を書くと、TIME-OUT指定が指定してあって時間切れが発生したときに実行される。NOT ON EXCEPTION指定を書くと、TIME-OUT指定が指定してあるが時間切れ(または他の例外条件)が発生しなかったときに実行される。

  21. 時間切れ例外条件が発生すると、ACCEPTの結果の項目は下記のようになる。

    1. 項目の一部が既に変更されていると、その時点の内容がそのまま保持される。

    2. "FULL"や"REQUIRED" をはじめとする、通常は部分的な入力を許さない属性をもつ項目でも、時間切れ例外条件が発生したときは、その要件を満たすことを求められない。

    3. 上記の規則は、キーを打つたびに時間切れ測定用の時計が再設定されるか否かにかかわらず、適用される。

  22. 実行時に百分の2,147,483,647秒よりも大きな正の時間切れ間隔が検出されると、その値は百分の2,147,483,647秒(約8カ月)に設定し直される。

  23. TIME-OUTの値は、ACCEPT文の実行が開始されてから時間切れ例外条件が発生するまでの時間を、秒(または十分の一秒)単位で指定する。新しいADISCF構成オプションは、キーボード上で何か操作が行われるたびに、時間切れ測定用の時計を"再設定"するか否かを制御する。ACCEPT文によって時間切れ測定用の時計を再設定したりしなかったりする応用では、設定状態の変更を必要とするACCEPT文の前または後ろで、ADIS実行時インターフェイスを個別に呼ぶことができる。たとえば、時間切れ測定用の時計を再設定しないようにADISが設定されているときに、次の文を実行したとする。
     ACCEPT INPUT-FIELD TIME-OUT AFTER +10

    すると、ACCEPTの開始から10秒経過後に、時間切れ条件が発生する。この場合、ACCEPTの開始5秒後に何か文字を打ったとしても、時間切れ条件の発生を防ぐことにはならない。

    また、時間切れ測定用の時計を再設定するようにADISが設定されているとする。すると、上記の同じ文を実行した場合、何か文字を打つたびにTIMEOUT"時計"はゼロに設定し直される。

  24. ON EXCEPTION指定を指定しないと、時間切れ条件が発生したときに、CRT状態キー(指定してあれば)が更新され、処理は次の論理的な指定まで続行される。このとき、ACCEPTの受取り側項目の内容は上に説明したとおりである(このことは、NOT ON EXCEPTION指定を指定した場合にも、当てはまる)。

  25. (NOT)ON EXCEPTION指定に関する説明はすべて、(NOT)ON ESCAPE指定にも当てはまる。

形式 1 および 5
  1. 英数字データ項目に関しては、ACCEPT文の実行中に画面から受け取られたフィールドのサイズは、宛先のフィールドのサイズとまったく同じである。したがって、フィールドの右側の部分にデータを表示したい場合には、その位置にカーソルを合わせてデータを入力しなければならない。

12.2 ADD(加算)文

ADD(加算)文は、2つ以上の作用対象の和をとって、その結果を格納する。

一般形式

形式 1

形式 2

形式 3

構文規則

すべての形式
  1. 形式 1 および 2において、各一意名は必ず基本数字項目を参照すること。ただし、形式 2においては、語GIVINGの後ろに続く各一意名は、基本数字項目の他に基本数字編集項目を参照してもよい。形式 3においては、各一意名は、必ず集団項目を参照すること。

  2. 各定数は、数字定数とする。

  3. 作用対象の合成は、以下の規則に従う(手続き部の章の算術文節を参照)。

    1. 形式 1では、作用対象の合成に、指定したすべての作用対象が用いられる。

    2. 形式 2では、作用対象の合成には、語GIVINGの後ろに続くデータ項目を除く、指定したすべての作用対象が用いられる。

    3. 形式 3では、作用対象の合成は、対応するデータ項目の組ごとに別々に行われる。

  4. 形式 3では、CORRはCORRESPONDINGの省略形である。

  5. 数字データ項目または定数を指定できるところではどこも、浮動小数点数定数および浮動小数点数データ項目を使用できる。

一般規則

すべての形式
  1. 手続き部の章のROUNDED指定ON SIZE ERROR指定CORRESPONDING指定算術文, 作用対象の重なり、および算術文における複数個の結果の各節、COBOL言語の概念の章の明示範囲符と暗黙範囲符節、および翻訳集団の概念の章の範囲明示文節を参照。

  2. 形式 1では、語TOの前にある作用対象の値の和がとられ、その値が一意名-2の現在の値に加えられて、その結果が直ちに一意名-2に入れられる。語TOの後ろに続く各作用対象に対して、この処理が左から右方向に繰り返される。

  3. 形式 2では、語GIVINGの前にある作用対象の値の和がとられ、その値が結果の一意名である一意名-3によって参照される各データ項目の新しい値として格納される。

  4. 形式 3では、一意名-1に属するデータ項目が、一意名-2に属する対応するデータ項目に加算されて格納される。

  5. 計算過程で意味のある桁が失われることのないように、COBOLコンパイラによって十分な作業領域が確保される。

12.3 ALTER(変更)文

ALTER(変更)文は、あらかじめ定められている処理の順序を変更する。

ALTER 文は、ANSI'85 標準では廃要素に分類されており、ANSI 標準の次回の全面改訂の際に、削除される予定である。

この構文は、Micro Focus COBOL に組み込まれているすべての方言で全面的に使用できる。FLAGSTD 指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、この動詞は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内では、この文を使用するべきではない。

一般形式

構文規則

  1. 各手続き名-1、手続き名-3などは、DEPENDING指定が含まれない単一のGO TO文からなる段落の名前である。

  2. 各手続き名-2、手続き名-4などは、手続き部内の段落または節の名前である。

一般規則

  1. ALTER文を実行すると、手続き名-1や手続き名-3などに指定された段落中のGO TO文がそれ以降に実行されたとき、それぞれ手続き名-2や手続き名-4などに制御が移されるようになる。独立の区分内の変更されたGO TO文は、状況によっては、初期状態に戻されることがある。(詳細については、言語リファレンス - 追加トピック中の区分化独立区分節を参照。)

  2. 区分番号が50以上の節内のGO TO 文を、区分番号の異なる節内のALTER文によって参照してはならない。

    ALTER文のそれ以外の用法は、すべて有効である。たとえば、手続き名-1や手続き名-3などがオーバレイ可能な固定区分の中にあっても構わない。

12.4 CALL(呼出し)文

CALL(呼出し)文は、実行単位中で他の実行用プログラムに制御を移させる。

対象とする実行用プログラムの手続きを、番地を指定することによって、間接的に呼ぶことができる。データとデータへのポインタと手続きへのポインタを、パラメータとして呼ばれるプログラムに引き渡したり、呼ばれるプログラムから返してもらったりできる。パラメータ受渡し方式を制御することによって、COBOL以外の言語で書かれたプログラム手続きを呼ぶことができる。

呼ぶばれたCOBOLプログラムは、再帰属性を持っていれば、再帰的に自分を呼ぶことができる。

  1. CALL文の手続きポインタの使用例は、言語リファレンス - 追加トピック中のの章の手続きポインタの呼出しと設定節に掲載されている。

一般形式

形式 1

形式 2 (プログラムプロトタイプ)

指令

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。

構文規則

星印(*)の付いている構文規則はCALL文およびCHAIN文に共通である。それらの規則を「CALL文」または「CHAIN文」に適用するさいには、「CALL文」または「CHAIN文」を読むべきである。

すべての形式
  1. * 一意名-1は英数字データ項目、

    または各国語型データ項目

    として定義しなければならない。

  2. * 定数-1、

    定数-2、

    および定数-3

    は英数字定数、

    または各国語型定数

    でなければならず、表意定数であってはならない。

  3. * 一意名-2および一意名-4はファイル節、作業場所節、

    局所記憶節、

    通信節、連絡節のいずれかにデータ項目として定義されていなければならず、レベル01またはレベル77のデータ項目、

    または基本項目

    または任意の集団項目

    でなければならない。

    一意名-2は、ファクトリオブジェクトまたはインスタンスオブジェクトの作業場所節またはファイル節で定義されてはならない。

  4. * 一意名-5、一意名-6、一意名-7、一意名-8はいずれも、関数一意名であってはならない。

  5. * GIVING句およびRETURNING句は、どちらを使用してもよい。

  6. 一意名-9 は、連絡節中の01レベルまたは77レベルのデータ項目とする。

  7. *ANY LENGTH 句を使用して、一意名-2、一意名-4、一意名-6、および一意名-8を記述してはならない。

形式 1
  1. 呼び名が必要なのは、呼び出す対象の実行用プログラムで用いられている呼出し方式と、COBOLシステムの省略時の呼出し方式とが異なる場合だけである。通常は、COBOLの省略時の呼出し方式は、COBOL以外の言語の主要な処理系のランタイム環境で使用されている方式と整合性がある。

    呼び名は特殊名段落中に定義しなければならない。その方法の詳細については、環境部の章の特殊名段落節を参照。また、ランタイム環境においてサポートされている呼出し方式の詳細については、COBOLのシステムのマニュアルを参照。

  2. * 整数-1は符合付きであってよい。

  3. * 一意名-3は連絡節、

    局所記憶節または作業場所節

    にデータ項目として定義されていなければならず、

    レベル01またはレベル77のデータ項目、

    またはその他のレベルのデータ項目

    でなければならない。

  4. CALL文に定数-1を指定し(ただし、CALL文に一意名-1または手続きポインタ-1を指定した場合を除く)、かつ現在の翻訳単位中に呼出しプロトタイプ(プログラム名段落中にEXTERNAL句があるプログラム)が含まれていてその名前が定数-1に合致する場合、構文チェックの間に下記の項目の妥当性が検査される。

  5. *一意名-2は、クラスオブジェクトまたはポインタのデータ項目であってはならない。

形式 2
  1. NESTED指定は、プログラム定義以外で使用してはならない。

  2. NESTED指定を使用した場合は、定数-1を指定しなければならない。定数-1は、COBOL言語の概念の章のプログラム名に関する表記法節で指定されたように、共通プログラムのプログラム名段落中で指定されたプログラム名と同じでなければならない。または、呼ぶプログラムの直下に含まれるプログラムのプログラム名段落中で指定されたプログラム名と同じでなければならない。

  3. プログラムプロトタイプ名-1は、リポジトリ段落中のプログラム指定子で指定しなければならない。

  4. 引数についてBY CONTENT指定またはBY REFERENCE指定を使用した場合は、手続き部見出し中の対応する仮パラメータに対して、BY REFERENCE を指定しなければならない。

  5. 一意名-4が受取り側作用対象として許可された一意名であるときに、BY CONTENTを省略してはならない。ただし、一意名-4がオブジェクトプロパティである場合は、 BY CONTENT を省略してもよい。

  6. 引数についてBY VALUE指定を使用した場合は、手続き部見出し中の対応する仮パラメータに対して、BY VALUE指定を使用しなければならない。

  7. 一意名-6の字類は、数字、オブジェクト、またはポインタでなければならない。

  8. 定数-4は数字定数でなければならない。

  9. OMITTED指定を使用した場合は、手続き部見出し中の対応する仮パラメータに対して、OPTIONAL指定を使用しなければならない。

  10. 適合規則は、手続き部の章のパラメータと戻り項目の適合節で指定されたものが適用される。

一般規則

星印(*)の付いている構文規則はCALL文およびCHAIN文に共通である。それらの規則を「CALL文」または「CHAIN文」に適用するさいには、「CALL文」または「CHAIN文」を読むべきである。

すべての形式
  1. 定数-1、または一意名-1によって参照されるデータ項目の内容は呼ばれるプログラム

    または呼ばれる手続きの名前である。

    CALL文を含むプログラムは呼ぶプログラムである。呼ばれるプログラムがCOBOLプログラムである場合、定数-1、または一意名-1によって参照されるデータ項目の内容はプログラム名であって、呼ばれるプログラムのプログラム名段落に記述されているものでなければならない(見出し部の章のプログラム名段落節を参照。特に大文字と小文字の区別について)。

    あるいは、定数-1、または一意名-1によって参照されるデータ項目の内容は入口名であって、呼ばれるプログラムのENTRY文中に記述されているものでなければならない。しかも、呼ばれるプログラムはすでに呼び出されており、その後で取り消されていてはならない。別の方法として、呼ばれるプログラムの名前はそのプログラムの実行プログラム用のコードが収められているファイルを指す名前であってもよい。2つのCALL文の間でまたはCALL文とCANCEL文の間で同じファイルを指す別の名前を指定した場合にどのような結果になるかは、オペレーティング・システムによって異なる。呼ばれたプログラム、プログラム・ファイル、あるいはライブラリ・ファイル中に保持されているプログラムと指定された名前の照合方法の詳細については、インターフェイスに関するCOBOLシステムのマニュアルを参照。

    呼ばれるプログラムがCOBOLプログラムではない場合のプログラム名または手続き名の構成に関する規則が、インターフェイスに関するCOBOLシステムのマニュアルに記載されている。

  2. 手続きポインタ-1によって参照されるデータ項目の内容は呼ばれるプログラムの番地であり、そのプログラムはすでにメモリーにロードされていなければならない。呼ばれるプログラムがCOBOLプログラムである場合は、呼ばれるプログラムの番地が当初にENTRY指定を伴うSET文を用いて導出されており、その後でそのプログラムに対してCANCEL文が実行されていてはならない。呼ばれるプログラムがCOBOLプログラムではない場合は、呼ばれるプログラムの番地が当初にCOBOL以外のプログラムまたは手続きへのCALLを通じて導出されていなければならない。番地がNULLであるプログラムをCALLしようとすると、エラーとなる。

  3. CALL文が実行されたときに、その対象のプログラムが実行可能な状態になると、そのプログラムに制御が移される。呼ばれたプログラムから制御が戻ると、ON OVERFLOW指定や

    ON EXCEPTION指定

    は、指定されていても無視され、制御はCALL文の末尾に移される。

    あるいは、NOT ON EXCEPTION指令が指定されていると、制御は無条件文-2に移される。制御が無条件文-2に移されると、その無条件文-2の中に指定されている各文に関する規則に従って、プログラムの実行が続けられる。制御の明示移行を引き起こす手続き分岐文または条件文が実行されると、その文に関する手続きに従って制御が移される。これ以外の場合は、無条件文-2の実行が終了すると制御はCALL文の末尾に移される。

  4. CALL文が実行されたときに、対象のプログラムがすでにメモリーにロードされていると、そのプログラムは実行可能な状態にされる。そのプログラムがまだメモリーにロードされていないと、そのプログラムを動的にロードする試みがなされる(インターフェイスに関するCOBOLシステム・ドキュメンテーションを参照)。対象のプログラムの所在を動的に把握でき、メモリーに連続した十分な空き領域があると、そのプログラムは動的にロードされて実行可能な状態にされる。

    CALL文に指定されたプログラムがメモリーにロードされていないか、動的なロードに利用できないか、あるいは動的なロードに利用できるがメモリーに十分な空き領域がない場合には、その時点ではそのプログラムを実行可能にすることはできない。その場合、下記の2つのうちのどちらかの措置が取られる。

    1. CALL文の中にON OVERFLOW

      またはON EXCEPTION

      指定がある場合には、無条件文-1に制御が移される。それから、無条件文-1に指定されている各文の規則に応じて、処理が続行される。制御を明示的に移す手続き分岐または条件文が実行されると、その文の規則に応じて制御が移される。それ以外の場合には、無条件文-1の実行が完了すると、CALL文の最後に制御が移され、

      NOT ON EXCEPTION指定はあっても無視される。

    2. ON OVERFLOW指定またはON EXCEPTION指定がない場合、NOT ON EXCEPTION指定はあっても無視される。

      実行単位中の開かれているファイルに関して、明示的なCLOSE文なしにプログラムの実行が停止され、ランタイム・エラーが表示される。

  5. 実行単位内の2つ以上のプログラムに、同じプログラム名をもたせることができる。呼ぶプログラム内でこのようなプログラム名を参照したとき、どちらのプログラムを指すかは、プログラム名の範囲の適用規則に従う。COBOL言語の概念の章のプログラム名の規則節を参照。たとえば、CALL文の中に指定されたプログラム名と同じ名前のプログラムが、実行単位中に2つあるとする。

    1. それらの2つのプログラムのうちの1つは、そのCALL文が含まれる独立のプログラムに直接的または間接的に含まれるか、またはそのCALL文が含まれるプログラム自体が、直接的または間接的に含まれる独立のプログラムに直接的または間接的に含まれなければならない。かつ、

    2. もう1つのプログラムは、別の独立したプログラムでなければならない。

    この例で、使用される仕組みは、下記のとおり。

    1. CALL文中に指定された名前をもつ2つのプログラムの一方が、そのCALL文が含まれるプログラム中に直接的に含まれるならば、そのプログラムが呼ばれる。

    2. CALL文中に指定された名前をもつ2つのプログラムの一方が共通属性をもち、そのCALL文が含まれるプログラムが直接的または間接的に含まれる独立のプログラムに直接的に含まれるならば、その共通プログラムが呼ばれる。ただし、呼ぶプログラムがその共通プログラムに含まれる場合は例外である。

    3. それ以外の場合は、別のプログラムが呼ばれる。

  6. 呼ばれたプログラムがCOBOLプログラムで、初期属性をもたない場合、そのプログラムおよびその中に直接的または間接的に含まれる各プログラムは、実行単位の中で最初に呼ばれたとき、および呼ばれたプログラムが取り消された後ではじめて呼ばれたときに、初期状態に置かれる。

    呼ばれたプログラムがCOBOLプログラムでない場合、実行単位の中で最初に呼ばれたときにだけ初期状態に置かれる。このようなプログラムの取り消しは効果がない。

    それ以外の場合に呼ばれたときは、呼ばれるプログラムおよびその中に直接的または間接的に含まれる各プログラムの状態は、前回に呼ばれたときのままである。COBOL以外の言語の処理系の中には、意味合いが違っているものがある。可能な場合には、インターフェイスに関するCOBOLシステムのマニュアルに、その詳細が記載されている。

  7. 呼ばれたプログラムが初期属性をもつ場合、そのプログラムおよびその中に直接的または間接的に含まれる各プログラムは、実行単位の中で呼ばれるたびに初期状態に置かれる。呼ばれたプログラムが初期状態にあるか使用され終わった状態にあるかは、DYNAMコンパイラ指令の設定に左右される。

  8. 呼ばれるプログラムの内部ファイル結合子に関連するファイルは、プログラムが初期状態にあるときは、まだオープンされていない。前述のプログラムの初期状態の節を参照。それ以外の場合に呼ばれたときは、それらのすべてのファイルの状態と位置付けは、前回に呼ばれたときのままである。

  9. プログラムを呼ぶ過程または呼んだプログラムから戻る過程で、外部ファイル結合子に関連するファイルの状態と位置付けが変えられることはない。

  10. 呼ばれるプログラムがCOBOLプログラムである場合、その手続き部の見出し

    またはENTRY文

    の中にUSING指定がある場合にのみ、CALL文にUSING指定が含められる。その場合、各USING指定内の作用対象の数は同じでなければならない。

    作用対象の数が同じである必要はない。

  11. 呼ばれるプログラムがCOBOLプログラムではない場合、そのプログラムに1つ以上のパラメータが宣言されている場合にのみ、CALL文にUSING指定が含められる。その場合、USING指定内の作用対象の数は呼ばれるプログラム中のパラメータの数と同じでなければならない(COBOL以外の言語の処理系の中には、作用対象の数が同じでなくともよいものがある)。COBOL言語では、データ項目の番地の桁寄せに制約はない。他方、COBOL以外の言語では、通常は番地について前提があり、桁寄せされていないデータ項目が参照されると何らかのエラーを起こす。桁寄せは下記の措置のうちのいくつかを用いて実現される。

  12. * CALL文

    またはCHAIN文

    のUSING指定、および呼ばれるプログラムの手続き部の見出し

    または呼ばれるプログラムがCOBOLでない場合はENTRY文またはパラメータ・リスト

    の中の対応するUSNIG指定に中に作用対象が置かれている順序によって、

    呼ぶプログラムと呼ばれるプログラムで使用されているデータ名の対応関係が決まる。この対応は位置で決まるのであって、名前が等しいことによるのではない。CALL文

    またはCHAIN文

    USING指定の中の最初の作用対象が呼ばれるプログラムのUSNIG指定またはパラメータ・リストの最初の作用対象に対応し、それらの2番目同士が対応する、などとなる。

    両方の作用対象の数が異なるために、完全には対応がとれないことがある。その場合、対応する相手がなくて残っている作用対象がCALL文またはCHAIN文の側にある場合、それらは無視される。残っている作用対象が手続き部の見出しまたはENTRY文またはパラメータ・リストの側にある場合、それらは呼ばれるプログラムの中で参照されてはならない。位置による対応は、呼び名によって暗黙的に示される呼出し方式によって変わることがある。

    指標名の場合は、そのような対応関係は確立されない。呼ぶプログラムと呼ばれるプログラムの指標名は常に別々の指標を参照する。

  13. *CALL文のUSING指定の中で参照されるパラメータの値は、そのCALL文が実行された時点で、呼ぶプログラムにとって利用可能になる。

  14. * パラメータにBY REFERENCE 一意名-2 指定を

    明示的または

    暗黙的に指定すると、実行用プログラムは、呼ばれるプログラム中の対応するデータ項目が、呼ぶプログラム中のデータ項目と同じ記憶領域を占めるかのように動作する。 呼ばれるプログラム中のデータ項目のデータ記述には、呼ぶプログラム中の対応するデータ項目と同じ文字数を指定する。

    BY REFERENCE ADDRESS OF指定を明示的または暗黙的に指定すると、プログラムの動作は次のようになる。具体的には、USAGE POINTERを用いて追加のデータ項目が指定され、「SET データ項目 TO ADDRESS OF 一意名-3」文によって取得された値がBY REFERENCEによってそのデータ項目に渡されたかのように動作する。

    一意名-3が連絡節にあってそのレベル番号か01または77以外であるか、または作業場所節にある場合、そのデータ項目がBY CONTENTによって渡され、一意名-3の番地を呼ばれるサブプログラムによっては変更できないことに等しい。

    「BY REFERENCE 一意名-2」を明示的または暗黙的に指定すると、オブジェクト・プログラムは定数-2を定数-3のために記述されたものとして処理する。

  15. * BY CONTENT指定を明示的または暗黙的に指定すると、CALL文中のUSING句内で参照されたパラメータの値は、呼ばれたプログラム側では変更できない。しかし、呼ばれたプログラムは、その手続き部の見出しの中で、対応するデータ名によって参照しているデータ項目の値を変更できる。CALL文のBY CONTENT指定中の各パラメータに関するデータ記述は、手続き部の見出しの中のUSING句の中の対応すパラメータに関するデータ記述と同じにする。つまり、変換も拡張も切捨てもあってはならない。

    パラメータに関してBY CONTENT指定を明示的または暗黙的に指定すると、オブジェクト・プログラムの動作は次のようになる。具体的には、追加のデータ項目が宣言され、そのデータ項目がBY REFERENCE指定の中でパラメータとして使用されるかのように動作する。一意名-4を指定すると、追加データ項目の暗黙的なデータ記述とその内容の両方が、一意名-4のものと同じとなる。一意名-3を指定すると、追加データ項目の暗黙的なデータ記述は、サイズと内容が一意名-3と同じ英数字データ項目に等しくなる。「LENGTH OF 一意名-5」を指定すると、追加データ項目のデータ記述は、形式がPIC S9 (n) USAGE COMPとなる。ここで、nの値は9以上である。このデータ記述により、使用しているCOBOLシステムで処理可能なデータ項目の最大サイズが定義される。追加データ項目の内容は、一意名-5に割り当てられた記憶領域のバイト数に設定される。

  16. *BY VALUE指定を明示的または暗黙的に指定すると、CALL文のUSING指定の中で参照されているこのパラメータの値を、呼ばれるプログラムは変更できない。それにもかかわらず、呼ばれるプログラムはその手続き部の見出しの中の対応するデータ名によって参照されるデータ項目の値を変更することはできる。概念的には、システム領域(通常は「スタック」)に追加のデータ項目が宣言され、それがパラメータを渡すためにCOBOL以外の言語に利用可能であり、その記憶領域が呼ばれるプログラム中のデータ項目と同じであるかのように、オブジェクト・プログラムは動作する。

    一意名-6が指定され、BINARY、COMP-4、COMP-5、およびCOMP-Xのいずれかである場合は、追加データ項目のデータ記述とその内容の両方が、一意名-6のものと同じとなる。整数-1を指定すると、追加データ項目のデータ記述は、一意名-6のデータ記述と同じとなる。ただし、その用途はCOMP-5となる。追加データ項目の内容は、COMP-5である一意名-6の内容と同じとなる。この変換と形式により、非COBOLプログラムの呼出しが容易となる。

    上記以外で、一意名-6が指定された場合は、暗黙的に指定された追加データ項目のデータ記述とその内容が、一意名-6のものと同じとなる。

    整数-1を指定すると、追加データ項目のデータ記述は符号付き数字項目 USAGE COMP-5と同じとなる。この数字項目は、整数-2が指定された場合は、その値により示されるバイト数で記憶される。それ以外の場合は、システム領域のサイズ(典型的な例は、システム上のPOINTERのサイズ)で記憶される。

    LENGTH OF 一意名-7を指定した場合は、追加データ項目のデータ記述はPIC S9(n) USAGE COMP-5と同じとなる。ここで、n の値は 9 以上で、COBOLシステムのデータ項目の最大長を保持できるサイズのデータ項目を定義する。追加データ項目の内容は、一意名-7に割り当てられた記憶用バイト数に設定される。

    呼ばれるプログラムがCOBOLプログラムの場合、CALL文のBY VALUE指定中の各パラメータに対応するパラメータを、手続き部見出しのUSING指定で宣言しなければならない。この対応するパラメータにも、BY VALUE指定が明示的または暗黙的に指定されているものとする。

    上記の、CALL文の結果として生成された追加データ項目は、この対応するパラメータとは以下のようま関係を持つ。

    追加データ項目が、BINARY、COMP-4、COMP-5、またはCOMP-XからCOMP-5への変換の対象であった場合、呼ぶプログラム中にある対応するパラメータのデータ記述は、追加データ項目のデータ記述と同じでなければならない。ただし、対応するパラメータの用途は、BINARY、COMP-4、COMP-5、およびCOMP-Xのどれでもよい。呼ぶCOBOLプログラムへの記述の際に、追加データ項目の用途 COMP-5から、呼ぶプログラム中の対応するパラメータの用途への変換が実行される。

    追加データ項目がCOMP-5への変換の対象でなかった場合、呼ばれるプログラム中の各パラメータのデータ記述は、対応する追加データ項目のデータ記述と同じでなければならない。これは、追加データ項目に対し、呼ばれるプログラム中の対応するパラメータと一致させるための変換、拡張、および切り捨てのいずれも行われないことを意味する。

    呼ばれるプログラムがCOBOLプログラムでない場合、追加データ項目のサイズはシステム領域の最大サイズ(典型的な例は、システム上のPOINTERのサイズ)を超えないものとする。そうでない場合は、システムが壊滅的に破壊される可能性がある。

  17. 呼ばれるプログラムから呼ぶプログラムにデータを渡す手段には、呼ぶプログラムのUSING指定中に宣言されているパラメータを使用する方法と、戻り値を使用する方法とがある。呼ばれるプログラムはEXIT GIVING文またはGOBACK GIVING文によって値を戻す。呼ばれたプログラムから呼んだプログラムに制御が戻されると、戻り値がシステム領域に収められる。その領域は一般に、値を戻すために、COBOL以外のプログラムによって利用可能である。

    システム領域のサイズ(通常はシステム上のPOINTERのサイズ)は、COBOLシステムの外で決定され、戻り値が取りうる最大値の制約要因となる。ただし、戻り値がシステム領域の最大サイズに満たないことがある。制御が戻された後で、呼んだプログラムで戻り値を利用できるようになる。それは、暗黙的に特殊なレジスタであるRETURN-CODEに収められていることもあれば、GIVING指定に指定したデータ項目に明示的に収められていることもある。

  18. GIVING指定を書かず、呼出し方式に特殊レジスタのRETURN-CODE(環境部の章の特殊名段落中節を参照)を更新するように指定されている場合、オブジェクト・プログラム動作は次のようになる。具体的には、システム領域がそのサイズのままCOBOLの数字データ項目でUSAGE COPM-5が指定されているものとして定義され、そのシステム領域を送出し側とし特殊レジスタのRETURN-CODEを受取り側として、MOVE文を実行したかのように動作する。

  19. 呼ぶプログラム中にGIVING INTO指定を書いた場合には、戻り値をシステム領域に収めるのに必要なのと同じ長さを一意名-8に指定しなければならない。また、一意名-8の型と用途は、呼ばれるプログラムからの値の返され方によって暗黙的に示される型と用途に等しくなければならない。呼んだプログラムに制御が戻されると、戻り値が一意名-8に収められている。

  20. 呼ぶプログラムにGIVING ADDRESS OF指定を書いた場合、呼ばれるプログラムが返す値は明示的または暗黙的にUSAGE POINTERと指定されたものでなければならない。オブジェクト・プログラム動作は次のようになる。具体的には、システム領域がUSAGE POINTERと指定されたCOBOLのデータ項目として宣言され、そのシステム領域を最初の作用対象とし「ADDRESS OF 一意名-9」を2番目の作用対象として、SET文を実行したかのように動作する。

  21. 呼ばれるプログラムが値を返さない場合にGIVING指定を書くと、エラーとなる。

  22. 呼ばれたプログラムの中に、CALL文が含まれていてもよい。 しかし、

    呼ぶプログラムが再帰属性を持っていない限り、

    呼ばれたプログラム呼ばれたプログラムは、呼んだプログラムを直接的または間接的に呼ぶCALL文を実行しない。

  23. 宣言部分の範囲内でCALL文が実行されるとき、そのCALL文は、制御が移されたがまだ実行を終了していない呼ばれたプログラムを直接的にも間接的にも参照できない。

  24. END-CALL指定は、CALL文の範囲を区切る。

  25. USAGE POINTER 、

    またはUSAGE PROCEDURE-POINTER

    が明示的または暗黙的に指定されており、呼ばれるプログラム中のデータ項目、

    または手続き

    の番地から当初に導出された値は、その呼ばれたプログラムに対してCANCEL文が実行された後では無効になるので、使用してはならない。

  26. 使用されないパラメータをサブプログラムに渡すために、OMITTED指定を使用することができる。その場合、ダミーのデータ項目を宣言する必要はない。

  27. OMITTEDパラメータはBY REFERENCEパラメータであり、呼ばれるプログラムに空の番地を渡すことに相当する。それはBY VALUE 0 SIZE 4と指定するのと同じであるが、BY REFERENCEパラメータとして呼び出しプロトタイプの型チェックを受ける。

  28. OMITTEDの直前にBY REFERENCEを指定しないと、以降のパラメータはその前に有効であった呼出し方式に従って渡される。省いたパラメータはBY VALUE 0 SIZE 4と指定したかのように扱われる。

形式 1
  1. 呼び名は、呼ばれるプログラムを起動するときに、このプログラム使用する呼出し規則を示す。呼ばれるプログラムで設定された呼出し規則が、呼び名が示すものと違うと、COBOLシステムが動作しなくなる場合がある。

  2. 実行単位は、呼ばれたプログラムが発見され、実行可能な状態になる前は、それがCOBOLプログラムか、それ以外のプログラムか、または手続きであるかを認識していない。通常、プログラムがCOBOLプログラムかどうかは、プログラム名の形式では判定できないためである。同じプログラム名のCOBOLプログラムとCOBOL以外のプログラム、または2個のCOBOL以外のプログラムが存在していると、エラーとなる 。

  3. * BY CONTENT指定、BY REFERENCE指定、

    およびBY VALUE指定

    は、別のBY CONTENT指定、BY REFERENCE指定、

    またはBY VALUE指定

    が出現するまで、その後に続くパラメータすべてについて有効である。

    最初のパラメータの前にBY CONTENT、BY REFERENCE、

    およびBY VALUE

    のどの指定もない場合、BY REFERENCE指定が使用されているものとする。

形式 2
  1. 一意名-1、定数-1、および手続きポインタ-1のいずれも指定しない場合、プログラムプロトタイプ名-1は、環境部の章のリポジトリ段落節で指定された規則に従い、呼ばれるプログラムの外部化されたプログラム名を決定する。

  2. NESTED指定を使用すると、プログラム名段落で定数-1が指定された共通プログラムまたは含まれるプログラムが使用され、呼ばれるプログラムの特性が決定される。

  3. NESTED指定を使用しないと、プログラムプロトタイプ名-1を使用して、呼ばれるプログラムの特性が決定される。

  4. 単一の一意名または定数のみから成る引数は、算術式ではなく、一意名または定数と見なされる。

  5. キーワード、BY REFERENCE、BY CONTENT、およびBY VALUEのうち、どれも使用せずに引数を指定した場合、この引数が渡される方法は以下のように決定される。

    1. BY REFERENCE指定が明示的または暗黙的に、対応する仮パラメータに使用されていると、

      1. 引数が構文規則 3 の条件を満たす場合は、BY REFERENCEが指定されたと見なされる。

      2. 引数が構文規則 3 の条件を満たさない場合は、BY CONTENTが指定されたと見なされる。

    2. BY VALUE指定が明示的または暗黙的に、対応する仮パラメータに使用されていると、BY VALUEが指定されたと見なされる。

  6. 制御は、プログラムに対して指定された記述表記法に適合した方式で、呼ばれるプログラムに渡される。

  7. OMITTED指定を使用するか、その後の引数を省略した場合、そのパラメータの省略引数条件は、呼ばれるプログラム中で真と評価される。(手続き部の章の省略引数条件節を参照。)

  8. 呼ばれるプログラムで省略引数条件が真であるパラメータが参照されると、実行時エラー 203 となる。ただし、引数として参照される場合、および省略引数条件の中で参照される場合を除く。

12.5 CANCEL(取消し)文

CANCEL(取消し)文は、参照するプログラムを次回に呼んだときに必ず初期状態にあるようにする。

一般形式

構文規則

  1. 定数-1は、文字定数とする。

  2. 一意名-1は、英数字データ項目を参照する。

一般規則

  1. 定数-1または一意名-1によって参照されるデータ項目の内容は、取り消す対象のプログラムを指さなければならない。その名前は取消し対象のプログラムのプログラム名段落に記されているプログラム名でなければならない(見出し部の章のプログラム名段落節、特に大文字と小文字の区別に関する記述を参照)。別の方法として、その名前に取消し対象のプログラムの実行プログラム用のコードが収められているファイルを指定してもよい。CANCEL文の中で同じファイルを指す別の名前を指定した場合にどのような結果になるかは、オペレーティング・システムによって異なる。前に呼ばれたプログラム、プログラム・ファイル名、あるいは登録集ファイル中のプログラムと指定された名前の照合方法の詳細については、COBOLシステムのマニュアルを参照。

    その名前がENTRY文に含まれている入口名を指している場合、結果はどうなるかわからない。

  2. 明示的または暗黙的なCANCEL文が実行された後では、そのプログラムとそれが属する実行単位との論理関係はなくなる。明示的または暗黙的なCANCEL文の対象であったプログラムが、同じ実行単位の中で後からまた呼ばれたときには、そのプログラムは初期状態にある。翻訳集団の概念の章の関数、メソッド、またはプログラムの状態節を参照。

  3. 他のプログラム中のCANCEL文の中に指定されたプログラムは、そのプログラムから呼べるものとする。COBOL言語の概念名前の適用範囲および CALL (呼出し)文節を参照。

  4. 明示的または暗黙的なCANCEL文が実行されると、その対象となったプログラム中に含まれるプログラムもすべて取り消される。その結果は、取り消されたプログラムの中に含まれる各プログラムに対して、それらが現れる順番と逆の順番で、有効なCANCEL文を実行したことに等しい。

  5. CANCEL文中に指定したプログラムは、呼ばれたがまだEXIT PROGRAM文

    またはGOBACK

    を実行していないプログラムを、直接的にも間接的にも指してはならない。

  6. 取り消されたプログラムとの論理関係は、その後でそのプログラムを対象にしてCALL文を実行することによってだけ、成り立つ。

  7. 呼ばれたプログラムは、CANCEL文の作用対象として指定すること、または対象とするプログラムが属する実行単位が終了すること、

    または、呼ばれたプログラムが初期属性をもつ場合には、その中でEXIT PROGRAM文を実行すること

    により、取り消される。

  8. 実行単位の中でまだ呼ばれていないプログラム、呼ばれたが取消し済みのプログラム、またはCOBOL以外のプログラムを指定して、明示的または暗黙的なCANCEL文を実行しても、何の措置もとられない。 制御はCANCEL文の後ろに続く、次の実行可能文に移される。

  9. プログラム内に記述されている外部データ・レコード中のデータ項目の内容は、そのプログラムが取り消されても変わらない。

  10. 明示的または暗黙的なCANCEL文の実行中に、暗黙のCLOSE文が実行される。具体的には、CANCEL文の対象プログラム中の内部ファイル結合子に関連する、開かれているファイルがすべて閉じられる。これらのファイルに関連するUSE手続きがあっても、実行されない。

  11. CANCEL文は、副プログラムを初期状態に戻すかそのままの状態で残すかを決める。CANCEL文は、必ずしも、取り消された副プログラムが記憶されていた領域を解放するとは限らない。しかし、オペレーティングシステムの中には取り消された副プログラムが記憶されていた領域を解放するものが多い。その副プログラムの外部ファイルおよび外部データ領域は、CANCEL文によって解放されることはない。

12.6 CHAIN(連鎖)文

CHAIN(連鎖)文は、実行単位内のある実行用プログラムから他の実行用プログラムへ制御を移す。ただし、後から制御が戻されることを前提としない。連鎖先のプログラムは、新しい実行単位中の主プログラムであるようにみえる。

一般形式

構文規則

  1. CHAIN文の構文はCALL文の構文に似ている。CALL文の項に示したように、この2つの文は、CALL (呼出し)文節に記述されている共通の構文規則に従う。CHAIN文の一般形式に示されている一意名、定数、整数はすべて、CALL文の一意名、定数、整数に対応する。

一般規則

  1. 定数-1、または一意名-1によって参照されるデータ項目の内容は連鎖先のプログラムの名前である。CHAIN文が記述されているプログラムは連鎖するプログラムである。

    連鎖先のプログラムはCOBOLプログラムでなければならず、かつ入れ子になっていてはならない。連鎖先のプログラムの名前には、そのプログラムのプログラム名段落中に記述されている名前を指定しなければならない(大文字と小文字の区別に関しては、見出し部の章のプログラム名段落節を参照)。別の方法として、連鎖先のプログラムの名前は、連鎖先のプログラムの実行プログラム用のコードが収められているファイルを指す名前であってもよい。前に連鎖されたプログラム、プログラム・ファイル名、あるいは登録集ファイル中のプログラムと指定された名前の照合方法の詳細については、インターフェイスに関するCOBOLシステムのマニュアルを参照。

  2. CHAIN文を実行したときに、CHAIN文に指定した連鎖先のプログラムが実行可能になれば、そのプログラムに制御が移される。連鎖するプログラムは取り消される。また、連鎖するプログラムによって呼ばれたCOBOLプログラムがあれば、それらも取り消される。連鎖先のプログラムは連鎖するプログラムの制御下にはない。したがって、連鎖されたプログラム内でEXIT PROGRAMを実行しても、効果はない。

  3. CHAIN文を実行したときに、CHAIN文に指定した連鎖先のプログラムが実行可能にならなければ、致命的なランタイム・エラーとされる。

  4. 連鎖されたプログラム内にCHAIN文があってもよい。連鎖されたプログラム内のCHAIN文では、そのプログラム自体以外の任意のプログラムを参照できる。.

  5. CHAIN文の形式はCALL文の形式に似ている。CALL文の項に示したように、この2つの文は、CALL (呼出し)文節に記述されている共通の一般規則に従う。CHAIN文の一般形式に示されている一意名、定数、整数はすべて、CHAIN文の一意名、定数、整数に対応する。また、呼ぶプログラムおよび呼ばれるプログラムという表現が用いられているときは、連鎖するプログラムおよび連鎖先のプログラムと同等であるとみなす。

  6. 連鎖処理によって、CHAIN文のUSING指定内で参照されている各データ項目の値が、連鎖先のプログラムの手続き部の見出しのUSING指定中に書かれている対応するデータ名によって参照される、データ項目に転記される。

  7. USING指定中の作用対象として渡されたUSAGE POINTERまたはUSAGE PROCEDURE-POINTERの指定がある任意のデータ項目の値は、COBOLデータ項目から当初に導出された番地を表していてはならない。

  8. END-CHAIN指定はCHAIN文の範囲を区切る。

  9. コンパイラ指令のINTLEVEL"1"を使用した場合は、USING指定を用いてはならない。

12.7 CLOSE(閉じる)文

CLOSE(閉じる)文は、リール/ユニットおよびファイルの処理を終了させる(ファイルのクローズ)。さらに、可能ならば、巻戻しやロックや取外し処理を行うこともできる。

一般形式

形式 1 (レコード順ファイル)

形式 2 (
dialm.gif行順ファイル、
相対ファイル、および索引ファイル)

構文規則

すべての形式(すべてのファイル)
  1. CLOSE文で参照されるファイルは、すべてが同じ構成またはアクセスである必要はない。

形式 1 (レコード順ファイル)
  1. REEL および UNITUNITを指定できるのは、SELECT句にMULTIPLE REELまたはMULTIPLE UNIT MULTIPLE UNIT を指定してあるファイルに対してだけである。マルチユニット・ファイルを認識しないランタイムシステムにおいては、CLOSE REEL文およびCLOSE UNIT文は" 空" 文である。つまり、これらの文は注記になる。CLOSE REEL文またはCLOSE UNIT文によって閉じた装置上には、他に開いているファイルはないことが重要である。

    CLOSE REEL WITH LOCK文およびCLOSE UNIT WITH LOCK文は、CLOSE REEL FOR REMOVALと同義語として扱われる。

  2. DISP 指定は、テープ・ファイルに対してだけ適用できる。

    DISP指定は注記になる。

一般規則

すべての形式(すべてのファイル)
  1. CLOSE 文は、開かれているファイルに対してだけ実行できる。

  2. CLOSE文の実行が正常に終了すると、ファイル名-1のレコード領域は使用できなくなる。CLOSE文の実行が不成功に終わった場合は、レコード領域はどうなるかわからない。

  3. STOP RUN(実行停止)文が実行されたときに開かれているファイルがあると、そのファイルは閉じられる。呼ばれたプログラムの中でファイルが開かれ、後でそのプログラムの中でCANCEL(取消し)文が実行された場合、開かれたままのファイルがあれば閉じられる。

  4. CLOSE文の実行が正常に終了すると、閉じられたファイルに関して実行単位が保持していたレコードロックまたはファイルロックはすべて解除される。

  5. CLOSE文が実行されると、ファイル名-1に関する入出力状態の値が更新される。(手続き部の章の入出力状態節を参照。)

  6. CLOSE文の書き方とファイルの種類ごとに、実行結果をまとめて、表 12-1に示す。

    表 12-1: CLOSE文の形式とファイルの種類の関係
    CLOSE文の形式 ファイルの種類
    非リール/ユニット レコード順単一リール/ユニット レコード順複数リール/ユニット 非レコード順単一/複数リール/ユニット
    CLOSE C C, G A, C, G C
    CLOSE WITH LOCK C, E C, E, G A, C, E, G C, E
    CLOSE WITH NO REWINDレコード順だけ C, H B, C A, B, C X
    CLOSE REEL/UNITレコード順だけ F F, G F, G X
    CLOSE REEL/UNIT FOR REMOVALレコード順だけ F D, F, G D, F , G X
    CLOSE REEL/UNIT WITH NO REWINDレコード順だけ X X F, B X

    上の表の中に示した記号の意味を以降に説明する。入力ファイルか出力ファイルか入出力ファイルかによって意味が異なるときは、それぞれに分けて説明する。分けていなければ、説明は入力ファイルと出力ファイルと入出力ファイルのすべてに当てはまる。

    1. 前のリール/ユニットは影響を受けない

      入力ファイルおよび入出力ファイル:

      ファイル中の現在のリール/ユニットよりも前にあるリール/ユニットがすべて処理される。ただし、既にCLOSE REEL/ UNIT文が実行されているものを除く。現在のリール/ユニットがファイル中の最後のものでない場合、その後ろのリール/ユニットは処理されない。

      出力ファイル:

      ファイル中の現在のリール/ユニットよりも前にあるリール/ユニットがすべて処理される。ただし、既にCLOSE REEL/UNIT文が実行されているものを除く。

    2. 現在のリールを巻き戻さない

      現在のリール/ユニットはそのままの位置にとどめられる。

    3. ファイルを閉じる

      入力ファイルおよび入出力ファイル(順呼出し法):

      ファイルの末尾に達しており、かつファイル記述にラベル・レコードを指定してある場合、オペレーティングシステムのラベル方式に従って、ラベルの処理が行われる。ラベル・レコードを指定しているのにラベル・レコードが存在しない場合、またはラベル・レコードを指定していないのにラベル・レコードが存在する場合、CLOSE文の動作はどうなるかわからない。ファイルの末尾に達しているが、ファイル記述にラベル・レコードが指定されていない場合、ラベルの処理は行われないが、ランタイムシステムに依存するその他の閉じる処理は行われる。ファイルの末尾に達していない場合、ランタイムシステムに依存する閉じる処理は行われるが、終了ラベルの処理は行われない。

      入力ファイルおよび入出力ファイル(乱呼出し法、動的呼出し法); 出力ファイル(乱呼出し法、動的呼出し法、順呼出し法):

      ファイル記述にラベル・レコードを指定している場合、オペレーティングシステムのラベル方式に従ってラベルの処理が行われる。ラベル・レコードを指定しているのにラベル・レコードが存在しない場合、またはLABEL RECORD句を指定していないのにラベル・レコードが存在する場合、CLOSE文の動作はどうなるかわからない。ファイル記述にラベル・レコードを指定していない場合、ラベルの処理は行われないが、ランタイムシステムに依存するその他の閉じる処理は行われる。

    4. リール/ユニットを取り外す

      REELまたはUNITを指定しないでCLOSE文をファイルに対して実行し、続いてそのファイルに対してOPEN文を実行すると、そのファイル内のリールまたはユニットを適切な順番で再度呼び出すことができる。

    5. ファイルをロックする

      この実行単位の実行中は、このファイルを再び開くことはできない。

    6. リール/ユニットを閉じる

      入力ファイルおよび入出力ファイル(リール/ユニット媒体):

      1. 現在のリール/ユニットが該当するファイルの最後または唯一のリール/ユニットである場合、リール/ユニットの交換は行われない。現在のボリューム・ポインタは変更されず、ファイル位置指示子には次のリール/ユニットが存在しないと設定される。

      2. 該当するファイルに他のリール/ユニットが存在する場合、リール/ユニットの交換が発生し、現在のボリューム・ポインタはそのファイル中の次のリール/ユニットを指すように更新される。その後標準開始リール/ユニット・ラベル手続きが実行されて、ファイル位置指示子が新しい現行ボリューム上に存在する最初のレコードの番号よりも1小さく設定される。現行ボリュームにデータ・レコードが存在しなければ、次のリール/ユニットの交換が発生する。

      出力ファイル(リール/ユニット媒体):

      下記の操作が行われる。

      1. 標準終了リール/ユニット・ラベル手続きの実行

      2. リール/ユニットの交換

      3. 標準開始リール/ユニット・ラベル手続きの実行

      4. そのファイルに対して次にWRITE文を実行すると、次の論理レコードはそのファイルの次のリール/ユニットに書き出される。

      入力ファイル、入出力ファイル、出力ファイル(非リール/ユニット媒体):

      このCLOSE文の実行は、正常に終了したものと扱われる。実際には、ファイルは開かれたままであり、ファイル位置指示子は変更されず、一般規則4に示された以外の処理は何も行われない。

    7. 巻き戻す

      現在のリールまたは類似の装置は、物理的始点に位置付けられる。

    8. 任意指定は無視される

      CLOSE文は、任意指定が何もされていないかように実行される。

    1. 不正

      CLOSE文の指定とファイルの種類のこの組合わせは正しくない。実行結果がどうなるかはわからない。

形式 1 (レコード順ファイル)

以下の記述において別途断らないかぎり、"リール" と"ユニット" という語は同義であり、CLOSE文の中でまったく同じように使うことができる。順編成の大記憶ファイルの取扱いは、論理的にはテープまたは類似の順媒体と同じである。

  1. 様々な記憶媒体に適用される種々のCLOSE文の効果を示すために、すべてのファイルを下記の種類に区分する。

    1. 非リール/ユニット:巻戻しやリール/ユニットの概念が意味をもたない入出力媒体を使用したファイル。

    2. 順単一リール/ユニット:1つのリール/ユニットに完全に格納される順ファイル。

    3. 順複数リール/ユニット:複数のリール/ユニットにまたがって格納される順ファイル。

  2. 環境部のファイル管理段落中でファイルにOPTIONAL指定をしているが、そのファイルが存在しない場合には、そのファイルに関しては標準のファイル終了処理は行われない。

  3. あるファイルに対してREELもUNITも指定せずにCLOSE 文を実行すると、以降そのファイルを対象とする入出力文(SORT文またはMERGE文でUSINGまたはGIVINGを指定したものは除く)は明示的にも暗黙的にも実行できなくなる。ただし、そのファイルに改めてOPEN文を実行すれば、再び入出力文を実行できるようになる。

  4. ファイルが存在する媒体に対して適用しなければ、WITH NO REWIND指定もFOR REMOVAL指定も実行時に効力をもたない。

  5. WITH LOCKを指定すると、そのファイルはその実行単位の現在の実行中には再度開くことはできなくなる。この点を除けば、通常のCLOSEと同じである。

    (この機能は、ファイルを共有するときのレコードまたはファイルのロックとは関係がない。)

すべての形式(すべてのファイル)
  1. あるファイルに対してCLOSE文を実行すると、以降そのファイルを対象とする文は、

    DELETE FILE文を除き、

    明示的にも暗黙的にも実行できなくなる。ただし、そのファイルに改めてOPEN文を実行すれば、再びファイルを操作する文を実行できるようになる。

  2. WITH LOCKを指定すると、そのファイルはその実行単位の現在の実行中には再度開くことはできなくなる。

12.8 COMMIT(更新確定)文

COMMIT(更新確定)文は、該当する実行単位によってロックされている、ファイル中のすべてのレコードロックを解除する。SELECT文のWITH...ROLLBACK句を単なる注記としてではなく実際にサポートするCOBOLシステムでは、COMMIT文は現在のトランザクションの終わりを区切り、それまでのデータの更新内容を確定する。

一般形式

一般規則

  1. COMMIT文を実行すると、実行単位によってそれまでロックされていた、ファイル中のすべてのロックが解除される。

  2. 排他ファイル上のファイルロックは、COMMIT文の影響を受けない。

  3. SELECT文のWITH...ROLLBACK句を単なる注記としてではなく実際にサポートするCOBOLシステムでは、COMMIT文は下記の機能を果たす。

    1. 現在のトランザクションが完了したことを示す。

    2. トランザクション処理の間になされたデータの更新内容を確定する。

12.9 COMPUTE(計算)文

COMPUTE(計算)文は、算術式の値をいくつかのデータ項目に代入する。

一般形式

構文規則

  1. "=" の左側だけに現れる一意名は、基本数字項目か基本数字編集項目

    または浮動小数点数項目を指さなければならない。

  2. "Equal" と "=" は同義語である。

一般規則

  1. 手続き部の章の算術式ROUNDED指定ON SIZE ERROR指定算術文, 作用対象の重なり、および算術文における複数個の答えの各節、およびCOBOL言語の概念の章の明示範囲符と暗黙範囲符節、翻訳集団の概念の章の範囲明示文節を参照。

  2. 単一の一意名または定数からなる算術式を指定すると、その単一の一意名または定数の値を一意名-1の値に設定することになる。

  3. 算術文のADD、SUBTRACT、MULTIPLY、DIVIDEを使用した場合は、一時的なデータ項目に中間結果を入れる必要がある。COMPUTE文を使用すると、算術処理を組み合わせながら、それらの制約を受けないで済む。式は可能なだけの桁を評価して、一意名-1中に合うように切り捨てまたは四捨五入される。

    式の評価中に出された中間結果は、COBOLシステムによって決められたPICTUREのデータ項目に転記されたように切り捨てられる。この動作はARITHMETIC コンパイラ指令で選択する。

  4. "=" の前に計算結果用の一意名を複数個指定すると、算術式を計算した結果の値が、個々の一意名-1の新しい値として代入される。

12.10 CONTINUE(継続)文

CONTINUE(継続)文は、処理操作を行う文ではない。実行可能な文が存在しないことを示す。

一般形式

構文規則

  1. 条件文または無条件文を使用できるところでは、どこでもCONTINUE文を書くことができる。

一般規則

  1. CONTINUE文は、プログラムの実行には影響しない。

12.11 DELETE(削除)文

DELETE(削除)文は大記憶ファイルからレコードを論理的に削除する。DELETE文は相対編成または索引編成のファイルに対してだけ適用できる。

一般形式

構文規則

  1. 順呼出し法のファイルを対象にしたDELETE文に、INVALID KEYは指定できない。.

  2. USE AFTER STANDARD EXCEPTION PROCEDUREを指定してない場合、順呼出し法ではないファイルを対象にしたDELETE文には、INVALID KEYを指定する。

    この規則は強制しない。

一般規則

  1. DELETE文を実行する際には、対象とするファイルは入出力両用モードで開いておく。(手続き部  MERGE  OPENの章のOPEN(開く)文節を参照。)

  2. 順呼出しモードのファイルの場合、ファイル名-1に関してDELETE文の前に最後に行われた入出力文は、正常に終了したREAD文とする。オペレーティングシステムはそのREAD文によって呼び出されたレコードを、ファイルから論理的に削除する。

  3. 乱呼出しモードまたは動的呼出しモードのファイルの場合、オペレーティングシステムは、該当するファイルのキー・データ項目の内容によって識別されるレコードをファイルから論理的に削除する。相対ファイルの場合、このキー・データ項目はRELATIVE KEYであり、索引ファイルの場合、このキー・データ項目は RECORD KEYである。キーによって指定されたレコードがファイル中に存在しないと、無効キー条件が発生する。(手続き部の章の無効キー条件節を参照。)

  4. DELETE文の実行が正常に終了すると、該当するレコードはファイルから論理的に削除され、呼び出すことはできなくなる。

  5. DELETE文を実行することによって、ファイル名-1のレコード領域の内容が影響を受けることはない。

  6. DELETE文を実行することによって、ファイル位置指示子が影響を受けることはない。

  7. 該当ファイルにFILE データ項目を指定してあると、DELETE文を実行したときにその内容が更新される。(手続き部の章の入出力状態節を参照。)

  8. DELETE文処理が正常または不成功に終わった後、どこに制御が移されるかは、DELETE文中にINVALID KEY指定、

    およびNOT INVALID KEY指定

    を指定したか否かに左右される。(手続き部の章の無効キー条件節を参照。)

  9. END-DELETE指定はDELETE文の有効範囲を区切る。(COBOL言語の概念の章の明示範囲符と暗黙範囲符節を参照。)

  10. DELETE文を実行する際に、対象レコードが他の実行単位によってロックされていてはならない。

  11. DELETE文の実行が正常に終了すると、その実行単位によってロックされていたレコードのロックは解除される。

12.12 DELETE FILE(ファイル削除)文

DELETE FILE(ファイル削除)文は、指定されたファイルをそれが格納されている物理装置から物理的に削除する。

一般形式

一般規則

  1. DELETE FILE文は、指定されたファイルをそれが格納されている物理装置から物理的に削除する。

  2. DELETE FILE文を実行するとき、指定したファイルは閉じられていなければならないが、ロックされていてはならない。

12.13 DISPLAY(表示)文

DISPLAY(表示)文は、指定されたデータ項目のデータをCRT画面のような適切なハードウエア装置に転送させる。

DISPLAY文はまた、プログラムからCRTまたはビデオ端末画面上の静止型定形画面にデータを転送して表示させる。表示されたその画面を、入力画面とすることができる。

一般形式

形式 1

形式 2

形式 3

構文規則

形式 1
  1. 呼び名は、環境部の特殊名段落中の機能名と関連させる。有効な機能名に関しては、環境部の章の特殊名段落節の中の「一般規則 9」を参照。

  2. 機能名に関連する呼び名の代わりに、機能名そのものを使用できる。

  3. 各定数には、ALL以外の表意定数を使用できる。

  4. 定数が数字の場合は、符号の付かない整数とする。

    この制限は無視してよい。

  5. 呼び名がARGUMENT-NUMBERに関連しているときは、使用される一意名-1または定数-1は、それぞれ符号の付かない整数または符号の付かない整数定数として、定義されているデータ項目を指さなければならない。この場合、単一の一意名-1または定数-1だけを使用でき、WITH NO ADVANCING指定は使用できない。

  6. 呼び名がENVIRONMENT-NAMEまたはENVIRONMENT-VALUEと関連するときは、使用される一意名-1または定数-1は、それぞれ英数字データ項目または文字定数を指さなければならない。この場合、単一の一意名-1または定数-1だけを使用でき、WITH NO ADVANCING指定は使用できない。

  7. ON EXCEPTION指定およびNOT ON EXCEPTION指定は、呼び名がENVIRONMENT-NAMEまたはENVIRONMENT-VALUEと関連している場合にだけ指定できる。
形式 2
  1. 画面名は、OCCURS句を伴う項目であってはならない。

形式 2 および 3
  1. LINE指定とCOLUMN指定は、どのような順番で書いてもよい。

  2. 整数-3および整数-4の長さは、4バイトまたは6バイトとする。

形式 3
  1. 作用対象が画面名でないDISPLAY文は、その中にAT指定、CRTオプションまたはCRT-UNDERオプションを伴うUPON指定、MODE IS BLOCK指定が含まれるか、またはUPON指定は含まれないが特殊名段落中にCONSOLE IS CRT句が指定されていると、形式 3として扱われる。CONSOLEオプションを伴うUPON指定が含まれるか、またはUPON指定が含まれず特殊名段落中にCONSOLE IS CRT指定も指定されていないと、この形のDISPLAY文は形式 1として扱われる。

  2. 一意名に続くいろいろな指定は、どんな順番で書いてもよい。

  3. 一意名-1内の基本データ項目の用途は、DISPLAYとする。

  4. 一意名-1内の非基本データ項目は、8191バイトより大きくなることがある。MODE IS BLOCK句を使用した場合、一意名-1の全体の長さは8191バイト以下にすること。

  5. DISPLAYの後に2つ以上の一意名-1が続く場合、WITH指定はその直前にある作用対象だけに適用される。

一般規則

形式 1
  1. DISPLAY文の作用対象の用途がDISPLAY以外であるかまたは符号が独立していないと、その作用対象は、用途がDISPLAYで符号が独立したものに変換される。変換後の大きさが、その作用対象の大きさとされる。

  2. 作用対象の1つとして表意定数を指定すると、その表意定数が1文字だけ表示される。

  3. 機能名 COMMAND-LINEまたはそれに関連する呼び名を指定すると、データはシステムのコマンド行バッファに上書きされる。この後、ACCEPT FROMCOMMAND-LINE文を実行することによって、このデータを読み出すことができる。この場合は、作用対象は1つだけ指定できる。

    使用可能なそれ以外の機能名はすべて、CONSOLEに等しいものとして扱われ、各作用対象は、指定された順番に操作卓装置に転送される。表示されるデータの全体の大きさは、各作用対象の大きさの和に等しい。表示は現在カーソルが位置している所から開始され、必要があれば、以降の行に繰り越される。

    以前のリリースでは、最後の作用対象に続く空白は表示されなかった。

  4. NO ADVANCINGを指定すると、カーソルは最後の文字が表示された次の位置に残される。NO ADVANCINGを指定しないと、カーソルは次の行の先頭に位置付けられる。カーソルが行頭にあるときは、いつでもスクロールできる。

  5. 機能名ARGUMENT-NUMBERに関連する呼び名を指定すると、機能名ARGUMENT-VALUEに関連する呼び名を伴う後続のACCEPT用の位置は、指定されたコマンド行の引数を読み出すように設定される。一意名-1または定数-1に関連する値が0より小さいか、99より大きいか、コマンド行上の引数の合計数よりも大きいと、結果はどうなるかわからない。

  6. 機能名ENVIRONMENT-NAMEに関連する呼び名を指定すると、機能名ENVIRONMENT-VALUEに関連する呼び名を伴う後続のACCEPTまたはDISPLAY中で読み取るかまたは設定すべき変数が、定数-1または一意名-1の内容として指定された変数名に設定される。ON EXCEPTION指定は、指定されていても実行されない。したがって、ENVIRONMENT-VALUEに関連する後続のACCEPTまたはDISPLAY用のENVIRONMENT-NAMEを設定しようとしている最中に問題が発生した場合、ON EXCEPTION条件の検出は、後続のACCEPTまたはDISPLAYの中で行なわなければならない。

  7. 機能名ENVIRONMENT-VALUE に関連する呼び名を使用すると、下記のようになる。

    1. ENVIRONMENT-NAMEに関連する呼び名を伴うDISPLAYが前に実行されていると、一意名の値が指定された環境変数に入れられる。

    2. ENVIRONMENT-NAMEに関連する呼び名を伴うDISPLAYが前に実行されていないと、またはACCEPTに関しては指定された環境変数が存在しないと、またはDISPLAYに関して環境変数を格納するために割り当てられる領域が足りないと、ON EXCEPTION指定に対応する無条件文が実行される。この場合、一意名中の値はどうなるかわからない。

  8. 機能名SYSERRに関連する呼び名を使用すると、DISPLAYはCONSOLEに対するように行われるが、出力はすべてシステムの標準エラー装置に向けられる。

  9. DISPLAY UPON ENVIRONMENT-VARIABLEを実行するときは、後に続く空白も値のうちに含められる。これを避けたければ、INSPECT REPLACING ALL SPACES BY LOW-VALUESを使用する。

  10. 一意名-1においては、内部浮動小数点数は表示用の外部浮動小数点数に変換される。その結果、下記のようになる。

    1. COMP-1項目は外部浮動小数点数用のPICTURE句-.9(8)E-99が指定されているように表示される。

    2. COMP-2項目は外部浮動小数点数用のPICTURE句-.9(18)E-99 が指定されているように表示される。(このPICTURE文字列を実際に明示的に使用するとまちがいとなる。)

  11. 定数-1においては、浮動小数点数定数が許される。
形式 2
  1. この書き方のDISPLAY文を実行すると、プログラムの画面節内に定義されている画面項目が表示され、拡張画面操作機能によって全面的に取り扱えるようになる。

形式 2 および 3
  1. AT指定は、DISPLAY処理を開始する画面上の絶対番地を指定する。

  2. DISPLAY文が実行される順序は、つねに下記のとおりである。

    1. AT指定

    2. BLANK指定

    3. BELL指定

    4. DISPLAY処理

  3. 整数-3または整数-4の長さが4桁ならば、上2桁は行を表わし下2桁はカラムを表わす。整数-3または整数-4の長さが6桁ならば、上3桁は行を表わし下3桁はカラムを表わす。

  4. 行番号とカラム番号の組合せの中には、特殊な意味をもつものがある。それらは下記のとおり。

    1. カラムの値が1行のカラム数よりも大きいと、その値から1行のカラム数が差し引かれ、行数に1が加えられる。

    2. 行の値が画面の範囲から外れると、画面が1行上にスクロールされる。この効果は、画面の下端の行を指定したのと同じである。

    3. 与えられた行番号とカラム番号がともにゼロであると、形式 2または 3の前のDISPLAY処理が終わった位置の直後から、DISPLAYが開始される。各行のカラム1は、前の行の最後のカラムに続くものとみなされる。

    4. 指定された行番号がゼロであるがカラム番号はゼロでないと、形式 2または 3の前のDISPLAY処理が終わった位置の次の行の指定されたカラムから、DISPLAYが開始される。

    5. 指定されたカラム番号がゼロであるが行番号はゼロでないと、形式 2または 3の前のDISPLAY処理が終わった位置の次のカラムの指定された行から、DISPLAYが開始される。

形式 3
  1. この文の一部を繰り返し指定して、いくつものデータ項目を表示するようにできる。最初の一意名にAT指定を指定しないと、行1、カラム1から表示が開始される。それ以降に続く各データ項目は、前のデータ項目を表示し終わった後のカーソルの位置から表示が開始される。

  2. MODE IS BLOCK指定を指定しないと、一意名が集団項目であれば、それに属する基本項目で名前がFILLERでないものが表示される。これらの項目はデータ部内で記述されている順に画面上に表示され、集団内のFILLERの長さによって区切られる。この目的では、ある行の最初の位置は、その前の行の最後の位置の直後に続くものとみなされる。

  3. MODE IS BLOCK指定は、一意名を基本項目として扱うように指定する。こうすると、一意名が集団項目であっても、1つの項目として表示される。

  4. WITH指定を用いると、各種のオプションをDISPLAY処理の実行時に指定できる。(これらの指定の説明については、データ部 - 画面節 の章を参照。)

    画面記述句に指定できるオプションの他に、WITH指定にはいくつかのオプションが加えられている。SPACE-FILL, ZERO-FILL, LEFT-JUSTIFY, RIGHT-JUSTIFY, TRAILING-SIGN, UPDATEである。ZERO-FILLには2つの用法があるため、このリストにも画面記述句にも現れている。2番目の用法については、この章で後述する。

    自由方式で、数字および数字編集の画面項目に、データを入力できるようにする構成オプションがある。COBOLでは、非編集数字データ項目は、内部形式でデータを保持することを目的としたものである。自由方式を用いると、このようなデータ項目を画面上に表示できる。 詳細は、ユーザーインターフェイスに関するCOBOL システムのマニュアルを参照。自由方式がとられているときは、データは自動的に下記のように編集されて表示される。

    SPACE-FILL、ZERO-FILL、LEFT-JUSTIFY、RIGHT-JUSTIFY および TRAILING-SIGNの各オプションは、上記の形式を補正する。

  5. 一意名-1に表意定数を指定すると、次のような特別な効果がある。SPACEを指定すると、指定したカーソル位置から画面の末尾までがクリアされる。LOW-VALUEを指定すると、指定した位置にカーソルが移動される。ALL X"01" を指定すると、指定したカーソル位置からその行の末尾までがクリアされる。ALL X"02" を指定すると、画面全体がクリアされる。ALL X"07" を指定すると、警報が鳴らされる。一意名に上記以外の表意定数を指定し、SIZEオプションを指定しないと、その表意定数の値が1つ表示される。

  6. 特別の効果をもたない表意定数にSIZEオプションを指定すると、その表意定数の値がSIZE分の長さだけ表示される。ただし、行末から次の行頭へ表示が繰り越されるときは、表意定数の最初から表示し直される。

  7. FOREGROUND-COLORオプションを指定すると、画面全体がこの表示によってクリアされた場合にだけ、指定した色が省略時解釈の前景色となる。画面全体がクリアされるのは、BLANK SCREEN オプションを指定した時、または一意名-1 が SPACES で表示が行1、カラム 1から始まる時である。

  8. BACKGROUND-COLORオプションを指定すると、画面全体がこの表示によってクリアされた場合にだけ、指定した色が省略時解釈の背景色となる。

  9. 一意名-1にREDEFINESがかかっている場合、再定義データ領域の最初の記述が使用され、以降の記述は無視される。OCCURSまたは入れ子になったOCCURSが指定されている場合、反復されるデータ項目はその反復回数分展開される。したがって、1つの定義が多数の項目にわたって繰り返されることになる。

12.14 DIVIDE(除算)文

DIVIDE(除算)文は、いくつかの数字データ項目を1つの数字データ項目で割って、 商と 剰余をデータ項目の値として設定する。

一般形式

形式 1

形式 2

形式 3

形式 4

形式 5

構文規則

すべての形式
  1. 各一意名は、基本数字項目とする。ただし、GIVING指定またはREMAINDER指定に指定する一意名は、基本数字編集項目であってもよい。

  2. 各定数は、数字定数とする。

  3. 作用対象を合成したものは、REMAINDERデータ項目を除くすべての受取り側データ項目の使用により、決定される。手続き部の章の算術文節を参照。

  4. 形式 1、2、または 3 のいずれかの場合、浮動小数点データ項目または定数は、数字データ項目または定数が指定できる箇所であればどこでも使用できる。形式 4 または 5 の場合、浮動小数点データ項目または定数は指定できない。

一般規則

すべての形式
  1. 手続き部の章のROUNDED指定ON SIZE ERROR指定算術文, 作用対象の重なり、および算術文における複数個の答えの各節、およびCOBOL言語の概念の章の明示範囲符と暗黙範囲符節、翻訳集団の概念の章の範囲明示文節を参照。

形式 1
  1. 形式 1 では、定数-1または一意名-1によって参照されるデータ項目の値が一時的データ項目に記憶される。次いで、一意名-2の値がこの一時的なデータ項目の値で割られる。そして、被除数(一意名-2)の値が商で置き換えられる。同様に、一意名-2の後ろに続く各被除数が、指定された順番に左から右に順次この一時的なデータ項目で割られる。
形式 2
  1. 形式 2 では、一意名-2または定数-2が、定数-1または一意名-1のデータ項目の値で割られ、結果が一意名-3によって参照される各データ項目に入れられる。
形式 3
  1. 形式 3 では、一意名-1または定数-1が、定数-2または一意名-2のデータ項目の値で割られ、結果が一意名-3によって参照される各データ項目に入れられる。

形式 4 および 5
  1. 形式 4 および 5は、一意名-4に剰余を入れたいときに使用する。COBOLでは、剰余は、被除数から除数と商(一意名-3)の積を差し引いた結果の値であると定義される。一意名-3が数字編集項目として定義されていると、剰余を計算するために用いられる商には、編集されていない値を保持している中間項目が使用される。ROUNDEDを指定すると、剰余を計算するために用いられる商には、四捨五入ではなく切り捨てられた値を保持している中間項目が使用される。

  2. 形式 4 および 5では、REMAINDERデータ項目(一意名-4)の精度は上記の計算によって決まる。一意名-4によって参照されるデータ項目の内容は、必要に応じて、小数点の位置合わせと切捨て(四捨五入ではない)が行われる。

  3. 形式 4および 5においてON SIZE ERROR指定を書くと、下記の規則が適用される。

    1. 桁あふれが商に発生した場合、剰余を計算しても意味がない。したがって、一意名-3および一意名-4によって参照される値は変更されない。

      剰余に桁あふれが発生した場合、一意名-4によって参照される値は変更されない。.

    しかし、算術演算で複数の結果を求める他の場合と同様、利用者は自分で分析を行って、実際に何が発生したのかを突き止める必要がある。


Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標および商品名は国際法によって保護されています。


Previous 手続き部 - 組み込み関数 手続き部 - ENTER - INVOKE Next