add localization in toolboxes
[scilab.git] / scilab / contrib / toolbox_skeleton / sci_gateway / c / sci_csub.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 "MALLOC.h"
8 #include "csub.h"
9 #include <localization.h>
10
11 /* ==================================================================== */
12 int sci_csub(char *fname)
13 {
14     SciErr sciErr;
15
16     int m1 = 0, n1 = 0;
17     int *piAddressVarOne = NULL;
18     double *pdVarOne = NULL;
19     int iType1 = 0;
20
21     int m2 = 0, n2 = 0;
22     int *piAddressVarTwo = NULL;
23     double *pdVarTwo = NULL;
24     int iType2 = 0;
25
26     int m_out = 0, n_out = 0;
27     double dOut = 0.0;
28
29     /* --> result = csub(3,8)
30     /* check that we have only 2 input arguments */
31     /* check that we have only 1 output argument */
32     CheckInputArgument(pvApiCtx, 2, 2);
33     CheckOutputArgument(pvApiCtx, 1, 1);
34
35     /* get Address of inputs */
36     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
37     if (sciErr.iErr)
38     {
39         printError(&sciErr, 0);
40         return 0;
41     }
42
43     sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddressVarTwo);
44     if (sciErr.iErr)
45     {
46         printError(&sciErr, 0);
47         return 0;
48     }
49
50     /* check input type */
51     sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType1);
52     if (sciErr.iErr)
53     {
54         printError(&sciErr, 0);
55         return 0;
56     }
57
58     if ( iType1 != sci_matrix )
59     {
60         Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 1);
61         return 0;
62     }
63
64     sciErr = getVarType(pvApiCtx, piAddressVarTwo, &iType2);
65     if (sciErr.iErr)
66     {
67         printError(&sciErr, 0);
68         return 0;
69     }
70
71     if ( iType2 != sci_matrix )
72     {
73         Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 2);
74         return 0;
75     }
76
77     /* get matrix */
78     sciErr = getMatrixOfDouble(pvApiCtx, piAddressVarOne, &m1, &n1, &pdVarOne);
79     if (sciErr.iErr)
80     {
81         printError(&sciErr, 0);
82         return 0;
83     }
84
85     sciErr = getMatrixOfDouble(pvApiCtx, piAddressVarTwo, &m2, &n2, &pdVarTwo);
86     if (sciErr.iErr)
87     {
88         printError(&sciErr, 0);
89         return 0;
90     }
91
92     /* check size */
93     if ( (m1 != n1) && (n1 != 1) )
94     {
95         Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 1);
96         return 0;
97     }
98     if ( (m2 != n2) && (n2 != 1) )
99     {
100         Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 2);
101         return 0;
102     }
103
104     /* call c function csub */
105     csub(&pdVarOne[0], &pdVarTwo[0], &dOut);
106
107     /* create result on stack */
108     m_out = 1;
109     n_out = 1;
110     createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, m_out, n_out, &dOut);
111
112     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
113
114     ReturnArguments(pvApiCtx);
115
116     return 0;
117 }
118 /* ==================================================================== */
119