ページ・オーバーフローの処理

PRINTER ファイルを使用する時の重要な考慮事項は、ページ・オーバーフロー です。 外部記述 PRINTER ファイルの場合には、ページ・オーバーフローの処理はユー ザーの責任で行ってください。 次の 1 つを実行します。

プログラム記述または外部記述ファイルの場合には、ファイル仕様書に キーワード OFLIND (オーバーフロー標識) を使用して標識 *IN01 〜 *IN99 を指定することができます。 この標識は、行がオーバーフロー行に印刷されるか、あるいは 行送り操作またはスキップ操作中にオーバーフロー行に達したか、これを超えた時 に、オンに設定されます。 標識を使用して、オーバーフロー条件への応答を 条件付けることができます。 この標識は、オーバーフロー標識 (*INOA - *INOG、*INOV) が実行するような 、RPG オーバーフロー論理を条件付けしません。 標識をオフに 設定することはユーザーの責任です。

プログラム記述と外部記述の両方のファイルの場合には、行番号およびページ 番号は、ファイルの INFDS のプリンター・フィードバック・セクションで使用可能 です。 この情報をアクセスするためには、 ファイル仕様書に INFDS キーワードを指定してください。 この仕様書では、367 〜 368 桁目に行番号を定義し、データ構造の 369 〜 372 桁目に ページ番号を定義してください。 行番号とページ番号の両方のフィールドとも、小数部を持たない 2 進数として定 義しなければなりません。 INFDS はプリンター・ファイルに対するすべての出力操作の後に更新されるので、 これらのフィールドを使用して、プログラム中に行カウントの論理をもたずに 現在の行およびページ番号を判別することができます。

注:
プリンター・ファイルをディスクなどの別の装置に一時変更した場合 には、INFDS のプリンター・フィードバック・セクションは更新されず、行カウントの論理は正しく なくなります。

プログラム記述 PRINTER ファイルの場合には、以下の項で説明する オーバーフロー標識およびフェッチ・オーバーフロー・ルーチン論理が 適用されます。

プログラム記述ファイルでのオーバーフロー標識の使用

オーバーフロー標識 (OA 〜 OG、OV) は、ページの最後の行を印刷、または 超えた時にオンに設定されます。 オーバーフロー標識を使用して、次のページに印刷する行を指定することがで きます。 オーバーフロー標識は、プログラム記述 PRINTER ファイルの場合にだけ指定す ることができ、主に見出し行の印刷を条件付けるために使用されます。 オーバーフロー標識は、出力仕様書に OFLIND キーワードを使用して指定され 、演算仕様書 (9 〜 11 桁目) および出力仕様書 (21 〜 29 桁目) の命令を条件付 けるために使用することができます。 オーバーフロー標識が指定されていない場合には、コンパイラーが最初の未使 用のオーバーフロー標識を PRINTER ファイルに割り当てます。 オーバーフロー標識は、演算仕様書の結果の標識 (71 〜 76 桁目) として 指定することもできます。

コンパイラーは、ページでオーバーフロー状態が最初に起こった時点でのみオーバーフロー標識をオンに 設定します。以下の 1 つが起こった場合には必ず、オーバーフロー条件ということになります。

表 41 には、ファイル仕様書および出力仕様書で、 オーバーフロー標識がある場合またはない場合の結果が示してあります。

以下の考慮事項は出力仕様書で使用するオーバーフロー標識に適用されます。

表 41. オーバーフロー標識がある場合またはない場合の結果
ファイル仕様書の桁 44 〜 80 出力仕様書の桁 21 〜 29 処置
記入なし 記入なし 未使用の最初のオーバーフロー標識がオーバーフロー時の 次ページへのスキップの条件付けに使用されます。
記入なし 記入 コンパイル時のエラー。オーバーフロー標識が出力仕様書から 脱落しています。 未使用の最初のオーバーフロー標識がオーバーフロー時の 次ページへのスキップの条件付けに使用されます。
OFLIND(標識) 記入なし 連続印刷中。オーバーフローは認識されません。
OFLIND(標識) 記入 通常のオーバーフロー処理。

すべてのページへの見出しの印刷例

図 178 には、すべてのページへの見出しの印刷に必要なコーディングの例が 示されています。1 ページ目、すべてのオーバーフロー・ページ、および制御フィールドの変更 (L2 がオン) の ために開始される各改ページ。 最初の行によって、オーバーフローが起こった (OA がオンで L2 がオンでない) 時にのみ、 見出しを新しいページの最上部 (06 にスキップ) に印刷することができます。

2 行目では、新制御グループの始め (L2 がオン) でのみ新しいページに見出し を印刷することができます。 この方法では、L2 と OA の両方がオンになることに よって発生する重複見出しは起こりません。 2 行目によって、制御フィールドが レコードで指定されている場合には、最初のレコードは常に制御の 切れ目となる (L2 をオンにする) ので、最初のレコード が読み取られた後に、見出しを 1 ページ目に印刷することができます。

図 178. すべてのページへの見出しの印刷
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+.............................
OPRINT     H    OANL2                  3  6
O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat++
O         OR    L2
O                                            8 'DATE'
O                                           18 'ACCOUNT'
O                                           28 'N A M E'
O                                           46 'BALANCE'
O*

すべてのページへのフィールドの印刷例

図 179 には、すべてのページに一定のフィールドを印刷する ために必要なコーディングを示してあります。この場合には、オーバーフロー 条件または制御レベルの変更 (L2) で 06 へのスキップが行われます。 NL2 標識は、同じサイクルで行の印刷またはスキップが 2 回行われないよう にするものです。

図 179. すべてのページへのフィールドの印刷
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
OFilename++DF..N01N02N03Excnam++++B++A++Sb+Sa+.............................
OPRINT     D    OANL2                  3  6
O         OR    L2
O..............N01N02N03Field+++++++++YB.End++PConstant/editword/DTformat++
O                       ACCT                 8
O*