Console: caret color was not taken into account when changing line
[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 *
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 /*--------------------------------------------------------------------------*/
14 #include <stdlib.h>
15 #include "callfftw.h"
16 #include "stack-c.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     CheckRhs(0, 0);
40     CheckLhs(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 0;
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                         // According to the FFTW documentation we should free Str
76                         // string but doing makes Scilab crash!?
77                         //free(Str);
78                     }
79                     return(0);
80                 }
81
82                 len = i - j;
83
84                 if ((Str1[n1 - 1] = (char *)MALLOC(sizeof(char) * (len + 1))) == NULL)
85                 {
86                     freeArrayOfString(Str1, n1 - 1);
87                     if (Str)
88                     {
89                         // According to the FFTW documentation we should free Str
90                         // string but doing makes Scilab crash!?
91                         //free(Str);
92                     }
93                     Scierror(999, _("%s: No more memory.\n"), fname);
94                     return(0);
95                 }
96
97                 for (k = 0; k < len; k++)
98                 {
99                     Str1[n1 - 1][k] = Str[k + j];
100                 }
101                 Str1[n1 - 1][len] = '\0';
102                 j = i + 1;
103             }
104         }
105     }
106
107     n1++;
108
109     if (Str1)
110     {
111         Str1 = (char **)REALLOC(Str1, sizeof(char *)*n1);
112     }
113     else
114     {
115         Str1 = (char **)MALLOC(sizeof(char *)*n1);
116     }
117
118     if (Str1 == NULL)
119     {
120         Scierror(999, _("%s: No more memory.\n"), fname);
121         if (Str)
122         {
123             // According to the FFTW documentation we should free Str
124             // string but doing makes Scilab crash!?
125             //free(Str);
126         }
127         return(0);
128     }
129
130     if ((Str1[n1 - 1] = (char *)MALLOC(sizeof(char))) == NULL)
131     {
132         freeArrayOfString(Str1, n1 - 1);
133         if (Str)
134         {
135             // According to the FFTW documentation we should free Str
136             // string but doing makes Scilab crash!?
137             //free(Str);
138         }
139         Scierror(999, _("%s: No more memory.\n"), fname);
140         return(0);
141     }
142     Str1[n1 - 1][0] = '\0';
143
144     CreateVarFromPtr(Rhs + 1, MATRIX_OF_STRING_DATATYPE, &n1, (j = 1, &j), Str1);
145
146     freeArrayOfString(Str1, n1);
147     if (Str)
148     {
149         // According to the FFTW documentation we should free Str
150         // string but doing makes Scilab crash!?
151         //free(Str);
152     }
153
154     LhsVar(1) = Rhs + 1;
155     PutLhsVar();
156
157     return(0);
158 }
159 /*--------------------------------------------------------------------------*/