バージョン 8.1.3
 —  ユーザー、ハイパーディスクリプタおよび照合ディスクリプタ出口  —

ユーザー出口 6(データ圧縮前のユーザー処理)

このユーザー出口を使用すると、ADACMP COMPRESS ユーティリティがレコードを処理する前に、そのレコードに対するユーザー処理を実行することができます。 これは、ADACMP DECOMPRESS ユーティリティから出力された非圧縮レコードの順序および内容を制御するためにも使用できます。このように使用すると、ユーザー出口により、どの非圧縮レコードが ADACMP により DDAUSBA データセットに書き込まれるかが制御されます。

このユーザー出口プログラムは、アランブラまたは COBOL で記述することができます。 ADACMP ユーティリティジョブ側で、ADARUN UEX6=program parameter を指定する必要があります。program はユーザープログラムの名前で、parameter はそのプログラムに渡すパラメータです。

ユーザー出口 6 は、次のイベントのいずれかが発生した直後に、ADACMP COMPRESS ユーティリティ機能からコールされます。これにより、コール時に入力にレコードを追加することができます。

graphics/adacmp_flow.png

graphics/adacmp_parms.png

ADACMP ユーザー処理 ユーザ出口 (6) パラメータ

このドキュメントでは、次のトピックについて説明します。


ADACMP のヘッダー処理

パラメータ HEADER=YES が指定された状態で ADACMP が実行される場合、ADACMP COMPRESS の入力レコードと ADACMP DECOMPRESS の出力レコードの先頭に、32 バイトの ADAH および ADAC ヘッダーが付加されます。このヘッダーには、複数の物理レコードのグループが論理レコードとして定義され、この場合には論理レコードの長さは 32 KB を超えることも可能です。 ADAH および ADAC ヘッダーの DSECT は、付属の Adabas 8 SRCE ライブラリのメンバ ADAH および ADAC 内にあります。 これらのヘッダーには、非圧縮データを含む 1 つの論理レコードがどのような物理レコードで構成されているのかが定義されています。

HEADER=YES が指定された状態で、ADACMP とユーザー出口 6 が両方とも実行されている場合、ADACMP はユーザー出口 6 に各物理レコードを渡します。 したがって、ユーザー出口アプリケーション側で、これらのヘッダーを使用して、物理レコードと論理レコードの関係を判断する必要があります。

ADACMP ヘッダーとレコードのセグメント化の詳細については、「セグメント化されたレコードに関する考慮事項」を参照してください。

Top of page

入力パラメータ

パラメータ 使用方法
0(R1) 入力レコードのアドレス。 可変長レコードの前にある長さフィールドは無視されます。 このアドレスはフルワードで、ADACMP が DD/EBAND でエンドオブファイルを検出した後にユーザー出口がコールされる場合には -1(X'FFFF FFFF')が格納されます。
4(R1) 入力レコード長を格納するフィールドのアドレス。 固定長レコードの場合、この値は論理レコード長になります。 可変長レコードの場合、この値は実際のデータのみの長さ(長さフィールド自体を除いた長さ)になります。 このアドレスのポイント先はフルワードで、ADACMP が DD/EBAND でエンドオブファイルを検出した後にユーザー出口がコールされる場合には -1(X'FFFFFFFF')が格納されます。
8(R1) ユーザー出口へのエントリにバイナリの 0 が含まれます(「出力パラメータ」を参照)。
12(R1) ユーザー出口へのエントリにバイナリの 0 が含まれます(「出力パラメータ」を参照)。
16(R1) ADACMP COMPRESS ユーティリティジョブから渡される FILE パラメータ値のアドレス。 このアドレスは、右端(下位)2 バイトに格納されます。 このアドレスはフルワードで、その場所と内容がユーザー出口の処理中に変わらないようにする必要があります。 ADACMP COMPRESS から FILE パラメータ値が渡されない場合、このフルワードは X'00000000' です。

Top of page

出力パラメータ

パラメータ 使用方法
8(R1) ユーザー出口の出力レコードのアドレス。 このレコードは、ADACMP 圧縮アルゴリズムの入力として使用されます。 このレコードのアドレスは、ユーザー出口がコールされたときに、常に 8(R1)に格納する必要があります。 リターン時に、このフィールドにバイナリのゼロが格納されると、ADACMP は、入力レコードを無視して処理を続行します。
12(R1) 返すレコードの長さを格納するための 4 バイトフィールドのアドレス。 このフィールドのアドレスは、出口がコールされたときに、常に 12(R1)に格納する必要があります。 リターン時に、このフィールドにバイナリのゼロが格納されると、ADACMP は、レコードを無視して処理を継続します。 12(R1)がポイントする長さフィールド自体の長さは 4 バイトですが、実際に使用される部分は、下位/右端(3~4 バイト目)のハーフワードです。 リターン時にバイト 2 に X'01' が格納されると、次のレコードが DDEBAND から読み込まれる前に出口が再びコールされます。 したがって、DD/EBAND からレコードが読み込まれるごとに、レコードを複数回にわたって ADACMP に返すことができます。

Top of page