RPG

149. バインド済みのモジュールを別のライブラリーのモジュールに置き換えるには ?

前章の「148.再コンパイルをしないでモジュールを更新するには ?」で紹介したように
UPDPGM を使えばコンパイル済みのプログラム(*PGM) に
同梱されているモジュール(*MODULE) を
UPDPGM コマンドによって置き換えられることがわかった。
ここからはさらに高度な使用方法として、バインド済みのモジュールに対して
別のライブラリーにある同じ名前のライブラリーに置き換える方法を紹介しよう。
弊社としてのストーリーは前章で紹介したようにユーザー・プログラムに既にバインドされて
*PGM として作成されているプログラムに同梱されているモジュールを弊社のライブラリーにある
同じ名前のモジュールに置き換えようというものである。

例えば、今、 TESTLIB/TESTPGM というプログラムは、

 CRTPGM TESTLIB/TESTPGM MODULE(QTEMP/TESTPGM MODLIB/MYMOD)

のようにしてライブラリー MODLIB のモジュール MYMOD をバインドして作成されている。
この MYMOD を新しいライブラリー NEWLIB の MYMOD に置き換えようというものである。
単に、

 UPDPGM TESTLIB/TESTPGM MODULE(MODLIB/MYMOD)

としたのでは TESTPGM内の最新のモジュール MODLIB/TESTPGM
更新されるだけであるが、これを NEWLIB/MYMOD に置き換えるには

 UPDPGM TESTLIB/TESTPGM MODULE(NEWLIB/MYMOD) RPLLIB(MODLIB)

のように置き換えライブラリー(RPLLIB)パラメータに旧ライブラリー名を指定すれば
任意のライブラリーのモジュールに置き換えることができる。
置き換え後に

 DSPPGM TESTLIB/TESTPGM 

でプログラム TESTLIB/TESTPGM を調べてみると依然として MODLIB/MYMOD
バインドしているかのように見えるが、これは DSPPGM の情報表示が不完全なだけであって
実行してみれば NEWLIB/MYMOD が起動されていることがわかる。
これによってモジュールをバインドしてしまっているような製品であっても、すっかり裸同然であり
完全なコンバージョンが行えるようになる。