move splitURL in the paths - filenames subsection
[scilab.git] / scilab / modules / fftw / sci_gateway / c / sci_get_fftw_wisdom.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2006 - INRIA - Alan LAYEC
4 * Copyright (C) 2007 - INRIA - Allan CORNET
5 * Copyright (C) 2012 - Scilab Enterprises - Cedric Delamarre
6 *
7 * This file must be used under the terms of the CeCILL.
8 * This source file is licensed as described in the file COPYING, which
9 * you should have received as part of this distribution.  The terms
10 * are also available at
11 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12 *
13 */
14 /*--------------------------------------------------------------------------*/
15 #include "callfftw.h"
16 #include "api_scilab.h"
17 #include "MALLOC.h"
18 #include "gw_fftw.h"
19 #include "localization.h"
20 #include "freeArrayOfString.h"
21 #include "Scierror.h"
22 /*--------------------------------------------------------------------------*/
23 /* Return text of fftw wisdom
24 *
25 * Scilab Calling sequence :
26 *   -->tt=get_fftw_wisdom();
27 *
28 * Input : Nothing
29 *
30 * Output : a scilab string matrix
31 *
32 */
33 int sci_get_fftw_wisdom(char *fname, unsigned long fname_len)
34 {
35     int n1 = 0, i = 0, j = 0;
36     char *Str = NULL;
37     char **Str1 = NULL;
38
39     CheckInputArgument(pvApiCtx, 0, 0);
40     CheckOutputArgument(pvApiCtx, 0, 1);
41
42     if ((Str = call_fftw_export_wisdom_to_string()) == NULL)
43     {
44         Scierror(999, _("%s: MKL fftw library does not implement wisdom functions yet.\n"), fname);
45         return 1;
46     }
47
48     n1 = 0;
49     j = 0;
50     if (Str)
51     {
52         for (i = 0; i < (int)strlen(Str); i++)
53         {
54             if (Str[i] == '\n')
55             {
56                 int len = 0;
57                 int k = 0;
58
59                 n1++;
60
61                 if (Str1)
62                 {
63                     Str1 = (char **)REALLOC(Str1, sizeof(char *) * n1);
64                 }
65                 else
66                 {
67                     Str1 = (char **)MALLOC(sizeof(char *) * n1);
68                 }
69
70                 if (Str1 == NULL)
71                 {
72                     Scierror(999, _("%s: No more memory.\n"), fname);
73                     if (Str)
74                     {
75                         FREE(Str);
76                         Str = NULL;
77                     }
78                     return 1;
79                 }
80
81                 len = i - j;
82
83                 if ((Str1[n1 - 1] = (char *)MALLOC(sizeof(char) * (len + 1))) == NULL)
84                 {
85                     freeArrayOfString(Str1, n1 - 1);
86                     if (Str)
87                     {
88                         FREE(Str);
89                         Str = NULL;
90                     }
91                     Scierror(999, _("%s: No more memory.\n"), fname);
92                     return 1;
93                 }
94
95                 for (k = 0; k < len; k++)
96                 {
97                     Str1[n1 - 1][k] = Str[k + j];
98                 }
99                 Str1[n1 - 1][len] = '\0';
100                 j = i + 1;
101             }
102         }
103     }
104
105     n1++;
106
107     if (Str1)
108     {
109         Str1 = (char **)REALLOC(Str1, sizeof(char *) * n1);
110     }
111     else
112     {
113         Str1 = (char **)MALLOC(sizeof(char *) * n1);
114     }
115
116     if (Str1 == NULL)
117     {
118         Scierror(999, _("%s: No more memory.\n"), fname);
119         if (Str)
120         {
121             FREE(Str);
122             Str = NULL;
123         }
124         return 1;
125     }
126
127     if ((Str1[n1 - 1] = (char *)MALLOC(sizeof(char))) == NULL)
128     {
129         freeArrayOfString(Str1, n1 - 1);
130         if (Str)
131         {
132             FREE(Str);
133             Str = NULL;
134         }
135         Scierror(999, _("%s: No more memory.\n"), fname);
136         return 1;
137     }
138     Str1[n1 - 1][0] = '\0';
139
140     createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, n1, 1, Str1);
141
142     freeArrayOfString(Str1, n1);
143     if (Str)
144     {
145         FREE(Str);
146         Str = NULL;
147     }
148
149     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
150     ReturnArguments(pvApiCtx);
151
152     return 0;
153 }
154 /*--------------------------------------------------------------------------*/