IBM AS/400 Frozen Dessert Maker User Manual


 
*-----------------------------------------------------------------*
* Define relevant parts of program status data structure *
*-----------------------------------------------------------------*
D Psds SDS
D Loc *ROUTINE
D Err *STATUS
D Parms *PARMS
D Name *PROC
*-----------------------------------------------------------------*
* BODY OF CODE GOES HERE
* An error occurs when division by zero takes place.
* Control is passed to the *PSSR subroutine.
*-----------------------------------------------------------------*
*=================================================================*
* *PSSR: Error Subroutine for the main procedure. We check for a
* division by zero error, by checking if the status is
* 102. If it is, we add 1 to the divisor and continue
* by moving *GETIN to ReturnPt.
*=================================================================*
C *PSSR BEGSR
C IF Err = 102
C ADD 1 Divisor
C MOVE '*GETIN' ReturnPt 6
*-----------------------------------------------------------------*
* An unexpected error has occurred, and so we move
* *CANCL to ReturnPt to end the procedure.
*-----------------------------------------------------------------*
C ELSE
C MOVE '*CANCL' ReturnPt
C ENDIF
C ENDSR ReturnPt
Figure 112. Example of *PSSR Subroutine in Main Procedure
The program-status data structure is defined on the Definition specifications. The
predefined subfields *STATUS, *ROUTINE, *PARMS, and *PROGRAM are speci-
fied, and names are assigned to the subfields.
The *PSSR error subroutine is coded on the calculation specifications. If a program
error occurs, ILE RPG passes control to the *PSSR error subroutine. The subrou-
tine checks to determine if the exception was caused by a divide operation in which
the divisor is zero. If it was, 1 is added to the divisor (Divisor), and the literal
‘*DETC’ is moved to the field ReturnPt, to indicate that the program should resume
processing at the beginning of the detail calculations routine
If the exception was not a divide by zero, the literal ‘*CANCL’ is moved into the
ReturnPt field, and the procedure ends.
Figure 113 on page 234 and Figure 114 on page 235 show how you would code
similar program error subroutines in a subprocedure. In one example, you code a
GOTO and in the other you code a RETURN operation.
Chapter 12. Handling Exceptions 233