IBM AS/400 Frozen Dessert Maker User Manual


 
Sample Service Program
Sample Service Program
The following example shows how to create a service program CVTTOHEX which
converts character strings to their hexadecimal equivalent. Two parameters are
passed to the service program:
1. a character field (InString) to be converted
2. a character field (HexString) which will contain the 2-byte hexadecimal equiv-
alent
The field HexString is used to contain the result of the conversion and also to indi-
cate the length of the string to be converted. For example, if a character string of
30 characters is passed, but you are only interested in converting the first ten, you
would pass a second parameter of 20 bytes (2 times 10). Based on the length of
the passed fields, the service program determines the length to handle.
Figure 42 on page 95 shows the source for the service program. Figure 43 on
page 97 shows the /COPY member containing the prototype for CvtToHex.
The basic logic of the procedure contained within the service program is listed
below:
1. Operational descriptors are used to determine the length of the passed param-
eters.
2. The length to be converted is determined: it is the lesser of the length of the
character string, or one-half the length of the hex string field.
3. Each character in the string is converted to a two-byte hexadecimal equivalent
using the subroutine GetHex.
Note that GetHex is coded as a subroutine rather than a subprocedure, in order
to improve run-time performance. An EXSR operation runs much faster than a
bound call, and in this example, GetHex is called many times.
4. The procedure returns to its caller.
The service program makes use of operational descriptors, which is an ILE con-
struct used when the precise nature of a passed parameter is not known ahead of
time, in this case the length. The operational descriptors are created on a call to a
procedure when you specify the operation extender (D) on the CALLB operation, or
when OPDESC is specified on the prototype.
To use the operational descriptors, the service program must call the ILE bindable
API, CEEDOD (Retrieve Operational Descriptor). This API requires certain parame-
ters which must be defined for the CALLB operation. However, it is the last param-
eter which provides the information needed, namely, the length. For more
information on operational descriptors, see “Using Operational Descriptors” on
page 138.
94 ILE RPG for AS/400 Programmer's Guide