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