wcstod no more convert d and D characters
[scilab.git] / scilab / modules / string / src / c / partfunction.c
1
2 /*
3  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4  * Copyright (C) 2008 - INRIA - Allan CORNET
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 <string.h>
19 #include "sci_malloc.h"
20 #include "partfunction.h"
21 #include "freeArrayOfString.h"
22 #include "charEncoding.h"
23
24 /*--------------------------------------------------------------------------*/
25 #define BLANK_CHAR ' '
26 /*--------------------------------------------------------------------------*/
27 char **partfunction(char** stringInput, int m, int n, int *vectInput, int row)
28 {
29     char **parts = NULL;
30     int mn = m * n;
31
32     int i = 0;
33
34     parts = (char**)MALLOC(sizeof(char*) * (mn));
35
36     for (i = 0; i < mn; i++)
37     {
38         int j = 0;
39         int lengthstringInput = 0;
40         wchar_t *wcInput = to_wide_string(stringInput[i]);
41         wchar_t *wcOutput = NULL;
42
43         wcOutput = (wchar_t*)MALLOC(sizeof(wchar_t) * ((row) + 1));
44
45         if (wcInput)
46         {
47             lengthstringInput = (int)wcslen(wcInput);
48             for (j = 0; j < row; j++)
49             {
50                 if ( vectInput[j] > lengthstringInput )
51                 {
52                     wcOutput[j] = L' ';
53                 }
54                 else
55                 {
56                     wcOutput[j] = wcInput[vectInput[j] - 1];
57                 }
58             }
59             FREE(wcInput);
60         }
61         else // fill output with blank
62         {
63             for (j = 0; j < row; j++)
64             {
65                 wcOutput[j] = L' ';
66             }
67         }
68
69         wcOutput[j] = '\0';
70         parts[i] = wide_string_to_UTF8(wcOutput);
71         FREE(wcOutput);
72     }
73     return parts;
74 }
75 /*--------------------------------------------------------------------------*/
76 wchar_t **partfunctionW(wchar_t** _pwstStringInput, int _iRows, int _iCols, int *_piVectInput, int _iVectSize)
77 {
78     int i, j;
79     wchar_t **pwstParts = NULL;
80     int iSize = _iRows * _iCols;
81
82     pwstParts = (wchar_t**)MALLOC(sizeof(wchar_t*) * (iSize));
83
84     for (i = 0 ; i < iSize ; i++)
85     {
86         pwstParts[i] = (wchar_t*)MALLOC(sizeof(wchar_t) * (_iVectSize + 1));
87
88         for (j = 0 ; j < _iVectSize ; j++)
89         {
90             if (_piVectInput[j] > wcslen(_pwstStringInput[i]))
91             {
92                 pwstParts[i][j] = L' ';
93             }
94             else
95             {
96                 pwstParts[i][j] = _pwstStringInput[i][_piVectInput[j] - 1];
97             }
98         }
99         pwstParts[i][j] = '\0';
100     }
101     return pwstParts;
102 }
103 /*--------------------------------------------------------------------------*/