入力データユーザー出口プログラム

InfoPrint Manager入力データユーザー出口プログラムは、次の目的で使用できます。

  • InfoPrint Managerへの入力印刷データストリームを監視します。
  • 入力レコードを処理前に破棄します。
  • 既存の入力レコードを1つ以上のレコードで置換する(置換後のレコードには、元のレコードまたは元のレコードの変更バージョンが含まれることがあります)。
  • 入力レコードを未変更のままで処理を続行します。
この出口は、ジョブのすべての部分について呼び出すことができます(InfoPrint Managerのユーザー出口プログラムの順序を参照)。
注意: 入力データユーザー出口プログラムは、MO:DCAデータだけ処理します。

追加の入力レコードを挿入するために出口を使用している場合、出口に渡される元の入力レコードを、追加の入力レコードの前または後に処理できます。構造化フィールドリストに現行構造化フィールドを挿入する場所に応じ、現行構造化フィールドの前後に追加の入力レコードを挿入できます。

重要な考慮事項

  • コード化処理は、PSF の不可欠な部分となっており、パフォーマンスおよび信頼性に影響する可能性があります。
  • ユーザー出口は、システムの影響全体を認識している、経験を積んだプログラマーがコード化してください。
  • この出口によって発生した遅延はすべてPSF処理遅延に変換されるため、プリンターのパフォーマンスに影響することがあります
  • この出口には、処理されるリソースに含まれる構造化フィールドが渡されません。これには、書式定義、オーバーレイ、ページセグメント、フォント、データオブジェクトリソース、内部メディアマップ、およびデータオブジェクトフォントが含まれます。
  • コード化処理でPSF位置変更を処理可能にしておきます。
位置変更は、エラーまたはオペレーターコマンドの結果、発生する場合があります。PSFは、項目を印刷ジョブに進めて位置変更、構造化フィールドをスキップ、または項目を前に処理したデータに戻して位置変更します。PSF が印刷ファイルに戻って位置変更する場合、始めに構造化フィールドが出口に渡されたときと同じように、同じデータを同じ順序で PSF に戻すことが出口の責務です。

上記の制約があるため、まず、制限を持たない変換サブシステムを使用してデータを処理することを検討してください。たとえば、変換オブジェクトを使用すると、すべての入力データ(制約なし)にアクセスし、リソースとページを両方とも追加、削除、変更できます。また、変換サブシステムの処理は、印刷開始前に実行されるため、プリンターのパフォーマンスや動作に影響しません。

入力データユーザー出口は、データストリーム内の個々の文書境界を識別できません。 たとえば、ジョブに個別の文書が5つあり、各10ページのデータがあると仮定します。出口では、これを5つの10ページのデータではなく、50ページのデータとして見ます。変換サブシステムにはこの制限がありません。

PSF 入力レコード出口の責務は、割り振るすべてのメモリーを管理することです。出口では、ainuexit.hで提供された作業域ポインターを使用し、呼び出し間のメモリーを再利用できます。PSF は、INDATA_EXITDATA 構造または PSFINSERTRECS 構造のいずれかのフィールドによって指されたメモリーを解放しません。出口は、定義されたメモリーまたは割り当てられたメモリーにポイントできます。必要に応じて、出口では割り振られたメモリーまたは解放されたメモリーを再利用できます。PSF 入力レコード出口がメモリーの管理を誤ると、PSF はメモリー不足になる場合があります。

使用可能なサンプルユーザー出口プログラムページに示したサンプルの入力データユーザー出口プログラムのソースコード(C言語で作成されたもの)は、/usr/lpp/psf/exits/ainuxind.cファイルにあります。このサンプルプログラムは 1 つの戻りコードだけで構成されていて、 関数は何も実行しません。

入力データユーザー出口プログラムのデータ構造は、/usr/lpp/psf/exits/ainuexit.hファイルのソースコードに含まれます。

この出口の宣言は次のとおりです。

void INDATA (INDATA_EXITDATA *exitdata)

INDATA_EXITDATA入出力パラメーターには、InfoPrint Managerとユーザー出口プログラム間の通信に必要なすべての入出力データがあります。

入力データユーザー出口には、以下のフィールドもあります。

version
この変数はこれまでreserved1と呼ばれていました。出口が変形した場合にマイグレーションエイドとして使用します。この変数には、この構造用の以下のバージョンIDが含まれています。
  • X'00'=前のバージョン(2005年8月より前)
  • X'01'= 2005年8月バージョン(入力レコードの削除/挿入のサポートを追加)
Copy
この出口への呼び出しに関連付けられるのがどのコピーかを識別します。最初に1に設定され、出口が呼び出されるたびに1ずつ増分します。
DataSize
入力データレコードの長さが含まれています。
DataPointer
処理される入力データレコードを指します。
DataType
常時 0 に設定されます (AFP。MO:DCA データのみ)。
注意: ジョブ処理の終了を示すために出口が呼び出されている場合、次のようになります。
  • DataSizeは0に設定されます。
  • DataPointerはNULLに設定されます。
  • DataTypeは0に設定されます。

その時点でレコードは渡されません。 PSFINSERTRECS構造には、入力データ出口の要求に応じて挿入される構造化フィールドに関する情報が含まれます。PSFINSERTRECS構造には、次のフィールドがあります。

version
versionは、PSFに、提供されているPSFINSERTRECS構造のバージョンを識別します。出口は、値0x01を提供してください。 提供しない場合は、レコード(next_pポインターを含む)は無視されます。
next_p
挿入する次のレコードへのポインターが含まれています。
record_p
挿入する MO:DCA (AFP) 構造化フィールドへのポインターが含まれています。

重要:

/usr/lpp/psf/exits/内のainuexit.hソースファイルの、追加のデータ定義およびコメントを参照してください。

入力データユーザー出口プログラムを作成した後で、makeコマンドを使用し、コードをコンパイルしてください(ユーザー出口プログラムをコンパイル/インストールするを参照)。

注意: 一部のサンプルプログラム(完全なリストについては、一般的な入出力フィールドを参照)で使用される入力情報フィールドは、代替サンプルユーザー出口から使用できます。InfoPrint Managerは代替入力データのユーザー出口を提供しません。