言語間通信 (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 でもかまいません。
この例では、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);
この例では、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);