前ページへ 手続き部 - 組み込み関数 手続き部 - ENTER - INVOKE 次ページへ

第12章 手続き部 - ACCEPT - DIVIDE

12.1 COBOLの文

12.1.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文の範囲を区切る。(第2章『COBOL言語の概念』の2.6.6.4「明示範囲符と暗黙範囲符」を参照。)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. DATEは、年(西暦下2桁)、月、日の3つの要素から構成される。これらの要素の配列順は、高い方から低い方(左から右)、つまり年・月・日の順である。COBOLプログラムからDATEを呼び出すと、そのプログラムの中で、符号の付かない6桁の整数の基本データ項目として記述してあるように取り扱うことができる。

  3. DAYは、年(西暦下2桁)と年内の通算日の2つの要素から構成される。これらの要素の配列順は、高い方から低い方(左から右)、つまり年・通算日の順である。たとえば、1968年7月1日は68183と表わされる。COBOLプログラムからDAYを呼び出すと、そのプログラムの中で、符号の付かない5桁の整数の基本データ項目として記述してあるように取り扱うことができる。

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

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

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

  6. PROMPTオプションを指定しないと、データが入力されなかった文字位置は、データ項目内では空白となる。

  7. 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オプションを使用すると、上記の形式を補正できる。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

12.1.2 ADD(加算)文

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

一般形式

書き方 1

書き方 2

書き方 3

構文規則

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

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

  3. 作用対象を合成したものは、 長さが18桁を超えてはならない。(前述の算術文の節を参照。)

    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.1.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.1.4 CALL(呼出し)文

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

対象とする実行用プログラムの手続きを、番地を指定することによって、間接的に呼ぶことができる。データとデータへのポインタと手続きへのポインタを、パラメータとして呼ばれるプログラムに引き渡したり、呼ばれるプログラムから返してもらったりできる。パラメータ受渡し方式を制御することによって、COBOL以外の言語で書かれたプログラム手続きを呼ぶことができる。呼ぶばれたCOBOLプログラムは、再帰的に自分を呼ぶことができる。ただし、この場合は、局所記憶節が存在する必要がある。

  1. CALL文の手続きポインタの使用例については、言語リファレンス - 追加トピックの章を参照。

一般形式

指令

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

構文規則

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

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

    呼び名は特殊名段落中に定義しなければならない。その方法の詳細については、この章で前述した「特殊名段落」を参照。また、ランタイム環境においてサポートされている呼出し方式の詳細については、COBOLのシステム・ドキュメンテーションを参照。

  2. * 一意名-1は英数字データ項目として定義しなければならない。その値がCOBOLのプログラム名であってもCOBOL以外のプログラム名であってもよいようにするためである。

  3. * 定数-1、

    定数-2、

    ,および定数-3

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

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

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

    局所記憶節、

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

    または基本項目

    または任意の集団項目 でなければならない。

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

    局所記憶節または作業場所節にデータ項目として定義されていなければならず、

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

    またはその他のレベルのデータ項目でなければならない。

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

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

  9. * 一意名-8は、4バイトのデータ項目とする。

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

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

一般規則

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

  1. 呼び名は、呼ばれるプログラムを呼び出すときにこのプログラムで使用する呼出し方式を識別する。呼ばれるプログラムで想定されている呼出し方式が呼び名で示されるものと異なると、COBOLシステムは障害を起こす可能性がある。

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

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

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

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

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

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

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

    ON EXCEPTION指定は

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

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

  5. 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文なしにプログラムの実行が停止され、ランタイム・エラーが表示される。

  6. 呼ばれるプログラムを実行できるようにするさいに、その所在が把握されるまで、呼ばれるプログラムがCOBOLプログラムであるのかないのか、あるいは手続きであるのかは、実行単位には分からない。一般には、プログラム名の形式から、COBOLプログラムであるか否かを判定することはできない。COBOLプログラムとCOBOLでないプログラムの間、またはCOBOLでない2つのプログラムの間で、プログラム名が同じであるとエラーとなる。

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

    たとえば、CALL文の中に指定されたプログラム名と同じ名前のプログラムが、実行単位中に2つあるとする。

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

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

    この例で、参照するプログラムを見つける仕組みは、下記のとおり。

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

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

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

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

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

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

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

  9. 呼ばれるプログラムの内部ファイル結合子に関連するファイルは、プログラムが初期状態にあるときは、まだオープンされていない。前述のプログラムの初期状態の節を参照。

    それ以外の場合に呼ばれたときは、それらのすべてのファイルの状態と位置付けは、前回に呼ばれたときのままである。

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

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

    またはENTRY文

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

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

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

  13. * CALL文

    またはCHAIN文の

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

    または呼ばれるプログラムがCOBOLでない場合はENTRY文またはパラメータ・リストの中の対応するUSNIG指定に中に作用対象が置かれている順序によって、

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

    またはCHAIN文の

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

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

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

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

  15. * BY CONTENT、BY REFERENCE、

    BY VALUE

    の各指定はその後ろに続くパラメータに効力を及ぼすが、別のBY CONTENT、BY REFERENCE、

    またはBY VALUE

    の指定が出てきたところでその効力は停止する。

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

    または BY VALUE

    のどの指定もないと、BY REFERENCE指定があるものと想定される。

  16. * パラメータに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のために記述されたものとして処理する。

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

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

  18. * BY VALUE指定を明示的または暗黙的に指定すると、CALL文のUSING指定の中で参照されているこのパラメータの値を、呼ばれるプログラムは変更できない。それにもかかわらず、呼ばれるプログラムはその手続き部の見出しの中の対応するデータ名によって参照されるデータ項目の値を変更することはできる。概念的には、システム領域(通常は「スタック」)に追加のデータ項目が宣言され、それがパラメータを渡すためにCOBOL以外の言語に利用可能であり、その記憶領域が呼ばれるプログラム中のデータ項目と同じであるかのように、オブジェクト・プログラムは動作する。一意名-6を指定すると、追加データ項目の暗黙的なデータ記述とその内容の両方が、一意名-6のものと同じとなる。整数-1を指定すると、追加データ項目の暗黙的なデータ記述は、符合付き数字項目でUSAGE COMP-5に等しくなる。その記憶領域内でのバイト数は、整数-2の指定があればその値によって示され、指定がなければ4バイトとなる。「LENGTH OF 一意名-7」を指定すると、追加データ項目のデータ記述は、形式がPIC S9 (9) USAGE BINARYで内容が一意名-7に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

    CALL文のBY VALUE指定中の各パラメータには概念的な追加データ項目があり、呼ばれるプログラム中の手続き部の見出しの中のUSING指定の中に、対応するパラメータが宣言されている。呼ばれるプログラム中のそれらの各パラメータのデータ記述は、対応する概念的な追加データ項目のデータ記述と同じでなければならない。つまり、変換も拡張も切捨てもあってはならない。それに加えて、概念的なデータ項目の暗黙のサイズがシステム領域の最大サイズ(通常は4バイト)を超えてはならない。そうでないと、システムが壊滅的なエラーを起こすことがある。

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

    呼ばれるプログラムがCOBOLプログラムではない場合に、どういうときにBY VALUE指定を使用する必要があるかの詳細については、インターフェイスに関するCOBOLシステム・ドキュメンテーションを参照。

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

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

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

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

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

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

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

    局所記憶節が宣言されていない場合、

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

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

  26. USAGE POINTER

    またはUSAGE PROCEDURE-POINTER

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

    または手続き

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

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

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

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

12.1.5 CANCEL(取消し)文

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

一般形式

構文規則

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

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

一般規則

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

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

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

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

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

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

    またはGOBACK文

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

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

  7. 呼ばれたプログラムは、次の場合に取り消される。1つは、CANCEL文の作用対象として指定することである。もう1つは、対象とするプログラムが属する実行単位が終了することである。

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

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

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

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

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

12.1.6 CHAIN(連鎖)文

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

一般形式

構文規則

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

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

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

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

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

12.1.7 CLOSE(閉じる)文

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

一般形式

書き方 1 (レコード順ファイル)

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

構文規則

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

書き方 1 (レコード順ファイル)
  1. REEL および UNITを指定できるのは、SELECT句に MULTIPLE REELまたは 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 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. The ファイルが存在する媒体に対して適用しなければ、WITH NO REWIND指定もFOR REMOVAL指定も実行時に効力をもたない。

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

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

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

    DELETE FILE文以外には、

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

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

12.1.8 COMMIT(更新確定)文

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

一般形式

一般規則

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

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

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

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

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

12.1.9 COMPUTE(計算)文

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

一般形式

構文規則

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

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

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

一般規則

  1. 前述のROUNDED指定ON SIZE ERROR指定算術文作用対象の重なり 算術文における複数個の答えの各節、およびCOBOL言語の概念の章の明示範囲符と暗黙範囲符COBOLプログラムの概念の章の範囲明示文を参照。

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

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

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

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

12.1.10 CONTINUE(継続)文

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

一般形式

構文規則

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

一般規則

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

12.1.11 DELETE(削除)文

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

一般形式

構文規則

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

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

    この規則は強制しない。

一般規則

  1. DELETE文を実行する際には、対象とするファイルは入出力両用モードで開いておく。(後述する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. DELETE文が実行されると、ファイル名-1に対応する入出力状態の値が更新される。(前述の入出力状態の節を参照。)

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

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

一般形式

一般規則

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

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

12.1.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.1.14 DIVIDE(除算)文

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

一般形式

書き方 1

書き方 2

書き方 3

書き方 4

書き方 5

構文規則

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

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

  3. 作用対象を合成したものは、 18桁を超えてはならない。ここで、作用対象を合成したものとは、すべての受取り側データ項目を小数点の位置を揃えて重ね合わせた結果としてできる、仮想のデータ項目である。ただし、REMAINDERデータ項目は、受取り側データ項目に含めない。

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

一般規則

すべての書き方
  1. 前述のROUNDED指定ON SIZE ERROR指定算術文作用対象の重なり算術文における複数個の答えの各節、COBOL言語の概念の章の明示範囲符と暗黙範囲符COBOLプログラムの概念の章の範囲明示文を参照。さらに、書き方4、5に関連するROUNDED指定とON SIZE ERROR指定については、下記の一般規則5と7を参照。
書き方 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によって参照される値は変更されない。

    2. 剰余に桁あふれが発生した場合、一意名-4によって参照される値は変更されない。しかし、算術演算で複数の結果を求める他の場合と同様、利用者は自分で分析を行って、実際に何が発生したのかを突き止める必要がある。


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

前ページへ 手続き部 - 組み込み関数 手続き部 - ENTER - INVOKE 次ページへ