Validate Label after Size change to follow alignment.
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_grayplot.c
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) 2011 - DIGITEO - Bruno JOFRET
6  *
7  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
12  *
13  */
14
15 /*------------------------------------------------------------------------*/
16 /* file: sci_grayplot.c                                                   */
17 /* desc : interface for grayplot routine                                  */
18 /*------------------------------------------------------------------------*/
19
20 #include "gw_graphics.h"
21 #include "api_scilab.h"
22 #include "GetCommandArg.h"
23 #include "BuildObjects.h"
24 #include "DefaultCommandArg.h"
25 #include "sciCall.h"
26 #include "localization.h"
27 #include "Scierror.h"
28
29 /*--------------------------------------------------------------------------*/
30 int sci_grayplot(char *fname, unsigned long fname_len)
31 {
32     SciErr sciErr;
33     int frame_def = 8;
34     int *frame = &frame_def;
35     int axes_def = 1;
36     int *axes = &axes_def;
37     int m1 = 0, n1 = 0, m2 = 0, n2 = 0, m3 = 0, n3 = 0;
38     static rhs_opts opts[] =
39     {
40         { -1, "axesflag", -1, 0, 0, NULL},
41         { -1, "frameflag", -1, 0, 0, NULL},
42         { -1, "nax", -1, 0, 0, NULL},
43         { -1, "rect", -1, 0, 0, NULL},
44         { -1, "strf", -1, 0, 0, NULL},
45         { -1, NULL, -1, 0, 0, NULL}
46     };
47
48     char   * strf    = NULL ;
49     double* rect    = NULL ;
50     int    * nax     = NULL ;
51     BOOL     flagNax = FALSE;
52
53     int* piAddr1 = NULL;
54     int* piAddr2 = NULL;
55     int* piAddr3 = NULL;
56
57     double* l1 = NULL;
58     double* l2 = NULL;
59     double* l3 = NULL;
60
61     if (nbInputArgument(pvApiCtx) <= 0)
62     {
63         sci_demo(fname, fname_len);
64         return 0;
65     }
66     CheckInputArgument(pvApiCtx, 3, 7);
67
68     if (getOptionals(pvApiCtx, fname, opts) == 0)
69     {
70         ReturnArguments(pvApiCtx);
71         return 0;
72     }
73
74     if (FirstOpt() < 4)
75     {
76         Scierror(999, _("%s: Misplaced optional argument: #%d must be at position %d.\n"),
77                  fname, 1, 4);
78         return -1;
79     }
80     //get variable address
81     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1);
82     if (sciErr.iErr)
83     {
84         printError(&sciErr, 0);
85         return 1;
86     }
87
88     // Retrieve a matrix of double at position 1.
89     sciErr = getMatrixOfDouble(pvApiCtx, piAddr1, &m1, &n1, &l1);
90     if (sciErr.iErr)
91     {
92         Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 1);
93         printError(&sciErr, 0);
94         return 1;
95     }
96
97     //CheckVector
98     if (m1 != 1 && n1 != 1)
99     {
100         Scierror(999, _("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 1);
101         return 1;
102     }
103
104     //get variable address
105     sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr2);
106     if (sciErr.iErr)
107     {
108         printError(&sciErr, 0);
109         return 1;
110     }
111
112     // Retrieve a matrix of double at position 2.
113     sciErr = getMatrixOfDouble(pvApiCtx, piAddr2, &m2, &n2, &l2);
114     if (sciErr.iErr)
115     {
116         Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 2);
117         printError(&sciErr, 0);
118         return 1;
119     }
120
121     //CheckVector
122     if (m2 != 1 && n2 != 1)
123     {
124         Scierror(999, _("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 2);
125         return 1;
126     }
127
128     //get variable address
129     sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddr3);
130     if (sciErr.iErr)
131     {
132         printError(&sciErr, 0);
133         return 1;
134     }
135
136     // Retrieve a matrix of double at position 3.
137     sciErr = getMatrixOfDouble(pvApiCtx, piAddr3, &m3, &n3, &l3);
138     if (sciErr.iErr)
139     {
140         Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 3);
141         printError(&sciErr, 0);
142         return 1;
143     }
144
145     if (m3 * n3 == 0)
146     {
147         AssignOutputVariable(pvApiCtx, 1) = 0;
148         ReturnArguments(pvApiCtx);
149         return 0;
150     }
151
152     //CheckDimProp
153     if (m2 * n2 != n3)
154     {
155         Scierror(999, _("%s: Wrong size for input arguments: Incompatible sizes.\n"), fname);
156         return 1;
157     }
158
159     //CheckDimProp
160     if (m1 * n1 != m3)
161     {
162         Scierror(999, _("%s: Wrong size for input arguments: Incompatible sizes.\n"), fname);
163         return 1;
164     }
165
166
167     GetStrf(pvApiCtx, fname, 4, opts, &strf);
168     GetRect(pvApiCtx, fname, 5, opts, &rect);
169     GetNax(pvApiCtx, 6, opts, &nax, &flagNax);
170
171     getOrCreateDefaultSubwin();
172
173     if (isDefStrf(strf))
174     {
175         char strfl[4];
176
177         strcpy(strfl, DEFSTRFN);
178
179         strf = strfl;
180         if (!isDefRect(rect))
181         {
182             strfl[1] = '7';
183         }
184
185         GetOptionalIntArg(pvApiCtx, fname, 7, "frameflag", &frame, 1, opts);
186         if (frame != &frame_def)
187         {
188             strfl[1] = (char)(*frame + 48);
189         }
190         GetOptionalIntArg(pvApiCtx, fname, 7, "axesflag", &axes, 1, opts);
191         if (axes != &axes_def)
192         {
193             strfl[2] = (char)(*axes + 48);
194         }
195     }
196
197     Objgrayplot ((l1), (l2), (l3), &m3, &n3, strf, rect, nax, flagNax);
198
199     AssignOutputVariable(pvApiCtx, 1) = 0;
200     ReturnArguments(pvApiCtx);
201     return 0;
202 }
203 /*--------------------------------------------------------------------------*/