サブプロシージャーの定義

サブプロシージャーは、メイン・ソース・セクションの後に定義されます。図 37 は、 サブプロシージャーを示し、その相違する部分を強調しています。

図 37. サブプロシージャーの例
 * Prototype for procedure FUNCTION
D FUNCTION        PR            10I 0                     1 
D    TERM1                       5I 0 VALUE
D    TERM2                       5I 0 VALUE
D    TERM3                       5I 0 VALUE

P Function        B                                       2 
 *-------------------------------------------------------------
 * This procedure performs a function on the 3 numeric values
 * passed to it as value parameters.
 *
 * This illustrates how a procedure interface is specified for a
 * procedure and how values are returned from a procedure.
 *-------------------------------------------------------------
D Function        PI            10I 0                     3 
D    Term1                       5I 0 VALUE
D    Term2                       5I 0 VALUE
D    Term3                       5I 0 VALUE
D Result          S             10I 0                     4 
 /free
    Result = Term1 ** 2 * 17
                 + Term2 * 7                              5 
                 + Term3;
    return Result * 45 + 23;
 /end-free
P                 E                                       6 
 1 
名前、戻り値 (ある場合)、パラメーター (ある場合) を指定 するプロトタイプ。
 2 
プロシージャーの始めの指定 (プロシージャー仕様書の 24 桁目に B)。
 3 
プロシージャー・インターフェース定義。これは、 戻り値およびパラメーターがあった場合に、それらを 指定します。プロシージャー・インターフェースは、対応するプロトタイプと一致していなけ ればなりません。 サブプロシージャーから値が戻されず、また、そのサブプロシージ ャーに渡されるパラメーターがない場合には、プロシージャー・インターフェースの定義はオプションです。
 4 
サブプロシージャーには、その他の変数、定数、およびプロトタイプ の定義仕様が必要とされます。 これらの定義はローカル定義です。
 5 
プロシージャーのタスクを実行するためには、標準または自由形式のなんらかの演算仕様書が必要です。演算では、ローカルとグローバルの両方の定義を 参照することができます。 サブプロシージャーの中に組み込まれたサブルーチンは、 いずれもローカルです。 それらをサブプロシージャーの外で使用することはできません。 サブプロシージャーから値が戻される場合には、 そのサブプロシージャーに RETURN 命令が含まれていなければなりません。
 6 
「プロシージャーの終わり」の指定 (プロシージャー仕様書の 24 桁目に E)。

定義仕様書のどこにでも入れることができるプロシージャー・インターフェース定 義を除き、サブプロシージャーは上記の順序でコーディングしなければなりま せん。

サブプロシージャーの場合には、サイクル・コードは生成されません。 したがって、次 のものをコーディングすることはできません。

演算仕様書は一度だけ処理され、演算仕様書の終わりでプロシージャーに戻ります。 詳細については、サブプロシージャー演算を参照してください。

サブプロシージャーはエクスポートすることができますが、これは、プログラム 内の他のモジュールにあるプロシージャーでそれを呼び出すことができることを 意味します。 サブプロシージャーがエクスポートされることを指示するためには、「プロシー ジャーの始め」の指定でキーワード EXPORT を指定してください。 これを指定しなかった場合には、サブプロシージャーはモジュールの中からしか 呼び出すことができません。