You can also redefine a function loaded from a DLL, for example REXXUTIL.DLL (see RxFuncDrop and Call by value for an example for using this technique):
/* example to redefine a function from the DLL REXXUTIL */
say "Now calling SysCurPos with (4,5) ..."
rc = SysCurPos( 4 , 5 )
say " rc = " || rc
say "Now calling SysCurPos with (x,y) ..."
rc = SysCurPos( "x", "y" )
say " rc = " || rc
exit
/* new SysCurPos function */
SysCurPos: PROCEDURE
parse arg p1,p2
/* check the type of the parameter */
if datatype( p1 ) <> "NUM" | datatype( p2 ) <> "NUM" then
thisRC = "Invalid parameter!"
else
do
/* load the original function if not already */
/* loaded */
if RxFuncQuery( "SysCurPos" ) then
call RxFuncAdd "SysCurPos", "REXXUTIL", "SysCurPos"
/* call the original function */
thisRC = "SYSCURPOS"( p1,p2 )
end /* else */
RETURN thisRC
(see also Redefinition of internal functions)