FindOpt — C gateway function find the position of an optional argument given its name
Pos FindOpt(varname, opts)
the name of the optional parameter
a C list of optional parameters
typedef struct rhs_opts__ {
int position ; // stack position : -1 if not present
char *name; // the name of the variable
char *type; // a Scilab type (like "d") representing the type of the variable
int m,n; // the size of the variable
unsigned long int l; // a pointer to the Scilab stack
} rhs_opts;
the rank of the optional parameter if it has been found in the parameters sent to the C function, 0 otherwise.
A C gateway function which find the position of an optional argument given its name. You must include stack-c.h to benefit from this function.
WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use API Scilab (the new Scilab API).
A more complete example is available in the directory SCI/modules/core/example/optional_parameters.
#include <stack-c.h>
int sci_optional_parameters(char * fname)
{
int m1,n1,l1;
// optional names must be stored in alphabetical order in opts
static rhs_opts opts[]= {{-1,"v1","d",0,0,0},
{-1,"v2","d",0,0,0},
{-1,NULL,NULL,0,0}};
int minrhs = 1, maxrhs = 1;
int minlhs = 1, maxlhs = 3;
int nopt, iopos, res;
char buffer_name[csiz]; // csiz used for character coding
nopt = NumOpt();
CheckRhs(minrhs,maxrhs+nopt);
CheckLhs(minlhs,maxlhs);
// first non optional argument
GetRhsVar( 1, "c", &m1, &n1, &l1);
if (get_optionals(fname,opts)==0) return 0;
sciprint("number of optional parameters = %d\n", NumOpt());
sciprint("first optional parameters = %d\n", FirstOpt());
sciprint("FindOpt(v1) = %d\n", FindOpt("v1", opts));
sciprint("FindOpt(v2) = %d\n", FindOpt("v2", opts));
if (IsOpt(1,buffer_name))
sciprint("parameter 1 is optional: %s\n", buffer_name);
if (IsOpt(2,buffer_name))
sciprint("parameter 2 is optional: %s\n", buffer_name);
if (IsOpt(3,buffer_name))
sciprint("parameter 3 is optional: %s\n", buffer_name);
return 0;
}