RPG IV - Chapter 13

Download Report

Transcript RPG IV - Chapter 13

RPG IV
Maintaining the Past - Chapter 13
Objectives
Discuss the migration of older RPG
programs to RPG IV
Introduce the features now obsolete
in RPG IV
Introduce the fixed logic cycle
Introduce the conditioning, resulting,
and level indicators
Compatibility and Conversion
RPG II programs could be compiled
under RPG III with only slight changes
RPG IV source code lines increased to
100 characters
A CL command CVTRPGSRC (Convert
RPG Source) will convert pre-RPG IV
source code to RPG IV syntax
Defining Work Fields
In RPG III, D Specs did not exist
Work fields were defined within the C
Specs in which the field appeared as a
result
Performing Arithmetic and
Numeric Assignment
The EVAL operation was also not
avaibable before RPG IV
Specific arithmetic operations were
used (ADD, SUB, MULT, DIV)
In its basic form, operation ADD adds
the value of Factor 1 and Factor 2,
storing the answer in the Result field
Only one arithmetic opeation is coded
per line
Performing Arithmetic and
Numeric Assignmet (cont)
Z-ADD and Z-SUB were used to assign
value to numeric variables
The function of the Z-ADD was to zero
out the Result field and add Factor 2 to
it
The function of the Z-SUB was to zero
out the Result field and subtract Factor
2 from it
Looping and Selecting
Pre-RPG IV looping and selecting
operations are not free-form
expressions
DOWxx, DOUxx, Ifxx, WHENxx are the
operations (the small xx represents
relational code)
Two unstuctured operations were also
available: CABxx and GOTO
Manipulating Strings
SUBST has been superseded by the
built-in function %SUBST
CAT has been made obsolete by the
concatenation (+) operator used within
an EVAL operation
Delimiting Arrays and Tables
Compile time Tables and Arrays use **
rather than **CTDATA and the
array/table name
Progams with multiple compile time
tables/arrays must define the
tables/arrays in the same order as the
data appears at the programs end
E Specs used to define tables/arrays
are obsolete
Moving Data
Before EVAL, MOVE and MOVEL were
used for all character assignment
operations
Before the introduction of string
operations, arrays and the MOVEA
operation were used to inspect and
manipulate characters within string
fields
RPG II: An Initial Look
RPG II programs rely on RPG’s fixed
logic cycle
All versions of RPG (including RPG IV)
have a built-in read-process-write cycle
that could be used to automate part of
the processing requirements
To start the cycle, the main file must be
designated as P (for Primary) instead
of F (for Full procedural)
RPG II: An Initial Look (cont)
A record-identifying indicator in
positions 21-22 on the I Specs is added
The indicator will be turned on each
time RPG successfully reads a record
The indicator will be turned off just
befor the next automatic attemp to read
the file
At EOF the LR indicator is
automatically turned on
RPG II: An Initial Look (cont)
Each record format type on the O
Specs is changed from E to the type
appropriate for a given line:
H for heading lines
D for detail
T for total
Remove the line names
RPG II: An Initial Look (cont)
Indicator 1p (First Page) is used for
first time headings
Indicator OF is used for page overflow
Indicator 01 is used to print the detail
lines
RPG’s Fixed Logic Cycle
Turn on 1P indicator
WHILE LR is off
Print detail output (H and D lines)
Turn off 1P, record-identifying, and level indicators
Read record from primary file
IF end-of-file
Turn on LR and all level indicators
ELSE
Turn on record-identifying indicator
IF change in control field
Turn on level indicator(s)
ENDIF
Perform total calculations
Perform total output (T lines)
IF LR is not on
IF overflow indicator is on
Print lines conditioned by overflow
ENDIF
Move data into input fields
Perform detail calculations
ENDIF
ENDWHILE
The Fixed-Logic Cycle and
Control Breaks
Control-break reports require detecting
a change in a control-field value
When such a change is detected:
Print a subtotal
Roll over accumulators
Zero out accumulators
Reset the hold field
The Fixed-Logic Cycle and
Control Breaks (cont)
Special level indicators, L1-L9, that can
be associated with control fields
Level indicators eliminate the need for
special hold fields
Level indicators can condition any
calculations and printing out subtotals
B in position 45 on O Spec will
automatically set the field to zero
Decisions in RPG II
RPG II relies on COMP (Compare)
operation for decision logic
Operation COMP compares the values
of Factor 1 and Factor 2 and turns on an
indicator in the Hi, Lo or Eq columns
The indicators are then used in
calcualtions following the COMP to
condition whether the operation was to
be performed
Resulting Indicators and
Arithmetic
Arithmetic operations used resulting
indicators
If the result was positive the Hi
indicator was turned on
If the result was negative the Lo
indicator was turned on
If the result was 0 the Eq indicator was
turned on
Iteration and RPG II
In RPG II, loop logic was implemented
using the COMP operand and
indicators
The indicators conditioned a GOTO
that sent control back to prior
calculations to repeat procesing steps
Improving on the Past
RPG IV free-form exprssions is
preferable to using the older specific
arithmetic operations, assignment
operations and fixed-format decision
and iteration operations
Data definitions should always take
place in the D Specs, rather than within
the C Specs
Points to Remember
RPG has evolved since its
introduction in the early 60s
Use of the fixed-logic cycle has
diminished through time
Today’s programmers should avoid
outdated techniques in their own
code, they still must understand how
such methods and operations work