wcstod no more convert d and D characters
[scilab.git] / scilab / modules / string / src / c / men_Sutils.c
1
2 /*
3  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4  * Copyright (C) INRIA
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 /*--------------------------------------------------------------------------*/
18 #include <stdlib.h>
19 #include <string.h>
20 #include "men_Sutils.h"
21 #include "getfastcode.h"
22 #include "sci_malloc.h"             /* MALLOC */
23 #include "freeArrayOfString.h"
24 /*--------------------------------------------------------------------------*/
25 void ScilabStr2C(int *n, int *Scistring, char **strh, int *ierr)
26 {
27     int j = 0;
28
29     *strh = (char *)MALLOC((*n + 1) * sizeof(char));
30     if ((*strh) == NULL)
31     {
32         *ierr = 1;
33         return;
34     }
35
36     for (j = 0; j < *n; ++j)
37     {
38         (*strh)[j] = convertScilabCodeToAsciiCode(Scistring[j]);
39     }
40     (*strh)[*n] = '\0';
41 }
42
43 /*--------------------------------------------------------------------------*/
44 void ScilabMStr2CM(int *Scistring, int *nstring, int *ptrstrings, char ***strh, int *ierr)
45 {
46     char **strings = NULL, *p = NULL;
47     int li = 0, ni = 0, *SciS = NULL, i = 0;
48
49     strings = (char **)MALLOC(((*nstring) + 1) * sizeof(char *));
50
51     if (strings == NULL)
52     {
53         *ierr = 1;
54         return;
55     }
56
57     li = 1;
58     SciS = Scistring;
59     for (i = 1; i < *nstring + 1; i++)
60     {
61         ni = ptrstrings[i] - li;
62         li = ptrstrings[i];
63         /* p is allocated here */
64         ScilabStr2C(&ni, SciS, &p, ierr);
65         if (*ierr == 1)
66         {
67             if (p)
68             {
69                 FREE(p);
70             }
71
72             freeArrayOfString(strings, i - 1);
73             return;
74         }
75         strings[i - 1] = p;
76         SciS += ni;
77     }
78     strings[*nstring] = NULL;
79     *strh = strings;
80 }
81
82 /*--------------------------------------------------------------------------*/
83 void ScilabMStr2C(int *desc, int *nd, int *ptrdesc, char **strh, int *ierr)
84 {
85     int ln = 0, i = 0;
86     int *SciS = NULL;
87     char *description = NULL;
88
89 #ifdef _MSC_VER
90     ln = ptrdesc[*nd] + 2 * (*nd) + 1;
91 #else
92     ln = ptrdesc[*nd] + *nd + 1;
93 #endif
94
95     description = (char *)MALLOC(ln * sizeof(char));
96
97     if (description == NULL)
98     {
99         *ierr = 1;
100         return;
101     }
102
103     SciS = desc;
104
105     for (i = 1; i < *nd + 1; i++)
106     {
107         int j = 0;
108         int ni = 0;
109         int li = 1;
110         int di = 0;
111         char *p = NULL;
112
113         p = &(description[di]);
114         ni = ptrdesc[i] - li;
115
116         /* conversion code -> ascii */
117         for (j = 0; j < ni; ++j)
118         {
119             p[j] = convertScilabCodeToAsciiCode(SciS[j]);
120         }
121         SciS += ni;
122 #ifdef _MSC_VER
123         p[ni] = '\r';
124         ni++;
125 #endif
126         p[ni] = '\n';
127     }
128     description[ln - 2] = '\0';
129     *strh = description;
130 }
131
132 /*--------------------------------------------------------------------------*/