ハイパーディスクリプタ出口(ハイパー出口)1~31(HEX01...HEX31)には、ユーザーが指定するディスクリプタ値のアルゴリズムを定義する必要があります(『Adabas ユーティリティマニュアル』を参照)。 ハイパー出口は、ハイパーディスクリプタ値が生成されるたびに、ADACMP ユーティリティまたは Adabas ニュークリアスによりコールされます。 ADACMP は常に、それ自体の ADARUN ステートメントで指定されたハイパーディスクリプタ出口を使用します。 ADAINV ユーティリティによりハイパーディスクリプタ出口が指定されると、Adabas ニュークリアスの ADARUN ステートメントで指定された出口が使用されます。
注意:
このドキュメントでは、次のトピックについて説明します。
パラメータ | 内容 |
---|---|
0(R1) | 予約済み(変更不可)。 |
4(R1) | フルワードのゼロ(変更不可)。 |
8(R1) | 入力パラメータエリアの開始アドレス。 |
12(R1) | 出力パラメータエリアの開始アドレス。 このアドレスは、ユーザー作成のプログラムにより挿入される必要があります。 出力パラメータエリアは、常にユーザーハイパー出口から返す必要があります。 値を返さない場合、アドレスのポイント先は、値エレメントが存在しないことを示すように全体の長さが設定されたヘッダーエレメントになります。 |
LL | 入力パラメータエリア全体の長さ(この長さフィールドも含む) |
FNR | ファイル番号 |
ISN | レコードに割り当てられた ISN |
HN | ハイパーディスクリプタの名前 |
F | フラグバイト:
|
FN | 親フィールドの名前。 |
L | 親フィールドが FI オプション付きで定義されている場合、VALADDR がポイントする値の長さになります。 |
I | 親フィールドのピリオディックグループのインデックス(4 バイト長)。 親フィールドが PE グループに含まれていない場合、このバイトの値はゼロです。 |
VALADDR | 親フィールドの値のアドレス。 値のフォーマットは、フィールドのオプションにより決定されます。 親フィールドが NU(空値省略)オプションで定義され、このフィールドの値が省略された場合は、入力パラメータエレメントは作成されません。 |
次の例は、VALADDR により、FI(固定ストレージ)および MU(マルチプルバリュー)オプションの組み合わせで親フィールドにポイントされた値のフォーマットを示します。
上記の意味は次に示すとおりです。
C | MU カウントを表す 1 バイト値。 MY 値の対象が、拡張 MU または PE フィールド付きで定義されたファイルである場合は、拡張カウントが存在する可能性があります。 拡張カウントの詳細については、ADACMP ドキュメントの「圧縮レコード内の 191 を超える MU および PE オカレンスの特定」を参照してください。 |
*L | 16 進値の長さです。この長さには、このフィールド自体の長さ値(1 バイトまたは 2 バイト)も含まれます。 長さが 1~127 の場合に必要なバイト数は 1 です。 長さが 128~255 の場合に必要なバイト数は 2 です。最初のバイトは X'80' に、2 番目のバイトは実際の長さの値に設定されます(次の例の表を参照)。 |
長さ | バイト 1 | バイト 2 |
---|---|---|
L=127: | x'7F' | (x'80') |
L=128: | (x'80') | (x'80') |
L=255: | (x'80') | x'FF' |
このエリアを割り当てて、ハイパーディスクリプタユーザー出口の領域全体に適用する必要があります。 このエリアのアドレスは、メインパラメータエリアの 2 番目の位置に配置する必要があります。
このエリアは、8 バイトヘッダーおよび、その後に続く、生成された圧縮形式のハイパーディスクリプタ値で構成されます。
LL | 出力パラメータエリア全体の長さ(この長さフィールドも含む)。 値を返さない場合、全体の長さは、ヘッダーエレメントの長さに設定されます。 |
00 | 予約済みのスペース。 これは、0 に設定する必要があります。 |
RC | リターンコード。 ハイパー出口でゼロ以外の値を設定すると、コールを拒否することを示します。この場合に設定する値としては、"16" が推奨です。 このフィールドがゼロ以外の場合、コールはエラーになり、レスポンスコード 79 が返されます。 |
ISN | ディスクリプタ値に割り当てられた ISN。 元の ISN を変更する場合は、新しい ISN をここに挿入する必要があります。 Adabas ニュークリアスへのリターン時にこれらの 4 バイトに 0 が含まれる場合は、元の ISN が使用されます。 これは 4 バイトのバイナリ値です。 |
注意:
ハイパー出口が、ヘッダーエレメントの ISN フィールドで ISN を返す場合は、ファイルが USERISN=YES
で定義され、ファイルが後でリロードされるときに ISN が割り当て直されるのを防ぎます。
L | この次の値の長さ(この長さバイトも含む)。 最大長は、ハイパーディスクリプタに使用されているフォーマットにより決定されます。 |
値 | インデックスに挿入されるディスクリプタ値。 値は、このハイパーディスクリプタに割り当てられるフォーマットに応じた規則に従っている必要があります。 ハイパーディスクリプタが PE オプションで定義されている場合は、1 バイト PE インデックスを含む 1 つのバイトが値の直後にあり、長さ L に含まれている必要があります。 PE オプションで定義されているハイパーディスクリプタの対象が、拡張 MU または PE フィールド付きで定義されたファイルである場合は、2 バイトの PE インデックスを含む 2 つのバイトが値の直後に続き、長さ L に含まれている必要があります。 ニュークリアスは、パック形式または数値形式の値が正しいかどうかをチェックします。 パックフィールドの正しい符号は、A、C、E、F(正)および B、D(負)です。 ニュークリアスはすべての符合を F または D に変更します。 |
例
L | 値 | 注 |
---|---|---|
04 | R E D | |
06 | B L U E02 | X'02' は PE インデックス |
03 | 123F | パック 10 進数の 123 |
04 | 123F01 | インデックス 1 を持つ PE グループのパック 10 進数の 123 |
07 | B L U E0002 | X'0002' は、拡張 MU または PE フィールド付きで定義されたファイルの PE インデックス |
05 | 123F010A | インデックス 266 を持つ拡張 PE グループのパック 10 進数の 123 |
NU(空値)オプションは、ハイパーディスクリプタまたは親フィールドに対して指定できます。 起こりうる組み合わせは次のとおりです。
ハイパーディスクリプタが NU ではない場合
親フィールドは NU ではなく、値は空値です。ハイパー出口がコールされ、空値が渡されます。
親フィールドは NU で、値は空値です。ハイパー出口がコールされ、この親フィールドには入力パラメータ要素が作成されません。
すべての親フィールドは NU で、すべての値は空値です。ハイパー出口がコールされ、どの親フィールドにも入力パラメータ要素が作成されません。
ハイパーディスクリプタが NU である場合
親フィールドは NU ではなく、値は空値です。ハイパー出口がコールされ、空値が渡されます。
親フィールドは NU で、その値は空値です。ハイパー出口がコールされ、この親フィールドには入力パラメータ要素が作成されません。
すべての親フィールドは NU で、すべての値は空値です。ハイパー出口はコールされません。
Adabas ニュークリアスまたは ADACMP の起動時に、ハイパー出口がロードされるたびに初期化コールが実行されます。 主要なパラメータエリアは、説明に従って使用する必要があります。 3 番目のパラメータアドレスのポイント先は、ヘッダー長によって後続の値がないことを示す入力パラメータエリアです。 フラグバイトは、初期化コールを表す x'80' に設定されます。 リターン時には、値が返されていないことを示すヘッダー長とともに、4 番目のパラメータアドレスが出力パラメータエリアに設定される必要があります。
ハイパー出口スタブの役割は、以前のハイパー出口を変更しなくても Adabas 8 パラメータリストを使用できるようにすることです。 ハイパー出口スタブは、新しいパラメータエリアを使用するために既存のハイパー出口をすぐに更新したくないお客様に向けた一時的な解決方法として用意されています。 拡張 MU または PE フィールドが定義されたファイルが対象の場合には、ハイパー出口スタブは機能しません。このようなファイルに対してハイパー出口スタブがコールされた場合、レスポンスコードが返されます。 ハイパー出口スタブにリンクしたハイパー出口が、以前のバージョンの Adabas で使用されることはありますが、ハイパー出口スタブ自体が Adabas 8 パラメータを使用するハイパー出口で使用されることはありません。
JOBS データセットのサンプルジョブ LNKHEX8 には、ハイパー出口スタブをハイパー出口にリンクするときの例が収録されています。
z/VM 環境では、次の手順に従って、ハイパー出口スタブにリンクするハイパー出口を作成してください。
付属のテープに収録されているファイル INPUT TEXT を編集します。 3 行目(NAME HEXnnMOD)を、作成するハイパー出口の名前に変更します。 ADARUN HEXnn パラメータに同じ名前を設定してください。 他の行は変更しないようにしてください。 ファイルを保存します。
INCLUDE LIBDEF(HEXV87,HEXOLD) INCLUDE TXTDEF NAME HEXnnMOD
次のコマンドを使用してハイパー出口を生成します。
FILEDEF LIBDEF DISK ADAV813 TXTLIB
x
(x は ADAV813
TXTLIB が収録されているファイルモード)
FILEDEF TXTDEF DISK HEXnn TEXT
x
(HEXnn
は作成するハイパー出口、x はそのハイパー出口が収録されているファイルモード)
LKED INPUT (LIBE
HEXnn)
(HEXnn
はハイパー出口が収録される新しい LOADLIB の名前)
Adabas ニュークリアスを起動する前に、GLOBAL LOADLIB HEXnn
を指定してください。