プログラムの流れではプロシージャーは迂回され、PROCEDURE ステートメントの 前にあるステートメントが実行されたあと、そのプロシージャーの END ステートメントの あとにあるステートメントが実行されます。 プロシージャーは、プロシージャー参照 によってしか活動化されません。(プログラムの活動化では、主プロシージャーを 活動化する方法が説明されています。) 呼び出しプロシージャーの実行は、呼び出されたプロシージャーが 呼び出すプロシージャーに制御を戻すまで遅らされます。
下記のいずれかのコンテキストの中に入り口式が書かれていることを、プロシージャー参照といいます。
この節の情報は、これらのコンテキストと関係があります。 ただしこの章の例では、CALL ステートメントを使用しています。
プロシージャー参照が実行されると、指定されたエントリー・ポイントを含む プロシージャーは呼び出される ことになります。 プロシージャー参照が書かれている場所を呼び出し点 といい、 参照が行われるブロックを呼び込み側ブロック といいます。 呼び出し側ブロックは、呼び出されたプロシージャーに制御が移されても、アクティブのままです。
1 次エントリー・ポイントからプロシージャーが呼び出されると、 引数およびパラメーターは関連付けられ、 呼び出されたプロシージャーの最初のステートメントから実行が始まります。 プロシージャーが ENTRY ステートメントで 2 次エントリー・ポイントから呼び出されると、 ENTRY ステートメントに続く最初のステートメントから、実行が始まります。 1 次エントリー・ポイントで、あるブロックの入り口について確立された環境は、 同じブロックが 2 次エントリー・ポイントで呼び出される時に確立される環境と同じです。
2 つのプロシージャー間の通信は、呼び出しプロシージャーから渡される引数、呼び込まれたプロシージャーから戻される値、および双方のプロシージャーにおいて既知の名前のいずれかによって行われます。 したがって、同じプロシージャーでも、呼び出し点が異なれば異なるデータを処理することができます。 以下に例を示します。
Readin: procedure; statement-1 statement-2 Errt: entry; statement-3 statement-4 end Readin;
以下の入り口の参照で活動化されます。
call Readin; call Errt;
call Readin ステートメントは、 その 1 次エントリー・ポイントで Readin を呼び出し、 statement-1 で実行が開始されます。 call Errt ステートメントは 2 次エントリー・ポイント Errt で、 Readin プロシージャーを呼び出し、実行は statement-3 で開始されます。 入り口定数 (Readin) を、 プロシージャー参照で使用される入り口変数に割り当てることもできます。 以下に例を示します。
declare Readin entry,
Ent1 entry variable;
Ent1 = Readin;
call Ent1;
call Readin;2 つの CALL ステートメントは、同じ効果があります。