出力レコード出口

出力レコード出口を使うと、行データ変換で出力ファイルに書き込まれるレコードを変更または無視できます。この出口で呼び出されるプログラムは、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
最後のレコードが書き込まれていないことを示します。

このファイルの終わりフラグは、最終呼び出しインジケーターとして使用され、出口プログラムが行データ変換に制御を戻せるようにします。出口プログラムで、このパラメーターを変更することはできません。