Difference between revisions of "Free Form Calcs"
m (→Limitations) |
m (Updated to use new highlighting engine ... which is RPG aware (CL too)) |
||
Line 49: | Line 49: | ||
=Example= | =Example= | ||
− | < | + | <source lang="rpg"> |
C if PCFRS = '*ALL' | C if PCFRS = '*ALL' | ||
C eval #CFRSF = *BLANK | C eval #CFRSF = *BLANK | ||
Line 70: | Line 70: | ||
C C#RTNS IFNE '*EXITPGM' | C C#RTNS IFNE '*EXITPGM' | ||
C C#RTNS ANDNE '*RETURN' | C C#RTNS ANDNE '*RETURN' | ||
− | </ | + | </source > |
Revision as of 20:08, 31 March 2011
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.
- 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.
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 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 >