PARM (パラメーターの識別)

自由形式構文 (許可されていない - プロトタイプおよびパラメーターおよび CALLP を使用)
コード 演算項目 1 演算項目 2 結果フィールド 標識
PARM ターゲット・フィールド ソース・フィールド パラメーター

宣言命令の PARM は、パラメーター・リスト (PLIST) を構成するパラメー ターを定義します。 PARM 命令は、この命令が参照している PLIST、CALL、また は CALLB 命令の直後であれば、演算の中の任意の場所に入れることができます。 PARM ステートメントは、呼び出されるプログラムまたはプロシージャーが必要 とする順序でなければなりません。 PARM ステートメントは 1 つ使用するか、 あるいは CALL の場合には最大 255、 CALLB または PLIST の場合には最大 399 まで使用することができます。

PARM 命令は、演算 (合計演算を含む) の中の任意の場所に指定することが できます。 制御レベルの指定 (7 から 8 桁目) は ブランクにするか、あるいはプログラムの適切なセクション内のステートメントを グループにまとめるために L1 から 19 標識、LR 標識、または L0 項目を指定することができます。 条件付け標識の指定 (9 から 11 桁目) は使用できません。

演算項目 1 と演算項目 2 は任意指定です。 指定する場合には、これらの指定は結果フィールドに指定されたものと同じタ イプでなければなりません。 ターゲット・フィールドが可変長の場合、その長さはソース・フィールドの長さの値に設定されます。 リテラルまたは名前付き定数は、演算項目 1 には指定できません。 結果フィールドに複数オカレンスデータ構造の名前または *OMIT が入っている場合には、演算項目 1 と演算項目 2 はブランクでなければなりません。

ヒント

アプリケーションにとってパラメーター・タイプの検査が重要である場合には、PLIST および PARM 命令を使用しないで、呼び出しインターフェースのプロトタイプお よびプロシージャー・インターフェースの定義を定義してください。

結果フィールドには次の名前を指定しなければなりません。

PARM 命令の結果フィールドの指定に次を入れることはできません。

また、*ENTRY PLIST の PARM 命令の結果フィールドの指定には次も使用できま せん。

*ENTRY PLIST には、フィールド名を 1 回だけ指定することができます。

結果フィールドに配列が指定されて場合には、呼び出されたプログラムまた はプロシージャーにその配列用に定義された区域が渡されます。 呼び出されたプログラムまたはプロシージャーに複数オカレンス・データ構造が渡 される場合には、そのデータ構造のすべてのオカレンスが単一のフィールドと して渡されます。 しかし、結果フィールドに複数オカレンス・データ構造のサブフィールドが指定さ れている場合には、呼び出されたプログラムまたはプロシージャーにそのサブ フィールドの現在のオカレンスだけが渡されます。

それぞれのパラメーター・フィールドには 1 つの記憶位置があるだけです。 それは呼び出し元のプログラムまたはプロシージャー内にあります。 結果フィールドの記憶位置のアドレスは、呼び出されたプログラムまたはプロ シージャーに PARM 命令で渡されます。 呼び出されたプログラムまたはプロシージャーによってパラメーターの値が変 更される場合には、その記憶位置のデータが変更されます。 呼び出し側プログラムまたはプロシージャーに制御が戻された場合には、呼び出し側プログラムまたはプロシージャーのパラメーター (すなわち、結果フィールド) が変更されています。 呼び出されたプログラムまたはプロシージャーがパラメ ーターの値を変更した後でエラーで終了した場合にも、変更された値は呼び出し側プログラムまたはプロシージャー内に存在します。 呼び出されたプログラムまたはプロシージャーに渡された情報を保存して後で 使用するためには、演算項目 2 に呼び出されたプログラムまたはプロシージャ ーに渡したい情報が入っているフィールドの名前を指定してください。演算項目 2 が結果フィールドにコピーされて、結果フィールドの記憶域アドレ スが、呼び出されたプログラムまたはプロシージャーに渡されます。

パラメーター・フィールドはフィールド名でなくアドレスでアクセスされる ので、呼び出し元と呼び出し先のパラメーターが受け渡しするフィールドに同じフィ ールド名を使用する必要はありません。 呼び出し元と呼び出し先のプログラムまた はプロシージャーの対応するパラメーター・フィールドの属性は同じでなけれ ばなりません。 そうでない場合には、好ましくない結果が生ずる場合がありま す。

CALL または CALLB 命令が実行されると、次のことが行われます。

  1. 呼び出し元のプロシージャーでは、PARM 命令の演算項目 2 のフィールドの 内容が同じ PARM 命令の結果フィールド (レシーバー・フィールド) にコピー されます。
  2. CALLB で結果フィールドが *OMIT の場合には、呼び出されたプロシージャ ーにヌルのアドレスが渡されます。
  3. 呼び出されたプロシージャーでは、制御が渡されて通常のプログラムの 初期化が行われた後で、PARM 命令の結果フィールドの内容が同じ PARM 命令の演算項目 1 のフィールド (レシーバー・フィールド) にコピーされます。
  4. 呼び出されたプロシージャーでは、呼び出し元のプロシージャーに制御が戻 される時に、PARM 命令の演算項目 2 のフィールドの内容が同じ PARM 命令の 結果フィールドにコピーされます。 呼び出されたプロシージャーが異常終了した場合には、この転送は行われま せん。 この転送でエラーが起こると、転送の結果は予測できないものになります。
  5. 呼び出し元のプロシージャーに戻ると、呼び出し元のプロシージャーの PARM 命令の結果フィールドの内容が同じ PARM 命令の演算項目 1 フィールド (レシ ーバー・フィールド) にコピーされます。 呼び出されたプロシージャーが異常終了した場合、または呼び出し命令でエラー が起こった場合には、この転送は行われません。

注:
データは、EVAL 命令コードを使用してデータを転送するのと同じ方法で 転送されます。 タイプの互換性が厳密に適用されます。 CL プログラムを介して プログラムを呼び出し、そのプログラムにパラメーターを渡す方法 については、CL プログラミング を参照してください。

詳細については、呼び出し命令または 宣言命令を参照してください。

図 334 に、PARM 命令を示します。