COBOL アプリケーションの制御下で実行される PL/I サブルーチンを使用するには、PL/I プログラムを呼び出す前に PL/I ランタイム システムを初期化し、終了前にシャットダウンする必要があります。初期化の呼び出し (__lpi_init()) は COBOL の「initcall」プログラム内で実行できますが、初期化解除の呼び出し (__lpi_fini_and_return()) を COBOL EXIT Proc から行うことはできません。このような呼び出しを行った場合、ステップの終了時に開かれているすべてのファイルをファイル ハンドラーが閉じた後に処理され、バッファーに格納されたストリーム出力がすべて失われることになります。
PL/I ランタイム システムを初期化し、PL/I サブルーチンを呼び出してから、PL/I ランタイム システムを終了する非常に簡単な COBOL プログラムの例を以下に示します。
$SET CASE
identification division.
program-id. FETCHER.
environment division.
configuration section.
special-names.
call-convention 8 is litlink.
data division.
working-storage section.
01 pli-lang pic x(02) comp-5 value 0.
01 pli-retcode pic x(04) comp-5.
01 argv pointer value null.
procedure division.
*> Initialize PL/I RTS
call litlink '__lpi_init' using by value 0 size 4
by reference argv
by reference argv
by value pli-lang
*> Call the PL/I subroutine
call 'PLISUB'
*> Shutdown the PL/I RTS
call litlink '__lpi_fini_and_return' using
by value pli-lang
by reference pli-retcode
move 0 to return-code
goback.
end program FETCHER.