Coverity #1098375 Resource Leak fix
[scilab.git] / scilab / modules / graphics / sci_gateway / cpp / sci_xset.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2006 - INRIA - Fabrice Leray
4 * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5 * Copyright (C) 2012 - Scilab Enterprises - Bruno JOFRET
6 * Copyright (C) 2013 - Scilab Enterprises - Cedric Delamarre
7 *
8  * Copyright (C) 2012 - 2016 - Scilab Enterprises
9  *
10  * This file is hereby licensed under the terms of the GNU GPL v2.0,
11  * pursuant to article 5.3.4 of the CeCILL v.2.1.
12  * This file was originally licensed under the terms of the CeCILL v2.1,
13  * and continues to be available under such terms.
14  * For more information, see the COPYING file which you should have received
15  * along with this program.
16 *
17 */
18
19 /*------------------------------------------------------------------------*/
20 /* file: sci_xset.cpp                                                      */
21 /* desc : interface for xset routine                                      */
22 /*------------------------------------------------------------------------*/
23 #include "graphics_gw.hxx"
24 #include "function.hxx"
25 #include "double.hxx"
26 #include "configvariable.hxx"
27 #include "configgraphicvariable.hxx"
28 #include "overload.hxx"
29 #include "internal.hxx"
30 #include "string.hxx"
31
32 extern "C"
33 {
34 #include "GetProperty.h"
35 #include "SetProperty.h"
36 #include "DrawObjects.h"
37 #include "localization.h"
38 #include "Scierror.h"
39 #include "HandleManagement.h"
40
41 #include "createGraphicObject.h"
42 #include "BuildObjects.h"
43 #include "graphicObjectProperties.h"
44 #include "setGraphicObjectProperty.h"
45 #include "FigureList.h"
46 #include "CurrentFigure.h"
47 #include "CurrentSubwin.h"
48 #include "AxesModel.h"
49 #include "getGraphicObjectProperty.h"
50 #include "deleteGraphicObject.h"
51 #include "configvariable_interface.h"
52 #include "sciprint.h"
53 }
54 /*--------------------------------------------------------------------------*/
55 types::Function::ReturnValue sci_xset(types::typed_list &in, int _iRetCount, types::typed_list &out)
56 {
57     wchar_t* pwcsWhat = NULL;
58     std::list<types::Double*> lpDblInputs;
59     int iSubwinUID = 0;
60
61     if (in.size() == 0)
62     {
63         return Overload::call(L"%_xset", in, _iRetCount, out);
64     }
65
66     if (in.size() > 6)
67     {
68         Scierror(77, _("%s: Wrong number of input argument(s): %d to %d expected.\n"), "xset", 1, 6);
69         return types::Function::Error;
70     }
71
72     if (_iRetCount > 1)
73     {
74         Scierror(78, _("%s: Wrong number of output argument(s): %d expected.\n"), "xset", 1);
75         return types::Function::Error;
76     }
77
78     if (in[0]->isString() == false)
79     {
80         Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), "xset", 1);
81         return types::Function::Error;
82     }
83
84     types::String* pStr = in[0]->getAs<types::String>();
85
86     if (pStr->isScalar() == false)
87     {
88         Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), "xset", 1);
89         return types::Function::Error;
90     }
91
92     pwcsWhat = pStr->get(0);
93
94     if (ConfigGraphicVariable::bPropertyFound(pwcsWhat) == false)
95     {
96         char* pstWhat = wide_string_to_UTF8(pwcsWhat);
97         Scierror(999, _("%s: Unrecognized input argument: '%s'.\n"), "xset", pstWhat);
98         FREE(pstWhat);
99         return types::Function::Error;
100     }
101
102     // Only in case of "fpf" and "auto clear", the second argument is a string
103     // Only "default" case have one input argument
104     if (ConfigGraphicVariable::getPropertyValue(pwcsWhat) != 15 && // fpf
105             ConfigGraphicVariable::getPropertyValue(pwcsWhat) != 2  && // auto clear
106             ConfigGraphicVariable::getPropertyValue(pwcsWhat) != 10)   // default
107     {
108         for (unsigned int i = 1 ; i < in.size() ; i++)
109         {
110             if (in[i]->isDouble() == false)
111             {
112                 Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), "xset", i + 1);
113             }
114         }
115     }
116
117     switch (ConfigGraphicVariable::getPropertyValue(pwcsWhat))
118     {
119         case 15 : // fpf
120         {
121             if (in.size() != 2)
122             {
123                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
124                 return types::Function::Error;
125             }
126
127             if (in[1]->isString() == false)
128             {
129                 Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), "xset", 2);
130                 return types::Function::Error;
131             }
132
133             types::String* pStrValue = in[1]->getAs<types::String>();
134             if (pStrValue->isScalar() == false)
135             {
136                 Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), "xset", 2);
137                 return types::Function::Error;
138             }
139
140             ConfigGraphicVariable::setFPF(pStrValue->get(0));
141         }
142         break;
143         case 2 : // auto clear
144         {
145             if (in.size() != 2)
146             {
147                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
148                 return types::Function::Error;
149             }
150
151             if (in[1]->isString() == false)
152             {
153                 Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), "xset", 2);
154                 return types::Function::Error;
155             }
156
157             types::String* pStrValue = in[1]->getAs<types::String>();
158             if (pStrValue->isScalar() == false)
159             {
160                 Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), "xset", 2);
161                 return types::Function::Error;
162             }
163
164             int bAutoClear = 0;
165             if (wcscmp(pStrValue->get(0), L"on") == 0)
166             {
167                 bAutoClear = 1;
168             }
169
170             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_AUTO_CLEAR__, &bAutoClear, jni_bool, 1);
171         }
172         break;
173         case 5 : // clipping
174         {
175             int clipState = 2;
176             double dvalues[4];
177             if (in.size() == 2)
178             {
179                 types::Double* pDblArg = in[1]->getAs<types::Double>();
180                 if (pDblArg->getSize() != 4)
181                 {
182                     Scierror(999, _("%s: Wrong size for input argument #%d: A %d-element vector expected.\n"), "xset", 2, 4);
183                     return types::Function::Error;
184                 }
185
186                 memcpy(dvalues, pDblArg->get(), 4 * sizeof(double));
187             }
188             else if (in.size() != 5)
189             {
190                 Scierror(77, _("%s: Wrong number of input arguments: %d or %d expected.\n"), "xset", 2, 5);
191                 return types::Function::Error;
192             }
193             else
194             {
195                 for (int i = 0; i < 4 ; i++)
196                 {
197                     dvalues[i] = in[i + 1]->getAs<types::Double>()->get(0);
198                 }
199             }
200
201             iSubwinUID = getOrCreateDefaultSubwin();
202             setGraphicObjectProperty(iSubwinUID, __GO_CLIP_BOX__, dvalues, jni_double_vector, 4);
203             setGraphicObjectProperty(iSubwinUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
204         }
205         break;
206         case 8 : // colormap
207         {
208             if (in.size() != 2)
209             {
210                 Scierror(77, _("%s: Wrong number of input argument(s): %d expected.\n"), "xset", 2);
211                 return types::Function::Error;
212             }
213
214             types::Double* pDblArg = in[1]->getAs<types::Double>();
215             getOrCreateDefaultSubwin();
216             setGraphicObjectProperty(getCurrentFigure(), __GO_COLORMAP__, pDblArg->get(), jni_double_vector, pDblArg->getSize());
217         }
218         break;
219         case 21 : // mark size
220         {
221             if (in.size() != 2)
222             {
223                 Scierror(77, _("%s: Wrong number of input argument(s): %d expected.\n"), "xset", 2);
224                 return types::Function::Error;
225             }
226
227             int markSize = (int)in[1]->getAs<types::Double>()->get(0);
228             int markSizeUnit = 1; /* force switch to tabulated mode : old syntax / 0 : point, 1 : tabulated */
229
230             iSubwinUID = getOrCreateDefaultSubwin();
231             setGraphicObjectProperty(iSubwinUID, __GO_MARK_SIZE_UNIT__, &markSizeUnit, jni_int, 1);
232             setGraphicObjectProperty(iSubwinUID, __GO_MARK_SIZE__, &markSize, jni_int, 1);
233         }
234         break;
235         case 20 : // mark
236         {
237             if (in.size() != 3)
238             {
239                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 3);
240                 return types::Function::Error;
241             }
242
243             int markStyle = (int) in[1]->getAs<types::Double>()->get(0);
244             int markSize = (int) in[2]->getAs<types::Double>()->get(0);
245             int markSizeUnit = 1; /* force switch to tabulated mode : old syntax / 0 : point, 1 : tabulated */
246             int markMode = 1;
247
248             iSubwinUID = getOrCreateDefaultSubwin();
249             setGraphicObjectProperty(iSubwinUID, __GO_MARK_MODE__, &markMode, jni_bool, 1);
250             setGraphicObjectProperty(iSubwinUID, __GO_MARK_SIZE_UNIT__, &markSizeUnit, jni_int, 1); /* force switch to tabulated mode : old syntax */
251             setGraphicObjectProperty(iSubwinUID, __GO_MARK_STYLE__, &markStyle, jni_int, 1);
252             setGraphicObjectProperty(iSubwinUID, __GO_MARK_SIZE__, &markSize, jni_int, 1);
253         }
254         break;
255         case 13 : // font size
256         {
257             if (in.size() != 2)
258             {
259                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
260                 return types::Function::Error;
261             }
262             double fontSize = in[1]->getAs<types::Double>()->get(0);
263             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_FONT_SIZE__, &fontSize, jni_double, 1);
264         }
265         break;
266         case 10 : // default
267         {
268             if (in.size() != 1)
269             {
270                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 1);
271                 return types::Function::Error;
272             }
273
274             unsigned short* defcolors = ConfigGraphicVariable::getDefaultColormap();
275
276             int piFigurePosition[2] = {200, 200};
277             int piFigureSize[2]     = {500, 500};
278             int piAxesSize[2]       = {498, 366};
279             int piViewPort[2]       = {0, 0};
280             int piEmptyMatrix[4]    = {1, 0, 0, 0};
281
282             // init variables
283             int iZero   = 0;
284             BOOL bTrue  = TRUE;
285             BOOL bFalse = FALSE;
286             int m       = NUMCOLORS_SCI;
287             int i       = 0;
288             int iCopy   = 3;
289             int defaultBackground = -2;
290
291             // reset format
292             ConfigGraphicVariable::setFPF(L"");
293
294             double* pdblColorMap = new double[m * 3];
295             if (pdblColorMap == NULL)
296             {
297                 Scierror(999, _("%s: No more memory.\n"), "xset");
298                 return types::Function::Error;
299             }
300
301             // Create figure if it not exist.
302             int iFigureUID = getCurrentFigure();
303             if (iFigureUID == 0)
304             {
305                 iFigureUID = createNewFigureWithAxes();
306                 setCurrentFigure(iFigureUID);
307                 delete[] pdblColorMap;
308                 return types::Function::OK;
309             }
310
311             // Create new axes and set it in current figure
312             int iSubWinUID = getCurrentSubWin();
313             if (iSubWinUID != 0)
314             {
315                 int iChildrenCount  = 0;
316                 int* childrencount  = &iChildrenCount;
317                 int* childrenUID    = 0;
318                 int iHidden         = 0;
319                 int *piHidden       = &iHidden;
320
321                 getGraphicObjectProperty(iFigureUID, __GO_CHILDREN_COUNT__, jni_int, (void **)&childrencount);
322                 getGraphicObjectProperty(iFigureUID, __GO_CHILDREN__, jni_string_vector, (void **)&childrenUID);
323
324                 for (i = 0; i < childrencount[0]; ++i)
325                 {
326                     getGraphicObjectProperty(childrenUID[i], __GO_HIDDEN__, jni_bool, (void **)&piHidden);
327                     if (iHidden == 0)
328                     {
329                         deleteGraphicObject(childrenUID[i]);
330                     }
331                 }
332             }
333
334             cloneAxesModel(iFigureUID);
335
336             // Set default figure properties
337             setGraphicObjectProperty(iFigureUID, __GO_POSITION__, piFigurePosition, jni_int_vector, 2);
338             setGraphicObjectProperty(iFigureUID, __GO_SIZE__, piFigureSize, jni_int_vector, 2);
339             setGraphicObjectProperty(iFigureUID, __GO_AXES_SIZE__, piAxesSize, jni_int_vector, 2);
340             setGraphicObjectProperty(iFigureUID, __GO_AUTORESIZE__, &bTrue, jni_bool, 1);
341             setGraphicObjectProperty(iFigureUID, __GO_VIEWPORT__, piViewPort, jni_int_vector, 2);
342             setGraphicObjectProperty(iFigureUID, __GO_NAME__, _("Figure n°%d"), jni_string, 1);
343             setGraphicObjectProperty(iFigureUID, __GO_INFO_MESSAGE__, "", jni_string, 1);
344             setGraphicObjectProperty(iFigureUID, __GO_PIXEL_DRAWING_MODE__, &iCopy, jni_int, 1);
345             setGraphicObjectProperty(iFigureUID, __GO_ANTIALIASING__, &iZero, jni_int, 1);
346             setGraphicObjectProperty(iFigureUID, __GO_IMMEDIATE_DRAWING__, &bTrue, jni_bool, 1);
347             setGraphicObjectProperty(iFigureUID, __GO_BACKGROUND__, &defaultBackground, jni_int, 1);
348             setGraphicObjectProperty(iFigureUID, __GO_VISIBLE__, &bTrue, jni_bool, 1);
349             setGraphicObjectProperty(iFigureUID, __GO_ROTATION_TYPE__, &iZero, jni_int, 1);
350             setGraphicObjectProperty(iFigureUID, __GO_EVENTHANDLER__, "", jni_string, 1);
351             setGraphicObjectProperty(iFigureUID, __GO_EVENTHANDLER_ENABLE__, &bFalse, jni_bool, 1);
352             setGraphicObjectProperty(iFigureUID, __GO_USER_DATA__, piEmptyMatrix, jni_int_vector, 4);
353             setGraphicObjectProperty(iFigureUID, __GO_RESIZEFCN__, "", jni_string, 1);
354             setGraphicObjectProperty(iFigureUID, __GO_TAG__, "", jni_string, 1);
355
356             for (i = 0; i < m; i++)
357             {
358                 pdblColorMap[i]         = (double)(defcolors[3 * i] / 255.0);
359                 pdblColorMap[i + m]     = (double)(defcolors[3 * i + 1] / 255.0);
360                 pdblColorMap[i + 2 * m] = (double)(defcolors[3 * i + 2] / 255.0);
361             }
362
363             setGraphicObjectProperty(iFigureUID, __GO_COLORMAP__, pdblColorMap, jni_double_vector, 3 * m);
364             setGraphicObjectProperty(iFigureUID, __GO_PARENT__, "", jni_string, 1);
365             delete[] pdblColorMap;
366         }
367         break;
368         case 6 : // clipgrf
369         {
370             int clipState = 1;
371             /* special treatement for xset("cligrf") */
372             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_CLIP_STATE__, &clipState, jni_int, 1);
373         }
374         break;
375         case 4 : // clipoff
376         {
377             int clipState = 0;
378             /* special treatement for xset("clipoff") */
379             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_CLIP_STATE__, &clipState, jni_int, 1);
380         }
381         break;
382         case 16 : // hidden3d
383         {
384             if (in.size() != 2)
385             {
386                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
387                 return types::Function::Error;
388             }
389
390             int hiddenColor = (int) in[1]->getAs<types::Double>()->get(0);
391             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_HIDDEN_COLOR__, &hiddenColor, jni_int, 1);
392         }
393         break;
394         case 12 : // font
395         {
396             if (in.size() != 3)
397             {
398                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 3);
399                 return types::Function::Error;
400             }
401
402             int fontStyle = (int) in[1]->getAs<types::Double>()->get(0);
403             double fontSize = in[2]->getAs<types::Double>()->get(0);
404
405             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_FONT_SIZE__, &fontSize, jni_double, 1);
406             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_FONT_STYLE__, &fontStyle, jni_int, 1);
407         }
408         break;
409         case 11 : // window
410         case 30 : // figure
411         {
412             if (in.size() != 2)
413             {
414                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
415                 return types::Function::Error;
416             }
417
418             // Find if window already exists, if not create a new one
419             int iID = (int)in[1]->getAs<types::Double>()->get(0);
420             int iFigureUID = getFigureFromIndex(iID);
421             int iAxesUID = 0;
422             int* piAxesUID = &iAxesUID;
423
424             if (iFigureUID == 0)
425             {
426                 iFigureUID = createNewFigureWithAxes();
427                 setGraphicObjectProperty(iFigureUID, __GO_ID__, &iID, jni_int, 1);
428             }
429
430             setCurrentFigure(iFigureUID);
431             getGraphicObjectProperty(iFigureUID, __GO_SELECTED_CHILD__, jni_int, (void**)&piAxesUID);
432             setCurrentSubWin(iAxesUID);
433         }
434         break;
435         case 14 : // foreground
436         case 7 : // color
437         case 23 : // pattern
438         {
439             if (in.size() != 2)
440             {
441                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
442                 return types::Function::Error;
443             }
444
445             int iColor = (int) in[1]->getAs<types::Double>()->get(0);
446             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_LINE_COLOR__, &iColor, jni_int, 1);
447         }
448         break;
449         case 3 : // background
450         {
451             if (in.size() != 2)
452             {
453                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
454                 return types::Function::Error;
455             }
456
457             int iColor = (int) in[1]->getAs<types::Double>()->get(0);
458             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_BACKGROUND__, &iColor, jni_int, 1);
459         }
460         break;
461         case 25 : // thickness
462         {
463             if (in.size() != 2)
464             {
465                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
466                 return types::Function::Error;
467             }
468
469             sciSetLineWidth(getOrCreateDefaultSubwin(), (int)in[1]->getAs<types::Double>()->get(0));
470         }
471         break;
472         case 19 : // line style
473         {
474             if (in.size() != 2)
475             {
476                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
477                 return types::Function::Error;
478             }
479
480             int lineStyle = (int) in[1]->getAs<types::Double>()->get(0);
481             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_LINE_STYLE__, &lineStyle, jni_int, 1);
482         }
483         break;
484         case 9 : // dashes
485         {
486             if (in.size() != 2)
487             {
488                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
489                 return types::Function::Error;
490             }
491
492             int lineStyle = (int) in[1]->getAs<types::Double>()->get(0);
493             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_LINE_STYLE__, &lineStyle, jni_int, 1);
494         }
495         break;
496         case 33 : // wresize
497         {
498             if (in.size() != 2)
499             {
500                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
501                 return types::Function::Error;
502             }
503
504             int iAutoResizeMode = (int)in[1]->getAs<types::Double>()->get(0);
505             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_AUTORESIZE__, &iAutoResizeMode, jni_bool, 1);
506         }
507         break;
508         case 32 : // wpos
509         {
510             int figurePosition[2];
511             if (in.size() != 2)
512             {
513                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
514                 return types::Function::Error;
515             }
516
517             getOrCreateDefaultSubwin();
518
519             figurePosition[0] = (int)in[1]->getAs<types::Double>()->get(0);
520             figurePosition[1] = (int)in[1]->getAs<types::Double>()->get(1);
521             setGraphicObjectProperty(getCurrentFigure(), __GO_POSITION__, figurePosition, jni_int_vector, 2);
522         }
523         break;
524         case 31 : // wpdim
525         case 28 : // wdim
526         {
527             int figureSize[2] = {0, 0};
528             if (in.size() != 2 && in.size() != 3)
529             {
530                 Scierror(77, _("%s: Wrong number of input arguments: %d or %d expected.\n"), "xset", 2, 3);
531                 return types::Function::Error;
532             }
533
534             figureSize[0] = (int)in[1]->getAs<types::Double>()->get(0);
535             if (in.size() == 3)
536             {
537                 figureSize[1] = (int)in[2]->getAs<types::Double>()->get(0);
538             }
539
540             /* Xwindows limits dimensions to 2^16 */
541             if ((figureSize[0] > 65535) || (figureSize[1] > 65535))
542             {
543                 figureSize[0] = std::min(figureSize[0], 65535);
544                 figureSize[1] = std::min(figureSize[1], 65535);
545                 if (ConfigVariable::getWarningMode())
546                 {
547                     sciprint(_("%s: window dimensions have been set less than 2^16.\n"), "xset");
548                 }
549             }
550
551             getOrCreateDefaultSubwin();
552             setGraphicObjectProperty(getCurrentFigure(), __GO_SIZE__, figureSize, jni_int_vector, 2);
553         }
554         break;
555         case 27 : // viewport
556         {
557             if (in.size() != 3)
558             {
559                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 3);
560                 return types::Function::Error;
561             }
562
563             int viewport[4] = {0, 0, 0, 0};
564             viewport[0] = in[1]->getAs<types::Double>()->get(0);
565             viewport[1] = in[2]->getAs<types::Double>()->get(0);
566
567             getOrCreateDefaultSubwin();
568             setGraphicObjectProperty(getCurrentFigure(), __GO_VIEWPORT__, viewport, jni_int_vector, 2);
569         }
570         break;
571         case 18 : // line mode
572         {
573             if (in.size() != 2)
574             {
575                 Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "xset", 2);
576                 return types::Function::Error;
577             }
578
579             int iSubwinUID = getOrCreateDefaultSubwin();
580             int iZero = 0;
581             int iOne = 1;
582
583             if (in[1]->getAs<types::Double>()->get(0) == 0)
584             {
585                 setGraphicObjectProperty(iSubwinUID, __GO_LINE_MODE__, &iZero, jni_bool, 1);
586             }
587             else
588             {
589                 setGraphicObjectProperty(iSubwinUID, __GO_LINE_MODE__, &iOne, jni_bool, 1);
590             }
591         }
592         break;
593         default :
594         {
595             char* pstWhat = wide_string_to_UTF8(pwcsWhat);
596             Scierror(999, _("%s: Unrecognized input argument: '%s'.\n"), "xset", pstWhat);
597             FREE(pstWhat);
598             return types::Function::Error;
599         }
600     }
601
602     return types::Function::OK;
603 }
604 /*--------------------------------------------------------------------------*/