Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


LIBEXIT の処理

SYSLIB (または library-name) データ・セットの代わりに出口モジュールが使用されます。 コンパイラーは、COPY または BASIS ステートメントが検出されるたびに、このモジュールを呼び出してコピーブックを入手します。

LIBEXIT を指定する場合は、LIB コンパイラー・オプションが有効でなければなりません。

表 1. LIBEXIT 処理
コンパイラーのアクション 出口モジュールによる結果としてのアクション
初期化時に出口モジュール (mod2) をロードします  
OPEN 命令コード (op コード) を使用してこの出口モジュールを呼び出します 指定された library-name を処理のために準備します。OPEN 要求の状況をコンパイラーに渡します。
library-name が正常にオープンされた場合に、FIND 命令コードを使用してこの出口モジュールを呼び出します 指定された library-name 内の要求された text-name (または basis-name) のところに、位置決めを行います。この場所がアクティブ・コピーブックになります。位置決めが完了したときに、適切な戻りコードをコンパイラーに渡します。
GET 命令コードを使用してこの出口モジュールを呼び出します アクティブ・コピーブックからコピーされるレコードの長さとアドレス、またはデータの終わり標識のいずれかをコンパイラーに渡します
データの終わりが存在するときに、CLOSE 命令コードを使用して出口モジュールを呼び出します その入力に関連のあるすべてのリソースを解放します

ネストされた COPY ステートメントによる LIBEXIT の処理

アクティブ・コピーブックのレコードは COPY ステートメントを含むことができます。 (ただし、ネストされた COPY ステートメントに REPLACING 句を含めたり、REPLACING 句を持つ COPY ステートメントに、ネストされた COPY ステートメントを含めたりすることはできません。)

コンパイラーは、text-name への再帰呼び出しを許可しません。つまり、コピーブックは、そのコピーブックのデータの終わりに達するまでの間、ネストされた一連の COPY ステートメントの中で一度しか指定できません。

次の表は、ネストされていない 1 つ以上の有効な COPY ステートメントが あるときに、LIBEXIT の処理がどのように変わるかを示しています。

表 2. ネストなしの COPY ステートメントによる LIBEXIT の処理
コンパイラーのアクション 出口モジュールによる結果としてのアクション
初期化時に出口モジュール (mod2) をロードします  
OPEN 命令コード (op コード) を使用してこの出口モジュールを呼び出します 指定された library-name を処理のために準備します。OPEN 要求の状況をコンパイラーに渡します。
library-name が正常にオープンされた場合に、FIND 命令コードを使用してこの出口モジュールを呼び出します 指定された library-name 内の要求された text-name (または basis-name) のところに、位置決めを行います。この場所がアクティブ・コピーブックになります。位置決めが完了したときに、適切な戻りコードをコンパイラーに渡します。
library-name が正常にオープンされた場合に、FIND 命令コードを使用してこの出口モジュールを呼び出します 前のアクティブ・コピーブックのところに、位置決めを設定し直します。位置決めが完了したときに、適切な戻りコードをコンパイラーに渡します。
GET 命令コードを使用してこの出口モジュールを呼び出します。

同じレコードが渡されたかどうかを検査します。

このコピーブックから前に渡されたものと同じレコードをコンパイラーに渡します。検査後に、アクティブ・コピーブックからコピーされるレコードの長さとアドレス、またはデータの終わり標識のいずれかをコンパイラーに渡します。
データの終わりが存在するときに、CLOSE 命令コードを使用して出口モジュールを呼び出します その入力に関連のあるすべてのリソースを解放します

次の表は、ネストされた 1 つの有効な COPY ステートメントを コンパイラーが検出すると、LIBEXIT の処理がどのように変わるかを示しています。

表 3. ネストされた COPY ステートメントによる LIBEXIT の処理
コンパイラーのアクション 出口モジュールによる結果としてのアクション
ネストされた COPY ステートメントからの要求された library-name が前にオープンされていなければ、OPEN 命令コードを使用してこの出口モジュールを呼び出します アクティブ・コピーブックに関する制御情報をスタックに押し入れます。 要求されたアクション (OPEN) を完了させます。 新しく要求された text-name (または basis-name) がアクティブ・コピーブックになります。
要求された新しい text-name のために FIND 命令コードを使用してこの出口モジュールを呼び出します アクティブ・コピーブックに関する制御情報をスタックに押し入れます。 要求されたアクション (FIND) を完了させます。 新しく要求された text-name (または basis-name) がアクティブ・コピーブックになります。
GET 命令コードを使用してこの出口モジュールを呼び出します アクティブ・コピーブックからコピーされるレコードの長さとアドレス、またはデータの終わり標識のいずれかをコンパイラーに渡します。データの終わりに、スタックからその制御情報をポップします。

LIBEXIT パラメーター

コンパイラーはパラメーター・リストを使用して、出口モジュールと連絡します。パラメーター・リストはアドレスが入っている 10 個のフルワードで構成され、レジスター 1 にはパラメーター・リストのアドレスが入ります。戻りコード、データ長、およびデータ・パラメーターは、出口モジュールによってコンパイラーに戻され、他の項目はコンパイラーから出口モジュールに渡されます。

表 4. LIBEXIT パラメーター
Offset 次のもののアドレスが入る 項目の説明
00 ユーザー出口タイプ 操作を実行するユーザー出口を識別するハーフワード。

2=LIBEXIT

04 命令コード 操作のタイプを示すハーフワード。

0=OPEN; 1=CLOSE; 2=GET; 4=FIND

08 戻りコード 出口モジュールによって設定されるフルワードで、要求された操作の成功を示します。

0=操作は成功しました; 4=データの終わり; 12=操作は失敗しました

12 ユーザー出口作業域 ユーザー出口モジュールで使用できるように、コンパイラーが提供する 4 フルワードの作業域
16 データ長 出口モジュールが設定するフルワードで、GET 操作によって戻されるレコードの長さを指定します (80 でなければなりません)
20 データまたは str2 出口モジュールが設定するフルワードであり、GET 操作の際、ユーザー所有のバッファー内のレコードのアドレスが入ります。

str2 は OPEN にのみ適用されます。最初のハーフワード (ハーフワード境界上の) にストリングの長さが入り、その後にストリングが続きます。

24 システム library-name COPY ステートメントの library-name が入れられる 8 文字の区域。プログラム名の処理規則および変換規則が適用されます。必要に応じて、ブランクが埋め込まれます。OPEN、CLOSE、および FIND に適用されます。
28 システム text-name COPY ステートメントの text-name (BASIS ステートメントの basis-name) が入れられる 8 文字の区域。program name の処理規則と変換規則が適用されます。必要に応じて、ブランクが埋め込まれます。FIND にのみ適用されます。
32 ライブラリー名 COPY ステートメントからの完全な library-name が入れられる 30 文字の区域。必要な場合にはブランクが埋め込まれ、そのまま (英大文字に変換されず) で使用されます。OPEN、CLOSE、および FIND に適用されます。
36 テキスト名 COPY ステートメントからの完全な text-name が入れられる 30 文字の区域。必要な場合にはブランクが埋め込まれ、そのまま (英大文字に変換されず) で使用されます。FIND にのみ適用されます。

ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)