RPG

465. CALL命令はILE-RPG フリー・フォーマットでは使えない ?

RPGの中からでも別のプログラムを呼び出すにはCALL命令で
呼び出すことがRPG IIIまでは普通のことであり
ILE-RPGでも固定フォーマットであればCALL命令で
呼び出すことができる。
_

ところがIBM RPG解説書を見るとILE-RPGのフリー・フォーマットでは
CALL命令は使えないとある。
これは一体どういうことだろう?
もう少しくわしく読んでみるとCALL命令ではなくCALLP命令を
使えと記述されている。
CALLPとはプロシージャーを呼び出す命令であってプログラムを
呼び出すには使えないはずである。
【RPG: TESTCAL】CALL命令でQCMDEXCを呼び出すプログラム

ソースはこちらから

 

0001.00 H DFTNAME(TESTCAL) DATEDIT(*YMD/) BNDDIR('QC2LE') DFTACTGRP(*NO)        
0002.00 F******** CALLP によるプログラムの呼出し ****************************** 
0003.00 F*                                                                      
0004.00 F********************************************************************** 
0005.00 D QCMDEXC         PR                  EXTPGM('QSYS/QCMDEXC')            
0006.00 D  cmdString                 32700    CONST OPTIONS(*VARSIZE)           
0007.00 D  cmdLen                       15P 5 CONST                             
0008.00                                                                         
0009.00 D CMD             S          32767                                      
0010.00                                                                         
0011.00  /FREE                                                                  
0012.00      CMD = 'DSPLIBL *PRINT';                                            
0013.00      QCMDEXC(CMD:%LEN(%TRIMR(CMD)));                                    
0014.00  /END-FREE                                                              
0015.00 C                   MOVE      *ON           *INLR  
 

                     

[解説]
つまり 外部プログラムを EXTPGMを使ってプロシージャーとして再定義したものを
フリー・フォーマット内で呼び出すということになる。
フリー・フォーマット内ではCALL命令は使わない。ただしこのプロシージャー名は既存の
システム・コマンドなどの名前と重複することは許されずにコンパイル・エラーとなる。