自由形式プロシージャー・インターフェース定義
プロシージャー・インターフェースは DCL-PI ステートメントで始まります。
DCL-PI ステートメントの後には、ゼロ個またはそれ以上のパラメーター が続き、その後に END-PI ステートメントが続きます。
プロシージャー・インターフェースを始めるための DCL-PI ステートメント
最初のステートメントは DCL-PI で始まり、その後にプロシージャーの 名前が続くか、プロシージャーの名前を繰り返したくない場合は *N が続き、 さらにその後にキーワードが続き、最後はセミコロンで終わります。
- サイクル・メイン・プロシージャーのプロトタイプを指定しない場合、 プロシージャー・インターフェースの名前として *N を使用します。
- リニア・メイン・プロシージャーのプロトタイプを指定しない場合、 プロシージャー・インターフェースに対して EXTPGM キーワードを パラメーターなしで指定することができます。
プロシージャー・インターフェースのパラメーター
自由形式のパラメーター定義を参照してください。
プロシージャー・インターフェースを終了するための END-PI ステートメント
- END-PI の後にプロシージャーの名前を続けることができます。
- パラメーターがない場合、END-PI を DCL-PI ステートメント の一部として、キーワードに続けて、セミコロンの前に指定できます。 この場合、END-PI の後にプロシージャー名を指定することはできません。
自由形式のプロシージャー・インターフェースの例
- プロトタイプのないサイクル・メイン・プロシージャーのプロシージャー・インターフェース。
プロシージャー・インターフェース名に *N が指定されています。
このプロシージャー・インターフェース内には 1 つのパラメーター name が指定されています。
(この例は、サイクル・メイン・プロシージャーが指定されている完全なプログラムを示しています)
CTL-OPT OPTION(*SRCSTMT); DCL-PI *N; 1 name CHAR(10) CONST; END-PI; DSPLY ('Hello ' + name); RETURN; - プロトタイプのないリニア・メイン・プロシージャーのプロシージャー・インターフェース。
EXTPGM キーワードがパラメーターなしで指定されています。
(この例は、リニア・メイン・プロシージャーが指定されている完全なプログラムを示しています)
CTL-OPT MAIN(sayHello) OPTION(*SRCSTMT); DCL-PROC sayHello; DCL-PI *N EXTPGM; 2 name CHAR(10) CONST; END-PI; DSPLY ('Hello ' + name); END-PROC; - 3 つのパラメーターがあるプロシージャー・インターフェース。
END-PI ステートメントは名前なしで指定されています。
DCL-PROC addNewOrder; DCL-PI *N; id INT(10) VALUE; quantity INT(10) CONST; price PACKED(7 : 2) CONST; END-PI; 3 ... END-PROC; - END-PI ステートメントに名前が指定されています。
DCL-PROC addNewOrder; DCL-PI *N; id INT(10) CONST; quantity INT(10) CONST; price PACKED(7 : 2) CONST; END-PI addNewOrder; 4 ... END-PROC; - DCL-PI ステートメントの一部として END-PI が指定されています。
(この例は、完全なプロシージャーを示しています)
DCL-PROC getCurrentUser; DCL-PI *N CHAR(10) END-PI; 5 DCL-S currentUser CHAR(10) INZ(*USER); RETURN currentUser; END-PROC; - DCL-PARM を使用して一部のサブフィールドを定義しているプロシージャー・インターフェース。
- パラメーター select は、 自由形式演算内で使用を許可されている命令コードと同じ名前です。 このパラメーターには DCL-PARM が必要です。 表 1を参照してください。
- パラメーター name は、命令コードと同じ名前ではないため、DCL-PARM は不要です。
- パラメーター address は、命令コードと同じ名前ではないため、 DCL-PARM は必要ありませんが、あっても有効です。
DCL-PI *N; DCL-PARM select CHAR(10); 6a name CHAR(10); 6b DCL-PARM address CHAR(25); 6c END-PI; - 別の例については、外部名としての *DCLCASE の指定を参照してください。
