CVTRPGSRC – Convert RPG Source
This is a standard IBM i command which will ‘Convert RPG Source’ (CVTRPGSRC) from RPG III or RPG/400 source code to ILE RPG source code.
If you are running on a system using the old (1980’s format) RPG source code — easily recognisable because it uses the short column widths and has limitation like 6 character field names — then this is the firs step in code modernization. The CVTRPGSRC command will take the old RPG format and increase it RPGLE format (ten character field names, new opcodes and ability to enter the RPG code in /free format)
Here is a simple program in RPG3:
H****************************************************************H* H* EXAMPLE RPG3 Program receiving parms, reading file and * H* returning values in *LDA (JBA/System21 style) * H**************************************************************** H 1 FCOMPANY IF E K DISK KINFSR ILDA E DSLDA IPSTAT ESDSPSDS C EXSR INIT C K01 CHAIN COMPANY 01 C *IN01 IFEQ *OFF C MOVEL VTID01 VTIDPM C ELSE C MOVEL *ALL'9' VTIDPM C END C OUT LDA C SETON LR C*************************************************************** C* init subroutine C* C*************************************************************** C INIT BEGSR C* get the lda C *NAMVAR DEFN *LDA LDA C IN LDA C* Get the parms C *ENTRY PLIST C PARM CONOPM 2 C PARM VTIDPM 20 C* Key Fields C K01 KLIST C KFLD CONOPM C ENDSR
So, lets process this using CVTRPGSRC:
CVTRPGSRC FROMFILE(mylib/QRPGSRC)
FROMMBR(RPG3)
TOFILE(mylib/QRPGLESRC)
TOMBR(RPGLE)
LOGFILE(*NONE)
When we run this it generates a new RPGLE version of the code in QRPGLESRC source and it looks like this:
H**************************************************************** H* EXAMPLE RPG3 Program receiving parms, reading file and * H* returning values in *LDA (JBA/System21 style) * H**************************************************************** H DEBUG FCOMPANY IF E K DISK D LDA E DS EXTNAME(LDA) D PSTAT ESDS EXTNAME(PSDS) C EXSR INIT C K01 CHAIN COMPANY 01 C *IN01 IFEQ *OFF C MOVEL VTID01 VTIDPM C ELSE C MOVEL *ALL'9' VTIDPM C END C OUT LDA C MOVEL *ON *INLR C*************************************************************** C* init subroutine C*************************************************************** C INIT BEGSR C* get the lda C *DTAARA DEFINE *LDA LDA C IN LDA C* Get the parms C *ENTRY PLIST C PARM CONOPM 2 C PARM VTIDPM 20 C* Key Fields C K01 KLIST C KFLD CONOPM C ENDSR
Note that this doesn’t look too different. We can see that field names are bigger but it still doesn’t convert the OPCODES (operation codes) to the newer format or preferred values. For example, I would prefer to use EVAL for the MOVEL statements.
I would also add that the next step is to run JCR4MAX right after running CVTRPGSRC.