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命令は使わない。ただしこのプロシージャー名は既存の
システム・コマンドなどの名前と重複することは許されずにコンパイル・エラーとなる。