* Bug 16365 fixed: median(m,'r'|'c') was wrong after 5dc990
[scilab.git] / scilab / modules / fftw / sci_gateway / c / sci_loadfftwlibrary.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2006 - INRIA - Allan CORNET
4 * Copyright (C) 2012 - Scilab Enterprises - Cedric Delamarre
5 *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14 *
15 */
16
17 #include "api_scilab.h"
18 #include "callfftw.h"
19 #include "Scierror.h"
20 #include "fftwlibname.h"
21 #include "gw_fftw.h"
22 #include "localization.h"
23 /*--------------------------------------------------------------------------*/
24 int sci_loadfftwlibrary(char *fname, void* pvApiCtx)
25 {
26     char* FFTWLibname = NULL;
27     char* l1char = NULL;
28     int* piAddr1 = NULL;
29     SciErr sciErr;
30     int iErr = 0;
31
32     CheckInputArgument(pvApiCtx, 1, 1);
33
34     //get variable address
35     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1);
36     if (sciErr.iErr)
37     {
38         printError(&sciErr, 0);
39         return 1;
40     }
41
42     if (isStringType(pvApiCtx, piAddr1) == 0)
43     {
44         Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, 1);
45         return 1;
46     }
47
48     // Retrieve a single string at position 1
49     iErr = getAllocatedSingleString(pvApiCtx, piAddr1, &l1char);
50     if (iErr)
51     {
52         freeAllocatedSingleString(l1char);
53         return iErr;
54     }
55     FFTWLibname = l1char;
56     setfftwlibname(FFTWLibname);
57
58     if ( LoadFFTWLibrary(FFTWLibname) )
59     {
60         iErr = createScalarBoolean(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 1); // true
61     }
62     else
63     {
64         iErr = createScalarBoolean(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 0); // false
65     }
66     freeAllocatedSingleString(l1char);
67
68     if (iErr)
69     {
70         Scierror(999, _("%s: Memory allocation error.\n"), fname);
71         return iErr;
72     }
73
74     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
75     ReturnArguments(pvApiCtx);
76
77     return 0;
78 }
79 /*--------------------------------------------------------------------------*/