Free Form Calcs
One of the major new features of RPG 4, introduced in V5R1, is free form calculation specifications.
Contents
Features
- Removes the column restrictions on calculations.
- Can be interspersed with standard, fixed form, calcs
Usage
Using free form calculations is quite easy.
- To start a section of free form calculations, simply put '/free' starting in column 7 (not required after v7r1 TR 7).
- On the next line start your free form calculations.
- Each line must end with a semi-colon ";".
- Calculations can span multiple lines.
- End the free form calculation area by putting '/end-free' starting in column 7 on the last line (not required after v7r1 TR 7).
Limitations
certain opcodes have not been implemented in free form RPG. Many have been replaced with corresponding built in functions.
These include ...
- Move operations (it is debatable as to the wisdom of not supporting these operations)
- MOVE
- MOVEL
- MOVEA
- MHHZO
- MHLZO
- MLHZO
- MLLZO
- Arithmetic operations (use free form evaluations or corresponding built in function)
- ADD
- SUB
- DIV
- MULT
- MVR
- XFOOT (use %XFOOT)
- Comparison (use free form comparisons)
- COMP
- IFxx
- WHENxx
- Flow control
- DO
- GOTO
- Parameters (use procedure interface definitions and prototyped calls)
- PARM
- PLIST
- Other
- TESTB
- TESTN
- TESTZ
- XLATE (use %XLATE)
Example
<source lang="rpg"> C if PCFRS = '*ALL' C eval #CFRSF = *BLANK C eval #CFRSH = *BLANK C else C eval #CFRSF = i_CF_Const(PCFRS) C eval #CFRSH = #CFRSF C endif
/free if (pMOLS = '*ALL'); eval #MOLSF = *blank; eval #MOLSH = *blank; else; eval #MOLSF = pMOLS; eval #MOLSH = pMOLS; endif; /end-free
C C#RTNS IFNE '*EXITPGM' C C#RTNS ANDNE '*RETURN' </source >