IBM AS/400 manual Example of *PSSR Subroutine in Main Procedure, ‘*Detc’, Handling Exceptions233

Models: AS/400

1 489
Download 489 pages 47.95 Kb
Page 257
Image 257

*

-----------------------------------------------------------------

 

 

 

*

 

 

 

 

 

*

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 speci 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.

error occurs,

ILE RPG passes control to the *PSSR error subroutine. Th

tine

checks

to

determine

if

the exception

was caused by a divide

the

divisor

is

zero. If

it

was,

1

is added to the divisor (Div

‘*DETC’

is

moved

to the field ReturnPt, to indicate that the program

processing

at the beginning of the

detail

calculations

routine

If the exception was not a divide by zero, the literal ‘*CANCL’ is ReturnPt field, and the procedure ends.

Figure 113 on page 234 and Figure 114 on page 235 show how you woul similar program error subroutines in a subprocedure. In one example, GOTO and in the other you code a RETURN operation.

Chapter 12. Handling Exceptions233

Page 257
Image 257
IBM AS/400 manual Example of *PSSR Subroutine in Main Procedure, ‘*Detc’, Handling Exceptions233