8.6.2.1 RXFNC — The External Function Exit Handler
The RXFNC system exit handler provides hooks for external
functions. It has only one subfunction; RXFNCCAL, which allows an
application program to intervene and handle any external function
or subroutine.
Do not confuse this exit handler with the external function
routines which allow you to define new REXX, semi-built-in
functions. The exit handler is called for all invocations of
external routines, and can be called for function names which you
were unaware of.
The parameter ParmBlock for RXFNCCAL is defined as:
typedef struct {
typedef struct {
unsigned int rxfferr:1 ;
unsigned int rxffnfnd1 ;
unsigned int rxffsub: 1;
} rxfnc_flags ;
unsigned char *rxfnc_address ;
unsigned short rxfnc_addressl ;
unsigned char *rxfnc_que ;
unsigned short rxfnc_quel ;
unsigned short rxfnc_argc;
RXSTRING *rxfnc_argv ;
RXSTRING rxfnc_retc ;
} RXFNCCAL_PARM ;
The significance of each variable is:
[rxfnc_flags.rxfferr]
Is an output parameter that is set on return in order to
inform the interpreter that the function or subroutine
was incorrectly called, and thus the SYNTAX condition
should be raised.
[rxfnc_flags.rxffnfnd]
Is an output parameter that tells the interpreter that
the function was not found. Note the inconsistency: it
is only effective if tthe exit handler returns
RXEXIT_HANDLED, which looks like a logic contradiction
to setting the not-found flag.
[rxfnc_flags.rxffsub]
Is an input parameter that tells the exit handler
whether it was called for a function or subroutine call.
If set, the call being handled is a subroutine call and
returning a value is optional; else it was called for a
function, and must return a value in rxfnc_retc if
RXEXIT_HANDLED is to be returned.
[rxfnc_name]
Is a pointer to the name of the function or subroutine
to be handled, stored as a character array. This is an
input parameter, and its length is given by the
rxfnc_namel parameter.
[rxfnc_namel]
Holds the length of rxfnc_name. Note that the last
character is the letter ell, not the number one.
[rxfnc_que]
Points to a character array holding the name of the
currently active queue. This is an input parameter.
The length of this name is given by the rxfnc_quel
field.
[rxfnc_que1]
Holds the length of rxfnc_que. Note that the last
character is the letter ell, not the number one.
[rxfnc_argc]
Is the number of arguments passed to the function or
subroutine. It defines the size of the array pointed to
by the rxfnc_argv field.
[rxfnc_argv]
Points to an array holding the parameters for the
routines. The size of this array is given by the
rxfnc_argc field. If rxfnc_argc is zero, the value of
rxfnc_argv is undefined.
[rxfnc_retc]
Holds an RXSTRING structure suitable for storing the
return value of the handler. It is the responsibility
of ht ehandler to allocate space for the contents of
this string (i.e. the array pointed to by the
rxfnc_retc.strptr).
PREV NEXT