a8aac758d6440cf80e9b0d14d5e6a423fb2b245a
[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  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15 #include "sci_malloc.h"
16 #include "gw_graphics.h"
17 #include "api_scilab.h"
18 #include "localization.h"
19 #include "Scierror.h"
20 #include "name2rgb.h"
21 #include "CurrentFigure.h"
22 #include "createGraphicObject.h"
23
24 int sci_name2rgb(char *fname, void* pvApiCtx)
25 {
26     SciErr sciErr;
27     int* piAddr = NULL;
28     char* pstColor = NULL;
29     double color[3];
30     int i;
31     int nRows;
32     int nCols;
33     int nRowsCols;
34     char** pstColorMatrix = NULL;
35     double* pColor = NULL;
36
37     CheckInputArgument(pvApiCtx, 1, 1);
38
39     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
40     if (sciErr.iErr)
41     {
42         printError(&sciErr, 0);
43         return 1;
44     }
45
46     if (isStringType(pvApiCtx, piAddr) == FALSE)
47     {
48         Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, 1);
49         return 1;
50     }
51
52     if (isScalar(pvApiCtx, piAddr) == TRUE)
53     {
54         if (getAllocatedSingleString(pvApiCtx, piAddr, &pstColor))
55         {
56             Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), fname, 1);
57             return 1;
58         }
59         name2rgb(pstColor, color);
60         freeAllocatedSingleString(pstColor);
61
62         if (color[0] == -1 || color[1] == -1 || color[2] == -1)
63         {
64             createEmptyMatrix(pvApiCtx, 2);
65         }
66         else
67         {
68             createMatrixOfDouble(pvApiCtx, 2, 1, 3, color);
69         }
70     }
71     else
72     {
73         if (getAllocatedMatrixOfString(pvApiCtx, piAddr, &nRows, &nCols, &pstColorMatrix))
74         {
75             Scierror(999, _("%s: Wrong type for input argument #%d: A matrix of string expected.\n"), fname, 1);
76             return 1;
77         }
78         nRowsCols = nRows * nCols;
79         pColor = (double*)MALLOC(3 * nRowsCols * sizeof(double));
80         for (i = 0; i < nRowsCols; ++i)
81         {
82             name2rgb(pstColorMatrix[i], color);
83             if (color[0] == -1 || color[1] == -1 || color[2] == -1)
84             {
85                 break;
86             }
87             pColor[i] = color[0];
88             pColor[i + nRowsCols] = color[1];
89             pColor[i + 2 * nRowsCols] = color[2];
90         }
91         freeAllocatedMatrixOfString(nRows, nCols, pstColorMatrix);
92         if (color[0] == -1 || color[1] == -1 || color[2] == -1)
93         {
94             createEmptyMatrix(pvApiCtx, 2);
95             FREE(pColor);
96         }
97         else
98         {
99             createMatrixOfDouble(pvApiCtx, 2, nRowsCols, 3, pColor);
100             FREE(pColor);
101         }
102     }
103     AssignOutputVariable(pvApiCtx, 1) = 2;
104     ReturnArguments(pvApiCtx);
105     return 0;
106 }