FREE 命令コードの変換
FREE 命令の関数を置き換えるには、 まず、FREE 命令が使用されていた理由を判別する必要があります。
- プログラムがそのプログラムに対する次の呼び出しで初期化されるようにするために FREE 命令が使用されていた場合、呼び出されるプログラムが特殊パラメーターで (またはパラメーターなしで) 呼び出され、単に LR 上に設定されて、戻されることを示すように、そのプログラムを変更します。次に、FREE 命令をコーディングする代わりに、特殊な "free" パラメーターでプログラムを呼び出します。
* RPG III coding
C CALL 'MYPGM'
C PARM P1
...
C FREE 'MYPGM'
...
C CALL 'MYPGM'
C PARM P1
* Replacement RPG IV coding for the "reresolve" function of FREE
C call MYPGM_var
C parm p1
...
* Cause MYPGM to initialize on the next call
C call MYPGM_VAR
...
C call MYPGM_var
C parm p1
* Modified version of MYPGM. It ends itself when it is called with no parameters.
D SDS
D PARMS *PARMS
C *ENTRY PLIST
C PARM NAME 10
c PARMS IFEQ 0
C SETON LR
C RETURN
C ENDIF
...
- FREE 命令が含まれるプログラムが、そのプログラムの次の呼び出しで 再びそのプログラムに解決されるように FREE 命令が使用されていた場合、 文字変数を使用して呼び出しを行うように、呼び出し側プログラムを変更できます。 呼び出されたプログラムが再び解決されるようにするには、 文字変数を使用して、FREE を行う場所で異なるプログラムを呼び出す必要があります。 これにより、次の CALL 命令で文字変数を使用するときに、 システムは再度プログラムに対して解決を実行します。"FREE" 関数に対して呼び出される 非常に高速実行のプログラムを作成します (単純に RETURN 命令を持つ ILE RPG プログラムなど)。
* RPG III coding
C CALL 'MYPGM'
C PARM P1
...
C FREE 'MYPGM'
...
C CALL 'MYPGM'
C PARM P1
* Replacement RPG IV coding for the "reresolve" function of FREE
D MYPGM_var s 21a INZ('MYPGM')
C call MYPGM_var
C parm p1
...
* Cause a reresolve to MYPGM for the next call
C eval MYPGM_var = 'MYLIB/FREEPGM'
C call MYPGM_VAR
C reset MYPGM_var
...
C call MYPGM_var
C parm p1
DEBUG 命令の関数を置換するには、対話式デバッガーを使用します。 プログラム・デバッグの詳細については、プログラムのデバッグを参照してください。