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