入力レコード出口
行データ変換は、行データ入力ファイルのレコードを追加、削除、または変更できる出口を提供します。この出口で呼び出すプログラムは、line2afpコマンドのinpexitキーワードの値で定義されます。
この出口は、レコードを入力ファイルから読み取った後で 呼び出されます。この出口では、「レコードを破棄する」、「処理する」、または「処理後に次の入力レコード用の出口に制御を戻す」のいずれかを要求できます。InfoPrint Managerで処理できる最大レコードは32756バイトです。行データ変換でディレクトリーからリソースを処理しているときは、この出口は呼び出されません。
次の例は出口プログラムに渡す制御ブロックを記述した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)
- 入力レコードのバイト数(長さ)を指定します。入力レコードを変更する場合は、実際のレコードの長さにするために、このパラメーターも変更してください。
- reserved2(バイト19~20)
- これらは予備のバイトです。
- request(バイト21)
- 行データ変換によるレコードの処理方法を指定します。出口プログラムに入力するときは、このパラメーターはX'00'になります。出口プログラムが行データ変換に制御を戻すときは、このパラメーターはX'00'、X'01'、またはX'02'になります。
ここで、
- X'00'
- 行データ変換でレコードを処理することを指定します。
- X'01'
- 行データ変換でレコードを処理しないことを指定します。
- X'02'
- 行データ変換でレコードを処理し、次に制御を出口プログラムに戻し、出口プログラムが次のレコードを挿入可能にすることを指定します。出口プログラムは、この値を設定することで、現行レコードを保管し、レコードを挿入し、保管したレコードを次の呼び出し時に使用できます。出口が最後のレコードを挿入した後で、出口プログラムはrequestバイトをX'00'にリセットしてください。
出口プログラムへの項目にあるX'00'の値は、レコードが処理されることを指定します。レコードを無視する場合は、要求バイトの値を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が検出されなかったことを示します。
このファイルの終わりインディケーターに基づき、出口プログラムはファイルの終わりで何らかの追加処理を実行できます。出口プログラムで、このパラメーターを変更することはできません。