Example of Source Conversion
The example shows a sample RPG III source member which is to be converted to RPG IV. Figure 1 shows the source of the RPG III version.
H TSTPGM
FFILE1 IF E DISK COMM1
FQSYSPRT O F 132 OF LPRINTER
LQSYSPRT 60FL 56OL
E ARR1 3 3 1 COMM2
E ARR2 3 3 1
IFORMAT1
I OLDNAME NAME
I* DATA STRUCTURE COMMENT
IDS1 DS
I 1 3 FIELD1
I* NAMED CONSTANT COMMENT
I 'XYZ' C CONST1 COMM3
I 4 6 ARR1
C ARR1,3 DSPLY
C READ FORMAT1 01
C NAME DSPLY
C SETON LR
C EXCPTOUTPUT
OQSYSPRT E 01 OUTPUT
O ARR2,3 10
**
123
**
456
CVTRPGSRC FROMFILE(MYLIB/QRPGSRC) FROMMBR(TEST1)
TOFILE(MYLIB/QRPGLESRC) INSRTPL(*YES)
The converted source is shown in Figure 2.
1 .....H*unctions+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Comments+++++++++
2 H DFTNAME(TSTPGM)
3 .....F*ilename++IPEASFRlen+LKlen+AIDevice+.Functions++++++++++++++++++++++++++++Comments+++++++++
4 FFILE1 IF E DISK COMM1
5 FQSYSPRT O F 132 PRINTER OFLIND(*INOF)
6 F FORMLEN(60)
7 F FORMOFL(56)
8 .....D*ame+++++++++++ETDsFrom+++To/L+++IDc.Functions++++++++++++++++++++++++++++Comments+++++++++
9 D ARR2 S 1 DIM(3) CTDATA PERRCD(3)
10 D* DATA STRUCTURE COMMENT
11 D DS1 DS
12 D FIELD1 1 3
13 D ARR1 4 6
14 D DIM(3) CTDATA PERRCD(3) COMM2
15 D* NAMED CONSTANT COMMENT
16 D CONST1 C CONST('XYZ') COMM3
17 .....I*ilename++SqNORiPos1+NCCPos2+NCCPos3+NCC..................................Comments+++++++++
18 .....I*.............Ext_field+Fmt+SPFrom+To+++DcField+++++++++L1M1FrP1MnZr......Comments+++++++++
19 IFORMAT1
20 I OLDNAME NAME
21 .....C*0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....Comments+++++++++
22 C ARR1(3) DSPLY
23 C READ FORMAT1 01
24 C NAME DSPLY
25 C SETON LR
26 C EXCEPT OUTPUT
27 OQSYSPRT E OUTPUT 01
28 O ARR2(3) 10
29 **CTDATA ARR1
30 123
31 **CTDATA ARR2
32 456
- The new specification types are H (control), F (file), D (definition),
I (input), C (calculation), and O (output); they must be entered in this order.
The converted source contains specification templates for the new types, since INSRTPL(*YES) was specified on CVTRPGSRC.
- The control, file, and definition specifications are keyword-oriented. See lines 2, 4 - 7, and 9 - 16.
- The ILE member has a new specification type, definition. It is used
to define standalone fields, arrays and named constants as well as data structures.
In this example,
- ARR2 is defined as a standalone array (Line 9)
- Data structure DS1 is defined as a data structure with two subfields FIELD1 and ARR1 (Lines 11 - 14)
- Constant CONST1 is defined as a constant (Line 16)
The input (I) specifications are now used only to define records and fields of a file. See Lines 19 - 20.
- The extension (E) specifications have been eliminated. Arrays and tables are now defined using definition specifications.
- Record address file (RAF) entries on extension specifications have been replaced by the keyword RAFDATA on the File Description specification.
- The line counter specifications have been eliminated. They have been replaced by the keywords FORMLEN and FORMOFL on the file description specification. See Lines 6 and 7.
- All specification types have been expanded to allow for 10-character names for fields and files.
- In RPG IV, data structures (which are defined using definition specifications)
must precede the input specifications.
Note that in the converted source, the data structure DS1 (Line 11) has been moved to precede the specification containing the FORMAT1 information (Line 19).
- In RPG III, named constants can appear in the middle of a data structure.
This is not allowed in RPG IV.
In the converted source, CONST1 (Line 16) has been moved to follow data structure DS1 (Line 11).
- If a specification is moved, any comment that precedes it is also moved.
In the converted source, the comments above CONST1 and DS1 were moved with the following specifications.
- In RPG III, to define an array as a data structure subfield, you define
both the array and a data structure subfield with the same name. This double
definition is not allowed in RPG IV. Instead you specify the array attributes
when you define the subfields using the new keyword syntax.
In this example, ARR1 is defined twice in the OPM version, but has been merged into a single definition in converted source. See Lines 13 and 14.
The merging of RPG III array specifications may result in the reordering of the array definitions. If the reordered arrays are compile-time arrays, then the loading of array data may be affected. To overcome this problem, RPG IV provides a keyword format for the ** records. Following **, you enter one of the keywords FTRANS, ALTSEQ, or CTDATA. If the keyword is CTDATA, you enter the array or table name in positions 10 - 19.
In this example, the array ARR2 now precedes array ARR1, due to the merging of the two RPG III specifications for ARR2. The Conversion Aid has inserted the keywords and array names in the converted ** records, which ensures the correct loading of the compile-time data. See Lines 29 and 31.
- Note that array syntax has changed. The notation ARR1,3 in RPG III is ARR1(3) in RPG IV. See line 28.