出力レコード出口
出力レコード出口を使うと、行データ変換で出力ファイルに書き込まれるレコードを変更または無視できます。この出口で呼び出されるプログラムは、line2afpコマンドのoutexitキーワードによって定義されます。
出力文書ファイルにレコード (構造化フィールド) が書き込まれる前に、この出口が制御を受け取ります。この出口では、レコードの無視または処理を要求できます。この出口で処理できる最大レコードは32752バイトです(レコードディスクリプターワードを含みません)。行データ変換でリソースを処理中に、この出口は呼び出しされません。
次の例は出口プログラムに渡す制御ブロックを記述したC言語ヘッダーの例を示しています。
typedef struct _OUTEXIT_PARMS /* Parameters for resource record exit */ { char *work; /* Address of 16-byte static work area */ PFATTR *pfattr; /* Address of print file attribute */ /* information */ char *record; /* Address of the record to written */ unsigned short recordln; /* Length of the output record */ char request; /* Delete or process the record */ char eof; /* Last call indicator */ }OUTEXIT_PARMS;
次のパラメーターを含む制御ブロックのアドレスが、出力レコード出口に渡されます。
- work(バイト1~4)
- 16バイトの静的メモリーブロックを指すポインター。出口プログラムは、このパラメーターを使用すると、呼び出し間の情報(作業領域を指すポインターなど)を保管できます。16バイトの作業領域は、最初の呼び出しの前に、フルワード境界に位置合せされ、2進ゼロに初期設定されます。ユーザー作成の出口プログラムには、この作業領域を管理するために必要なコードを指定しておく必要があります。
- pfattr(バイト5~8)
- 印刷ファイル属性データ構造を指すポインター。このデータ構造のフォーマットと情報の内容については、行データ入力ファイルの属性を参照してください。
- record(バイト9~12)
- 出力レコードの最初のバイトを指すポインター。このレコードは、32 KBのバッファーに入っています(1 KBは1024バイトです)。バッファーは行データ変換により割り振られるストレージに入っていますが、出口プログラムで出力レコードを変更できます。
- recordln(バイト13~14)
- 出力レコードの長さをバイトで指定します。出力レコードを変更する場合は、このパラメーターも変更して、レコードの実際の長さが反映されるようにする必要があります。
- request(バイト15)
- 行データ変換でレコードをどのように処理するかを指定します。出口プログラムに入力するときは、このパラメーターはX'00'になります。出口プログラムが行データ変換に制御を戻すときは、このパラメーターはX'00'またはX'01'になります。
ここで、
- X'00'
- 行データ変換でレコードを処理することを指定します。
- X'01'
- 行データ変換でレコードを処理しないことを指定します。
出口プログラムへの項目にあるX'00'の値は、レコードが処理されることを指定します。レコードを無視する場合は、要求バイトの値をX'01'に変更します。X'01'より大きい値はすべてX'00'として解釈され、出口によってレコードが処理されます。
注意: バッファーには、同時に 1 つのレコードだけを入れることができます。
- eof(バイト16)
- ファイルの終わり (eof) インディケーター。このインディケーターは、行データ変換で出力ファイルの書き込みを終えたことを通知する 1 バイトの文字コードです。
eofが通知される時点(
eofの値はY
)では、最後のレコードはすでに出力出口にあります。ポインター record はすでに無効です。eof信号が出た後は、レコードは挿入できません。このパラメーターには次の値だけ使用可能です。- Y
- 最後のレコードが書き込まれたことを示します。
- N
- 最後のレコードが書き込まれていないことを示します。
このファイルの終わりフラグは、最終呼び出しインジケーターとして使用され、出口プログラムが行データ変換に制御を戻せるようにします。出口プログラムで、このパラメーターを変更することはできません。