入力レコード出口
行データ変換は、行データ入力ファイルのレコードを追加、削除、または変更できる出口を提供します。この出口で呼び出すプログラムは、line2afpコマンドのinpexitキーワードの値で定義されます。
この出口は、レコードを入力ファイルから読み取った後で 呼び出されます。この出口では、「レコードを破棄する」、「処理する」、または「処理後に次の入力レコード用の出口に制御を戻す」のいずれかを要求できます。InfoPrint Managerで処理できる最大レコードは32756バイトです。行データ変換でディレクトリーからリソースを処理しているときは、この出口は呼び出されません。
サンプル入力レコード出口C言語ヘッダーは、出口プログラムに渡す制御ブロックを記述したC言語ヘッダーの例を示しています。
サンプル入力レコード出口C言語ヘッダー
/*********************************************************************/ /* INPEXIT STRUCTURE */ /*********************************************************************/ typedef struct _INPEXIT_PARMS /* Parameters for input record exit */ { char *work; /* Address of 16-byte static work area */ PFATTR *pfattr; /* Address of print file attribute info*/ char *record; /* Address of the input record */ unsigned short in_CCSID; /* input CCSID for translating @06a*/ unsigned short out_CCSID; /* output CCSID for translating @06a*/ unsigned short recordln; /* Length of the input record */ unsigned short reserved2; /* Reserved for future use */ char request; /* Add, delete, or process the record */ char eof; /* EOF indicator */ } INPEXIT_PARMS;
次のパラメーターを含む制御ブロックのアドレスが、入力レコード出口に渡されます。
work(バイト1~4)
- 16バイトの静的メモリーブロックを指すポインター。出口プログラムは、このパラメーターを使用すると、呼び出し間の情報(作業領域を指すポインターなど)を保管できます。16バイトの作業領域は、最初の呼び出しの前に、フルワード境界に位置合せされ、2進ゼロに初期設定されます。ユーザー作成の出口プログラムには、この作業領域の管理に必要なコードを指定してください。
pfattr(バイト5~8)
- 印刷ファイル属性データ構造を指すポインター。このデータ構造のフォーマットとそこに入っている情報について詳しくは、「行データ入力ファイルの属性」を参照してください。
record(バイト9~12)
- 紙送り制御文字を含む入力レコードの最初のバイトを指すポインター。この入力レコードは、行データ変換で割り振られたストレージに入っているバッファーに含まれていますが、出口プログラムで変更できます。
in_CCSID(バイト13~14)
- line2afpコマンドのINPCCSIDパラメーターからの値。
out_CCSID(バイト15~16)
- line2afpコマンドのOUTCCSIDパラメーターからの値。
recordln(バイト17~18)
- 入力レコードのバイト数(長さ)を指定します。入力レコードを変更する場合は、このパラメーターも変更して、レコードの実際の長さが反映されるようにする必要があります。出口プログラムが戻ったときにrecordlnが0である場合、line2afpは戻りコード99で終了します。
reserved2(バイト19~20)
- これらは予備のバイトです。
request(バイト21)
- 行データ変換によるレコードの処理方法を指定します。出口プログラムに入力するときは、このパラメーターはX'00'になります。出口プログラムが行データ変換に制御を戻すときは、このパラメーターはX'00'、X'01'、またはX'02'になります。
ここで、
- X'00'
- 行データ変換でレコードを処理することを指定します。
- X'01'
- 行データ変換でレコードを処理しないことを指定します。
- X'02'
- 行データ変換でレコードを処理し、次に制御を出口プログラムに戻し、出口プログラムが次のレコードを挿入可能にすることを指定します。出口プログラムは、この値を設定することで、現行レコードを保管し、レコードを挿入し、保管したレコードを次の呼び出し時に使用できます。出口が最後のレコードを挿入した後で、出口プログラムでrequestバイトがX'00'にリセットされる必要があります。
出口プログラムへ入力する時点での値 X'00' は、レコードを処理することを指定します。レコードを無視する場合は、
request
バイトの値をX'01'に変更します。レコードを処理し、後で追加レコードを挿入する場合は、request
バイトの値をX'02'に変更します。X'02' より大きい値はすべて X'00' として解釈され、出口によってレコードが処理されます。注意: 1つのレコードだけバッファーに常駐できます。 eof(バイト22)
- ファイルの終わり (eof) インディケーター。このインジケーターは、eofを検出したかどうかを示す1バイトの文字コードです。
eofが通知される時点(eofの値はY)では、最後のレコードはすでに入力出口に存在し、入力ファイルは停止されています。ポインター record はすでに無効です。eofが通知された後ではレコードは挿入できません。X'02'より大きい値はすべてX'00'として解釈され、出口によってレコードが処理されます。
- Y
- eofが検出されたことを指定します。
- N
- eofが検出されなかったことを指定します。
このファイルの終わりインジケーターに基づき、出口プログラムはファイルの終わりで何らかの追加処理を実行できます。出口プログラムで、このパラメーターを変更できません。