add more help pages related to CAPI - check parameters - optional parameters
[scilab.git] / scilab / modules / core / examples / capi / optional_parameters / optional_parameters.c
1 #include <stack-c.h>
2
3 int ex2c(double * a, int * ma, int * na,
4          double * b, int * mb, int * nb) 
5 {
6   int i;
7
8   for(i=0;i<(*ma)*(*na);i++) a[i] = 2*a[i];
9   for(i=0;i<(*mb)*(*nb);i++) b[i] = 3*b[i];
10
11   return(0);
12 }
13
14 int sci_optional_parameters(char * fname)
15
16   int m1,n1,l1;
17
18   // optional names must be stored in alphabetical order in opts
19   static rhs_opts opts[]= {{-1,"v1","d",0,0,0},
20                            {-1,"v2","d",0,0,0},
21                            {-1,NULL,NULL,0,0}};
22
23   int minrhs = 1, maxrhs = 1;
24   int minlhs = 1, maxlhs = 3;
25   int nopt, iopos, res;
26   char buffer_name[csiz]; // csiz used for character coding
27
28   nopt = NumOpt();
29
30   CheckRhs(minrhs,maxrhs+nopt);
31   CheckLhs(minlhs,maxlhs);
32
33   // first non optional argument
34   GetRhsVar( 1, "c", &m1, &n1, &l1);
35   
36   if (get_optionals(fname,opts)==0) return 0;
37
38   // default values if optional arguments are not given:  v1=[99] and v2=[3]
39
40   sciprint("number of optional parameters = %d\n", NumOpt());
41   sciprint("first optional parameters = %d\n", FirstOpt());
42   sciprint("FindOpt(v1) = %d\n", FindOpt("v1", opts));
43   sciprint("FindOpt(v2) = %d\n", FindOpt("v2", opts));
44
45   if (IsOpt(1,buffer_name))
46     sciprint("parameter 1 is optional: %s\n", buffer_name);
47   if (IsOpt(2,buffer_name))
48     sciprint("parameter 2 is optional: %s\n", buffer_name);
49   if (IsOpt(3,buffer_name))
50     sciprint("parameter 3 is optional: %s\n", buffer_name);
51
52   iopos = Rhs;
53
54   if (opts[0].position==-1)
55     {
56       iopos++;
57       opts[0].position = iopos;
58       opts[0].m = 1; opts[0].n = 1; 
59       opts[0].type = "d";
60       CreateVar(opts[0].position, opts[0].type, &opts[0].m, &opts[0].n, &opts[0].l);
61       *stk(opts[0].l) = 99.0;
62     }
63
64   if (opts[1].position==-1) 
65     {
66       iopos++ ; 
67       opts[1].position = iopos;
68       opts[1].m = 1; opts[1].n = 1;
69       opts[1].type = "d";
70       CreateVar(opts[1].position, opts[1].type, &opts[1].m, &opts[1].n, &opts[1].l);
71       *stk(opts[1].l) = 3;
72     }
73
74   ex2c(stk(opts[0].l),&opts[0].m,&opts[0].n,
75        stk(opts[1].l),&opts[1].m,&opts[1].n);
76
77   // return the first argument (unchanged ) then v1 and v2
78
79   LhsVar(1) = 1;
80   LhsVar(2) = opts[0].position;
81   LhsVar(3) = opts[1].position;
82
83   return 0;
84 }
85