言語環境プログラムのもとでアプリケーションで COBOL プログラムとアセンブラー・プログラムの混合を実行する場合、呼び出し先アセンブラー・プログラムでは予測可能なプログラム・マスクに依存することはできません。
言語環境プログラムでこうした混合アプリケーションを実行すると、アセンブラー・プログラムで ABEND 0CA (10 進オーバーフロー) が発生する可能性があります。
特定のプログラム・マスク要件を持つアセンブラー・プログラムは、プログラム・マスクを必要な値に設定し、戻る前にプログラム・マスクを復元する必要があります。
: VS COBOL II では、アセンブラー・プログラムが呼び出されたとき、プログラム・マスクは
常に同じ設定値を持っていました。
言語環境プログラムは、エンクレーブで初期設定された高水準言語 (HLL) の要件に基づいてプログラム・マスクを設定します。各 HLL では、言語環境プログラムにそのプログラム・マスク要件と言語環境プログラム要件、またはすべての要件が一緒に通知され、それに従ってプログラム・マスクが設定されます。
言語環境プログラムは、言語環境プログラム・サービスの呼び出し間または言語環境プログラム環境内での呼び出し間でプログラム・マスク設定を保管も復元もしません。
COBOL のプログラム・マスク要件では各マスク設定が OFF に設定されていますが、その他の HLLの要件では 1 つ以上のプログラム・マスクが ON に設定されます。このテーブルは、これらの要件の一部を示しています。
表 1. HLL でのプログラム・マスク要件| 言語 |
固定小数点
オーバーフロー・
マスク
|
10 進オーバー
フロー・マスク
|
指数アンダー
フロー・マスク
|
有効数字マスク |
| C/C++ |
OFF |
ON |
OFF |
OFF |
| PL/I MVS および VM |
ON |
ON |
ON |
OFF |
| Enterprise PL/I |
OFF |
ON |
ON |
OFF |
1 つ以上のプログラム・マスクが ON に設定されている場合に、言語セマンティクスをサポートするには、言語環境プログラムは、条件処理有効化ステップを使用して、現在スタックでアクティブになっている言語に基づいて、どの例外を有効とし (つまり条件として扱い)、どの例外を無視するかを決定します。
シナリオ例: COBOL と C/C++ の両方が初期設定されている場合、10 進オーバーフロー・マスクは ON になりますが、その他のマスク設定はすべて OFF になります。COBOL プログラムまたは COBOL ランタイム・ルーチンで 10 進オーバーフローが起こると、言語環境プログラムの
条件処理に例外処理の制御が移ります。有効化ステップの間に、言語環境プログラムは、COBOL で 10 進オーバーフローが無視され、再開されるように決定します。この後、言語環境プログラムは、アプリケーションを再開します。アセンブラー・プログラムまたは C ルーチンがアクティブになっている間に 10 進オーバーフローが発生した場合、例外が有効になり、条件のシグナルが出されます。
COBOL プログラムのみが実行されるにもかかわらず、COBOL と C/C++ の両方が初期設定される場合があります。たとえば、以下の場合に COBOL に C/C++ ランタイムが必要になります。
- COBOL プログラムに XML PARSE または XML GENERATE ステートメントが含まれている。
- COBOL プログラムが以下のいずれかのコンパイラー・オプションでコンパイルされている。
- DLL
- PGMNAME(LONGUPPER)
- PGMNAME(LONGMIXED)
- オブジェクト指向 COBOL