プリプロセッサー ANSWER ステートメントは、 RETURNS 属性のないプリプロセッサー・プロシージャー内で だけ使用できます。
ANSWER ステートメントは、テキストを作成するか、またはほかの プリプロセッサー・プロシージャーを呼び出します。あるいは、その両方を行います。 応答されたテキストは、ソース・テキスト内のプリプロセッサー ・プロシージャーの呼び出しを置換します。 ANSWER ステートメントは 1 つのプリプロセッサー・プロシージャー内で何回でも使うことができます。
省略形 : ANSWER の場合は ANS、COLUMN の場合は COL、 MARGINS の場合は MAR です。
テキストが式の場合、式の計算は通常の方法で行われ、結果は単一文字ストリングに変換されます。
SCAN または RESCAN が有効な場合には、置換とプリプロセッサー・プロシージャー呼び出しのために、その文字ストリングが走査されます。 この置換はそのプリプロセッサー・プロシージャーの範囲内で行われ、応答 されたテキストが戻される範囲内で行われることはありません。 それから、応答されたテキストがソース・テキスト内のプリプロセッサー呼び出しの点に挿入されます。 テキストがソース・テキストに戻されたあとは、いかなる置換アクティビティ ーが行われても、そのテキストが走査されることはありません。
ストリング内の置換アクティビティーは、ソース・テキストの走査と置換のときに用いられるのと同じ規則に従って行われます。 例を参照してください。
exp5 に指定される値は、 MACLMAR (左マージン) 組み込み関数と MACRMAR (右マージン) 組み込み関数によって 戻される範囲内になければなりません。
ANSWER ステートメントの MARGINS オプションを指定しない場合の、 デフォルトの値は MARGINS(MACLMAR,MACRMAR) です。 オペランドを指定しないで MARGINS オプションを指定する場合は、 デフォルトの値は MARGINS(MACCOL,MACRMAR) です。
同じプリプロセッサー・プロシージャーの中で、式を指定した RETURN ステ ートメントと ANSWER ステートメントの両方を一緒に使うことはできません。
%dcl (Expression, Single_string) entry;
%dcl (Deactivated_macro, Statement_function) entry;
%dcl Deactivated_variable character;
%deact Deactivated_variable, Deactivated_macro;
%Deactivated_variable = '** value of deactivated variable **';
%Deactivated_macro: procedure returns( character );
return( '** value of deactivated macro **' );
%end;
%Statement_function: procedure( key1 ) stmt returns( fixed );
dcl key1 fixed;
return( key1 + key1 );
%end;
%Expression: procedure;
ANS( Counter ) skip;
ANS( Deactivated_macro ) skip;
ANS( Deactivated_variable ) skip;
/* The following is invalid: */
/* ANS( Statement_function Key1(7);); */
%end;
%Single_string: procedure;
ANS( 'Counter' ) skip;
ANS( 'Deactivated_macro' ) skip;
ANS( 'Deactivated_variable' ) skip;
ANS( 'Statement_function Key1( 7 );' ) skip;
%end;
Expression /* Generates: */
/* 00001 */
/* ** value of deactivated macro ** */
/* ** value of deactivated variable ** */
Single_string /* Generates: */
/* Counter */
/* Deactivated_macro */
/* Deactivated_variable */
/* 14 */