signal_processing plugged.
[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 "stack-c.h"
16 #include "Scierror.h"
17 #include "localization.h"
18
19 #include "api_scilab.h"
20 #include "api_oldstack.h"
21
22 extern int C2F(amell)(double *du, double *dk, double *dsn2, int *n);
23
24 int sci_amell(char *fname, int* _piKey)
25 {
26   int input_rows, input_cols, output_length, rows, cols;
27   double *argument, *input, *output;
28   double parameter;
29   int *arg;
30
31   CheckRhs(2,2);
32   CheckLhs(1,1);
33   getVarAddressFromPosition(_piKey, 1, &arg);
34   if (isVarComplex(_piKey, arg)) {
35     Scierror(999, _("%s: Input argument #%d must be real.\n"), fname, 1);
36     return 1;
37   }
38   getMatrixOfDouble(_piKey, arg, &input_rows, &input_cols, &input);
39   getVarAddressFromPosition(_piKey, 2, &arg);
40   if (isVarComplex(_piKey, arg)) {
41     Scierror(999, _("%s: Input argument #%d must be real.\n"), fname, 2);
42     return 1;
43   }
44   getMatrixOfDouble(_piKey, arg, &rows, &cols, &argument);
45   parameter = *argument;
46   if (rows != 1 || cols != 1) {
47     Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 2);
48     return 1;
49   }
50   if (parameter < 0 || parameter > 1) {
51     Scierror(999, _("%s: Wrong value for input argument #%d: Must be in the interval [%s, %s].\n"), fname, "0", "1");
52     return 1;
53   }
54   allocMatrixOfDouble(_piKey, Rhs + 1, input_rows, input_cols, &output);
55   output_length = input_rows * input_cols;
56   C2F(amell)(input, &parameter, output, &output_length);
57   LhsVar(1) = Rhs + 1;
58   PutLhsVar();
59   return 0;
60 }