フリー・フォーマットを利用するとコマンドの実行も
格段と見やすくわかりやすくなる。
これまではRPGからコマンドを呼び出して実行するとなると
お決まりのように QCMDEXC を次のように呼び出して
実行していたはずである。
[例1] QCMDEXCを使用する例
0001.00 H DFTNAME(TESTOVR1) DATEDIT(*YMD/)
:
0005.00 D CMR S 80 DIM(2) CTDATA PERRCD(1)
:
0014.00 C******************************************************
0015.00 C OVRDBF BEGSR
0016.00 C******************************************************
0017.00 C MOVE CMR(1) CMDSTR 80
0018.00 C CMDSTR CAT(P) FILLIB:0 CMDSTR
0019.00 C CMDSTR CAT '/':0 CMDSTR
0020.00 C CMDSTR CAT(P) FILE:0 CMDSTR
0021.00 C CMDSTR CAT CMR(2):0 CMDSTR
0022.00 C*----------------------------------------------------+
0023.00 C CALL 'QCMDEXC'
0024.00 C PARM CMDSTR
0025.00 C PARM 80 CMDLEN 15 5
0026.00 C*----------------------------------------------------+
0027.00 C ENDSR
0028.00 ** CMR
0029.00 OVRDBF SHOHIN TOFILE(
0030.00 ) SECURE(*YES) OVRSCOPE(*JOB)
これをフリー・フォーマットで記述すると
[例2] フリー・フォーマットの例
0001.00 H DFTNAME(TESTOVR2) DATEDIT(*YMD/) BNDDIR('QC2LE')
0002.00
0003.00 D CMD S 80A
0004.00 D*( CMD のプロトタイプ宣言 )
0005.00 D CMD PR 10I 0 EXTPROC('system')
0006.00 D PATH * VALUE OPTIONS(*STRING)
:
0008.00 C******************************************************
0009.00 C OVRDBF BEGSR
0010.00 C******************************************************
0011.00 /FREE
0012.00 CMD = 'OVRDBF FILE(SHOHIN) TOFILE(' + %TRIMR(FILLIB) + '/' +
0013.00 %TRIMR(FILE) + ') SECURE(*YES) OVRSCOPE(*JOB)';
0014.00 SYSTEM(CMD);
0015.00 /END-FREE
0016.00 C ENDSR
[解説]
QCMDEXC を使わずにC言語のsystemコマンドを使ってコマンドを記述している。
0012.00 CMD = 'OVRDBF FILE(SHOHIN) TOFILE(' + %TRIMR(FILLIB) + '/' +
0013.00 %TRIMR(FILE) + ') SECURE(*YES) OVRSCOPE(*JOB)';
の記述はCLPをコーディングするよりも短くて直感的でわかりやすい。
このようにRPGソースの中でコマンドを呼び出して実行したい場合は
C言語のsystemコマンドをフリー・フォーマットで記述するとこんなに簡単で
わかりやすく覚えてしまうともう以前のQCMDEXCには戻れない。
BNDDIR('QC2LE')
を H-仕様書に宣言することによってC言語のライブラリーをRPGプログラムから
利用することができるのでRPGの幅が広がるはずである。
C言語は数多くの関数が提供されていると思われているが
実はC言語の文法はごくわずかであってライブラリー関数と呼ばれる多くの関数が
あるためにC言語の幅を広げている。
RPGでもC言語のライブラリー関数のディリクトリー: QC2LEを宣言することに
よってC言語のライブラリーを利用することができる。
C言語というと何やらポインタという難しい概念があって難しい言語と
思われがちであるがRPGにもポインタの利用は可能である。
RPGによるポインタの利用方法は別の機会に解説する。
