add eigen detection in ilib_compile process
[scilab.git] / scilab / contrib / toolbox_skeleton / sci_gateway / c / sci_multiplybypi.c
1 /* ==================================================================== */
2 /* Template toolbox_skeleton */
3 /* This file is released under the 3-clause BSD license. See COPYING-BSD. */
4 /* ==================================================================== */
5 #include "api_scilab.h"
6 #include "Scierror.h"
7 #include "sci_malloc.h"
8 #include "multiplybypi.h"
9 #include <localization.h>
10
11 /* ==================================================================== */
12 int sci_multiplybypi(char *fname, void* pvApiCtx)
13 {
14     SciErr sciErr;
15
16     int m1 = 0, n1 = 0;
17     int *piAddressVarOne = NULL;
18     double *matrixOfDouble = NULL;
19     int iType1 = 0;
20     int i = 0;
21
22     /* --> result = multiplybypi(8) */
23     /* --> result = multiplybypi([12, 42; 42, 12]) */
24     /* check that we have only 1 input argument */
25     /* check that we have only 1 output argument */
26     CheckInputArgument(pvApiCtx, 1, 1) ;
27     CheckOutputArgument(pvApiCtx, 1, 1) ;
28
29     /* get Address of inputs */
30     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
31     if (sciErr.iErr)
32     {
33         printError(&sciErr, 0);
34         return 0;
35     }
36
37
38     /* check input type */
39     sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType1);
40     if (sciErr.iErr)
41     {
42         printError(&sciErr, 0);
43         return 0;
44     }
45
46     if ( iType1 != sci_matrix )
47     {
48         Scierror(999, "%s: Wrong type for input argument #%d: A matrix expected.\n", fname, 1);
49         return 0;
50     }
51
52     /* get matrix */
53     sciErr = getMatrixOfDouble(pvApiCtx, piAddressVarOne, &m1, &n1, &matrixOfDouble);
54     if (sciErr.iErr)
55     {
56         printError(&sciErr, 0);
57         return 0;
58     }
59
60     /* The difference with the csum & csub is that we give the argument as copy
61      * and not as reference */
62     for (i = 0; i < m1 * n1; i++)
63     {
64         /* For each element of the matrix, multiply by pi */
65         matrixOfDouble[i] = multiplybypi(matrixOfDouble[i]);
66     }
67
68     /* Create the matrix as return of the function */
69     createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, m1, n1, matrixOfDouble);
70     if (sciErr.iErr)
71     {
72         printError(&sciErr, 0);
73         return 0;
74     }
75
76     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
77
78     ReturnArguments(pvApiCtx);
79
80     return 0;
81 }
82 /* ==================================================================== */
83