IBM AS/400 Frozen Dessert Maker User Manual


 
Passing Prototyped Parameters
Passing *OMIT
You can pass *OMIT for a prototyped parameter if the called procedure is aware
that *OMIT might be passed. In other words, you can pass *OMIT if the keyword
OPTIONS(*OMIT) is specified on the corresponding parameter definition in the pro-
totype. When *OMIT is specified, the compiler will generate the necessary code to
indicate to the called procedure that the parameter has been omitted.
Note: *OMIT can only be specified for parameters passed by reference.
To determine if *OMIT has been passed to an ILE RPG procedure, use the
%ADDR built-in function to check the address of the parameter in question. If the
address is *NULL, then *OMIT has been passed. You can also use the CEETSTA
(Check for Omitted Argument) bindable API. (See Figure 65 on page 138 for a
brief example.)
The following is a simple example of how *OMIT can be used. In this example, a
procedure calls the ILE bindable API CEEDOD in order to decompose an opera-
tional descriptor. The CEEDOD API expects to receive seven parameters; yet only
six have been defined in the calling procedure. The last parameter of CEEDOD
(and of most bindable APIs) is the feedback code which can be used to determine
how the API ended. However, the calling procedure has been designed to receive
any error messages via an exception rather than this feedback code. Conse-
quently, on the call to CEEDOD, the procedure must indicate that the parameter for
the feedback code has been omitted.
See “Sample Service Program” on page 94 for an example of using *OMIT.
Leaving Out Parameters
The other way to omit a parameter is to simply leave it out on the call. This must
be expected by the called procedure, which means that it must be indicated on the
prototype. To indicate that a prototyped parameter does not have to be passed on
a call, specify the keyword OPTIONS(*NOPASS) on the corresponding parameter
definition. Note that all parameters following the first *NOPASS one must also be
specified with OPTIONS(*NOPASS).
You can specify both *NOPASS and *OMIT for the same parameter, in either order,
that is, OPTIONS(*NOPASS:*OMIT) or OPTIONS(*OMIT:*NOPASS).
As an example of OPTIONS(*NOPASS), consider the system API QCMDEXC
(Execute Command) which has an optional third parameter. To allow for this
parameter, the prototype for QCMDEXC could be written as shown in Figure 67.
*-------------------------------------------------------------
* This prototype for QCMDEXC defines three parameters:
* 1- a character field that may be shorter in length
* than expected
* 2- any numeric field
* 3- an optional character field
*-------------------------------------------------------------
D qcmdexc PR EXTPGM('QCMDEXC')
D cmd 3000A OPTIONS(*VARSIZE) CONST
D cmdlen 15P 5 CONST
D 3A CONST OPTIONS(*NOPASS)
Figure 67. Prototype for System API QCMDEXC with Optional Parameter
140 ILE RPG for AS/400 Programmer's Guide