RPGプログラムの中でCLコマンドを実行するのは
API:QCMDEXC を呼出して実行するのが、これまでの定番であった。
しかし
CALL 'QCMDEXC'
PARM CMD
PARM CMDLEN 155
のようにして実行コマンドはコンパイル時の配列に用意して ... と何だか面倒とは思わないだろうか ?
第一、コマンドを実行するために、いちいち QCMDEXC を呼び出すのは
見た目にもどうもスマートではないし、実行コマンドは配列として離れたところに記述されているので、
この QCMDEXC の部分のソースを眺めたところで
どのようなコマンドが実行されているのか、すぐにはわからない。
これが今の時代には合わない。現代のソースはもっとわかりやすくなくてはならない。
C言語であればプログラム中でコマンドを実行するのは簡単である。
system 関数の中にコマンドを代入するだけでよい。
system('DSPLIB QGPL');
で、できあがりである。
それでは ILE-RPG でも同じように、このシステム関数を利用することができないのだろうか ?
答えは YES である。
H-仕様書に BNDDIR('QC2LE') を記述しておくだけで C言語が参照している
標準ライブラリーを ILE-RPG でも参照することができる。
そこで次のような ILE-RPGソースを完成させることができる。
0001.00 H DFTNAME(TESTLIB) DATEDIT(*YMD/) BNDDIR('QC2LE')
0002.00 F********** ライブラリーの表示 ***************************************
0003.00 F*
0004.00 F**********************************************************************
0005.00 D SYSTEM PR 10I 0 EXTPROC('system')
0006.00 D PATH * VALUE OPTIONS(*STRING)
0007.00 /FREE
0008.00 SYSTEM('DSPLIB QGPL');
0009.00 /END-FREE
0010.00 C SETON LR
0011.00 C RETURN
***************** データの終わり **************************************
CRTBNDRPG PGM(MYLIB/TESTLIB) SRCFILE(MYSRCLIB/QRPGLESRC) DFTACTGRP(*NO) ACTGRP(*NEW) AUT(*ALL)
SYSTEM('DSPLIB QGPL');
がコマンド DSPLIB QGPL を実行している部分であるが、 見た目そのままでありわかりやすいはずである。