IBM SC34-5764-01 Server User Manual


 
instruction, various other status information (TRACE and NUMERIC settings and so forth) is saved
too. See the CALL instruction (page “Purpose” on page 135) for details about this. You can use
SIGNAL and CALL together to call an internal routine whose name is determined at the time of
execution; this is known as a multi-way call (see page 165).
If you are calling an internal routine as a function, you must specify an expression in any RETURN
instruction to return from it. This is not necessary if it is called as a subroutine.
Example:
/* Recursive internal function execution... */
arg x
say x'! =' factorial(x)
exit
factorial: procedure /* Calculate factorial by */
arg n /* recursive invocation. */
if n=0 then return 1
return factorial(n-1) * n
While searching for an internal label, syntax checking is performed and the exec is tokenized. See
Appendix I, “Performance Considerations,” on page 425 for more details. FACTORIAL is unusual
in that it calls itself (this is recursive invocation). The PROCEDURE instruction ensures that a new
variable n is created for each invocation.
Note: When there is a search for a routine, the language processor currently scans the
statements in the REXX program to locate the internal label. During the search, the
language processor may encounter a syntax error. As a result, a syntax error may be raised
on a statement different from the original line being processed.
Built-in
These functions are always available and are defined in the next section of this manual.
External
You can write or use functions that are external to your program and to the language processor.
External routines must be written in REXX. You can call a REXX program as a function and, in this
case, pass more than one argument string. The ARG or PARSE ARG instructions or the ARG
built-in function can retrieve these argument strings. When called as a function, a program must
return data to the caller.
Notes:
1. External REXX functions can easily perform an EXEC CICS LINK to a program written in any
CICS-supported language. Also, REXX/CICS command routines may be written in assembler.
2. Calling an external REXX program as a function is similar to calling an internal routine. The
external routine is, however, an implicit PROCEDURE in that all the caller's variables are
always hidden and the status of internal values (NUMERIC settings and so forth) start with
their defaults (rather than inheriting those of the caller).
3. Other REXX programs can be called as functions. You can use either EXIT or RETURN to
leave the called REXX program, and in either case you must specify an expression.
4. With care, you can use the INTERPRET instruction to process a function with a variable
function name. However, you should avoid this if possible because it reduces the clarity of the
program.
Search Order
The search order for functions is: internal routines take precedence, then built-in functions, and finally
external functions.
Functions
172
CICS TS for VSE/ESA: REXX Guide