RPG
89. RPG から C/400の関数を使用するには?
OS400のリリース・アップに従ってC/400からだけしか使用できないとされている API が
増えてきている。最近では RPG から TCP/IP通信や IFSのストリーム・ファイルを
扱いたいという要望も増えてきているのではないだろうか?
はたしてRPGだけでは、もはや限界なのであろうか?
このようなRPG開発者からも C/400のライブラリー関数を使用できるような手法を紹介する。
C/400の多くのライブラリー関数は QSYS/QC2LE というバインド・ディレクトリーに登録
されている。
バインド・ディレクトリーとは *SRVPGM を作成するときは登録する登録簿のことである。
CRTPGM などによって *PGM を作成するときには「サービス・プログラムのバインド」
パラメータに バインドする *SRVPGM (=DLLと同じ) を指定してプロシージャーの名前解決を
図るのであるが バインド・ディレクトリーだけを指定しておくと、コンパイラーはバインド・ディレクトリー
の中に 登録されている *SRVPGM を検索して自動的にバインドしてくれるのである。
RPG では QSYS/QC2LE というバインド・ディレクトリーを使用すると C/400のライブラリー関数の
多くは RPG の中からプロシージャーとして呼び出すことができる。
次の例では RPGで乱数を発生させるために C/400の rand関数をプロシージャーとして
呼び出している。
H仕様書では BNDDIR を指定しているが、BNDDIR を使用できない低いリリースの場合は CRTPGM コマンドでバインド・ディレクトリー QSYS/QC2LE を指定してコンパイルしてもかまわない。
【例】C/400の rand 関数を ILE-RPG から呼び出して使用する。
0001.00 H DATEDIT(*YMD/) COPYRIGHT('(C) OFFICEQUATTRO CO,.LTD JAPAN 2005-') 0002.00 H BNDDIR('QC2LE') 0003.00 F********** 乱数の発生 ********************************************* 0004.00 F******************************************************************** 0005.00 D RAND PR 5I 0 EXTPROC('rand') 0006.00 D RANSU S 5I 0 INZ(0) 0007.00 D INTAT8 S 8F INZ 0008.00 C EVAL RANSU = RAND 0009.00 C Z-ADD RANSU DG08 8 0 0010.00 C MOVE DG08 FLD8 8 0011.00 C 'RANDOM=' CAT(P) FLD8:0 DSP40 40 0012.00 C DSP40 DSPLY ANS 1 0013.00 C SETON LR 0014.00 C RETURN
【解説】
C/400には数多くの関数が用意されている。RPG からC/400のライブラリー関数が 使用できるようになると RPGの使用範囲は、かなり大きなものとなるはずである。
ただし、すべての関数が QSYS/QC2LE にバインドされているわけではない。
特殊な関数を使用する場合には V5R3M0 のAPIやC/400の解説書には、どの DIR に バインドされているかが明記されているので参照されたい。


PREVIOUS INDEX NEXT
HOME