Merge remote-tracking branch 'origin/master' into YaSp
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_name2rgb.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12 #include "sci_malloc.h"
13 #include "gw_graphics.h"
14 #include "api_scilab.h"
15 #include "localization.h"
16 #include "Scierror.h"
17 #include "name2rgb.h"
18 #include "CurrentFigure.h"
19 #include "createGraphicObject.h"
20
21 int sci_name2rgb(char *fname, void* pvApiCtx)
22 {
23     SciErr sciErr;
24     int* piAddr = NULL;
25     char* pstColor = NULL;
26     double color[3];
27     int i;
28     int nRows;
29     int nCols;
30     int nRowsCols;
31     char** pstColorMatrix = NULL;
32     double* pColor = NULL;
33
34     CheckInputArgument(pvApiCtx, 1, 1);
35
36     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
37     if (sciErr.iErr)
38     {
39         printError(&sciErr, 0);
40         return 1;
41     }
42
43     if (isStringType(pvApiCtx, piAddr) == FALSE)
44     {
45         Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, 1);
46         return 1;
47     }
48
49     if (isScalar(pvApiCtx, piAddr) == TRUE)
50     {
51         getAllocatedSingleString(pvApiCtx, piAddr, &pstColor);
52         name2rgb(pstColor, color);
53         freeAllocatedSingleString(pstColor);
54
55         if (color[0] == -1 || color[1] == -1 || color[2] == -1)
56         {
57             createEmptyMatrix(pvApiCtx, 2);
58         }
59         else
60         {
61             createMatrixOfDouble(pvApiCtx, 2, 1, 3, color);
62         }
63     }
64     else
65     {
66         getAllocatedMatrixOfString(pvApiCtx, piAddr, &nRows, &nCols, &pstColorMatrix);
67         nRowsCols = nRows * nCols;
68         pColor = (double*)MALLOC(3 * nRowsCols * sizeof(double));
69         for (i = 0; i < nRowsCols; ++i)
70         {
71             name2rgb(pstColorMatrix[i], color);
72             if (color[0] == -1 || color[1] == -1 || color[2] == -1)
73             {
74                 break;
75             }
76             pColor[i] = color[0];
77             pColor[i + nRowsCols] = color[1];
78             pColor[i + 2 * nRowsCols] = color[2];
79         }
80         freeAllocatedMatrixOfString(nRows, nCols, pstColorMatrix);
81         if (color[0] == -1 || color[1] == -1 || color[2] == -1)
82         {
83             createEmptyMatrix(pvApiCtx, 2);
84             FREE(pColor);
85         }
86         else
87         {
88             createMatrixOfDouble(pvApiCtx, 2, nRowsCols, 3, pColor);
89             FREE(pColor);
90         }
91     }
92     AssignOutputVariable(pvApiCtx, 1) = 2;
93     ReturnArguments(pvApiCtx);
94     return 0;
95 }