From the online help:
 <BLOCKQUOTE><font size="1" face="Arial, Verdana">quote:</font><HR>
SYNTAX
-----------------------------------------------------------
FUNCTION function-name [RETURNS] data-type
	[(param [, param ]...)]
	[FORWARD
		| [MAP [TO] actual-name ] IN proc-handle ] 
The first example, r-udf1.p, defines and references the user–defined function doubler(), 
which accepts an integer and returns the integer multiplied by two. 
<HR></BLOCKQUOTE>
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>
/* udf1.p */
/* Demonstrates defining and referencing a user-defined function */
/* Define doubler() */
FUNCTION doubler RETURNS INTEGER (INPUT parm1 AS INTEGER).
    RETURN (2 * parm1). 
END FUNCTION.   
    
/* Reference doubler() */
DISPLAY	"doubler(0)=" doubler(0) skip
	"doubler(1)=" doubler(1) skip
	"doubler(2)=" doubler(2) skip.
[/code]
 <BLOCKQUOTE><font size="1" face="Arial, Verdana">quote:</font><HR>
The second example, r-udf2.p, forward declares, references, and defines doubler().
<HR></BLOCKQUOTE>
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>
/* r-udf2.p */
/* Demonstrates forward-declaring, referencing, and defining 
 * a user-defined function
 */
/* Forward declare doubler() */
FUNCTION doubler RETURNS INTEGER (INPUT parm1 AS INTEGER) FORWARD.    
    
/* Reference doubler() */
DISPLAY "doubler(0)=" doubler(0).
DISPLAY "doubler(1)=" doubler(1).
DISPLAY "doubler(2)=" doubler(2).
/* Define doubler() */
FUNCTION doubler RETURNS INTEGER. 
    RETURN (2 * parm1). 
END FUNCTION.    
[/code]
 <BLOCKQUOTE><font size="1" face="Arial, Verdana">quote:</font><HR>
The third example consists of two procedures, r-udfdef.p and r-udf3.p. The 
example illustrates defining a user–defined function in an external procedure.
The first procedure, r-udfdef.p, defines doubler().
<HR></BLOCKQUOTE>
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>
/* r-udfdef.p 
 * Defines user-defined function doubler() 
 */
FUNCTION doubler RETURNS INTEGER (INPUT parm1 AS INTEGER).
	RETURN (2 * parm1). 
END FUNCTION.   
[/code]
 <BLOCKQUOTE><font size="1" face="Arial, Verdana">quote:</font><HR>
The second procedure, r-udf3.p, runs the first procedure persistently, declares 
doubler(), references it, and deletes the persistent procedure.
<HR></BLOCKQUOTE>
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>
/* r-udf3.p 
 * references an externally-defined user-defined function 
 */
/* define items */
DEFINE VARIABLE myhand AS HANDLE.
DEFINE VARIABLE mystr  AS CHARACTER FORMAT "x(20)".
/* forward declare doubler() */
FUNCTION doubler RETURNS INTEGER (INPUT parm1 AS INTEGER) IN myhand. 
/* run the procedure that doubler() */
RUN src\prodoc\langref\r-udfdef.p PERSISTENT SET myhand. 
    
/* reference doubler() */
DISPLAY "doubler(0)=" doubler(0) skip
        "doubler(1)=" doubler(1) skip
        "doubler(17)=" doubler(17) skip.
/* delete the procedure that defines doubler */
DELETE PROCEDURE(myhand).   
[/code]
HTH.
--
Chris Schreiber
ProgressTalk.com Manager
webmaster@progresstalk.com