RPG

523. RPG内でオブジェクトの存在をチエックするには

RPGの実行中でオブジェクトの存在を
チェックしたい場合がある。
ILE-RPGのフリー・フォーマットを使えば
簡単に検査することができる。
_

[RPG : TESTCHKB ]

ソースはこちらから

0001.00 H DFTNAME(TESTCHKB) DATEDIT(*YMD/) BNDDIR('QC2LE')                   
0002.00 D*( SYSTEM   のプロトタイプ宣言 )                                    
0003.00 D SYSTEM          PR            10I 0 EXTPROC('system')              
0004.00 D  CMDSTR                         *   VALUE OPTIONS(*STRING)         
0005.00 D bSPOOLWTR       S              1N   INZ(*OFF)                      
0006.00                                                                      
0007.00  /FREE                                                               
0008.00    IF  SYSTEM('CHKOBJ SPOOLWTR *LIB') = 0;                           
0009.00      bSPOOLWTR = *ON;                                                
0010.00    ENDIF;                                                            
0011.00  /END-FREE                                                           
0012.00 C                   SETON                                        LR  


  

[解説]

関数 : system は C言語の関数であり QCMDEXCと同じで
コマンドを実行するAPIでもある。
ここではライブラリー: SPOOLWTR が存在しているのかを
CHKOBJコマンドを使ってチェックしている。

C言語の関数をRPGで使えるようにするには
H仕様書で BNDDIR(‘QC2LE’) を宣言する必要がある。

次にsystem関数のプロトタイプを

0002.00 D*( SYSTEM   のプロトタイプ宣言 )                                    
0003.00 D SYSTEM          PR            10I 0 EXTPROC('system')              
0004.00 D  CMDSTR                         *   VALUE OPTIONS(*STRING) 

として宣言する。
後はフリー・フォーマットで

SYSTEM('CHKOBJ SPOOLWTR *LIB')

を実行するだけであり成功時、すなわち SPOOLWTR という名前の
ライブラリーが見つかったときの結果は 0 の値が戻る。
失敗したときは -1 ではなく 1の値が戻る。

このようにフリー・フォーマットをうまく使えば
RPG と CLPの混在利用は非常にわかりやすく簡単に実行することが
できる。
_