言語環境プログラムは、PLICALLB エントリー・ポイントを使用する PL/I アプリケーション をサポートします。 次の表に、OS PL/I と言語環境プログラムとの間での PLICALLB パラメーターの マッピングを示します。
| OS PL/I | 言語環境プログラム |
|---|---|
| 非マルチタスキング・プログラム、 またはマルチタスキング・プログラム内の大タスク の、ISA ストレージの長さの アドレス | STACK(init_size ) にマップされます。 |
| ISA ストレージのアドレス | 初期 STACK セグメントとして使用されます。 |
| 各サブタスクに対する ISA ストレージの長さのアドレス | NONIPTSTACK(init_size) にマップされます。 |
| 並行サブタスクの最大数のアドレス | PLITASKCOUNT(max_thread) にマップされます。 |
| 次のランタイム・オプションを指定できる、オプション・ワードの
アドレス:
REPORT SPIE|STAE COUNT FLOW HEAP サブオプション TASKHEAP サブオプション |
次のようにサポートされます。
REPORT は RPTSTG にマップされます。 SPIE|STAE は TRAP にマップされます。 COUNT は無視されます。 FLOW は無視されます。 HEAP(,,KEEP|FREE)|(,,ANY|BELOW) THREADHEAP(,,KEEP|FREE)|(,,ANY|BELOW) |
| 非マルチタスキング・プログラム、または マルチタスキング・プログラム内の大タスクの、HEAP ストレージ の長さのアドレス | HEAP(init_size) にマップされます。 |
| HEAP ストレージのアドレス | 初期 HEAP セグメントとして使用されます。 |
| 非マルチタスキング・プログラム、または マルチタスキング・プログラム内の大タスクの、HEAP 増分 のアドレス | HEAP(,incr_size) にマップされます。 |
| サブタスクの HEAP のアドレス | THREADHEAP(,increment) にマップされます。 |
| 非マルチタスキング・プログラム、または マルチタスキング・プログラム内の大タスクの、ISA 増分 のアドレス | STACK(,incr_size) にマップされます。 |
| 各サブタスクの ISA 増分の アドレス (非タスキング・アプリケーションの場合はオプション) | NONIPTSTACK(,incr_size) にマップされます。 |
PLICALLB エントリー・ポイントを介して上記の引数リストを渡す際に、 リストの引数はアドレスを指しているか、または 0 でなければなりません。 引数の高位ビットが ON であることは、引数リストの最後を 表します。 R1 には引数リストのアドレスが格納されている必要があります。
言語環境プログラムの環境では、PLICALLB エントリー・ポイントを介して渡される ランタイム・オプションは、アプリケーションの起動時に指定される オプションとして処理され、CEEUOPT オプションまたは PLIXOPT オプション より優先順位が高くなります。 アセンブラー・ユーザー出口を使用して、PLICALLB の呼び出しによって 渡されるランタイム・オプションを変更することはできません。
要約すると、渡されるランタイム・オプションは、言語環境プログラムのオプションの 指定方法において、次の優先順位を 持ちます (高いほうから順)。
PL/I メインルーチンに渡されるユーザー引数の優先順位は、 次のとおりです (最高から最低の順)。
言語環境プログラムは、16M ラインより上のストレージの使用を推奨しています。 OS PL/I との互換性のために、言語環境プログラムはユーザー提供の ISA ストレージ と HEAP ストレージを、STACK と HEAP にマップします。 ただし、このマッピングを使用する場合 でも、言語環境プログラムは GETMAIN をいくつか実行する必要があります。 ユーザー提供の ISA/HEAP ストレージは通常 16M ラインより下にあるので、 言語環境プログラムの環境では、16M ラインより下のストレージがすぐに消費される 可能性があります。 言語環境プログラムによるストレージの管理方法については、「z/OS 言語環境プログラム プログラミング・ガイド」を参照してください。
言語環境プログラムによるストレージの管理方法は、OS PL/I とは異なります。言語環境プログラムは、OS PL/I がサポート する ISA と HEAP よりも多くのカテゴリーにストレージを分割します。 その結果、ユーザーが提供した OS PL/I の ISA または HEAP ストレージ を言語環境プログラムの STACK または HEAP ストレージにマップするためには、ランタイムに GETMAIN を必要とします。 さらに、言語環境プログラムでは、ユーザーの提供した ISA または HEAP ストレージの 長さが 8 バイトの倍数となっており、アドレスがダブルワードの境界に来ていることを 確認するために診断が行われます。
また、言語環境プログラムは、ユーザーが提供した ISA または HEAP ストレージの位置が、STACK または HEAP ランタイム・オプションでの位置指定に一致するようにします。 ユーザーが提供した HEAP ストレージは、次のすべて があてはまる場合には無視されます。
言語環境プログラムは、16M ラインより下のストレージを、HEAP オプションで 指定された init_sz24 および incr_sz24 サブオプションを使用して割り振ります。
次の環境では、言語環境プログラムによる PLICALLB のサポートは利用できません。