Hi Mark,I had the same thoughts as you a while back, and also wondered if this would be a usefull feature (ie, for Ruud to include into a future release) ... my gut feeling is that NO, there is no way to do this (aside from actually reading and parsing the script yourself - which is obviously out of the question).
I had two ideas I thought might work ... since function return values are assigned using the function name itself, eg.
Function Add($n1,$n2)
$Add=$n1+$n2 ; <--- here
EndFunction
and since KiXtart does a pre-scan pass to cache UDF pointers, was thinking that the $Add variable itself would be defined as not "Empty" before-hand and that we could check for that before calling the function (ie, by using the vartype function) ... that doesn't work 
Than I thought that maybe by cleverly using the execute function - we could test try a call to a function without actually causing a hard syntax error (script abort) and use the result of that somekind of conditional statement, like this (warning - this is non-working psuedo-code) :
If Execute("$=Add(1,2)") ; <--- If a softcall to this function works
$Result = Add(1,2) ; <--- do a hardcall to it
Else
?"Add function is not available"
EndIf
Hope maybe I've given you or someone else some food thought on this ... let's keep trying.
-Shawn
[ 10 January 2002: Message edited by: Shawn ]