出力レコード出口

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

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