手続き部の見出し

手続き部の冒頭には、下記の見出しを付けなければならない。

一般形式

形式 1

形式 2

指令

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

構文規則

すべての形式
  1. 呼び名は、目的プログラムが他のプログラムにより起動され、そのプログラムがCOBOLシステムの省略時設定として使用される以外の呼出し規則を使用している場合にだけ必要である。一般に、省略時設定のCOBOL呼出し規則は、実行時環境のCOBOL以外の言語の環境によって使用されるものと一致する。

    呼び名は、特殊名段落で定義しなければならない。この方法、および実行時環境でサポートされる呼出し規則とのインターフェイスをCOBOLシステムで記述する方法の詳細については、環境部の章の特殊名段落節を参照。

  2. CHAININGおよびUSINGは同等である。

  3. データ名-1 またはデータ名-2 をUSAGE OBJECT REFERENCE で指定した場合、ACTIVE-CLASS指定は使用できない。

  4. データ名-3 は、 連絡節でレベル 01またはレベル 77記述項として指定しなければならない。データ名-3 のデータ記述項は、REDEFINES句を含めてはならない。連絡節中の別の場所にあるデータ項目では、REDEFINES句でデータ名-3を指定してもよい。

  5. データ名-3は、データ名-1と データ名-2のいずれとも同じであってはならない。

形式 1
  1. データ名-1は、呼ばれるプログラムのリンク節、

    ファイル節、または作業領域節

    で、レベル01またはレベル77項目として定義されなければならない。特定のユーザ定義の語は、データ名-1として 2回以上現れてはならない。

    2回以上現れてもよい。

    データ名-1の記述項目は、REDEFINES句を含んではならない。

    REDEFINES句を含んでもよい。

    しかし、データ名-1はリンク節のどこにおいても REDEFINES句の対象にできる。

  2. データ名-2は、呼ばれるプログラムのリンク節、

    ファイル節、または作業領域節

    で、レベル01またはレベル77項目として定義されなければならない。データ名-2 は、字類が数字、オブジェクト、またはポインタのデータ項目として定義しなければならない。

    データ名-2の字類はどれでもかまわない。ただし、その長さは8バイト以下でなければならない。

  3. RETURNING指定は、関数定義および関数プロトタイプ定義の中で指定しなければならない。

  4. RETURNING指定は、メソッド定義、プログラム定義、およびプログラムプロトタイプの中で指定しなければならない。

形式 2
  1. 形式 2 は、PROGRAM-ID段落に記述されたEXTERNAL句のあるプログラムでだけ使用することができる。これは、呼出しプロトタイプである。

  2. データ名-1とデータ名-2は、リンク節の01レベルレコードとして定義しなければならない。

  3. 型定義名-1、型定義名-2、型定義名-3は、同じ原始ファイルにTYPEDEF句でプログラマ定義の使用としてあらかじめ定義しなければならない。

一般規則

すべての形式
  1. 手続き部見出しのUSING句では、5つまでのデータ名が許される。

    USING句では、62までのデータ名が許される。

  2. BY REFERENCE句およびBY VALUE句は、他のBY REFERENCE句またはBY VALUE句があるまで、それに続くパラメータを移行する。はじめのパラメータに先行してBY REFERENCE句またはBY VALUE句が記述されていないと、BY REFERENCE句が想定される。

形式 1
  1. 呼び名は、このプログラムがそれをプログラム名あるいは入口名で起動した呼ぶプログラムにより適用されたとみなされる呼出し規則を確認する。実際に使用された呼出し規則が呼び名によって示されたものと異なる場合、COBOLシステムが動作しなくなる場合がある。

  2. データ名-1がレベル01またはレベル77項目としてファイル節あるいは作業領域節に定義されている場合、目的プログラムは、データ項目がデータ名-1と同じデータ宣言でリンク節に定義されたかのように動作し、呼ばれるプログラムの最初の文の実行に先立って、このデータ項目の内容がデータ名-1に移動されたかのように動作する。最初のプログラムでは、これらの値はプログラムの作業領域のデータの初期化によって上書きされる。このため、呼ばれるプログラムには使用できない。

  3. 呼ぶプログラムがCOBOLの場合、以下の規則を適用する。呼ぶプログラムがCOBOLでない場合、BY REFERENCEまたはBY VALUE句を使用する必要がある時の詳細は、COBOLシステムのマニュアルを参照。

  4. USING指定は、引数の渡し先であるプログラム、

    関数、

    またはメソッドが使用する仮パラメータの名前を識別する。渡された引数は、原始要素が起動する際に、以下のいずれかにより識別される。

    2つの名前リストの間の対応は、位置を元にして決められる。

  5. 内容により引数が渡された場合は、起動するランタイム要素により、実行の開始処理中に連絡節中のレコードが割り当てられた場合と同様に動作する。また、このレコードが、起動するランタイム要素の中の引数と同じ記憶域を占めていない場合と同様に動作する。

    起動する側のランタイム要素のリポジトリ段落に、起動される側のランタイム要素のプログラム指定子が含まれておらず、CALL文に対するNESTED指定がない場合は、この割り当てられたレコードは、引数と同じ長さとする。ここで、引数が変数反復データ項目として記述されていれば、最大長が使用される。引数は、変換されることなく、この割り当てられたレコードに転記される。このレコードはその後、起動される側のランタイム要素によって、引数として、また、参照により引き渡されるものとして扱われる。

    起動される側のランタイム要素が、

    • 起動する側のランタイム要素のリポジトリ段落に、そのプログラム指定子が含まれているプログラム、
    • NESTED指定を含むCALL文で呼び出されたプログラム、
    • メソッド、または
    • 関数

    のいずれかである場合、この割り当てられたレコードは、以下のいずれかとなる。

    • 仮パラメータがANY LENGTH句で記述されている場合は、引数と同じ項類、用途、および長さのデータ項目
    • 仮パラメータが変数反復データ項目として記述されている場合は、仮パラメータと同じ記述およびバイト数(最大長が使用される)のデータ項目

    以下のいずれかで、引数が送出し側作用対象として、また、割り当てられたレコードが受取り側作用対象として使用される。

    • 仮パラメータが数字項目の場合、ROUNDED指定を伴わないCOMPUTE文
    • 仮パラメータの字類が指標、オブジェクト、またはポインタの場合、SET文
    • MOVE文

    割り当てられたレコードは、その後、引数として、また、参照により引き渡されるものとして扱われる。

  6. 引数が参照により引き渡される場合は、起動される側のランタイム要素は、仮パラメータが引数と同じ記憶域を占める場合と同様に動作する。

  7. 引数が値により引き渡される場合は、起動される側のランタイム要素は、連絡節中のレコードが、起動する側のランタイム要素の起動の開始処理中に割り当てられる場合と同様に動作する。また、また、このレコードが、起動するランタイム要素の中の引数と同じ記憶域を占めていない場合と同様に動作する。この割り当てられたレコードの英数字文字位置の長さは、引数とまったく同じとする。この引数は、変換されることなく、この割り当てられたレコードに転記される。このレコードはその後、起動される側のランタイム要素によって、引数として、また、参照により引き渡されるものとして扱われる。

  8. 呼ばれるプログラム中ではいつでも、データ名-1、

    データ名-2、およびデータ名-3

    への参照は、呼ばれるプログラムのリンク節で与えられた項目の記述に従って決定される。この記述が呼ぶプログラムの相応するデータ項目よりも多くの文字位置を定義している場合、予期せぬ結果となる。この規則の適用に失敗したり、特定のランタイム環境用のシステム領域で許される最大サイズを超えると、システムはたいへんな損害を被ることになる。

  9. プログラムが呼ばれ、USING句のBY REFERENCE作用対象が呼ぶプログラムのパラメータに相応する時、関連する接続が確立され、呼ぶプログラムに制御が戻るまで保たれる。プログラムが間にキャンセルせずに二度呼ばれ、同じBY REFERENCE作用対象が呼ぶプログラム中のパラメータと一致しない場合、この作用対象をSTICKY-LINKAGEコンパイラ指令を指定せずに参照してはならない。

  10. OPTIONAL指定がデータ名-1について使用されている場合は、対応する引数としてOMITTED指定を使用できる。そうでない場合は、 OMITTED指定を対応する引数として使用してはならない。

形式 2
  1. 呼出しプロトタイプ(PROGRAM-ID段落中のEXTERNAL句付きのプログラム)が 書き方 2 PROCEDURE DIVISION見出しを持ち、同じ原始ファイル中の他のプログラムがこの呼出しプロトタイプのプログラム名を参照するCALL文を持っている場合、以下の規則が提供される。

    1. 呼出し規則がCALL文中に記述されている場合、これはプロトタイプに(明示的あるいは暗黙的に)記述されたものと一致しなければならない。CALL文に呼出し規則が記述されていない場合、プロトタイプに(明示的あるいは暗黙的に)記述された呼出し規則が使用される。

    2. CALL文に記述されたパラメータの数は、プロトタイプに記述されたパラメータの数と同じでなければならない(REPEATED句により許されたものを除く)。

    3. CALL文に記述された各パラメータには、以下の規則が適用される。

      1. BY REFERENCE句またはBY CONTENT句がパラメータと関連している場合、プロトタイプ中の相応するパラメータは、BY REFERENCEで指定されなければならない。

      2. BY VALUE句がパラメータと関連している場合、プロトタイプ中の相応するパラメータは、BY VALUEで指定されなければならない。

      3. CALL 文中のパラメータがBY REFERENCE句、BY CONTENT句、BY VALUE句を持たない場合、プロトタイプに(明示的あるいは暗黙的に)記述された句が使用される。

      4. この規則は、相応する呼出しプロトタイプが見つからない時に適用される規則を置換える。つまり、呼出しプロトタイプが使用されない時、はじめのBY句までのすべてのパラメータは、BY REFERENCEが指定され、BY句の後のすべてのパラメータ(これ自身は明示的なBY句を持たない)が最後の一つを使用するかのように扱われる。しかし、相応する呼出しプロトタイプが見つかる時は、BY句用の定義が優先する。

      5. プロトタイプ中のパラメータの字類が数字、あるいはポインタか索引データ名の場合、CALL文中のパラメータは同じデータ定義を持たなければならない。

      6. プロトタイプ中のパラメータの字類が英数字である場合、CALL文中のパラメータも英数値クラスもので、プロトタイプ中のパラメータと少なくとも同じ長さでなければならない。

      7. ANYがプロトタイプに記述されている場合、CALL文中のパラメータはどの字類でもよい。

    4. CALL文が GIVING句またはRETURNING句を含んでいる場合、プロトタイプも句を含んでいなければならない(逆も同様)。CALLに記述されたデータ項目のデータ定義は、プロトタイプに記述されたデータ項目のものと同じでなければならない。

    5. プロトタイプ中のDELIMITED BY SIZE句は、英数字パラメータ用にだけ使用される。この場合、CALL文中の対応するパラメータは暗黙に割当てられたデータ領域に移動され、バイナリ0 (x"00") 文字がこのデータのコピーの直後に置かれる。BY SIZE句が省略されると、CALL 文中の対応するパラメータが暗黙に割当てられたデータ領域に移動され、バイナリ0 (x"00") 文字がコピーデータの最後のスペース以外の文字の直後に置かれる。これは、ヌルで終わるテキスト文字列を使用するC言語のような言語とのインターフェイスを取ることを目的としている。

    6. REPEATED句は、少なくとも整数-1と最終パラメータの整数-2の繰返しがあることを示す。整数-1 TO整数-2が記述されないと、整数-1は0となり、整数-2は無限となる。