PL/I プログラムと COBOL およびアセンブラー AMODE (24/31) プログラムとの間の言語間通信 (ILC)

言語間通信 (Interlanguage Communication; ILC) とは、PL/I プログラムから COBOL プログラムおよびアセンブラー プログラムを呼び出すことができ、その逆方向の呼び出しもできることを意味します。Micro Focus PL/I では、ILC で AMODE [24|31] がサポートされるようになりました (制限事項がいくつかあります。「制約事項」セクションを参照してください)。アセンブラーは、Windows 上でのみ、またプログラムが Enterprise Server で実行される場合にのみサポートされます。

AMODE オプションが使用されていない限り、デフォルトでは、Micro Focus PL/I は NOAMODE (アドレス指定モード) で動作し、POINTER のアドレスはフル 32 ビットになります。AMODE [24|31] では、エミュレートされたポインターのアドレスは 24 ビットまたは 31 ビットになります。通常、メインフレームでは、PL/I は AMODE(24) で動作しませんが、24 ビット COBOL および z/OS アセンブラーと共存する (つまり、これらの言語のプログラムとの間で相互に呼び出しを行う) ためには、PL/I は AMODE(24) で動作する必要があります。そのような環境内のすべてのプログラムは、RMODE(24) (常駐モード) である必要があります。アセンブラー プログラムまたはグルー アセンブラー プログラムが呼び出し時および戻り時にモードの切り替えを行う場合は、プログラムは混合 RMODE でもかまいません。

例 1:アセンブラーとの ILC

この例では、PL/I は可変個数の引数を使用してアセンブラー プログラムを呼び出します。

dcl printva entry options(asm);
dcl 1 msgs auto,
    3 life    char(7)  var init("Life's "),
    3 good    char(5)  var init("Good!"),
    3 perhaps char(15) var init("... Perhaps ..."),
    3 like    char(7)  var init("Like a "),
    3 box     char(7)  var init("Box of "),
    3 choc    char(11) var init("Chocolates!");
call printva(life, good);
call printva(perhaps);
call printva(life, like, box, choc);
注: このプログラムは、オプション -amode [31 | 24] を指定してコンパイルし、Enterprise Server で実行する必要があります。 printva はアセンブラーで記述されたサブルーチンです。

例 2:COBOL との ILC

この例では、PL/I は可変個数の引数を使用して COBOL プログラムを呼び出します。

dcl printvc entry options(COBOL);
dcl 1 msgs auto,
    3 life    char(7)  var init("Life's "),
    3 good    char(5)  var init("Good!"),
    3 perhaps char(15) var init("... Perhaps ..."),
    3 like    char(7)  var init("Like a "),
    3 box     char(7)  var init("Box of "),
    3 choc    char(11) var init("Chocolates!");
call printvc(life, good);
call printvc(perhaps);
call printvc(life, like, box, choc);
注: printvc は COBOL で記述されたサブルーチンです。

制約事項

  • PL/I のアセンブラーに対する ILC サポートは、現在、32 ビット Windows プラットフォームのみに制限されています。
  • PL/I の COBOL に対する ILC は、32 ビット プラットフォームのみに制限されています。
  • PL/I の ILC では、POINTER 引数/パラメーターの受け渡しをサポートしていません。これには、構造体および共用体の POINTER データが含まれます。
  • 現時点では、配列での可変範囲の使用は、AMODE オプションではサポートされていません。