c9fbaf5d751e41721984763fad6d9f6b98997f1b
[scilab.git] / scilab / modules / signal_processing / sci_gateway / c / sci_amell.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Allan CORNET
4  * Copyright (C) 2009 - Digiteo - Vincent LIARD
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  */
12
13 #include "gw_signal.h"
14
15 #include "api_scilab.h"
16 #include "stack-c.h"
17 #include "Scierror.h"
18 #include "localization.h"
19
20 extern int C2F(amell)(double *du, double *dk, double *dsn2, int *n);
21
22 int sci_amell(char *fname, int* _piKey)
23 {
24   int input_rows, input_cols, output_length, rows, cols;
25   double *argument, *input, *output;
26   double parameter;
27   int *arg;
28
29   CheckRhs(2,2);
30   CheckLhs(1,1);
31   getVarAddressFromPosition(_piKey, 1, &arg);
32   if (isVarComplex(_piKey, arg)) {
33     Scierror(999, _("%s: Input argument #%d must be real.\n"), fname, 1);
34     return 1;
35   }
36   getMatrixOfDouble(_piKey, arg, &input_rows, &input_cols, &input);
37   getVarAddressFromPosition(_piKey, 2, &arg);
38   if (isVarComplex(_piKey, arg)) {
39     Scierror(999, _("%s: Input argument #%d must be real.\n"), fname, 2);
40     return 1;
41   }
42   getMatrixOfDouble(_piKey, arg, &rows, &cols, &argument);
43   parameter = *argument;
44   if (rows != 1 || cols != 1) {
45     Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 2);
46     return 1;
47   }
48   if (parameter < 0 || parameter > 1) {
49     Scierror(999, _("%s: Wrong value for input argument #%d: Must be in the interval [%s, %s].\n"), fname, "0", "1");
50     return 1;
51   }
52   allocMatrixOfDouble(_piKey, Rhs + 1, input_rows, input_cols, &output);
53   output_length = input_rows * input_cols;
54   C2F(amell)(input, &parameter, output, &output_length);
55   LhsVar(1) = Rhs + 1;
56   PutLhsVar();
57   return 0;
58 }