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