バージョン 8.1.3
 —  コマンドリファレンス  —

Adabas の呼び出し

このドキュメントでは、Adabas を呼び出して Adabas コマンドを実行するための手順について説明します。 Adabas ダイレクトコールは、ホスト言語(例えば、アセンブラ、COBOL、Fortran、C、PL/I)で用意されている標準のコール手順を使用します。

注意:
プログラミング例」では、各種ホスト言語による Adabas コールの例をプログラミング例とともに示しています。

Adabas でサポートされているコントロールブロックインターフェイスごとに 1 つ、計 2 種類の Adabas ダイレクトコールがあります。

Adabas バージョン 8 では、ACB ダイレクトコールインタフェースと ACBX ダイレクトコールインタフェースの両方が完全にサポートされています。

コントロールブロックおよび関連バッファには、実行する Adabas コマンド、そのコマンドに必要な付加情報(パラメータまたはオペランド)を指定します。 該当するコントロールブロック(ACB または ACBX)へのポインタが常に、Adabas コールに指定する最初のオペランドである必要があります。

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


Adabas が ACB ダイレクトコールと ACBX ダイレクトコールを区別する方法

すべてのアプリケーションプログラムは、ACB および ACBX のどちらのダイレクトコールも行えます。 コントロールブロック(ACB または ACBX)は、ACB または ACBX インターフェイスのどちらを使用しても、Adabas コールの最初のパラメータです。 Adabas 8 は、コントロールブロックのオフセット 2 にある文字 "F" で始まる値によって、コールに使用するコントロールブロックを判断します。 ACB のオフセット 2 はコマンドコードフィールド(ACBCMD)ですが、有効な F* Adabas コマンドがないため、ACB を使用する有効なダイレクトコールではオフセット 2 に文字 "F" で始まる値が含まれません。 ACBX 内のオフセット 2 は、新しい ACBX を識別する新しいバージョンのフィールド(ACBXVER)です。

オフセット 2 上の "F" の有無により、Adabas 8 がダイレクトコールを解釈する方法が異なります。 オフセット 2 に "F" が指定されている場合、Adabas は、コントロールブロックと残りのダイレクトコールパラメータを ACBX コールとして解釈します。オフセット 2 に "F" が指定されていない場合、Adabas は、コントロールブロックと残りのダイレクトコールパラメータを ACB コールとして解釈します。 何らかの理由で残りのコントロールブロックフィールドおよびダイレクトコールパラメータが、オフセット 2 の "F" の有無により示されたコールのタイプに正しく指定されない場合は(ACB パラメータが ACBX コールに指定された場合など)、エラーとなるかコールの結果が予想どおりにならない場合があります。 ACB または ACBX を使用してダイレクトコールを指定する方法の詳細については、「ACB インターフェイスダイレクトコールの指定」または「ACBX インターフェイスダイレクトコールの指定」を参照してください。

Top of page

ACB インターフェイスダイレクトコールの指定

ACB インターフェイスを使用してダイレクトコールを行う場合は、次のような構文を使用します(これは COBOL の例です)。

CALL 'ADABAS' USING acb-control-block-name

                    [format-buffer]

                    [record-buffer]

                    [search-buffer]

                    [value-buffer]

                    [ISN-buffer]

ACB ダイレクトコールの場合、Adabas はこの構文に示されている順にバッファが指定されているものと見なします。 コールに必要なバッファがない場合は、バッファを指定する必要はありません。 ただし、フォーマットバッファは必要ないものの、他のバッファのいずれか(例えば、レコードバッファ)が必要な場合は、レコードバッファより前にダミー(または空白)のフォーマットバッファを指定する必要があります。 同じく、コールで ISN バッファのみが必要な場合は、ダミーのフォーマットバッファ、レコードバッファ、サーチバッファ、およびバリューバッファも指定する必要があります。

次の表に示す斜体の文字は、実際の構文では置き換えられる項目です。 ACB コントロールブロックのフォーマットおよび Adabas バッファの詳細については、「Adabas コントロールブロック(ACB)」および「バッファの定義」を参照してください。 異なる ABD タイプ間の関係の詳細については、「バッファタイプ間の関係」を参照してください。

置き換えられる文字 実際に割り当てられる内容
acb-control-block-name コールに使用する Adabas コントロールブロック(ACB)へのポインタ。
format-buffer コールに使用するフォーマットバッファの名前またはポインタ。 単一の ACB ダイレクトコールには、フォーマットバッファを 1 つのみ指定できます。
ISN-buffer コールに使用する ISN バッファの名前またはポインタ。 単一の ACB ダイレクトコールには、ISN バッファを 1 つのみ指定できます。
record-buffer コールに使用するレコードバッファの名前またはポインタ。 単一の ACB ダイレクトコールには、レコードバッファを 1 つのみ指定できます。
search-buffer コールに使用するサーチバッファの名前またはポインタ。 単一の ACB ダイレクトコールには、サーチバッファを 1 つのみ指定できます。
value-buffer コールに使用するバリューバッファの名前またはポインタ。 単一の ACB ダイレクトコールには、バリューバッファを 1 つのみ指定できます。

Top of page

ACBX インターフェイスダイレクトコールの指定

アプリケーションにダイレクトコールを指定する方法は、新しい ACBX インターフェイスを使用する場合には、従来の ACB インターフェイスと違った方法になります。 また、コールはメインフレームアプリケーションおよびオープンシステムアプリケーションによってさまざまに異なります。 このセクションでは、次のトピックについて説明します。

メインフレームアプリケーションでの ACBX インターフェイスダイレクトコールの指定

アプリケーションにダイレクトコールを指定する方法は、新しい ACBX インターフェイスを使用する場合には、従来の ACB インターフェイスと違った方法になります。 メインフレームアプリケーションで ACBX インターフェイスを使用してダイレクトコールを行う場合は、次のような構文を使用します(これは COBOL の例です)。

CALL 'ADABAS' USING acbx-control-block-name

                    reserved-fullword

                    reentrancy-token

                    [format-buffer-ABD record-buffer-ABD [multifetch-buffer-ABD]]...

                    [search-buffer-ABD]

                    [value-buffer-ABD]

                    [ISN-buffer-ABD]

                    [performance-buffer-ABD]

                    [user-buffer-ABD]

各 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 コマンドの他に数種類しかありません。

次の表に示す斜体の文字は、実際の構文では置き換えられる項目です。 拡張 Adabas コントロールブロック(ACBX)のフォーマット、Adabas バッファ記述(ABD)、および Adabas バッファの詳細については、「拡張 Adabas コントロールブロック(ACBX)」、「Adabas バッファ記述(ABD)」、および「バッファの定義」を参照してください。 異なるバッファタイプ間の関係の詳細は、「バッファタイプ間の関係」を参照してください。

置き換えられる文字 実際に割り当てられる内容
acbx-control-block-name コールに使用する拡張 Adabas コントロールブロック(ACBX)に対するポインタ。
format-buffer-ABD コールに使用するフォーマットバッファセグメントを定義するフォーマットバッファ ABD の名前またはポインタ。 各フォーマットバッファセグメントは、ピリオドで終了し、単独のフォーマットバッファとして完結した有効なものである必要があります。 単一の ACBX ダイレクトコールには、複数のフォーマットバッファ ABD を指定できます。
ISN-buffer-ABD コールに使用する ISN バッファセグメントを定義する ISN バッファ ABD の名前またはポインタ。 単一の ACBX ダイレクトコールには、ISN バッファ ABD を 1 つのみ指定できます。
multifetch-buffer-ABD コールに使用するマルチフェッチバッファセグメントを定義するマルチフェッチバッファ ABD の名前またはポインタ。 単一の ACBX ダイレクトコールには、複数のマルチフェッチバッファ ABD を指定できます。
performance-buffer-ABD Adabas Reviewで使用するパフォーマンスバッファセグメントを定義するパフォーマンスバッファ ABD の名前またはポインタ。 パフォーマンスバッファセグメントは、Adabas Review 用に予約されています。
record-buffer-ABD コールに使用するレコードバッファセグメントを定義するレコードバッファ ABD の名前またはポインタ。 単一の ACBX ダイレクトコールには、複数のレコードバッファ ABD を指定できます。
reentrancy-token ADALNK リエントランシートークン。 これは、ADALNK がスタティックなデータエリアのアドレスを格納するコール元プログラムのストレージのフルワードです。 このフルワードは、最初の Adabas コールの前にゼロに設定しておく必要があります。 フルワードの値は、プログラムの実行中、どのダイレクトコールでも変わりません。
reserved-fullword バイナリの 0 が含まれているフルワード。 このフルワードは、Adabas 用に予約されており、最初の Adabas コールの前にバイナリの 0 に設定しておく必要があります。
search-buffer-ABD コールに使用するサーチバッファセグメントを定義するサーチバッファ ABD の名前またはポインタ。 単一の ACBX ダイレクトコールには、サーチバッファ ABD を 1 つのみ指定できます。
user-buffer-ABD コールに使用するユーザーバッファセグメント(拡張)を定義するユーザーバッファ ABD の名前またはポインタ。 ユーザーバッファ拡張(UBX)は、ユーザー出口 LNKUEX1(リンクルーチンプリコール出口)および LNKUEX2(リンクルーチンポストコール出口)に渡されるユーザーデータに使用されます。 ACBX ダイレクトコールには、単一のユーザーバッファ ABD を指定できます。
value-buffer-ABD コールに使用するバリューバッファセグメントを定義するバリューバッファ ABD の名前またはポインタ。 単一の ACBX ダイレクトコールには、バリューバッファ ABD を 1 つのみ指定できます。

オープンシステムアプリケーションでの ACBX インターフェイスダイレクトコールの指定

アプリケーションにダイレクトコールを指定する方法は、新しい ACBX インターフェイスを使用する場合には、従来の ACB インターフェイスと違った方法になります。 オープンシステムアプリケーションで ACBX インターフェイスを使用してダイレクトコールを行う場合は、次のような構文を使用します(これは COBOL の例です)。

CALL 'ADABAS' USING acbx-control-block-name

                    ABD-count

                    ABD-list-pointer

次の表に示す斜体の文字は、実際の構文では置き換えられる項目です。 拡張 Adabas コントロールブロック(ACBX)のフォーマット、Adabas バッファ記述(ABD)、ABD リスト、および Adabas バッファの詳細については、「拡張 Adabas コントロールブロック(ACBX)」、「Adabas バッファ記述(ABD)」、「ABD リスト」、および「バッファの定義」を参照してください。

置き換えられる文字 実際に割り当てられる内容 条件
acbx-control-block-name コールに使用する拡張 Adabas コントロールブロック(ACBX)に対するポインタ。 必須。
ABD-count ダイレクトコールの ABD リストに含まれている ABD ポインタの数。 ABD およびその関連するバッファをダイレクトコールで使用する場合にのみ必須です。
ABD-list-pointer ダイレクトコールの ABD リストへのポインタ。 ABD リストには、ACBX ダイレクトコールが使用するすべての ABD へのポインタ参照が含まれています。 ABD リストの詳細については、「ABD リスト」を参照してください。 ダイレクトコールにバッファが必要な場合にのみ必須です。

Top of page

ACB ダイレクトコールと ACBX ダイレクトコールの混在

同じアプリケーションに ACB ダイレクトコールと ACBX ダイレクトコールを自由に混在させることができます。

TSO 環境またはバッチ環境では、同じアプリケーションで ACB と ACBX の両方のダイレクトコールインタフェースを使用して Adabas 8 非リエントラント(ADALNK)ダイレクトコールを呼び出した場合、コールに使用するワークエリアが ADALNK モジュール自体に含まれるため、ユーザーコンテキストが保持されます。 一方、同じアプリケーションで ACB と ACBX の両方のダイレクトコールインタフェースを使用してリエントラント(ADALNKR)ダイレクトコールを呼び出す場合は、ユーザーコンテキストを自分で保持する必要があります。このことを行わない場合は、アプリケーションによって誤った結果が出力されることがあります。 ADALNKR ダイレクトコールのユーザーコンテキストを保持する方法については、「ADALNKR への ACB および ACBX インターフェイスダイレクトコールの混在」を参照してください。

Top of page