Initial step :
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_xget.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  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 /*------------------------------------------------------------------------*/
15 /* file: sci_xset.c                                                       */
16 /* desc : interface for xset routine                                      */
17 /*------------------------------------------------------------------------*/
18
19 #include "gw_graphics.h"
20 #include "stack-c.h"
21 #include "XsetXgetParameters.h"
22 #include "GetProperty.h"
23 #include "Format.h"
24 #include "Scierror.h"
25 #include "ObjectSelection.h"
26 #include "localization.h"
27 #include "returnProperty.h"
28 /*--------------------------------------------------------------------------*/
29 int C2F(xgetg)( char * str, char * str1, int * len,int  lx0,int lx1);
30 /*--------------------------------------------------------------------------*/
31 int sci_xget(char *fname,unsigned long fname_len)
32 {
33   int flagx=0,x1[10],x2=0, m1,n1,l1,m2,n2,l2,l3,i ;
34   int one = 1 ;
35   BOOL keyFound = FALSE ;
36
37   if ( Rhs <= 0 )
38   {
39     sci_demo(fname, fname_len);
40     return 0;
41   }
42
43   CheckRhs(1,2);
44   CheckLhs(0,1);
45
46   GetRhsVar(1,STRING_DATATYPE,&m1,&n1,&l1);
47
48   /* check if key is valid */
49   for (i=0; i < NUMSETFONC ; i++)
50   {
51     if ( strcmp(cstk(l1),KeyTab_[i]) == 0 )
52     {
53       keyFound = TRUE ;
54       break ;
55     }
56   }
57
58   if ( !keyFound )
59   {
60     Scierror(999, _("%s: Unrecognized input argument: '%s'.\n"), fname, cstk(l1));
61     return -1;
62   }
63
64   if (Rhs == 2) {
65     GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE,&m2,&n2,&l2);
66     CheckScalar(2,m2,n2);
67     flagx = (int)  *stk(l2); }
68   else
69     flagx = 0;
70
71   if ( strcmp(cstk(l1),"fpf") == 0 || strcmp(cstk(l1),"auto clear") == 0)
72   {
73     int bufl;
74     /*     special case for global variables set */
75     C2F(xgetg)( cstk(l1),C2F(cha1).buf,&bufl,m1,bsiz);
76     CreateVar(Rhs+1,STRING_DATATYPE,&bufl,&one,&l3);
77     strncpy(cstk(l3),C2F(cha1).buf,bufl);
78     LhsVar(1)=Rhs+1;
79                 C2F(putlhsvar)();
80     return 0;
81   }
82   else if ( strcmp(cstk(l1),"colormap") == 0)
83   {
84     /*     special case for colormap : must allocate space */
85     int nbRow = 0 ;
86     int nbCol = 3 ;
87     sciPointObj * curFig = sciGetCurrentFigure() ;
88
89     nbRow = sciGetNumColors( curFig ) ;
90     if ( nbRow == 0 ) { nbCol = 0 ; }
91
92     CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&nbRow,&nbCol,&l3);
93
94     sciGetColormap( curFig, stk(l3) ) ;
95
96     LhsVar(1)=Rhs+1;
97   }
98   else if ( strcmp(cstk(l1),"mark") == 0)
99   {
100     int i2;
101     sciPointObj * subwin = sciGetCurrentSubWin();
102     x1[0] = sciGetMarkStyle(subwin);
103     x1[1] = sciGetMarkSize(subwin);
104     x2=2;
105     CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&one,&x2,&l3);
106     for (i2 = 0 ; i2 < x2 ; ++i2)
107                 *stk(l3 + i2 ) = (double) x1[i2];
108     LhsVar(1)=Rhs+1;
109   }
110   else if ( strcmp(cstk(l1),"mark size") == 0)
111   {
112     int i2;
113     sciPointObj * subwin = sciGetCurrentSubWin();
114     x1[0] = x1[1] = sciGetMarkSize(subwin);
115
116     x1[0]=x1[1];
117     x2=1;
118     CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&one,&x2,&l3);
119     for (i2 = 0 ; i2 < x2 ; ++i2) *stk(l3 + i2 ) = (double) x1[i2];
120     LhsVar(1)=Rhs+1;
121   }
122   else if ( strcmp(cstk(l1),"line style") == 0)
123   {
124     sciPointObj * subwin = sciGetCurrentSubWin();
125     x1[0] = sciGetLineStyle(subwin);
126
127     x2=1;
128     CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&one,&x2,&l3);
129     *stk(l3 ) = (double) x1[0];
130     LhsVar(1)=Rhs+1;
131   }
132   else if ( strcmp(cstk(l1),"old_style") == 0)
133   {
134     x2=1;
135     CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&one,&x2,&l3);
136     *stk(l3 ) = 0 ;
137     LhsVar(1)=Rhs+1;
138   }
139   else if(strcmp(cstk(l1),"clipping") == 0)
140   {
141     double * clipArea = sciGetClipping(sciGetCurrentSubWin());
142     sciReturnRowVector(clipArea, 4);
143     LhsVar(1)=Rhs+1;
144   }
145   else
146   {
147     int i2;
148     sciPointObj *psubwin = sciGetCurrentSubWin();
149     x2=0;
150     if(strcmp(cstk(l1),"font")==0){
151       x1[0] = (int) sciGetFontStyle(psubwin);
152       x1[1] = (int) sciGetFontSize(psubwin);
153       x2 = 2;
154     }
155     else if(strcmp(cstk(l1),"font size")==0){
156       x1[0] = (int) sciGetFontSize(psubwin);
157       x2 = 1;
158     }
159     else if(strcmp(cstk(l1),"dashes")==0){
160       x1[0] = sciGetLineStyle(psubwin);
161       x2 = 1;
162     }
163     else if(strcmp(cstk(l1),"hidden3d")==0){
164       x1[0] = pSUBWIN_FEATURE(psubwin)->hiddencolor;
165       x2 = 1;
166     }
167     else if(strcmp(cstk(l1),"window")==0 || strcmp(cstk(l1),"figure") == 0)
168     {
169       x1[0] = sciGetNum(sciGetCurrentFigure());
170       x2 = 1;
171     }
172     else if(strcmp(cstk(l1),"thickness") == 0)
173     {
174       x1[0] = (int) sciGetLineWidth(sciGetCurrentSubWin());
175       x2 = 1;
176     }
177     else if(strcmp(cstk(l1),"wdim") == 0)
178     {
179       x1[0] = sciGetWindowWidth(sciGetCurrentFigure());
180       x1[1] = sciGetWindowHeight(sciGetCurrentFigure());
181       x2 = 2;
182     }
183     else if(strcmp(cstk(l1),"wpos") == 0)
184     {
185       sciGetScreenPosition(sciGetCurrentFigure(), &(x1[0]), &(x1[1]));
186       x2 = 2;
187     }
188     else if(strcmp(cstk(l1),"wpdim") == 0)
189     {
190       x1[0] = sciGetWindowWidth(sciGetCurrentFigure());
191       x1[1] = sciGetWindowHeight(sciGetCurrentFigure());
192       x2 = 2;
193     }
194     else if(strcmp(cstk(l1),"viewport") == 0)
195     {
196       sciGetViewport(sciGetCurrentFigure(), x1);
197       x2 = 2;
198     }
199     else if(strcmp(cstk(l1),"alufunction") == 0)
200     {
201       x1[0] = sciGetXorMode(sciGetCurrentFigure());
202       x2 = 1;
203     }
204     else if(strcmp(cstk(l1),"background") == 0)
205     {
206       x1[0] = sciGetBackground(sciGetCurrentSubWin());
207       x2 = 1;
208     }
209     else if(   strcmp(cstk(l1),"color") == 0
210             || strcmp(cstk(l1),"foreground") == 0
211             || strcmp(cstk(l1),"pattern") == 0)
212     {
213       x1[0] = sciGetForeground(sciGetCurrentSubWin());
214       x2 = 1;
215     }
216     else if(strcmp(cstk(l1),"lastpattern") == 0)
217     {
218       x1[0] = sciGetNumColors(sciGetCurrentFigure());
219       x2 = 1;
220     }
221     else if(strcmp(cstk(l1),"line mode") == 0)
222     {
223       if (sciGetIsLine(sciGetCurrentSubWin()))
224       {
225         x1[0] = 1;
226       }
227       else
228       {
229         x1[0] = 0;
230       }
231       x2 = 1;
232     }
233     else if(strcmp(cstk(l1),"pixmap") == 0)
234     {
235       if (sciGetPixmapMode(sciGetCurrentFigure()))
236       {
237         x1[0] = 1;
238       }
239       else
240       {
241         x1[0] = 0;
242       }
243       x2 = 1;
244     }
245     else if(strcmp(cstk(l1),"white") == 0)
246     {
247       x1[0] = sciGetNumColors(sciGetCurrentFigure()) + 2;
248       x2 = 1;
249     }
250     else if(strcmp(cstk(l1),"wresize") == 0)
251     {
252       x1[0] = sciGetResize(sciGetCurrentFigure());
253       x2 = 1;
254     }
255     else if( strcmp(cstk(l1),"clipgrf") == 0 )
256     {
257       /* special treatement for xset("cligrf") */
258       if (sciGetIsClipping(sciGetCurrentSubWin()) == 0)
259       {
260         x1[0] = 1;
261       }
262       else
263       {
264         x1[0] = 0;
265       }
266       x2 = 1;
267     }
268     else if( strcmp(cstk(l1),"clipoff") == 0 )
269     {
270       /* special treatement for xset("cligrf") */
271       if (sciGetIsClipping(sciGetCurrentSubWin()) == -1)
272       {
273         x1[0] = 1;
274       }
275       else
276       {
277         x1[0] = 0;
278       }
279       x2 = 1;
280     }
281     else
282     {
283       Scierror(999, _("%s: Unrecognized input argument: '%s'.\n"), fname, cstk(l1));
284                         return -1;
285     }
286     if (x2 > 0) {
287       CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&one,&x2,&l3);
288       for (i2 = 0 ; i2 < x2 ; ++i2) *stk(l3 + i2 ) = (double) x1[i2];
289     }
290     else {
291       x2=0;
292       CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&x2,&x2,&l3);
293     }
294     LhsVar(1)=Rhs+1;
295   }
296         C2F(putlhsvar)();
297   return 0;
298 }
299 /*--------------------------------------------------------------------------*/
300 int C2F(xgetg)( char * str, char * str1, int * len,int  lx0,int lx1)
301 {
302   if ( strcmp(str,"fpf") == 0)
303   {
304     strncpy(str1,getFPF(),32);
305     *len= (int) strlen(str1);
306   }
307   else if ( strcmp(str,"auto clear")==0)
308   {
309     int autoclear;
310     sciPointObj * subwin = sciGetFirstTypedSelectedSon( sciGetCurrentFigure(), SCI_SUBWIN ) ;
311     autoclear = !(sciGetAddPlot(subwin));
312     if (autoclear == 1)
313     {
314       strncpy(str1,"on",2);
315       *len=2;
316     }
317     else
318     {
319       strncpy(str1,"off",3);
320       *len=3;
321     }
322   }
323   return 0;
324 }
325 /*--------------------------------------------------------------------------*/