[Oorexx-devel] Question ad RexxQueryFunction()

2009-05-07 Thread Rony G. Flatscher
Can the RexxQueryFunction(some-function-name)-API determine whether
REXX_TYPED_ROUTNEs are loaded or not?

---rony


--
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
___
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel


Re: [Oorexx-devel] Question ad RexxQueryFunction()

2009-05-07 Thread Rony G. Flatscher
Followup question: as RexxQueryFunction() belongs to the pre-4.0 APIs it
is not aware of the REXX_TYPED_ROUTINEs that may have been registered
(as per the bug tracker comment).

Hence I came up with the following attempt to find out whether a routine
is loaded or not, but unfortunately it does not work.

Here is the attempted code (purpose: find out whether routines are
available or not): 

RexxRoutine1(RexxStemObject, BsfQueryRegisteredFunctions, 
OPTIONAL_RexxStemObject, stem)  // 20090505, ---rgf
{
#ifdef RGF_INFO
fprintf(stderr, *** RGF_INFO: BsfQueryRegisteredFunctions() 1 ...\n);
fflush(stderr);
#endif

if (stem==NULL) // argument not given
{
stem=context-NewStem(BsfQueryRegisteredFunctions);
}

int32_t   entries=sizeof(ApiFncTableOrdered)/sizeof(PSZ), i=0, j=0;
logical_t bExists=false;

// get the package from the caller context: stolen from Mark's 
nutshell example my.data
RexxPackageObject pkg=(RexxPackageObject) 
context-SendMessage0(context-GetCallerContext(),PACKAGE);

// RexxDirectoryObject rdo=context-GetPackagePublicRoutines(pkg); // 
get all public routines
RexxDirectoryObject rdo=context-GetPackageRoutines(pkg); // get all 
available routines
RexxObjectPtr logicalVal;

for (i=0; ientries; i++)   // loop over all functions/routines
{
// query the directory whether it has the routine
logicalVal=context-SendMessage1(rdo, HASENTRY, 
context-CString(ApiFncTableOrdered[i]));
if (context-ObjectToLogical(logicalVal, bExists)) // convert to 
logical, save it in 'bExists'
{
fprintf(stderr, ... querying [%s], bExists=[%d]\n, 
ApiFncTableOrdered[i], bExists);
fflush(stderr);

if (bExists)// is the routine available at the moment, if 
so, save it in the stem
{
context-SetStemArrayElement(stem, ++j, 
context-String(ApiFncTableOrdered[i]));
}
}
}
context-SetStemArrayElement(stem, 0, context-Int32ToObject(j));   // 
set total numbers of entries
return stem;// return the stem object
}

  

What am I doing wrong?

How could one test whether REXX_TYPED_ROUTINES are registered or not?

---rony

P.S.: Maybe API functions Has[Public]Routine(CNAME name)  [and
Has[Public]Class(CNAME className)] and versions for returning the
respective routine/class objects may proof helpful for the API coders?




--
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com___
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel