ACBX インターフェイスを使用して、バッファ指定を必要とする Adabas コールを行う場合は、Adabas バッファ記述(ABD)を使用する必要があります。 従来の ACB インターフェイスを使用して Adabas コールを指定する場合は、ABD を使用しないでください。ACB インターフェイスを使用して、バッファ指定が必要な Adabas コールを行う場合は、Adabas コール自体に直接バッファまたはバッファへのポインタを指定します。 ACBX と ACB のインターフェイスダイレクトコールの詳細については、「Adabas の呼び出し」を参照してください。
Adabas 8 では ACBX インターフェイスでセグメントバッファ(フォーマットバッファとレコードバッファの複数ペア、またはフォーマット、レコード、マルチフェッチの 3 つのバッファの複数セット)をサポートしているため、ACBX コールのバッファの総数は固定されておらず、制限もありません。 個別のバッファは ACBX のフィールド自身により記述されなくなりました(ACB ではバッファ長は ACB で定義されます)。その代わり、各バッファは独自の Adabas バッファ記述(ABD)構造を持ちます。ABD には、バッファの種類、場所、サイズ、およびその他の関連情報が記述されます。
メインフレームシステムアプリケーションでは、ABD のアドレスを直接 Adabas コールに指定します。オープンシステムアプリケーションでは、ABD のアドレスを Adabas コールに関連付けられた ABD リストに指定します。
このドキュメントでは、ABD および ABD リストの構造について説明します。 バッファ自体の定義については、「バッファの定義」を参照してください。
ACBX インターフェイスダイレクトコールで ABD を使用すると、ダイレクトコールで連続したバッファおよび連続していないバッファを使用できます。 Adabas 8 では、次の 8 種類のバッファについて ABD を定義できます。
フォーマットバッファ
レコードバッファ
マルチフェッチバッファ
サーチバッファ
バリューバッファ
ISN バッファ
ユーザーバッファ
パフォーマンスバッファ(Adabas Review 専用に予約済み)。
各 Adabas バッファセグメントは単一の ABD で表されますが、同一のプログラムで 1 つの種類に対して複数の ADB を定義できます。 各 ABD のオフセット 4(ABDID)は、ABD で定義されたバッファの種類を識別します。
ACBX インターフェイスコールでは、ABD とバッファ指定とが 1 対 1 で対応します。つまり、指定するバッファごとに対応する ABD が必要です。 バッファは、ABD 自体に指定したり、間接参照で参照できます。
ABD は、ACBX インターフェイスダイレクトコールのどの場所にも指定できますが、 異なるタイプの ABD 同士を対にする必要がある場合には、ABD の対が順番になるように指定します。 例えば、コールの中にフォーマットバッファの ABD とレコードバッファの ABD がそれぞれ 3 つずつ存在する場合、最初のフォーマットバッファの ABD とレコードバッファ ABD が対になり、続いて 2 番目、3 番目の ABD 同士が対になります。
指定した ABD の対の数が一致しない場合は、不足分のダミーの ABD(バッファ長はゼロ)が生成されます。 例えば、フォーマットバッファの ABD を 3 つ指定し、レコードバッファの ABD を 2 つ指定した場合、3 番目のフォーマットバッファの ABD と対になるように、ダミーのレコードバッファの ABD が 1 つ生成されます。 ダミーのレコードバッファの ABD と 2 番目のフォーマットバッファの ABD を対にする必要がある場合は、3 番目のフォーマットバッファと対になるレコードバッファの ABD の前にダミーのレコードバッファの ABD を指定する必要があります。
レコードバッファ内のデータを、フォーマットバッファ内のフォーマット指定では記述していないコマンドの場合は、フォーマットバッファセグメントの指定は必要ありません。指定した場合は無視されます。 このような指定が可能なコマンドは、OP コマンドの他に数種類しかありません。
異なるバッファタイプ間の関係の詳細は、「バッファタイプ間の関係」を参照してください。
次の表は、ABD の構造の説明です。
DSECT フィールド名 | フィールド | コントロールブロックの位置 | オフセット | 長さ(バイト) | フォーマット |
---|---|---|---|---|---|
ABDXLEN | ABD の長さ | 1~2 | 00 | 2 | バイナリ |
ABDXVER | バージョンインジケータ | 3~4 | 02 | 2 | バイナリ |
ABDXID | バッファタイプ ID | 5 | 04 | 1 | 英数字 |
ABDXRSV1 | 予約 1 | 6 | 05 | 1 | バイナリ |
ABDXLOC | バッファロケーションフラグ | 7 | 06 | 1 | 英数字/バイナリ |
ABDXRSV2 | 予約 2 | 8 | 07 | 1 | バイナリ |
ABDXRSV3 | 予約 3 | 9 | 08 | 4 | バイナリ |
ABDXRSV4 | 予約 4 | 13 | 0C | 4 | バイナリ |
ABDXSIZE | バッファサイズ(割り当てられた長さ) | 17~24 | 10 | 8 | バイナリ |
ABDXSEND | 送信データ長 | 25~32 | 18 | 8 | バイナリ |
ABDXRECV | 受信データ長 | 33~40 | 20 | 8 | バイナリ |
ABDXRSV5 | 予約 5 | 41~44 | 28 | 4 | バイナリ |
ABDXADR | 間接アドレスポインタ(ABDLOC= C'I' の場合) | 45~48 | 2C | 4 | 英数字 |
--- | バッファ(ABDLOC=C' ' または X'00' の場合) | 49~n | 30 | ユーザー定義 | 該当なし |
ABD の各フィールドについては、このセクションで説明します。ABD 構造に表示される順に記載されています。
必須。 このフィールドは、ABD の長さを指定するのに使用します。 現時点では、このフィールドの値は 48 にする必要があります。
必須。 このフィールドは、ABD 構造のバージョンを表します。 このフィールドの値が C'G2' の場合、バッファ定義が新しい拡張 ABD 構造であることを示します。
必須。 このフィールドは、次の表に示すように、ABD で記述されるバッファのタイプを表すのに使用します。
ID 設定 | バッファのタイプ |
---|---|
C'F' | フォーマット |
C'I' | ISN |
C'M' | マルチフェッチ |
C'P' | パフォーマンス(Adabas Review 専用に予約済み) |
C'R' | レコード |
C'S' | サーチ |
C'U' | ユーザー |
C'V' | バリュー |
このフィールドは予約フィールドで、バイナリのゼロに設定されている必要があります。
必須。 このフィールドは、バッファの位置を間接アドレスで定義するか、または ABD 自体の末尾に定義するかを表すのに使用します。 このフィールドを "I"(C'I)に設定した場合、間接アドレッシングが指定され、間接アドレスポインタフィールドに指定されているアドレス(ABDADDR)を使用するものと見なされます。 この場合、バッファはプライマリアドレススペース内の 31 ビットアドレス可能ストレージに存在する必要があります。
このフィールドを空白(C' ')にするか、またはこのフィールドに 16 進数の 0 を含める場合は、バッファを ABD の直後に置く必要があります。
このフィールドは予約フィールドで、バイナリのゼロに設定されている必要があります。
このフィールドは予約フィールドで、バイナリのゼロに設定されている必要があります。
このフィールドは予約フィールドで、バイナリのゼロに設定されている必要があります。
必須。 このフィールドは、割り当てられているとおりに、バッファのサイズ(バイト単位)を指定するのに使用します。 サイズを 0 にすると、ダミーバッファとなり、バッファを指定しなかった場合と同じように扱われます。
必須。 このフィールドは、Adabas に送信するデータの長さ(バイト単位)を指定するのに使用します。 このフィールドには、バッファサイズフィールド(ABDSIZE)を超える値を設定することはできません。 バッファが Adabas に送信されるのは、そのバッファが、発行されるコマンドのタイプに合った入力バッファである場合のみです。
注意:
現時点では、このフィールドには最大バッファサイズ(ABDXSIZE フィールド)に指定するのと同じ値を指定する必要があります。
このことは Adabas 8 での一時的な制限であり、将来のリリースで解決される予定です。
このフィールドには、Adabas に返すデータの長さ(バイト単位)を指定します。 Adabas ルーターは、コール処理の最後にこの値を設定します。 このフィールドには、バッファサイズフィールド(ABDSIZE)を超える値を設定することはできません。 Adabas からバッファを受信するのは、そのバッファが、発行されるコマンドのタイプに合った出力バッファである場合のみです。
このフィールドは予約フィールドで、バイナリのゼロに設定されている必要があります。
バッファロケーションフラグフィールド(ABDLOC)を C'I'(間接バッファ)に設定した場合は、このフィールドに実際のバッファのアドレスを指定します。 現在、32KB を超えるデータを Adabas バッファに指定できます。
バッファロケーションフラグフィールド(ABDLOC)を C' '(空白)に設定した場合は、このフィールドに実際のバッファが含まれている必要があります。 ACBX インターフェイスを使用すると、32KB を超えるデータを Adabas 8 バッファに指定できます。 バッファ定義の詳細については、「バッファの定義」を参照してください。
ABD DSECT は、分散 Adabas SRCE ライブラリのメンバ ADABDX にあります。
ABD リストは、ダイレクトコールに使用する Adabas バッファ記述(ABD)へのポインタ参照が記載されているファイルです。 ABD リストは、オープンシステム ACBX ダイレクトコールにのみ使用されます。 ABD リストでは、ダイレクトコールに必要なバッファセグメントごとに ABD ポインタが 1 つ必要です。
ABD リストには、フォーマット、レコード、マルチフェッチ、サーチ、バリュー、ISN、ユーザー、パフォーマンスの計 8 種類のバッファに関して ABD へのポインタを含めることができます。 ABD リストに同じタイプの ABD を複数指定できます。
リストに指定する ABD の順番に特に決まりはありません。 異なるタイプの ABD 同士を対にする必要がある場合には、ABD の対が順番になるように指定します。 例えば、3 つのフォーマット ABD と 3 つのレコード ABD をリストに記載した場合、リストの最初のフォーマット ABD はリストの最初のレコード ABD に対応し、2 番目のフォーマット ABD は 2 番目のレコード ABD に対応し、3 番目のフォーマット ABD は 3 番目のレコード ABD に対応します。 リストで対応関係にある ABD の数が等しくない場合(例えば、フォーマット ABD が 3 つあるのにレコード ABD が 2 つしかない場合)、Adabas は欠如している ABD についてダミーの ABD を生成します(この例の場合、ダミーのレコード ABD が生成されます)。
それぞれのタイプの ABD またはバッファ間の関係については、「バッファタイプ間の関係」を参照してください。