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
 ...
 * 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 命令の関数を置換するには、対話式デバッガーを使用します。 プログラム・デバッグの詳細については、プログラムのデバッグを参照してください。