as400 interview questions and answers-Part 19
1. Explain CALLB opcode in RPGLE with example.
Ans:
CALLB(D|E)
(Call
a Bound Procedure)
·
This op-code calls a procedure that is bound statically
to the main program.
·
It is a static call.
·
The operation extender ‘D’ may be used to
include operational descriptors (information about each parameter to be passed
to the called procedure.).
·
If there is any error in this call operation
then the error can be traced with operator extender ‘E’ and LO level indicator
which turns on in case of any error.
·
If we don’t want to use error indicator with
operator extender ‘E’ even then we can trace the error by using the built-in
function %ERROR and %STATUS. For more information see chapter
File and Program exception.
·
If the called program returns with LR indicator
on, the calling program can trace that will EQ indicator.
Factor 1
|
Op-code
|
Factor 2
|
Result Field
|
Resulting Indicators
HI LO EQ
|
|
CALLB(D
E)
|
' procedure name'
|
[parameter list]
|
|
[error]
|
[LR}
|
Example
Columns . . . : 6 80 Browse AMINEM/QRPGLESRC
SEU==> OP_CALLB
FMT C CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq....
*************** Beginning of data ****************************************************
0001.00 C PLST1 PLIST 130125
0002.00 C PARM a 2 0 130125
0003.00 C PARM b 2 0 130125
0004.00 C PARM c 2 0 130125
0005.00 * 130125
0006.00 C Z-ADD 11 a 130125
0007.00 C Z-ADD 22 b 130125
0008.00 C Z-ADD *zeros c 130125
0009.00 C CALLB 'OP_CALLB1' PLST1 130125
0010.00 C c DSPLY 130125
0011.00 C SETON LR 130125
****************** End of data *******************************************************
The called program OP_CALLB1:
Columns . . . : 6 80 Browse AMINEM/QRPGLESRC
SEU==> OP_CALLB1
FMT C CL0N01Factor1+++++++Opcode&ExtFactor2+++++++Result++++++++Len++D+HiLoEq....
*************** Beginning of data ************************************************************
0001.00 C *ENTRY PLIST 130125
0002.00 C PARM p 2 0 130125
0003.00 C PARM q 2 0 130125
0004.00 C PARM r 2 0 130125
0005.00 C EVAL r=p+q 130125
0006.00 C RETURN 130125
****************** End of data ***************************************************************
CRTPGM
PGM(AMINEM/OP_CALLB) MODULE(AMINEM/OP_CALLB AMINEM/OP_CALLB1) ENTMOD(*PGM)
OUTPUT
2. Explain CALLP opcode in RPGLE with example.
Ans:
CALLP (M | R
| E) (Call
a Program or Procedure)
·
The CALLP operation is used to call prototyped
procedures or programs.
·
It is a static call.
·
If the keyword EXTPGM is specified on the
prototype, the call becomes a dynamic external call; otherwise it will be a
bound procedure call.
·
If there is any error in this call operation
then the error can be traced with operator extender ‘E’ and LO level indicator
which turns on in case of any error.
·
If we don’t want to use error indicator with
operator extender ‘E’ even then we can trace the error by using the built-in
function %ERROR and %STATUS. For more information see chapter
File and Program exception.
Factor 1
|
Op-code
|
Factor 2
|
Result Field
|
Resulting Indicators
HI LO EQ
|
|
CALLP (M | R | E)
|
' procedure name'
|
parameter list
|
|
error
|
LR
|
Example
I.
CALLP with called procedure defined in the main
procedure itself
Columns . . . : 6 80 Browse AMINEM/QRPGLESRC
SEU==> OP_CALLP
FMT D DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
*************** Beginning of data ****************************************************
0001.00 DCALL1 PR 130125
0002.00 Dp 2 0 130125
0003.00 Dq 2 0 130125
0004.00 Dr 2 0 130125
0005.00 * 130125
0006.00 C Z-ADD 11 a 2 0 130125
0007.00 C Z-ADD 22 b 2 0 130125
0008.00 C Z-ADD *zeros c 2 0 130125
0009.00 C CALLP CALL1(a:b:c) 130125
0010.00 C c DSPLY 130125
0011.00 C SETON LR 130125
0012.00 * 130125
0013.00 PCALL1 B 130125
0014.00 DCALL1 PI 130125
0015.00 Dp 2 0 130125
0016.00 Dq 2 0 130125
0017.00 Dr 2 0 130125
0018.00 C EVAL r=p+q 130125
0019.00 PCALL1 E 130125
****************** End of data *******************************************************
OUTPUT
Example
II.
CALLP with called procedure defined outside main
procedure
Columns . . . : 6 80 Browse AMINEM/QRPGLESRC
SEU==> OP_CALLP0
FMT D DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
*************** Beginning of data ****************************************************
0001.00 DOP_CALLP1 PR 130201
0002.00 Dp 2 0 130125
0003.00 Dq 2 0 130125
0004.00 Dr 2 0 130125
0005.00 * 130125
0006.00 DOP_CALLP2 PR 130201
0007.00 Dl 2 0 130201
0008.00 Dm 2 0 130201
0009.00 Dn 2 0 130201
0010.00 * 130201
0011.00 C Z-ADD 11 a 2 0 130125
0012.00 C Z-ADD 22 b 2 0 130125
0013.00 C Z-ADD *zeros c 2 0 130125
0014.00 C CALLP OP_CALLP1(a:b:c) 130201
0015.00 C c DSPLY 130125
0016.00 C CALLP OP_CALLP2(a:b:c) 130201
0017.00 C c DSPLY 130201
0018.00 C SETON LR 130125
0019.00 * 130125
****************** End of data *******************************************************
>>>>> NOMAIN Module
You can code one or more subprocedures in a module without coding a main procedure.
Such a module is called a NOMAIN module.
Below is a NOMAIN module
containing two subprocedures OP_CALLP1 and OP_CALLP2 which is called by above
program.
Columns . . . : 6 80 Browse AMINEM/QRPGLESRC
SEU==> OP_CALLP1
FMT H HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*************** Beginning of data ****************************************************
0001.00 HNOMAIN 130125
0002.00 DOP_CALLP1 PR 130201
0003.00 Dp 2 0 130201
0004.00 Dq 2 0 130201
0005.00 Dr 2 0 130201
0006.00 DOP_CALLP2 PR 130201
0007.00 Dl 2 0 130201
0008.00 Dm 2 0 130201
0009.00 Dn 2 0 130201
0010.00 POP_CALLP1 B EXPORT 130201
0011.00 DOP_CALLP1 PI 130201
0012.00 Dp 2 0 130201
0013.00 Dq 2 0 130201
0014.00 Dr 2 0 130201
0015.00 C EVAL r=p+q 130201
0016.00 POP_CALLP1 E 130201
0017.00 * _____________________________________________ 130201
0018.00 * 130201
0019.00 POP_CALLP2 B EXPORT 130201
0020.00 DOP_CALLP2 PI 130201
0021.00 Dl 2 0 130201
0022.00 Dm 2 0 130201
0023.00 Dn 2 0 130201
0024.00 C EVAL n=m-l 130201
0025.00 POP_CALLP2 E 130201
****************** End of data *******************************************************
CRTRPGMOD MODULE(OP_CALLP0)
CRTRPGMOD MODULE(OP_CALLP1)
CRTPGM PGM(OP_CALLP0) MODULE(OP_CALLP0 OP_CALLP1)
OUTPUT
>>>> EXPORT
In the NOMAIN modules we have used this keyword at procedure interface level.
By using this keyword only, the procedures will be visible to the outside world,
so that it can be called using CALLP operation.