手続き部の見出し

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

書き方 1 の一般形式

MF 

書き方 2 の一般形式


*
NETJVM 

書き方 3 の一般形式

指令

  1. 予約語リストにフラグを付けたりその内容を修正したりする機能を提供するコンパイラ指令に加えて、下記の指令がこの節に記述されている構文または意味内容に影響を与える可能性がある。
    • DEFAULTCALLS - 手続き部の見出しに明示的に指定されていない場合に、省略時の呼び出し方式を設定する。
    • STICKY-LINKAGE - 同じプログラム内で異なるエントリ ポイントを呼び出す間に、連絡節項目の番地を指定できる状態を維持するかどうかを制御する。

すべての書き方の構文規則

  1. MF 呼び名は、ランタイム要素が他のランタイム要素により呼び出され、そのランタイム要素が COBOL システムの省略時設定として使用される以外の呼び出し規則を使用している場合にだけ必要である。通常は、COBOL の省略時の呼び出し方式は、COBOL 以外の言語の主要な処理系のランタイム環境で使用されている方式と整合性がある。

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

  2. MF CHAINING および USING は同等である。
  3. ISO2002MF データ名-1 またはデータ名-2 を USAGE OBJECT REFERENCE 句で定義した場合、ACTIVE-CLASS 指定は使用できない。
  4. ISO2002MF データ名-3 は、連絡節でレベル 01 またはレベル 77 項目として定義されなければならない。データ名-3 の記述項目は、REDEFINES 句を含んではならない。連絡節中の別の場所にあるデータ項目では、REDEFINES 句でデータ名-3 を指定してもよい。
  5. ISO2002MF データ名-3 は、データ名-1 とデータ名-2 のいずれとも同じであってはならない。

書き方 1 の構文規則

  1. データ名-1 は、連絡節、

    MF ファイル節、または作業場所節

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

    OSVSVSC2MF 2 回以上現れてもよい。

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

    OSVSVSC2MF REDEFINES 句を含んでもよい。

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

  2. ISO2002MF データ名-2 は、連絡節、

    MF ファイル節、または作業場所節 (ソース単位がメソッド定義またはメソッド プロトタイプ定義の場合は除く)

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

    MF データ名-2 は、字類は何であってもよいが、長さが 8 バイトを超えてはならない。

ISO2002MFNETJVM 

書き方 1 および 3 の構文規則

  1. ISO2002MFNETJVM RETURNING 指定は、関数定義および関数プロトタイプ定義の中で指定しなければならない。
  2. ISO2002MFNETJVM RETURNING 指定は、メソッド定義、プログラム定義、またはプログラム プロトタイプの中で指定できる。
MF 

書き方 2 の構文規則

  1. MF 書き方 2 を使用できるのは、プログラム名段落に EXTERNAL 句が指定されているプログラム、つまり呼び出しプロトタイプ、の中だけである。
  2. MF データ名-1 とデータ名-2 は連絡節内の 01 レベルのレコードとして定義されていなければならない。
  3. MF 型定義名-1、型定義名-2、型定義名-3 は、同じソース ファイル中に TYPEDEF 句を用いて、プログラマによって用途が定義されたものとして、あらかじめ定義されていなければならない。
NETJVM 

書き方 3 の構文規則

  1. NETJVM データ名-1、データ名-2、データ名-4、およびデータ名-5 は、連絡節内の 01 レベルのレコードとして定義されているか、その後に AS 指定がなければならない。
  2. NETJVM 型名-1 は .NET ネイティブ型でなければならない。
  3. NETJVM カスタム属性句については、「データ部」の章の「CUSTOM-ATTRIBUTE 句」のセクションを参照のこと。
  4. NETJVM  YIELDING は反復子の文でのみ指定できる。「Iterator-ID」を参照。
  5. NETJVM YIELDING で指定する項目の型で、反復子の型が決まる。

すべての書き方の一般規則

  1. USING 指定には最大で 5 個のデータ名を指定できる。

    ISO2002MFXOPEN USING 指定には最大で 62 個のデータ名を指定できる。

  2. BY REFERENCE、BY VALUE、BY OUTPUT の各指定はその後ろに続くパラメーターに効力を及ぼすが、別の BY REFERENCE、BY VALUE、または BY OUTPUT の指定が出てきたところでその効力は停止する。最初のパラメーターの前に BY REFERENCE、BY VALUE、BY OUTPUT のどの指定もないと、BY REFERENCE 指定があるものと見なされる。

書き方 1 の一般規則

ENTOSVSOS390 
  1. MF 呼び名は、このプログラムの呼び出し元のプログラムで採用されていると想定される呼び出し規則を識別する。この呼び出し規則は、呼び出し規則が明示的に指定されていない後続のエントリ ポイントにも使用される。実際に使用された呼び出し規則が呼び名によって示されたものと異なる場合、COBOL システムは混乱する。
  2. MF データ名-1 がレベル 01 またはレベル 77 項目としてファイル節あるいは作業場所節に定義されている場合、呼び出し先のランタイム要素は、データ項目がデータ名-1 と同じデータ宣言で連絡節に定義されたかのように動作し、呼び出し先のランタイム要素の最初の文の実行に先立って、このデータ項目の内容がデータ名-1 に移動されたかのように動作する。最初のプログラムでは、これらの値はプログラムの作業記憶域のデータの初期化によって上書きされる。このため、呼び出し先のプログラムには使用できない。
  3. ENTOSVSOS390 呼び出し元のランタイム要素が COBOL である場合、下記の規則が適用される。呼び出し元のランタイム要素が COBOL でない場合、どういうときに BY REFERENCE 指定または BY VALUE 指定を使用する必要があるかの詳細については、インターフェイスに関する COBOL システムのドキュメントを参照。
  4. ENTOSVSOS390 呼び出し先の要素においては常に、データ名-1、

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

    への参照は連絡節中の記述に基づいて解明される。その記述で定義されている文字数が、呼び出し元の要素中の対応するデータ項目よりも多いと、結果はどのようになるかわからない。この規則に外れるか、具体的なランタイム環境において許されるシステム領域の最大許容サイズを超えるかすると、システムは壊滅的な障害を起こす可能性がある。

  5. MF プログラムが呼び出され、USING 指定中の BY REFERENCE の作用対象が呼び出し元のプログラム中のパラメーターに対応する場合、参照のリンクが確立される。そのリンクは制御が呼び出し先のプログラムに戻されるまで持続する。その後、そのプログラムを取り消すことなく、再びそのプログラムを呼び出した場合、同じ BY REFERENCE の作用対象が呼び出し元のプログラムのパラメーターに対応しなければ、その作用対象を参照してはならない。ただし、コンパイラ指令の STICKY-LINKAGE を指定した場合は別である。
  6. ENTOSVSOS390 データ名-4は、連絡節で定義されていなければならない。

書き方 1 および 3 の一般規則

  1. USING 指定は、引数が渡されるプログラム、

    ISO2002 関数、

    ISO2002MF またはメソッド

    で使用される仮パラメーターの名前を指す。渡された引数は、呼び出し元のソース要素において次のいずれかによって識別される。

    • CALL 文の USING 指定
    • ISO2002 関数一意名中の引数
    • ISO2002MF INVOKE 文の USING 指定
    • ISO2002MF メソッドの文中呼び出しで指定された引数
    • ISO2002MF 暗黙的 SET プロパティ メソッドの呼び出しに関するオブジェクト プロトタイプの規則で定義された引数

    2 つの名前リストの間の対応関係は、位置に基づいて確立される。

  2. 引数が内容によって渡される場合、呼び出し先のランタイム要素の動作は下記のようになる。具体的には、呼び出しを開始するプロセスの間に呼び出し元のランタイム要素によって連絡節内のレコードが割り当てられ、そのレコードは呼び出し元のランタイム要素中の引数と同じ記憶領域を占めることはないかのように動作する。

    ISO2002MF 呼び出し元のランタイム要素のリポジトリ段落に呼び出し先のランタイム要素のプログラム指定子が含まれていない場合、割り当てられたレコードは次のように扱われる。

    割り当てられたレコードは引数と同じ長さと見なされ、引数が可変反復データ項目として記述されている場合は最大長が使用される。その引数がその割り当てられたレコードに何も変換せずに転記される。このレコードは、その後、呼び出し先のランタイム要素において、引数として参照によって渡されるものとして扱われる。

    ISO2002MF 呼び出し先のランタイム要素が次のいずれかである場合は動作が異なる。

    ISO2002MF 
    • ISO2002MF 呼び出し元のランタイム要素のリポジトリ段落にプログラム指定子が含まれているプログラム
    • ISO2002MF メソッド
    • ISO2002MF 関数

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

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

    ISO2002MF 次のいずれかにおいて、引数が送り出し側作用対象として使用され、割り当てられたレコードが受け取り側作用対象として使用される。

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

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

  3. 引数が参照によって渡された場合、仮パラメーターが引数と同じ記憶領域を占めるかのように、呼び出し先のランタイム要素は動作する。
  4. ISO2002MF 引数が値によって渡される場合、呼び出し先のランタイム要素の動作は下記のようになる。具体的には、呼び出しを開始するプロセスの間に呼び出し元のランタイム要素によって連絡節内のレコードが割り当てられ、そのレコードは呼び出し元のランタイム要素中の引数と同じ記憶領域を占めることはないかのように動作する。この割り当てられたレコードの長さは引数とちょうど同じ文字数である。その引数がその割り当てられたレコードに何も変換せずに転記される。このレコードは、その後、呼び出し先のランタイム要素において、引数として参照によって渡されるものとして扱われる。
  5. データ名-1 に OPTIONAL 指定が使用されている場合は、対応する有効な引数を指定するか、対応する引数を OMITTED に置き換えることができる。データ名-1 に OPTIONAL 指定が使用されていない場合は、OMITTED 指定を対応する引数として使用することはできない。

    COBOL では、戻り項目の領域が呼び出し元のソース単位で割り当てられる。呼び出し先の要素に含まれるのは連絡節の正式な記述のみとなる。

MF 

書き方 2 の一般規則

  1. MF 呼び出しプロトタイプ (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 指定を持たない) が最後の 1 つを使用するかのように扱われる。しかし、相応する呼び出しプロトタイプが見つかるときは、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 は無限となる。
NETJVM 

書き方 3 の一般規則

  1. NETJVM データ名-5 が参照するデータ項目には、ランタイム要素が呼び出された時点では値が格納されていない。データ名-5 が参照するデータ項目が受け取り項目になる前にその値にアクセスしようとすると実行時例外が発生する。
  2. NETJVM 呼び出し先の要素においては常に、データ名-1、データ名-2、データ名-4、およびデータ名-5 への参照は連絡節または AS 指定の記述に基づいて解明される。その記述で定義されている文字数が、呼び出し元の要素中の対応するデータ項目よりも多いと、結果はどのようになるかわからない。この規則に外れるか、具体的なランタイム環境において許されるシステム領域の最大許容サイズを超えるかすると、システムは壊滅的な障害を起こす可能性がある。
  3. NETJVM CUSTOM-ATTRIBUTE 句が指定されている場合、カスタム属性情報は生成されたコードに含まれる。