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 を実行している部分であるが、 見た目そのままでありわかりやすいはずである。