バージョン 8.1.3
 —  オペレーションマニュアル  —

アプリケーションと Adabas のリンク

ほとんどのシステムでは、Adabas に対する標準コールが許可されていません。アプリケーションプログラムから発行されたコールを Adabas で処理可能な形式に変換するアプリケーションプログラミングインターフェイス(API)を提供します。

バッチアプリケーションはシングルユーザーモードでもマルチユーザーモードでもサポートされます。オンラインオペレーションは TP モニタで制御されます。 Adabas API はサポートされているすべてのメインフレームプラットフォーム間で有効です。API のバージョンは、個々の TP モニタに固有です。

ADALINK は個々の TP モニタに固有の API の一部を示す一般的な名称です。

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


API の動作

オンライン処理

オンライン処理では、Adabas への要求は次のように処理されます。

  1. TP モニタがアプリケーションプログラムを呼び出します。 アプリケーションプログラムは TP モニタリージョンにロードする必要があります。

  2. アプリケーションプログラムが Adabas API を呼び出します。 Adabas API モジュールはアプリケーションモジュールとして TP モニタにインストールしなければなりません。

  3. Adabas API は、アプリケーションプログラムから渡された Adabas コマンドを取得して、次の処理を実行します。

    LINK 機能と同等の TP モニタの機能を使用して、ユーザーの Adabas コントロールブロックとバッファを API に渡します。

  4. Adabas API は、通常オペレーティングシステムにインストールされている Adabas ルーターまたは SVC(スーパーバイザコール)を使用して、フォーマットされた要求を Adabas に送ります。

  5. Adabas ルーターまたは SVC はユーザーのコントロールブロックとバッファをTP モニタリージョンから Adabas リージョン(Adabas ニュークリアス)に移動します。

  6. Adabas API は Adabas ニュークリアスからの応答を待ちます。

    Adabas の処理が完了すると、WAIT と同等の TP モニタの機能がポストされます。

  7. Adabas は要求された機能を実行し、ユーザーアプリケーションバッファに結果データとレスポンスコードを返す Adabas ルーターまたは SVC を呼び出します。

  8. Adabas ルーターまたは SVC は、TP モニタリージョンに Adabas API をポストします。

  9. Adabas API は、Adabas ニュークリアスからの応答をアプリケーションプログラムに送り、制御をアプリケーションプログラムに返します。

  10. アプリケーションプログラムは制御を TP モニタに返します。

上記の各機能の処理内容は、使用するTP モニタに応じて異なります。 これらの機能に加えて、各リンクルーチンでは、さまざまな処理ポイントで 1 つ以上のユーザー出口をコールできるため、Adabas 要求を行うときに機能の追加や柔軟性を与えることができます。

次の図は、多くのシステムで使用される基本的な構成を示しています。

graphics/tp_monitor_comm.png

Adabas/TP モニターコミュニケーション

バッチ処理

バッチ処理では、Adabas への要求は次のように処理されます。

  1. オペレーティングシステムがバッチアプリケーションをロードします。

  2. バッチアプリケーションが Adabas 要求(CALL ADABAS)を行います。

  3. Adabas スタブプログラム ADAUSER は ADARUN をロードし、呼び出します。ADARUN は、バッチ Adabas リンクルーチン ADALNK をロードし、呼び出します。

  4. バッチ ADALNK リンクルーチンは、Adabas 要求を Adabas ニュークリアスで使用可能なフォーマットに変換します。

  5. リンクルーチンは、通常、オペレーティングシステムにインストールされている Adabas ルーターまたは SVC へのコールで Adabas を呼び出します。 また、ユーザー固有の ID を特定します。

  6. リンクルーチンは Adabas が要求を処理するのを待機します。

  7. Adabas(通常、異なるアドレススペースまたはパーティションで実行している)は、要求を処理してリンクルーチンをポストし、必要なバッファとレスポンスコードをすべて返します。

  8. リンクルーチンは制御を受け取り、レスポンスコードとデータが格納された Adabas バッファをアプリケーションに返します。

Top of page

使用可能なリンクルーチン

Adabas API はバッチとオンラインアプリケーションの両方から使用できます。 オンラインアプリケーションでは、Adabas API はTP モニタの制御下になります。 Adabas をインストールすると、使用中の TP モニタに固有の Adabas API もインストールされます。

IBM オペレーティング環境

次の表に、IBM オペレーティング環境で使用可能な API バージョンと対応する TP モニタを示します。

リンクルーチンメンバ TP モニタ
ADACICS Adabas 7 および 8 環境での CICS コマンドレベル
ADACICT Adabas 7 および 8 の CICS タスク関連ユーザー出口(TRUE)
ADALCO Adabas 8 環境の Com-plete 実行可能モジュール
ADALCO8 Adabas 8 環境の Com-plete 基本モジュール。 このメンバは、準備したリンクグローバルモジュールとリンクする必要があります。また、最終的な ADALCO ロードモジュールの作成に必要なすべてのリンクルーチン出口とリンクする必要があります。このロードモジュールは、Adabas 8 コールにサービスを提供するため、Com-plete の初期化時に Com-plete によってロードされます。
ADALNI z/OS システム上の Adabas 8 環境の IMS/TM の実行可能モジュール。
ADALNI8 z/OS システム上の Adabas 8 環境の IMS/TM の基本モジュール。
ADALINK z/OS システム上の Adabas 7 および 8 環境のバッチ/TSO の実行可能モジュール。
ADALNK8 z/OS システム上の Adabas 7 および 8 環境のバッチ/TSO の基本モジュール。
ADALNKR z/OS システム上の Adabas 7 および 8 環境の実行可能リエントラントバッチ/TSO モジュール
ADALNKR8 z/OS システム上の Adabas 7 および 8 環境の基本リエントラントバッチ/TSO モジュール
LNCSTUB Adabas 7 および 8 のハイパフォーマンス CICS スタブ

Top of page

必要なワークエリア

パラメータは API に渡す必要があります。 多数のモニタで標準パラメータ受け渡し規則が許可されないため、Adabas コントロールブロックとバッファアドレスを特別なワークエリアに異動する必要があります。

Adabas 7 リンクルーチンでは、アプリケーションプログラムによって、この特別なワークエリアが TP モニタシステムから取得される必要があります。 ワークエリアは、ユーザーに固有であり、Adabas API からアドレス可能でなければなりません。 アプリケーションプログラムは始めにこのエリアを取得し、バイナリの 0 にクリアします。

注意:
アプリケーションプログラムが NATURAL で作成されている場合、必要な API ワークエリアはプログラムコードを変更しなくても制御できます。

Adabas 8 リンクルーチンでは、アプリケーションがワークエリアを取得する必要はありません。

このセクションでは、次のトピックについて説明します。

バッチ/TSO リエントラント ADALNKR8 モジュールのワークエリア

既存の Adabas 7 アプリケーションは、修正しないで Adabas 8 ADALNKR モジュールをコールすることができます。

このセクションでは、リエントラント TP モニタリンクルーチンのワークエリア要件について説明します。

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

ACB インターフェイスコールに ADALNKR8 が使用されている場合、7 番目のパラメータを、初期値としてバイナリ 0 が設定されているポインタのフルワードアドレスにする必要があります。

コール要件

ADALNKR への最初のコール前に、ワークエリアをバイナリ0 に初期化する必要があります。また、その内容をコール元アプリケーションプログラムで修正してはなりません。 複数のキーフィールドがこのエリアに格納されます。 これらのフィールドが不適切に修正されると、パフォーマンス低下からリンクルーチンの異常終了まで、さまざまな予測できない結果が生じます。

ADALNKR をコールするときに、コールパラメータリストの最後のパラメータアドレスを X'80' でマークすることは非常に重要です。

ADALNKR への ACB および ACBX インターフェイスダイレクトコールの混在

Adabas 8 リエントラントバッチ/TSO アプリケーションインターフェイスルーチン ADALNKR は、1 箇所だけ修正した Adabas 7 パラメータリストを受け付けます。 これらのリエントラントモジュールによって要求される、アプリケーションコードによるワークエリア取得の制約を解放するには、7 番目のパラメータが、バイナリ 0 に初期化されている 4 バイトエリアを指している必要があります。ADALNKR ルーチンは、このエリアにリエントランシートークンを挿入します。 このトークンはコールの間そのまま維持される必要があります。 同一のアプリケーションからのコールで Adabas 7 および Adabas 8 のコールが混在している場合、このトークンは ACBX コールのリエントランシートークンにも挿入する必要があります。

ACB ダイレクトコールの 7 番目のパラメータを指定する場合、2 種類のコールによって実行されるロジック間のユーザーコンテキストを保存するため、7 番目のパラメータとして使用されるアドレスを ACBX コールのリエントランシートークン(APLXRTOK フィールド)でも指定してください。 同様に、ACBX ダイレクトコールでリエントランシートークンを指定する場合、同じアドレスを ACB ダイレクトコールの 7 番目のパラメータとして指定してください。 ACB および ACBX ダイレクトコールでこのようにして、ワークエリアアドレスを使用しなかった場合、2 つのコールタイプのユーザーコンテキストに違いが生じ、アプリケーションで正確な結果を得られなくなる可能性があります。

ACBX ダイレクトコールの構造の詳細については、「ACBX インターフェイスダイレクトコールの指定」を参照してください。

すべての Adabas 8 リンクルーチンによって使用されるワークエリアは、Adabas 7 で使用される同等のワークエリアより実質的に大きくなる点に注意してください。 これは、Adabas 8 で導入されたデータ構造と Adabas 8 で追加されたコンテキスト情報をサポートするために必要です。

注意:
Adabas 8 非リエントラント ADALNK が ACB および ACBX の両方のインターフェイスダイレクトコールを使用して呼び出された場合、ワークエリアは ADALNK モジュール自身の一部なので、コンテキストは維持されます。

Top of page

必要なアプリケーションリエントランシープロパティ

ほとんどの TP モニタでは、その配下で実行しているアプリケーションで、バッチ環境のオペレーティングシステムに操作される機能を透過的に実行するためには、非標準コールを使用する必要があります。 この場合、アプリケーションコードのリエントラントプロパティによって、複数ユーザーが Adabas API コールをオンラインで実行する方法が決定されます。

各 Adabas API バージョンは、関連付けられている TP モニタのリエントランシーの要件に従っています。 Adabas API を使用するアプリケーションプログラムは、使用するTP モニタに対する要件にも従う必要があります。

注意:
TP モニタによって設定されるリエントランシーの要件は最小限です。 例えば、TP モニタが準リエントラントアプリケーションプログラムを必要とする場合、完全にリエントラントなプログラムも受け入れられます(後述の CICS の要件の説明を参照してください)。 ただし、リエントラントアプリケーションプログラムが必要な場合、準または非リエントラントなプログラムは受け付けられません。

理想では、多数のユーザーが共有する(一般に使用する TP トランザクション)アプリケーションプログラムのコードはリエントラントにすべきです。 コード自体は変更しません。 すべてのワークエリアは、汎用レジスタまたは汎用レジスタでアドレスされるユーザー固有のワークエリアです。 あるユーザーから別のユーザーへの制御の移動に必要なのは、プログラムカウンタ(PSW)と汎用レジスタの変更だけです。 多くのシステムルーチンはこのようにコーディングされています。

PL/I コンパイラはリエントラントコードを生成します。ただし、ほとんどの TP モニタで許可されていないオペレーティングシステム機能を使用します。 この制限のため、準リエントラントの概念が生まれました。

準リエントラントプログラムは、TP モニタ機能へのコール間にコードを変更できます。 モニタ機能を呼び出す場合、すべてのユーザーデータは TP モニタシステムから取得された特別なワークエリアに保存しなければなりません。 TP モニタは別のユーザータスクをアクティブタスクとしてシステムにスケジュールします。このタスクは同じコードを再使用できます。 元のユーザーのタスクを再度アクティブにするとき、そのワークエリアは再設定され、制御はユーザーが TP モニタ機能を要求したポイントに返されます。

以降のセクションで、いくつかの TP モニタのリエントランシー条件について説明します。

Com-Plete:コードリエントランシーの要件

Com-Plete は非標準のコールシーケンスを必要としません。Com-Plete ユーザーは、標準の非リエントラントコードを使用できます。 Adabas リンケージは Com-Plete サービスルーチンによって提供されます。Adabas コールがユーザープログラムに含まれる場合、Com-Plete サービスルーチンは自動的にユーザーのロードモジュールに組み込まれます。 サービスルーチンはユーザーパラメータを Com-Plete に渡し、Adabas コマンドが実行されたときに制御を返します。

CICS:コードリエントランシーの要件

Adabas 8 CICS リンクルーチンコンポーネントは完全にリエントラントです。 これは、Adabas タスク関連ユーザー出口(TRUE)がオプションではなくなったためです。 これらのモジュールは完全にリエントラントなので、LPA からロードすることも、タスク関連ユーザー出口(TRUE)ADACICT をスレッドセーフとして CICS に定義することもできます。 完全にリエントラントでスレッドセーフなオペレーションをサポートし、Adabas 8 に必要な大容量ワークエリアをサポートするため、これらのリンクルーチンコンポーネントのストレージワーキングセットが増加しています。 可能な限り、CICS Adabas 8 コンポーネントによって使用されるストレージエリアはすべて 16 MB 境界より上で取得されます。

Top of page

Adabas コントロールブロック(ACB)オプション

ACB インターフェイスダイレクトコールでアプリケーションプログラムによって Adabas API に渡される最初のパラメータは、Adabas コントロールブロック(ACB)へのポインタです。 ACB には Adabas 要求を処理するために必要な情報が含まれています。

ACB の先頭バイトは、実行する処理を決定するために Adabas API が使用します。 論理リクエストの値は次のとおりです。

16 進数 説明
X'00' 1 バイトのファイル番号(ファイル番号は1~255)
X'30' 2 バイトのファイル番号(ファイル番号は1~65535)
X'40' 空白以上の値。 これらは、Adabas の以前のリリースと互換性を維持するための論理アプリケーションコールとして受け入れられます。 ただし、X'44'、X'48'、および X'4C' の 3 つのコールは、特別な Software AG 機能または製品での使用に予約されているため、受け入れられません。

ACB の先頭バイトのその他すべての値は Software AG による使用に予約されています。

このセクションでは、次のトピックについて説明します。

1 バイトファイル番号の使用

1~255(1 バイト)のファイル番号に対応するアプリケーションプログラムから Adabas コマンドを発行する場合は、コントロールブロックを次のように作成します。

位置 処理内容
1 ACB の先頭バイトに X'00' を設定します。
9 ACB の ACBFNR フィールドの 2 バイト目(右側)にファイル番号を設定します。 ACBFNR フィールドの 1 バイト目(左側)は、論理(データベース)ID または番号を格納するために使用します。

ACBFNR の 1 バイト目が 0 の場合、API は、DDCARD 入力データ(ADARUN カード)に指定されたデータベース ID、またはリンクルーチンにアセンブルされたオフセット X'80' のデフォルトのデータベース ID を使用します。 Natural 言語で作成されたアプリケーションの場合、Natural が適切な値を指定するため、ADACB の 1 バイト目を組み込む必要はありません。

2 バイトファイル番号の使用

Adabas は、論理リクエストで 255 より大きなファイル番号を使用できます。 256~5000(2 バイト)のファイル番号に対応するアプリケーションプログラムから Adabas コマンドを発行する場合は、コントロールブロックを次のように作成します。

位置 処理内容
1 ACB の先頭バイトに X'30' を設定します。
9 ファイル番号に ACBFNR の 2 バイトを使用し、データベース(論理)ID に ACBRESP の 2 バイトを使用します。

ACBRESP フィールドが 0 の場合、API は、DDCARD 入力データに指定された ADARUN カードのデータベース ID、またはリンクルーチンにアセンブルされたオフセット X'80' のデフォルトのデータベース ID を使用します。

アプリケーション内での 1 バイトファイル番号と 2 バイトファイル番号の併用

アプリケーションは、各コールで ACB の1 バイト目の値をリセットできるので、単一のアプリケーションで 1 バイトファイル番号と 2 バイトファイル番号の両方を使用することができます。

この方法を使用する場合、それぞれのコールタイプに対して ACB 内の ACBFNR および ADBRESP フィールドの構成が適切であることを確認する必要があります。

2 バイトファイル番号を使用するアプリケーションを作成する場合は、ADACB の 1 バイト目には X'30'、ACBRESP フィールドには論理 ID、ACBFNR フィールドにはファイル番号を常に設定することをお勧めします。 そうすることによって、アプリケーションは、使用中のファイル番号の値に関係なく、2 バイトのバイナリ整数としてデータベース ID とファイル番号の両方を処理することができます。

COBOL によるコントロールバイトの設定

Adabas API に対応して2 バイトファイル番号のサポートを行う必要があるとき、COBOL のようなプログラミング言語は、1 バイトの値を簡単に操作するようには設計されていません。 次の COBOL の例は、これらの値を設定するための 1 つの方法です。


WORKING-STORAGE SECTION

01  ACB-CONTROL

    05  ACB-TYPE           PIC 9(4) COMP.

    05  ACB-DATA REDEFINES ACB-TYPE.

          07  FILLER       PIC X.

          07  ACB-TYPE-X   PIC X.

01  ADABAS-CB.

    05  ACBTYPE            PIC X.

 .

PROCEDURE DIVISION

 .

 *  FOR SINGLE-BYTE FILE NUMBERS . . .

        MOVE 0 TO ACB-TYPE.

 .

 *  FOR TWO-BYTE FILE NUMBERS . . .

        MOVE 48 TO ACB-TYPE.

 .

    MOVE ACB-TYPE-X TO ACBTYPE.

 .

    CALL 'ADABAS' USING ADABAS-CB, . . .

 .

 .

このコードセグメントで重要なのは、PIC 9(4) COMP フィールドをその 2 バイトの構成に再定義する REDEFINES 節の使用です。 そのため、Adabas コントロールバイトの 16 進値を含む 2 バイト目を、文字データとして Adabas コントロールブロックに移すことができます。

Top of page

拡張 Adabas コントロールブロック(ACBX)オプション

ACBX インターフェイスダイレクトコールでアプリケーションプログラムによって Adabas API に渡される最初のパラメータは、拡張 Adabas コントロールブロック(ACBX)へのポインタです。 ACBX には Adabas 要求を処理するために必要な情報が含まれています。

ACBX の先頭バイトは、実行する処理を決定するために Adabas API が使用します。 Adabas コマンドを発行するときに、このフィールドをバイナリの 0 に設定します。 これは、論理ユーザーコールが実行されることを示します(ACBXTUSR EQU 文)

ACBXTYPE の値の X'04'、X'08'、X'0c'、X'10'、X'14'、X'18'、X'1c'、X'20'、X'24'、X'28'、X'2c'、X'34'、X'38'、X'3c'、X'44'、X'48'、および X'4c' は、Software AG で使用するために予約されています。そのため、アプリケーションプログラムで使用することはできません。

Software AG の Natural 言語で作成されたアプリケーションは、Natural が適切な値を指定するので、Adabas ACBX の 1 バイト目にこの値を指定する必要はありません。

このセクションでは、次のトピックについて説明します。

ファイル番号の指定

ACBX インターフェイスを使用して Adabas コマンドを発行するアプリケーションプログラムの場合、ACBX の 21~24 バイト(ACBXFNR フィールド)にファイル番号を指定します。

ファイルのデータベース ID を指定するには、ACBX の 17~20 番目のバイト(ACBXDBID フィールド)を使用します。 ACBX のレイアウトに関する詳細情報については、「拡張 Adabas コントロールブロック(ACBX)」を参照してください。

データベース ID の指定

ACBX インターフェイスを使用して Adabas コマンドを発行するアプリケーションプログラムの場合、ACBX の 20~23 バイト(ACBXDBID フィールド)にデータベース ID を指定します。

このフィールドの右端の 2 バイトにコールのデータベース ID を指定し、左側のバイトにバイナリ 0 をセットします。 現在のところ、Entire Net-Work がサポートするデータベース ID は 2 バイトだけです。

このフィールドがバイナリの 0 に設定されている場合、Adabas API は、DDCARD 入力データの ADARUN カードのデータベース ID を使用するか、または、リンクルーチンにリンクされている LNKGBLS モジュールかリンクルーチンによりロードされた LNKGBLS モジュールのデフォルトのデータベース ID 値を使用します。

ファイル番号も必要な場合は、ACBX の 21~24 バイト目(ACBXFNR フィールド)に指定します。 ACBX のレイアウトに関する詳細情報については、「拡張 Adabas コントロールブロック(ACBX)」を参照してください。

Top of page

ダイレクトコールに関するプログラミング規則

次の TP モニタの制御下で実行するプログラムからダイレクトモードで Adabas コールを発行する手順について説明します。

Com-Plete

Com-Plete の制御下で実行するアプリケーションプログラムはバッチプログラムとまったく同じ方法でコーディングできます。 各アプリケーションプログラムは、Com-Plete によって処理スレッドに割り当てられるので、プログラムは、リエントラントや準リエントラントなコードで作成する必要はありません。

次の例は Com-Plete 環境で実行する COBOL プログラムからの Adabas ACB インターフェイスダイレクトコールを示しています。


WORKING-STORAGE SECTION

 .

 .

01  CONTROL-BLOCK COPY ADACBCOB.

01  FORMAT-BUFFER COPY FORDEF.

01  RECORD-BUFFER COPY RECDEF.

01  SEARCH-BUFFER COPY SEADEF.

01  VALUE-BUFFER  COPY VALDEF.

01  ISN-BUFFER    COPY ISNBUF.



PROCEDURE DIVISION

 .

 .

 .

CALL 'ADABAS' USING

              CONTROL-BLOCK, FORMAT-BUFFER, RECORD-BUFFER,

              SEARCH-BUFFER, VALUE-BUFFER, ISN-BUFFER.

 .

CICS

CICS 環境で実行しているアプリケーションは、コマンドレベル API ADACICS および CICS トランザクションワークエリア(TWA)または CICS COMMAREA をパラメータの伝達に使用します。

Adabas 8 CICS リンクルーチンコンポーネントは、TWA または CICS COMMAREA を使用したアプリケーションコールを受け入れます。 COMMAREA の方をお勧めします。 ACBX インターフェイスダイレクトコールを使用する CICS アプリケーションを新規に作成する場合は、TWA ではなく COMMAREA を使用することを強くお勧めします。 新しい ACBX ダイレクトコールインターフェイスでは、Adabas バッファ記述(ABD)の数は変更できます。つまり、Adabas パラメータリストの長さは一定ではありません。 したがって、ACBX ダイレクトコールを使用する場合、各トランザクションの TWA のサイズを調整するのが困難になります。一方で、使用される COMMAREA のサイズはアプリケーションによってダイナミックに制御されるため、COMMAREA の方が ACBX コールに向いています。 COMMAREA のフォーマットの詳細については、このセクションで後述する「COMMAREA フォーマット」を参照してください。

高水準言語インターフェイスは COBOL、PL/I、アセンブラの準リエントランシーを保証します(リリース 1.4 以上)。

言語 コントロールブロックおよびバッファの定義
COBOL ワーキングストレージに定義します。 トランザクションが初期化されるとき、ワーキングストレージはすべてユーザーワークエリアにコピーされます。
PL/I 自動ストレージ(デフォルトストレージクラス)変数として定義されます。

ACB コールでの TWA の使用

Adabas コントロールブロックおよびバッファのアドレスは、すべてのリリースの CICS と同様に渡されます。 ACB コール内では、これらのアドレスは TWA の最初の 6 ワードに挿入する必要があります。

ACB パラメータアドレスを TWA に設定するため、COBOL またはアセンブラアプリケーションプログラムからコール可能なアセンブラサブルーチンが用意されています。 サブルーチンは、エントリポイント ADASTWA を使用し、その最初のパラメータとして TWA を受け付けます。

EXEC CICS ADDRESS TWA 機能を使用して TWA をアドレス可能にします。 ACB コールの 2~7 番目のパラメータは、通常の Adabas コールパラメータです。 アセンブラサブルーチンはパラメータアドレスをTWA に設定し、CICS/Adabas リンクルーチンは TWA からそれらを取得します。

このセクションでは、次のトピックについて説明します。

CICS TWA のアドレス処理:アセンブラ

CICS アセンブラプログラマは、TWA にアドレスをセットし、Adabas をコールするために、インストールマクロを使用して直接 TWA をアドレスできます。

CICS TWA のアドレス処理:PL/I

PL/I は、TWA をアドレスし、データエリアのアドレスを取得するための機能を提供します。 プログラマ自身が TWA にパラメータアドレスを設定できます。 コールするコードを生成するための PL/I プリプロセッサプロシージャを設定できます。


DCL 1        TWA  BASED  (TWAPTR),

    2    CBPTR    POINTER,

    2    FBPTR    POINTER,

    2    RBPTR    POINTER,

     .

    EXEC  CICS  ADDRESS  TWA  (TWAPTR)  END-EXEC;

     .

     .

    CBPTR=ADDR(ADA-CONTROL-BLOCK);

    FBPTR=ADDR(FORMAT-BUFFER);

    RBPTR=ADDR(RECORD-BUFFER);

CICS TWA のアドレス処理:VS COBOL

VS COBOL 配下では、次のステートメントを使用して Adabas をコールします。

EXEC CICS LINK PROGRAM ('ADABAS')

  END-EXEC.

CBL XOPTS (APOST)

IDENTIFICATION DIVISION.

 .

 .

WORKING-STORAGE SECTION.

 .

 .

01  ADABAS-CB   COPY  ADACBCOB.

01  ADABAS-FB   COPY  ADAFBCOB.

01  ADABAS-RB   COPY  ADARBCOB.

01  ADABAS-SB   COPY  ADASBCOB.

01  ADABAS-VB   COPY  ADAVBCOB.

01  ADABAS-IB   COPY  ADAIBCOB.

 .

 .



LINKAGE SECTION.

 .

 .

01  PARMLIST.

    05  FILLER    PIC S9(08) COMP.

    05  TWAPTR    PIC S9(08) COMP.



01  TWA.

    05  PARM-ADDRESSES OCCURS 7 TIMES   PIC S9(08) COMP.

 . 

 . 

PROCEDURE DIVISION.

 .

 .

    SERVICE RELOAD PARMLIST.

 .

    EXEC CICS ADDRESS TWA (TWAPTR) END-EXEC

    SERVICE RELOAD TWA.

 .

    CALL 'ADASTWA' USING TWA, ADABAS-CB, ADABAS-FB,

                           ADABAS-RB, ADABAS-SB, ADABAS-VB

                           ADABAS-IB.

    EXEC CICS LINK PROGRAM ('ADABAS') END-EXEC.

 .

 .

 .

CICS TWA のアドレス処理:COBOL II または COBOL/LE

COBOL Ⅱまたは COBOL/LE 配下では、次のステートメントを使用して Adabas をコールします。

EXEC CICS LINK PROGRAM ('ADABAS')  END-EXEC.

CBL XOPTS (APOST,ANSI85)

IDENTIFICATION DIVISION.

 .

 .

WORKING-STORAGE SECTION.

 .

 .

01  ADABAS-CB   COPY  ADACBCOB.

01  ADABAS-FB   COPY  ADAFBCOB.

01  ADABAS-RB   COPY  ADARBCOB.

01  ADABAS-SB   COPY  ADASBCOB.

01  ADABAS-VB   COPY  ADAVBCOB.

01  ADABAS-IB   COPY  ADAIBCOB.

 .

 .

LINKAGE SECTION.

 .

01  TWA.

    05  PARM-ADDRESSES OCCURS 7 TIMES   PIC S9(08) COMP.

 .

 .

PROCEDURE DIVISION.

 .

 .

 .  EXEC CICS ADDRESS TWA (ADDRESS OF TWA) END-EXEC.

 .

    CALL 'ADASTWA' USING TWA, ADABAS-CB, ADABAS-FB,

                           ADABAS-RB, ADABAS-SB, ADABAS-VB, 

                           ADABAS-IB.

    EXEC CICS LINK PROGRAM ('ADABAS') END-EXEC.

 .

 .

 .

COMMAREA フォーマット

COMMAREA フォーマットは、Adabas 7 リリース用、Adabas 8 用がそれぞれ別に用意されています。

Adabas 7 CICS COMMAREA のフォーマットは次のとおりです。最低 32 バイト長が必要です。

COMMID   DC   CL8'ADABAS52'       Adabas COMMAREA ID

CACBA    DC   A(ADACB)            Address of Adabas 7 CB

CAFBA    DC   A(ADAFB)            Address of Adabas 7 FB

CARBA    DC   A(ADARB)            Address of Adabas 7 RB

CASBA    DC   A(ADASB)            Address of Adabas 7 SB

CAVBA    DC   A(ADAVB)            Address of Adabas 7 VB

CAIBA    DC   A(ADAIB)            Address of Adabas 7 IB

 

Adabas 8 CICS COMMAREA のレイアウトは次のとおりです。

V8COMID  DC   CL8'ADABAS8X'       Adabas V8 COMMAREA ID

V8APLX   DS   0A                  Beginning of Adabas V8 APLX

V8ACBX   DC   A(ACBX)             Adabas ADACBX

V8RSV1   DC   A(0)                ACBX direct call reserved field

V8APLXR  DC   A(0)                ACBX direct call reentrancy token

V8ABD1   DC   A(ABD1)             First ABD

         ...

V8ABD#n  DC   A(ABD#N+X'800000')  Last ABD address

IMS/TM

Adabas API を使用する IMS メッセージ処理プログラムに特別なリンクは必要ありません。 リエントラントオプションはサポートされていません。

Adabas 8 用の IMS リンクルーチンは ADALNI です。

このセクションでは、次のトピックについて説明します。

IMS/TM を使用した Adabas ACB コール(非リエントラント)

IMS/TM 環境の非リエントラントな Adabas API コールは、次のように、バッチ環境の従来の Adabas API コールと同様に行われます。


WORKING-STORAGE-SECTION.

 .

 .

01  ADA-CONTROL BLOCK   COPY  ADACBCOB.

01  FORMAT-BUFFER       COPY  FORDEF.

01  RECORD-BUFFER       COPY  RECDEF.

01  SEARCH-BUFFER       COPY  SEADEF.

01  VALUE-BUFFER        COPY  VALDEF.

01  ISN-BUFFER          COPY  ISNDEF.

 .

PROCEDURE DIVISION.

 .

 .

    CALL 'ADABAS' USING ADA-CONTROL-BLOCK, FORMAT-BUFFER,

                        RECORD-BUFFER, SEARCH-BUFFER, 

                        VALUE-BUFFER, ISN-BUFFER.

 .

 .

Top of page

COBOL プログラムでの CICS COMMAREA または TWA の使用

最近の COBOL プログラムは、CICS トランザクションワークエリア(TWA)または CICS コミュニケーションエリア(COMMAREA)を使用して、Adabas CICS リンクルーチンにデータを渡します。 Adabas バージョン 8 API を使用してコールする場合は、コールごとにサイズをダイナミックに調整できるため、CICS COMMAREA の方をお勧めします。 Adabas CICS ハイパフォーマンススタブルーチン(LNCSTUB)は、Adabas 8.1.3 で更新され、ADAGSET キーワード PARMTYP が ALL または COMM に設定されている場合、CICS COMMAREA を利用するようになりました。

TWA の使用

以前の Adabas リリースで古い COBOL コンパイラを使用する場合、Software AG 提供のサブプログラム ADASTWA をアセンブルして、COBOL プログラムとリンクエディットし、CICS トランザクションワークエリアに Adabas パラメータアドレスが正しく設定されるようにする必要がありました。

そのようなプログラムのスケルトンは次のようなステートメントによって構成されていました。

WORKING-STORAGE SECTION.

         ...

         ...

      01  ADABAS-CB       PIC X(80).

      01  ADABAS-FB       PIC X ...

      01  ADABAS-RB       PIC X ...

      01  ADABAS-SB       PIC X ...

      01  ADABAS-VB       PIC X ...

      01  ADABAS-IB       PIC X ...

         ...

         ...

     LINKAGE SECTION.

      01  PARMLIST.

         05 FILLER     PIC S9(08) COMP.

         05 TWAPTR     PIC S9(08) COMP.

      01  TWA.

         05 PARM-ADDRESSES OCCURS 7 TIMES PIC S9(08) C



    PROCEDURE DIVISION

         ...

         ...

      CALL 'ADASTWA' USING TWA,

                     ADABAS-CB,

                     ADABAS-FB,

                     ADABAS-RB,

                     ADABAS-SB,

                     ADABAS-VB,

                     ADABAS-IB.



      EXEC CICS LINK PROGRAM (LINK-NAME) END-EXEC.

         ...

         ...

ADASTWA サブプログラムを最近のコンパイラで使用することに何も問題はありませんが、これらのコンパイラが提供するアドレス操作の手段が限られています。そのため、上記のスケルトンを次のように変更することで、ADASTWA プログラムを CICS COBOL アプリケーションとリンクする必要がなくなります。

    WORKING-STORAGE SECTION.

         ...

      01 TWA-LEN              PIC S9(04) COMP VALUE +0.

      01 ABEND-CODE           PIC X(4) VALUE SPACES.

         ...

      01  ADABAS-CB       PIC X(80).

      01  ADABAS-FB       PIC X ...

      01  ADABAS-RB       PIC X ...

      01  ADABAS-SB       PIC X ...

      01  ADABAS-VB       PIC X ...

      01  ADABAS-IB       PIC X ...

         ...

         ...

    LINKAGE SECTION.

         ...

      01 TWA.

         05 CB-PTR           USAGE POINTER.

         05 FB-PTR           USAGE POINTER.

         05 RB-PTR           USAGE POINTER.

         05 SB-PTR           USAGE POINTER.

         05 VB-PTR           USAGE POINTER.

         05 IB-PTR           USAGE POINTER.

         ...



    PROCEDURE DIVISION USING TWA.

         ...

    INIT-TWA.

        EXEC CICS ASSIGN TWALENG (TWA-LEN) END-EXEC.

        IF TWA-LEN = 0

           MOVE 'U649' TO ABEND-CODE

           GO TO ...

        IF TWA-LEN < 28

           MOVE 'U650' to ABEND-CODE

           GO TO ...

        EXEC CICS ADDRESS TWA (ADDRESS OF TWA) END-EXEC.

         ...

        SET  CB-PTR TO ADDRESS OF ADABAS-CB.

        SET  FB-PTR TO ADDRESS OF ADABAS-FB.

        SET  RB-PTR TO ADDRESS OF ADABAS-RB.

        SET  SB-PTR TO ADDRESS OF ADABAS-SB.

        SET  VB-PTR TO ADDRESS OF ADABAS-VB.

        SET  IB-PTR TO ADDRESS OF ADABAS-IB.

         ...

        EXEC CICS LINK PROGRAM (LINK-NAME) END-EXEC.

         ...

CICS COMMAREA の使用

CICS TWA サイズは、特定のアプリケーションプログラムのセットに対する CICS トランザクション定義の一部です。また、その CICS トランザクション下でアプリケーションプログラムが実行されているときはサイズをダイナミックに変更できません。 このため、Adabas バージョン 8 プログラムには、CICS コミュニケーションエリア(COMMAREA)をお勧めします。 COMMAREA サイズは、COMMAREA を使用するプログラム間で渡されるデータの要件に応じて変更できます。 Adabas バージョン 8 パラメータリストおよびデータ構造は、サイズが可変であるため、CICS アプリケーションと Adabas バージョン 8 CICS リンクルーチンの間でデータを受け渡すには、COMMAREA が最適の手段です。

最近の COBOL コンパイラのアドレス操作機能を使用する場合、CICS COMMAREA を使用する必要のあるステートメントのスケルトンは次のようになります。

    WORKING-STORAGE SECTION.

         ...

         ...



      01 ADA-COMM-AREA.

        05 COMMID           PIC X(8) VALUE 'ADABAS52'.

        05 CB-PTR           USAGE POINTER.

        05 FB-PTR           USAGE POINTER.

        05 RB-PTR           USAGE POINTER.

        05 SB-PTR           USAGE POINTER.

        05 VB-PTR           USAGE POINTER.

        05 IB-PTR           USAGE POINTER.

         ...

      01  ADABAS-CB       PIC X(80).

      01  ADABAS-FB       PIC X ...

      01  ADABAS-RB       PIC X ...

      01  ADABAS-SB       PIC X ...

      01  ADABAS-VB       PIC X ...

      01  ADABAS-IB       PIC X ...

         ...

      01 ADA-COMM-AREA-LENGTH PIC S9(4) COMP.

         ...



    PROCEDURE DIVISION.

         ...

         ...

     INIT-ADA-COMM-AREA.

        SET  CB-PTR TO ADDRESS OF ADABAS-CB.

        SET  FB-PTR TO ADDRESS OF ADABAS-FB.

        SET  RB-PTR TO ADDRESS OF ADABAS-RB.

        SET  SB-PTR TO ADDRESS OF ADABAS-SB.

        SET  VB-PTR TO ADDRESS OF ADABAS-VB.

        SET  IB-PTR TO ADDRESS OF ADABAS-IB.

        MOVE 32 TO ADA-COMM-AREA-LENGTH.

         ...

        EXEC CICS LINK PROGRAM ('ADABAS')

             COMMAREA(ADA-COMM-AREA)

             LENGTH(ADA-COMM-AREA-LENGTH)

        END-EXEC.





Top of page

バッチモードでの Adabas API の使用

バッチモードの Adabas API による標準コールでは、レジスタ 1 のパラメータリストおよびレジスタセーブエリアをポイントするレジスタ 13 を使用します。 この規則は、すべての主なプログラミング言語で CALL メカニズムによって、サポートされています。

ほとんどのメインフレームオペレーティングシステム環境では、バッチ API(ADALNK または ADALNKR)は、バッチアプリケーションモジュールと直接リンクするか、または ADAUSER でロードすることができます。 バッチアプリケーションは、バッチ ADALNK または ADALNKR ではなく、ADAUSER とリンクすることを強くお勧めします。

Adabas API を使用した ADAUSER および ADARUN

ADAUSER は Adabas API とリンクすることができます。 ADAUSER は、Adabas リリースとの上位互換性を提供し、API または Adabas SVC の将来のリリースでの変更に影響されないように、ある程度分離します。

実行する各ユーザープログラムは、Adabas バージョンに依存しないモジュール ADAUSER とリンクする必要があります。ADAUSER は Adabas コントロールモジュール ADARUN をダイナミックにロードします。 バッチモードの実行の場合は、環境非依存を最大限に実現するため、次のように、ユーザープログラムを ADAUSER とリンクする必要があります。

ユーザープログラムとリンクするモジュール 効果
ADAUSER、ADARUN、ADALINK モード非依存および Adabas バージョン非依存
ADARUN、ADALINK モード非依存のみ
ADALINK なし(バージョン非依存もモード非依存もない)

バッチアプリケーションモジュールと ADAUSER のリンクに必要な JCL/JCS を次に示します。

リンク例(BS2000)


/ EXEC $TSOSLNK

PROGRAM USERPROG

INCLUDE USERPGM,             ... User Library

INCLUDE ADAUSER,             ... Adabas Library

END

リンク例(z/OS)


// EXEC LKED,PARM='NCAL' 

//LKED.SYSLMOD   DD           ... User Library 

//LKED.ADALIB    DD           ... Adabas Library 

//LKED.SYSIN     DD *    

    INCLUDE SYSLMOD(USERPGM)   

    INCLUDE ADALIB(ADAUSER)   

    ENTRY USEREP                 (see note)

    NAME USERPROG(R) 

/* 

注意:
エントリポイントを指定する場合、これはユーザープログラムのエントリポイントでなければなりません。

リンク例(z/VM)


FILEDEF ADALIB DISK ADAVnnn LOADLIB fm 

FILEDEF SYSLIN DISK LINKEDIT CARDS A 

LKED userprog ( NCAL LET XREF MAP LIBE USERLIB LIST 

LINKEDIT CARDS A には、次のリンケージエディタ制御ステートメントが含まれています。 ユーザープログラムは TEXT ファイルとして存在しています。


INCLUDE ADALIB(ADABAS) 

ENTRY userprog 

NAME userprog(R)     

注意:
このシステムは必要なモジュールをすべてダイナミックにロードするので、CMS を使用するときは ADAUSER とのリンクは適用できません。

リンク例(VSE)


*  Appropriate assignments must be made for private

libraries, where necessary.

*    

// OPTION CATAL    

   PHASE USERPROG,*     

   INCLUDE USERPGM     

   INCLUDE ADAUSER     

   ENTRY USEREP               (see note)  

// EXEC LNKEDT   

注意:
エントリポイントを指定する場合、これはユーザープログラムのエントリポイントでなければなりません。

バッチ実行モード

バッチ配下で実行するとき、プログラムはシングルユーザーモードまたはマルチユーザーモードで実行できます。

処理モードはマルチユーザーモードを使用することをお勧めします。 ユーザーは、ADARUN やユーザープログラムに必要なジョブ制御ステートメントを指定するだけです。

マルチユーザーモード例(BS2000)

SDF フォーマットの場合:


/ASS-SYSDTA *SYSCMD      (ADARUN PARAMETERS)

/SET-FILE-LINK DDLIB,ADAvrs.MOD

/SET-FILE-LINK BLSLIB00,user modlib              

/START-PROGRAM USERPROG,PR-MO=ANY,RUN-MODE=ADV(ALT-LIB=YES)

ADARUN MODE=MULTI...

ISP フォーマットの場合:


/FILE ADABAS MODLIB,LINK=DDLIB

/SYSFILE TASKLIB=user modlib

/SYSFILE SYSDTA=(SYSCMD) (ADARUN PARAMETERS)

/EXEC USERPROG

ADARUN MODE=MULTI...

注意:

  1. SYSDTA を入力ストリームとして使用する代わりに、/SET-FILE-LINK(ISP フォーマットの場合は /FILE)を使用して、ユーザープログラムによって ADARUN パラメータを含むシーケンシャルファイルをリンク名 DDCARD に割り当てることができます。
  2. ADAUSER モジュールを COBOL などの TP 環境のユーザープログラムにリンクすることをお勧めします。

マルチユーザーモード例(z/OS)

次の例では、ユーザープログラム USERPROG はモジュール ADAUSER とリンクしており、マルチユーザーモードで実行することを想定しています。


// EXEC PGM=USERPROG  

//STEPLIB   DD        ... User Library  

//          DD        ... Adabas Library  

//DDCARD    DD *  

ADARUN MODE=MULTI  

//DDPRINT   DD SYSOUT=*  

//... user  DD statements ... 

マルチユーザーモード例(z/VM)

マルチユーザーモードの z/VM 環境で実行されているユーザープログラムは、ADARUN を使用して他のプログラムを制御することができません。

マルチユーザーモード例(VSE)

次の例では、ユーザープログラム USERPROG はモジュール ADAUSER とリンクしており、マルチユーザーモードで実行することを想定しています。


//....user program assignments....  

//  LIBDEF PHASE,SEARCH=(user-library, ADABAS-library)  

//  EXEC USERPROG  

ADARUN MODE=MULTI  

/*

ユーザープログラムがステートメント入力を読み込む場合、次のいずれかが適用されます。

注意:

  1. ADARUN および(または)ADALINK、ADAIOR、ADAMOD、および他の Adabas モジュールは、実行中にダイナミックロードするために利用可能でなければなりません。
  2. Adabas ロードライブラリは、必要なモジュールをダイナミックにロードできるように、実行中に利用可能でなければなりません。

シングルユーザーモードでの実行

シングルユーザーモードでは、適切な Adabas ニュークリアス JCL をユーザープログラムの JCL に組み込む必要があります。 これには、アソシエータ、データストレージ、WORK データセット、およびプロテクションログやコマンドログのための任意のデータセット用に Adabas データセットを定義するためのジョブ制御ステートメントが含まれます。 Adabas ランタイムジョブ制御要件の詳細については、「Adabas セッションの実行」を参照してください。

注意:
z/VM 機能を使用するユーザープログラムは、シングルユーザーモードの Adabas ニュークリアスにアクセスすることはできません。

Top of page

OpenEdition z/OS の Adabas クライアントのサポート

OpenEdition z/OS 環境で実行されているクライアントは Adabas にアクセスできます。 OpenEdition アプリケーションには Adabas へのコールが含まれており、ADALNK(オプション1)またはADAUSER(オプション2)とリンクすることができます。

次の理由から、OpenEdition アプリケーションを ADAUSER とリンクする(オプション2)ことを推奨します。

オプション 1:OpenEdition アプリケーションと ADALNK のリンク

Adabas コールを含む OpenEdition アプリケーションはモジュール ADALNK とリンクすることができます。 リンクしたモジュールの ADABAS CSECT の特定のオフセットに、データベースID と SVC 番号を ZAP する必要があります。オフセットについては、『Adabas インストールマニュアル』の「Writing User Exits for an Adalink」を参照してください。

以下に示すサンプル ZAP とリンクジョブには、次のステップが含まれています。


//*

//* COPY AND RENAME ADALNK

//*

//

COPYLNK



  EXEC  PGM=IEBCOPY

//INLIB    DD    DSN=ADABAS.load.library,DISP=SHR

//OTLIB    DD    DSN=ADABAS.lnk.library,DISP=SHR

//SYSPRINT DD    SYSOUT=*

//SYSIN    DD    *

COPY INDD=INLIB,OUTDD=OTLIB

SELECT MEMBER=((ADALNK,ADALNKOE,R))

/*

//*

//* ZAP DBID AND SVC INTO COPIED ADALNK

//*

//

ZAPLNK



 EXEC PGM=IMASPZAP

//SYSPRINT DD SYSOUT=*

//SYSLIB DD DSN=ADABAS.lnk.library,DISP=SHR

//SYSIN DD *

NAME ADALNKOE ADABAS

VER 0080 0001                     DEFAULT DBID 1

VER 0084 0AF9                     DEFAULT SVC 249

REP 0080 00D3       <======   CHANGE TO USER DBID (HERE DBID 211)

REP 0084 0AE8       <======   CHANGE TO USER SVC  (HERE SVC 232)

/*

//*

//* BIND APPLICATION

//*

//

BINDAPP1



 EXEC PGM=IEWBLINK,

//             PARM='LIST,LET,XREF,MAP,CASE=MIXED'

//SYSPRINT DD  SYSOUT=*

//SYSLMOD  DD  PATH='/u/group/user',

//         PATHOPTS=(OWRONLY,OCREAT,OTRUNC),

//         PATHMODE=(SIRWXU,SIRWXG,SIRWXO)

//APPLIB   DD  DSN=your.appl.library,DISP=SHR

//LNKLOAD  DD  DSN=ADABAS.lnk.library,DISP=SHR

//SYSLIN  DD  *

  INCLUDE APPLIB(applname)

  INCLUDE LNKLOAD(ADALNKOE)

  ENTRY applent

  NAME oeappl(R)

/*

オプション 2:OpenEdition アプリケーションと ADAUSER のリンク

Adabas コールを含んでいる OpenEdition アプリケーションはモジュール ADAUSER とリンクすることができます。

さらに、OpenEdition 階層ファイルシステム(HFS)にメンバ ddcard を設定し、クライアントに要求される ADARUN パラメータを含むようにする必要があります。例えば次のようなパラメータです。

ADARUN PROG=USER,DBID=211,SVC=232,MODE=MULTI

最初の Adabas コールの前に、アプリケーションは、現在のワーキングディレクトリをファイル ddcard があるディレクトリに設定しなければなりません(例:chdir() 関数を使用)。 アプリケーションが実行されると、Adabas は現在のワーキングディレクトリからメンバ ddcard を検索し、パラメータを抽出します。 さらに、Adabas は DDPRINT 出力を現在のワーキングディレクトリのメンバ ddprint に書き込みます。

注意:
メンバ名 ddcard および ddprint は大文字/小文字が区別されます。 メンバ名 DDCARD は有効ではないので、無視されます。

以下に示すサンプルリンクジョブには、次のステップが含まれています。


//*

//* BIND APPLICATION

//*

//

BINDAPP2



 EXEC PGM=IEWBLINK,

//             PARM='LIST,LET,XREF,MAP,CASE=MIXED'

//SYSPRINT DD  SYSOUT=*

//SYSLMOD  DD  PATH='/u/group/user',

//         PATHOPTS=(OWRONLY,OCREAT,OTRUNC),

//         PATHMODE=(SIRWXU,SIRWXG,SIRWXO)

//APPLIB   DD  DSN=your.appl.library,DISP=SHR

//ADALOAD  DD  DSN=ADABAS.load.library,DISP=SHR

//SYSLIN  DD  *

  INCLUDE APPLIB(applname)

  INCLUDE ADALOAD(ADAUSER)

  ENTRY applent

  NAME oeappl(R)

/*

OpenEdition シェル変数 STEPLIB の設定

どちらのオプションについても、OpenEdition シェル変数 STEPLIB は Adabas ロードライブラリへのアクセスを確実にするために設定しなければなりません。 以下に示すサンプルジョブでは、バッチモードで実行する OpenEdition から変数を設定します。


//*

//OEBATCH EXEC PGM=BPXBATCH,

//             PARM='PGM /u/group/user/oeappl'

//STDIN   DD  

PATH='/u/group/user/oeappl.in',PATHOPTS=(ORDONLY)

//STDOUT  DD   PATH='/u/group/user/oeappl.out',

//             PATHOPTS=(OWRONLY,OCREAT),PATHMODE=SIRWXU

//STERR   DD   PATH='/u/group/user/oeappl.err',

//             PATHOPTS=(OWRONLY,OCREAT),PATHMODE=SIRWXU

//STDENV  DD   *

STEPLIB=ADABAS.load.library

/*

//

OpenEdition サポートの制限

OpenEdition 環境で次のプログラムの実行に対するサポートはありません

Top of page