ON ステートメントでファイル変数を指定した場合は、その ON ユニットの設定時にその変数の現行値であるファイル定数が参照されます。
dcl F file,
G file variable;
G = F;
L1: on endfile(G);
L2: on endfile(F);
ラベル L1 と L2 が付いている 2 つのステートメントは同等です。
declare FV file variable, FC1 file, FC2 file; FV = FC1; on endfile(FV) go to Fin;
·
·
·
FV = FC2; read file(FC1) into (X1); read file(FV) into (X2);
最初の READ ステートメントの実行中に ENDFILE 条件が起こると、 ON ユニットに入ります。これは、 この ON ユニットがファイル FC1 を参照しているためです。 しかし、2 番目の READ ステートメントの実行中に ENDFILE 条件が起こっても、 この READ ではファイル FC2 を参照しているので、 この ON ユニットには入りません。
E: procedure; declare F1 file; on endfile (F1) goto L1; call E1 (F1);
·
·
·
E1: procedure (F2); declare F2 file; on endfile (F2) go to L2; read file (F1); read file (F2); end E1;
E1 の中で F1 がファイルの終わりになると、 E1 の中の F2 用の ON ユニットに入ります。 E1 の中で ON ユニットを指定しなかったとき、 F1 または F2 の ENDFILE 条件が起こった場合には、 E の中の F1 用の ON ユニットに入ることになります。
declare FV file variable, FC1 file, FC2 file; do FV=FC1,FC2; on endfile(FV) go to Fin; end;
ファイル変数を指定している ON ステートメントが複数回実行され、なおかつ、その変数がそのつど 異なる値を取る場合は、それぞれの実行のたびに別々の ON ユニットが設定されます。