COBOL アプリケーションからの PL/I サブルーチンの呼び出し

注: 以下の情報は、Enterprise Server で実行されるプログラム向けですが、Enterprise Server 以外で実行されるスタンドアロン アプリケーションにも該当します。

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.