出力レコード出口
出力レコード出口を使うと、行データ変換で出力ファイルに書き込まれるレコードを変更または無視できます。この出口で呼び出されるプログラムは、line2afpコマンドのoutexitキーワードによって定義されます。
出力文書ファイルにレコード (構造化フィールド) が書き込まれる前に、この出口が制御を受け取ります。この出口では、レコードの無視または処理を要求できます。この出口で処理できる最大レコードは32752バイトです(レコードディスクリプターワードを含みません)。行データ変換でのリソースの処理中は、この出口は呼び出されません。
サンプル出力レコード出口C言語ヘッダーは、出口プログラムに渡す制御ブロックを記述したC言語ヘッダーの例を示しています。
サンプル出力レコード出口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 be 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' は、レコードを処理することを指定します。レコードを無視したい場合は、requestバイトの値をX'01'に変更します。X'01' より大きい値はすべて X'00' として解釈され、出口によってレコードが処理されます。
注意: バッファーには、同時に 1 つのレコードだけを入れることができます。 eof(バイト16)
- ファイルの終わり (eof) インディケーター。このインディケーターは、行データ変換で出力ファイルの書き込みを終えたことを通知する 1 バイトの文字コードです。
eof が通知される時点 (eof の値は「Y」) では、最後のレコードはすでに出力出口に送られています。ポインター record はすでに無効です。eof 信号が出た後は、レコードは挿入できません。このパラメーターには次の値だけ使用可能です。
- Y
- 最後のレコードが書き込まれたことを示します。
- N
- 最後のレコードが書き込まれていないことを示します。
このファイルの終わりフラグは、最終呼び出しインジケーターとして使用され、出口プログラムが行データ変換に制御を戻せるようにします。出口プログラムで、このパラメーターを変更することはできません。