1 /***************************************************************************
2 * exec_set.cpp is part of Math Graphic Library
3 * Copyright (C) 2007-2016 Alexey Balakin <mathgl.abalakin@gmail.ru> *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU Lesser General Public License as *
7 * published by the Free Software Foundation; either version 3 of the *
8 * License, or (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU Lesser General Public *
16 * License along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20 #ifdef WIN32
21 #include <io.h>
22 #include <direct.h>
23 #else
24 #include <unistd.h>
25 #endif
26
27 #include "mgl2/base.h"
28 #include "mgl2/parser.h"
29 //#pragma GCC diagnostic ignored "-Wmisleading-indentation"
30 wchar_t *mgl_str_copy(const char *s);
31 //-----------------------------------------------------------------------------
mgls_addlegend(mglGraph * gr,long,mglArg * a,const char * k,const char *)32 int static mgls_addlegend(mglGraph *gr, long , mglArg *a, const char *k, const char *)
33 {
34 int res=0;
35 if(!strcmp(k,"ss")) gr->AddLegend(a[0].s.w,a[1].s.s);
36 else res = 1;
37 return res;
38 }
39 //-----------------------------------------------------------------------------
mgls_addsymbol(mglGraph * gr,long,mglArg * a,const char * k,const char *)40 int static mgls_addsymbol(mglGraph *gr, long , mglArg *a, const char *k, const char *)
41 {
42 int res=0;
43 if(!strcmp(k,"sdd")) gr->DefineSymbol(a[0].s[0],*(a[1].d),*(a[2].d));
44 else res = 1;
45 return res;
46 }
47 //-----------------------------------------------------------------------------
mgls_adjust(mglGraph * gr,long,mglArg * a,const char * k,const char *)48 int static mgls_adjust(mglGraph *gr, long , mglArg *a, const char *k, const char *)
49 {
50 int res=0;
51 if(k[0]==0) gr->Adjust();
52 else if(!strcmp(k,"s")) gr->Adjust(a[0].s.s);
53 else res = 1;
54 return res;
55 }
56 //-----------------------------------------------------------------------------
mgls_alpha(mglGraph * gr,long,mglArg * a,const char * k,const char *)57 int static mgls_alpha(mglGraph *gr, long , mglArg *a, const char *k, const char *)
58 {
59 int res=0;
60 if(k[0]==0) gr->Alpha(true);
61 else if(!strcmp(k,"n")) gr->Alpha(a[0].v!=0);
62 else res = 1;
63 return res;
64 }
65 //-----------------------------------------------------------------------------
mgls_alphadef(mglGraph * gr,long,mglArg * a,const char * k,const char *)66 int static mgls_alphadef(mglGraph *gr, long , mglArg *a, const char *k, const char *)
67 {
68 int res=0;
69 if(!strcmp(k,"n")) gr->SetAlphaDef(a[0].v);
70 else res = 1;
71 return res;
72 }
73 //-----------------------------------------------------------------------------
mgls_ambient(mglGraph * gr,long,mglArg * a,const char * k,const char *)74 int static mgls_ambient(mglGraph *gr, long , mglArg *a, const char *k, const char *)
75 {
76 int res=0;
77 if(!strcmp(k,"n")) gr->SetAmbient(a[0].v);
78 else res = 1;
79 return res;
80 }
81 //-----------------------------------------------------------------------------
mgls_arrowsize(mglGraph * gr,long,mglArg * a,const char * k,const char *)82 int static mgls_arrowsize(mglGraph *gr, long , mglArg *a, const char *k, const char *)
83 {
84 int res=0;
85 if(!strcmp(k,"n")) gr->SetArrowSize(a[0].v);
86 else res = 1;
87 return res;
88 }
89 //-----------------------------------------------------------------------------
mgls_aspect(mglGraph * gr,long,mglArg * a,const char * k,const char *)90 int static mgls_aspect(mglGraph *gr, long , mglArg *a, const char *k, const char *)
91 {
92 int res=0;
93 if(!strcmp(k,"nn")) gr->Aspect(a[0].v, a[1].v, 1);
94 else if(!strcmp(k,"nnn")) gr->Aspect(a[0].v, a[1].v, a[2].v);
95 else res = 1;
96 return res;
97 }
98 //-----------------------------------------------------------------------------
mgls_attachlight(mglGraph * gr,long,mglArg * a,const char * k,const char *)99 int static mgls_attachlight(mglGraph *gr, long , mglArg *a, const char *k, const char *)
100 {
101 int res=0;
102 if(!strcmp(k,"n")) gr->AttachLight(a[0].v!=0);
103 else res = 1;
104 return res;
105 }
106 //-----------------------------------------------------------------------------
mgls_axisstl(mglGraph * gr,long,mglArg * a,const char * k,const char *)107 int static mgls_axisstl(mglGraph *gr, long , mglArg *a, const char *k, const char *)
108 {
109 int res=0;
110 if(k[0]==0) gr->SetAxisStl();
111 else if(!strcmp(k,"s")) gr->SetAxisStl(a[0].s.s);
112 else if(!strcmp(k,"ss")) gr->SetAxisStl(a[0].s.s, a[1].s.s);
113 else if(!strcmp(k,"sss")) gr->SetAxisStl(a[0].s.s, a[1].s.s, a[2].s.s);
114 else res = 1;
115 return res;
116 }
117 //-----------------------------------------------------------------------------
mgls_barwidth(mglGraph * gr,long,mglArg * a,const char * k,const char *)118 int static mgls_barwidth(mglGraph *gr, long , mglArg *a, const char *k, const char *)
119 {
120 int res=0;
121 if(!strcmp(k,"n")) gr->SetBarWidth(a[0].v);
122 else res = 1;
123 return res;
124 }
125 //-----------------------------------------------------------------------------
mgls_bbox(mglGraph * gr,long,mglArg * a,const char * k,const char *)126 int static mgls_bbox(mglGraph *gr, long , mglArg *a, const char *k, const char *)
127 {
128 int res=0;
129 if(!strcmp(k,"nn") && a[1].v>=0 && a[0].v>=0)
130 gr->SetBBox(mgl_int(a[0].v), mgl_int(a[1].v));
131 else if(!strcmp(k,"nnnn"))
132 gr->SetBBox(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v), mgl_int(a[3].v));
133 else res = 1;
134 return res;
135 }
136 //-----------------------------------------------------------------------------
mgls_chdir(mglGraph * gr,long,mglArg * a,const char * k,const char *)137 int static mgls_chdir(mglGraph *gr, long , mglArg *a, const char *k, const char *)
138 {
139 int res=0;
140 if(!strcmp(k,"s"))
141 { if(chdir(a[0].s.s)) gr->SetWarn(mglWarnFile,"chdir"); }
142 else res = 1;
143 return res;
144 }
145 //-----------------------------------------------------------------------------
mgls_clearlegend(mglGraph * gr,long,mglArg *,const char * k,const char *)146 int static mgls_clearlegend(mglGraph *gr, long , mglArg *, const char *k, const char *)
147 {
148 int res=0;
149 if(k[0]==0) gr->ClearLegend();
150 else res = 1;
151 return res;
152 }
153 //-----------------------------------------------------------------------------
mgls_clf(mglGraph * gr,long,mglArg * a,const char * k,const char *)154 int static mgls_clf(mglGraph *gr, long , mglArg *a, const char *k, const char *)
155 {
156 int res=0;
157 if(k[0]==0) gr->Clf();
158 else if(!strcmp(k,"s")) gr->Clf(a[0].s.s);
159 else if(!strcmp(k,"nnn")) gr->Clf(a[0].v,a[1].v,a[2].v);
160 else res = 1;
161 return res;
162 }
163 //-----------------------------------------------------------------------------
mgls_columnplot(mglGraph * gr,long,mglArg * a,const char * k,const char *)164 int static mgls_columnplot(mglGraph *gr, long , mglArg *a, const char *k, const char *)
165 {
166 int res=0;
167 if(!strcmp(k,"nn")) gr->ColumnPlot(mgl_int(a[0].v), mgl_int(a[1].v));
168 else if(!strcmp(k,"nnn")) gr->ColumnPlot(mgl_int(a[0].v), mgl_int(a[1].v), a[2].v);
169 else res = 1;
170 return res;
171 }
172 //-----------------------------------------------------------------------------
mgls_crange(mglGraph * gr,long,mglArg * a,const char * k,const char *)173 int static mgls_crange(mglGraph *gr, long , mglArg *a, const char *k, const char *)
174 {
175 int res=0;
176 if(!strcmp(k,"d")) gr->SetRange('c',*(a[0].d));
177 else if(!strcmp(k,"dn")) gr->SetRange('c',*(a[0].d),a[1].v);
178 else if(!strcmp(k,"nn")) gr->SetRange('c', a[0].v, a[1].v);
179 else if(!strcmp(k,"nnn"))
180 {
181 if(a[2].v) gr->AddRange('c', a[0].v, a[1].v);
182 else gr->SetRange('c', a[0].v, a[1].v);
183 }
184 else res = 1;
185 return res;
186 }
187 //-----------------------------------------------------------------------------
mgls_ctick(mglGraph * gr,long n,mglArg * a,const char * k,const char *)188 int static mgls_ctick(mglGraph *gr, long n, mglArg *a, const char *k, const char *)
189 {
190 int res=0;
191 if(!strcmp(k,"s")) gr->SetTickTempl('c',a[0].s.w);
192 else if(!strcmp(k,"n")) gr->SetTicks('c',a[0].v,0,0);
193 else if(!strcmp(k,"ns")) gr->SetTicks('c',a[0].v,0,0,a[1].s.w);
194 else if(!strcmp(k,"ds")) gr->SetTicksVal('c', *(a[0].d), a[1].s.w);
195 else if(!strcmp(k,"dsn")) gr->SetTicksVal('c', *(a[0].d), a[1].s.w, a[2].v);
196 else if(!strncmp(k,"ns",2))
197 {
198 std::wstring s;
199 std::vector<mreal> v;
200 for(long i=0;i<n/2;i++)
201 {
202 if(a[2*i].type==2 && a[2*i+1].type==1)
203 { v.push_back(a[2*i].v); s += std::wstring(a[2*i+1].s.w)+L"\n"; }
204 else break;
205 }
206 gr->SetTicksVal('c',mglDataS(v),s.c_str(),v.size()==1?true:false);
207 } else res = 1;
208 return res;
209 }
210 //-----------------------------------------------------------------------------
mgls_cut(mglGraph * gr,long,mglArg * a,const char * k,const char *)211 int static mgls_cut(mglGraph *gr, long , mglArg *a, const char *k, const char *)
212 {
213 int res=0;
214 if(!strcmp(k,"n")) gr->SetCut(a[0].v != 0);
215 else if(!strcmp(k,"nnnnnn"))
216 gr->SetCutBox(mglPoint(a[0].v,a[1].v,a[2].v), mglPoint(a[3].v,a[4].v,a[5].v));
217 else if(!strcmp(k,"s")) gr->CutOff(a[0].s.s);
218 else res = 1;
219 return res;
220 }
221 //-----------------------------------------------------------------------------
mgls_diffuse(mglGraph * gr,long,mglArg * a,const char * k,const char *)222 int static mgls_diffuse(mglGraph *gr, long , mglArg *a, const char *k, const char *)
223 {
224 int res=0;
225 if(!strcmp(k,"n")) gr->SetDiffuse(a[0].v);
226 else res = 1;
227 return res;
228 }
229 //-----------------------------------------------------------------------------
mgls_drawreg(mglGraph * gr,long,mglArg * a,const char * k,const char *)230 int static mgls_drawreg(mglGraph *gr, long , mglArg *a, const char *k, const char *)
231 {
232 int res=0;
233 if(k[0]==0) gr->SetDrawReg();
234 else if(!strcmp(k,"nnn")) gr->SetDrawReg(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v));
235 else res = 1;
236 return res;
237 }
238 //-----------------------------------------------------------------------------
mgls_facenum(mglGraph * gr,long,mglArg * a,const char * k,const char *)239 int static mgls_facenum(mglGraph *gr, long , mglArg *a, const char *k, const char *)
240 {
241 int res=0;
242 if(!strcmp(k,"n")) gr->SetFaceNum(a[0].v);
243 else res = 1;
244 return res;
245 }
246 //-----------------------------------------------------------------------------
mgls_fog(mglGraph * gr,long,mglArg * a,const char * k,const char *)247 int static mgls_fog(mglGraph *gr, long , mglArg *a, const char *k, const char *)
248 {
249 int res=0;
250 if(!strcmp(k,"n")) gr->Fog(a[0].v);
251 else if(!strcmp(k,"nn")) gr->Fog(a[0].v,a[1].v);
252 else res = 1;
253 return res;
254 }
255 //-----------------------------------------------------------------------------
mgls_font(mglGraph * gr,long,mglArg * a,const char * k,const char *)256 int static mgls_font(mglGraph *gr, long , mglArg *a, const char *k, const char *)
257 {
258 int res=0;
259 if(!strcmp(k,"s")) gr->SetFontDef(a[0].s.s);
260 else if(!strcmp(k,"sn"))
261 { gr->SetFontDef(a[0].s.s); gr->SetFontSize(a[1].v); }
262 else res = 1;
263 return res;
264 }
265 //-----------------------------------------------------------------------------
mgls_gray(mglGraph * gr,long,mglArg * a,const char * k,const char *)266 int static mgls_gray(mglGraph *gr, long , mglArg *a, const char *k, const char *)
267 {
268 int res=0;
269 if(k[0]==0) gr->Gray(true);
270 else if(!strcmp(k,"n")) gr->Gray(a[0].v!=0);
271 else res = 1;
272 return res;
273 }
274 //-----------------------------------------------------------------------------
mgls_gridplot(mglGraph * gr,long,mglArg * a,const char * k,const char *)275 int static mgls_gridplot(mglGraph *gr, long , mglArg *a, const char *k, const char *)
276 {
277 int res=0;
278 if(!strcmp(k,"nnn")) gr->GridPlot(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v));
279 else if(!strcmp(k,"nnnn")) gr->GridPlot(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v), a[3].v);
280 else res = 1;
281 return res;
282 }
283 //-----------------------------------------------------------------------------
mgls_inplot(mglGraph * gr,long,mglArg * a,const char * k,const char *)284 int static mgls_inplot(mglGraph *gr, long , mglArg *a, const char *k, const char *)
285 {
286 int res=0;
287 if(!strcmp(k,"nnnn")) gr->InPlot(a[0].v, a[1].v, a[2].v, a[3].v);
288 else if(!strcmp(k,"nnnnn")) gr->InPlot(a[0].v, a[1].v, a[2].v, a[3].v, a[4].v!=0);
289 else res = 1;
290 return res;
291 }
292 //-----------------------------------------------------------------------------
mgls_legendmarks(mglGraph * gr,long,mglArg * a,const char * k,const char *)293 int static mgls_legendmarks(mglGraph *gr, long , mglArg *a, const char *k, const char *)
294 {
295 int res=0;
296 if(!strcmp(k,"n")) gr->SetLegendMarks(mgl_int(a[0].v));
297 else res = 1;
298 return res;
299 }
300 //-----------------------------------------------------------------------------
mgls_light(mglGraph * gr,long,mglArg * a,const char * k,const char *)301 int static mgls_light(mglGraph *gr, long , mglArg *a, const char *k, const char *)
302 {
303 int res=0;
304 if(k[0]==0) gr->Light(true);
305 else if(!strcmp(k,"n")) gr->Light(a[0].v!=0);
306 else if(!strcmp(k,"nn")) gr->Light(mgl_int(a[0].v),a[1].v!=0);
307 else if(!strcmp(k,"nnnn")) gr->AddLight(mgl_int(a[0].v),mglPoint(a[1].v,a[2].v,a[3].v));
308 else if(!strcmp(k,"nnnns")) gr->AddLight(mgl_int(a[0].v),mglPoint(a[1].v,a[2].v,a[3].v), a[4].s.s[0]);
309 else if(!strcmp(k,"nnnnsn"))gr->AddLight(mgl_int(a[0].v),mglPoint(a[1].v,a[2].v,a[3].v), a[4].s.s[0],a[5].v);
310 else if(!strcmp(k,"nnnnsnn"))
311 gr->AddLight(mgl_int(a[0].v), mglPoint(a[1].v,a[2].v,a[3].v), a[4].s.s[0],a[5].v,a[6].v);
312 else if(!strcmp(k,"nnnnnnn"))
313 gr->AddLight(mgl_int(a[0].v), mglPoint(a[1].v,a[2].v,a[3].v), mglPoint(a[4].v,a[5].v,a[6].v));
314 else if(!strcmp(k,"nnnnnnns"))
315 gr->AddLight(mgl_int(a[0].v), mglPoint(a[1].v,a[2].v,a[3].v), mglPoint(a[4].v,a[5].v,a[6].v), a[7].s.s[0]);
316 else if(!strcmp(k,"nnnnnnnsn"))
317 gr->AddLight(mgl_int(a[0].v), mglPoint(a[1].v,a[2].v,a[3].v), mglPoint(a[4].v,a[5].v,a[6].v), a[7].s.s[0],a[8].v);
318 else if(!strcmp(k,"nnnnnnnsnn"))
319 gr->AddLight(mgl_int(a[0].v), mglPoint(a[1].v,a[2].v,a[3].v), mglPoint(a[4].v,a[5].v,a[6].v), a[7].s.s[0],a[8].v,a[9].v);
320 return res;
321 }
322 //-----------------------------------------------------------------------------
mgls_load(mglGraph * gr,long,mglArg * a,const char * k,const char *)323 int static mgls_load(mglGraph *gr, long , mglArg *a, const char *k, const char *)
324 {
325 int res=0;
326 if(!strcmp(k,"s") && gr->pr) mgl_parser_load(gr->pr, a[0].s.s);
327 else res = 1;
328 return res;
329 }
330 //-----------------------------------------------------------------------------
mgls_loadfont(mglGraph * gr,long,mglArg * a,const char * k,const char *)331 int static mgls_loadfont(mglGraph *gr, long , mglArg *a, const char *k, const char *)
332 {
333 int res=0;
334 if(k[0]==0 || (!strcmp(k,"s") && a[0].s[0]==0)) gr->RestoreFont();
335 else if(!strcmp(k,"s")) gr->LoadFont(a[0].s.s);
336 else res = 1;
337 return res;
338 }
339 //-----------------------------------------------------------------------------
mgls_marksize(mglGraph * gr,long,mglArg * a,const char * k,const char *)340 int static mgls_marksize(mglGraph *gr, long , mglArg *a, const char *k, const char *)
341 {
342 int res=0;
343 if(!strcmp(k,"n")) gr->SetMarkSize(a[0].v);
344 else res = 1;
345 return res;
346 }
347 //-----------------------------------------------------------------------------
mgls_mask(mglGraph * gr,long,mglArg * a,const char * k,const char *)348 int static mgls_mask(mglGraph *gr, long , mglArg *a, const char *k, const char *)
349 {
350 int res=0;
351 if(!strcmp(k,"sn")) gr->SetMask(a[0].s[0],a[1].v);
352 else if(!strcmp(k,"ss")) gr->SetMask(a[0].s[0],a[1].s.s);
353 else if(!strcmp(k,"snn"))
354 { gr->SetMask(a[0].s[0],a[1].v); gr->SetMaskAngle(mgl_int(a[2].v)); }
355 else if(!strcmp(k,"ssn"))
356 { gr->SetMask(a[0].s[0],a[1].s.s);gr->SetMaskAngle(mgl_int(a[2].v)); }
357 else if(!strcmp(k,"n")) gr->SetMaskAngle(mgl_int(a[0].v));
358 else res = 1;
359 return res;
360 }
361 //-----------------------------------------------------------------------------
mgls_meshnum(mglGraph * gr,long,mglArg * a,const char * k,const char *)362 int static mgls_meshnum(mglGraph *gr, long , mglArg *a, const char *k, const char *)
363 {
364 int res=0;
365 if(!strcmp(k,"n")) gr->SetMeshNum(a[0].v);
366 else res = 1;
367 return res;
368 }
369 //-----------------------------------------------------------------------------
mgls_multiplot(mglGraph * gr,long,mglArg * a,const char * k,const char *)370 int static mgls_multiplot(mglGraph *gr, long , mglArg *a, const char *k, const char *)
371 {
372 int res=0;
373 if(!strcmp(k,"nnnnn"))
374 gr->MultiPlot(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v), mgl_int(a[3].v), mgl_int(a[4].v));
375 else if(!strcmp(k,"nnnnns"))
376 gr->MultiPlot(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v), mgl_int(a[3].v), mgl_int(a[4].v), a[5].s.s);
377 else if(!strcmp(k,"nnnnnsnn"))
378 gr->MultiPlot(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v), mgl_int(a[3].v), mgl_int(a[4].v), a[5].s.s, a[6].v,a[7].v);
379 else res = 1;
380 return res;
381 }
382 //-----------------------------------------------------------------------------
mgls_origin(mglGraph * gr,long,mglArg * a,const char * k,const char *)383 int static mgls_origin(mglGraph *gr, long , mglArg *a, const char *k, const char *)
384 {
385 int res=0;
386 if(!strcmp(k,"nn")) gr->SetOrigin(a[0].v,a[1].v,NAN);
387 else if(!strcmp(k,"nnn")) gr->SetOrigin(a[0].v,a[1].v,a[2].v);
388 else res = 1;
389 return res;
390 }
391 //-----------------------------------------------------------------------------
mgls_origintick(mglGraph * gr,long,mglArg * a,const char * k,const char *)392 int static mgls_origintick(mglGraph *gr, long , mglArg *a, const char *k, const char *)
393 {
394 int res=0;
395 if(!strcmp(k,"n")) gr->SetOriginTick(a[0].v);
396 else res = 1;
397 return res;
398 }
399 //-----------------------------------------------------------------------------
mgls_palette(mglGraph * gr,long,mglArg * a,const char * k,const char *)400 int static mgls_palette(mglGraph *gr, long , mglArg *a, const char *k, const char *)
401 {
402 int res=0;
403 if(!strcmp(k,"s")) gr->SetPalette(a[0].s.s);
404 else res = 1;
405 return res;
406 }
407 //-----------------------------------------------------------------------------
mgls_pendelta(mglGraph * gr,long,mglArg * a,const char * k,const char *)408 int static mgls_pendelta(mglGraph *gr, long , mglArg *a, const char *k, const char *)
409 {
410 int res=0;
411 if(!strcmp(k,"n")) gr->SetPenDelta(a[0].v);
412 else res = 1;
413 return res;
414 }
415 //-----------------------------------------------------------------------------
mgls_perspective(mglGraph * gr,long,mglArg * a,const char * k,const char *)416 int static mgls_perspective(mglGraph *gr, long , mglArg *a, const char *k, const char *)
417 {
418 int res=0;
419 if(!strcmp(k,"n")) gr->Perspective(a[0].v);
420 else res = 1;
421 return res;
422 }
423 //-----------------------------------------------------------------------------
mgls_plotid(mglGraph * gr,long,mglArg * a,const char * k,const char *)424 int static mgls_plotid(mglGraph *gr, long , mglArg *a, const char *k, const char *)
425 {
426 int res=0;
427 if(!strcmp(k,"s")) gr->SetPlotId(a[1].s.s);
428 else res = 1;
429 return res;
430 }
431 //-----------------------------------------------------------------------------
mgls_quality(mglGraph * gr,long,mglArg * a,const char * k,const char *)432 int static mgls_quality(mglGraph *gr, long , mglArg *a, const char *k, const char *)
433 {
434 int res=0;
435 if(k[0]==0) gr->SetQuality();
436 else if(!strcmp(k,"n")) gr->SetQuality(mgl_int(a[0].v));
437 else res = 1;
438 return res;
439 }
440 //-----------------------------------------------------------------------------
mgls_ranges(mglGraph * gr,long,mglArg * a,const char * k,const char *)441 int static mgls_ranges(mglGraph *gr, long , mglArg *a, const char *k, const char *)
442 {
443 int res=0;
444 if(!strcmp(k,"nnnn")) gr->SetRanges(a[0].v,a[1].v, a[2].v,a[3].v);
445 else if(!strcmp(k,"nnnnnn"))gr->SetRanges(a[0].v,a[1].v,a[2].v, a[3].v,a[4].v,a[5].v);
446 else if(!strcmp(k,"dd")) gr->SetRanges(*(a[0].d),*(a[1].d));
447 else if(!strcmp(k,"ddd")) gr->SetRanges(*(a[0].d),*(a[1].d), *(a[2].d));
448 else if(!strcmp(k,"dddd")) gr->SetRanges(*(a[0].d),*(a[1].d), *(a[2].d),*(a[3].d));
449 else res = 1;
450 return res;
451 }
452 //-----------------------------------------------------------------------------
mgls_rasterize(mglGraph * gr,long,mglArg *,const char *,const char *)453 int static mgls_rasterize(mglGraph *gr, long , mglArg *, const char *, const char *)
454 {
455 gr->Rasterize(); return 0;
456 }
457 //-----------------------------------------------------------------------------
mgls_reset(mglGraph * gr,long,mglArg *,const char * k,const char *)458 int static mgls_reset(mglGraph *gr, long , mglArg *, const char *k, const char *)
459 {
460 int res=0;
461 if(k[0]==0) gr->DefaultPlotParam();
462 else res = 1;
463 return res;
464 }
465 //-----------------------------------------------------------------------------
mgls_rotate(mglGraph * gr,long,mglArg * a,const char * k,const char *)466 int static mgls_rotate(mglGraph *gr, long , mglArg *a, const char *k, const char *)
467 {
468 int res=0;
469 if(!strcmp(k,"nn")) gr->Rotate(a[0].v, a[1].v, 0);
470 else if(!strcmp(k,"nnn")) gr->Rotate(a[0].v, a[1].v, a[2].v);
471 else if(!strcmp(k,"nnnn")) gr->RotateN(a[0].v, a[1].v, a[2].v, a[3].v);
472 else res = 1;
473 return res;
474 }
475 //-----------------------------------------------------------------------------
mgls_rotatetext(mglGraph * gr,long,mglArg * a,const char * k,const char *)476 int static mgls_rotatetext(mglGraph *gr, long , mglArg *a, const char *k, const char *)
477 {
478 int res=0;
479 if(!strcmp(k,"n")) gr->SetRotatedText(a[0].v!=0);
480 else res = 1;
481 return res;
482 }
483 //-----------------------------------------------------------------------------
mgls_scaletext(mglGraph * gr,long,mglArg * a,const char * k,const char *)484 int static mgls_scaletext(mglGraph *gr, long , mglArg *a, const char *k, const char *)
485 {
486 int res=0;
487 if(!strcmp(k,"n")) gr->SetScaleText(a[0].v!=0);
488 else res = 1;
489 return res;
490 }
491 //-----------------------------------------------------------------------------
mgls_setsize(mglGraph * gr,long,mglArg * a,const char * k,const char *)492 int static mgls_setsize(mglGraph *gr, long , mglArg *a, const char *k, const char *)
493 {
494 int res=0;
495 if(!strcmp(k,"nn") && a[1].v>1 && a[0].v>1)
496 gr->SetSize(mgl_int(a[0].v), mgl_int(a[1].v));
497 else res = 1;
498 return res;
499 }
500 //-----------------------------------------------------------------------------
mgls_setsizescl(mglGraph * gr,long,mglArg * a,const char * k,const char *)501 int static mgls_setsizescl(mglGraph *gr, long , mglArg *a, const char *k, const char *)
502 {
503 int res=0;
504 if(!strcmp(k,"n")) gr->SetSizeScl(a[0].v);
505 else res = 1;
506 return res;
507 }
508 //-----------------------------------------------------------------------------
mgls_texparse(mglGraph * gr,long,mglArg * a,const char * k,const char *)509 int static mgls_texparse(mglGraph *gr, long , mglArg *a, const char *k, const char *)
510 {
511 int res=0;
512 if(!strcmp(k,"n")) gr->SetTeXparse(a[0].v);
513 else res = 1;
514 return res;
515 }
516 //-----------------------------------------------------------------------------
mgls_setup(mglGraph * gr,long,mglArg * a,const char * k,const char *)517 int static mgls_setup(mglGraph *gr, long , mglArg *a, const char *k, const char *)
518 {
519 int res=0;
520 if(!strcmp(k,"nn")) gr->SetFlagAdv(mgl_int(a[0].v), mgl_int(a[1].v));
521 else res = 1;
522 return res;
523 }
524 //-----------------------------------------------------------------------------
mgls_shear(mglGraph * gr,long,mglArg * a,const char * k,const char *)525 int static mgls_shear(mglGraph *gr, long , mglArg *a, const char *k, const char *)
526 {
527 int res=0;
528 if(!strcmp(k,"nn")) gr->Shear(a[0].v, a[1].v);
529 else res = 1;
530 return res;
531 }
532 //-----------------------------------------------------------------------------
mgls_shearplot(mglGraph * gr,long,mglArg * a,const char * k,const char *)533 int static mgls_shearplot(mglGraph *gr, long , mglArg *a, const char *k, const char *)
534 {
535 int res=0;
536 if(!strcmp(k,"nnnn")) gr->ShearPlot(mgl_int(a[0].v), mgl_int(a[1].v), a[2].v, a[3].v);
537 else if(!strcmp(k,"nnnnnn")) gr->ShearPlot(mgl_int(a[0].v), mgl_int(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v);
538 else res = 1;
539 return res;
540 }
541 //-----------------------------------------------------------------------------
mgls_stickplot(mglGraph * gr,long,mglArg * a,const char * k,const char *)542 int static mgls_stickplot(mglGraph *gr, long , mglArg *a, const char *k, const char *)
543 {
544 int res=0;
545 if(!strcmp(k,"nnnn")) gr->StickPlot(mgl_int(a[0].v), mgl_int(a[1].v), a[2].v, a[3].v);
546 else res = 1;
547 return res;
548 }
549 //-----------------------------------------------------------------------------
mgls_subplot(mglGraph * gr,long,mglArg * a,const char * k,const char *)550 int static mgls_subplot(mglGraph *gr, long , mglArg *a, const char *k, const char *)
551 {
552 int res=0;
553 if(!strcmp(k,"nnn")) gr->SubPlot(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v));
554 else if(!strcmp(k,"nnns")) gr->SubPlot(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v), a[3].s.s);
555 else if(!strcmp(k,"nnnsnn")) gr->SubPlot(mgl_int(a[0].v), mgl_int(a[1].v), mgl_int(a[2].v), a[3].s.s, a[4].v,a[5].v);
556 else res = 1;
557 return res;
558 }
559 //-----------------------------------------------------------------------------
mgls_ternary(mglGraph * gr,long,mglArg * a,const char * k,const char *)560 int static mgls_ternary(mglGraph *gr, long , mglArg *a, const char *k, const char *)
561 {
562 int res=0;
563 if(!strcmp(k,"n")) gr->Ternary(int(a[0].v));
564 else res = 1;
565 return res;
566 }
567 //-----------------------------------------------------------------------------
mgls_ticklen(mglGraph * gr,long,mglArg * a,const char * k,const char *)568 int static mgls_ticklen(mglGraph *gr, long , mglArg *a, const char *k, const char *)
569 {
570 int res=0;
571 if(!strcmp(k,"n")) gr->SetTickLen(a[0].v);
572 else if(!strcmp(k,"nn")) gr->SetTickLen(a[0].v, a[1].v);
573 else res = 1;
574 return res;
575 }
576 //-----------------------------------------------------------------------------
mgls_tickshift(mglGraph * gr,long,mglArg * a,const char * k,const char *)577 int static mgls_tickshift(mglGraph *gr, long , mglArg *a, const char *k, const char *)
578 {
579 int res=0;
580 if(!strcmp(k,"n")) gr->SetTickShift(mglPoint(a[0].v));
581 else if(!strcmp(k,"nn")) gr->SetTickShift(mglPoint(a[0].v, a[1].v));
582 else if(!strcmp(k,"nnn")) gr->SetTickShift(mglPoint(a[0].v, a[1].v, a[2].v));
583 else if(!strcmp(k,"nnnn")) gr->SetTickShift(mglPoint(a[0].v, a[1].v, a[2].v, a[3].v));
584 else res = 1;
585 return res;
586 }
587 //-----------------------------------------------------------------------------
mgls_ticktime(mglGraph * gr,long,mglArg * a,const char * k,const char *)588 int static mgls_ticktime(mglGraph *gr, long , mglArg *a, const char *k, const char *)
589 {
590 int res=0;
591 if(!strcmp(k,"s")) gr->SetTicksTime(a[0].s[0]);
592 else if(!strcmp(k,"sn")) gr->SetTicksTime(a[0].s[0],a[1].v);
593 else if(!strcmp(k,"sns")) gr->SetTicksTime(a[0].s[0],a[1].v,a[2].s.s);
594 else res = 1;
595 return res;
596 }
597 //-----------------------------------------------------------------------------
mgls_transptype(mglGraph * gr,long,mglArg * a,const char * k,const char *)598 int static mgls_transptype(mglGraph *gr, long , mglArg *a, const char *k, const char *)
599 {
600 int res=0;
601 if(!strcmp(k,"n")) gr->SetTranspType(a[0].v);
602 else res = 1;
603 return res;
604 }
605 //-----------------------------------------------------------------------------
mgls_tuneticks(mglGraph * gr,long,mglArg * a,const char * k,const char *)606 int static mgls_tuneticks(mglGraph *gr, long , mglArg *a, const char *k, const char *)
607 {
608 int res=0;
609 if(!strcmp(k,"n")) gr->SetTuneTicks(mgl_int(a[0].v));
610 else if(!strcmp(k,"nn")) gr->SetTuneTicks(mgl_int(a[0].v),a[1].v);
611 else res = 1;
612 return res;
613 }
614 //-----------------------------------------------------------------------------
mgls_variant(mglGraph * gr,long,mglArg * a,const char * k,const char *)615 int static mgls_variant(mglGraph *gr, long , mglArg *a, const char *k, const char *)
616 {
617 int res=0;
618 if(!strcmp(k,"n") && gr->pr) mgl_parser_variant(gr->pr, a[0].v);
619 else res = 1;
620 return res;
621 }
622 //-----------------------------------------------------------------------------
mgls_version(mglGraph * gr,long,mglArg * a,const char * k,const char *)623 int static mgls_version(mglGraph *gr, long , mglArg *a, const char *k, const char *)
624 {
625 int res=0;
626 char buf[32]; sprintf(buf,"MathGL version is 2.%g",MGL_VER2);
627 if(k[0]==0) gr->SetWarn(-1,buf);
628 else if(!strcmp(k,"s")) res = mgl_check_version(a[0].s.s)?1:0;
629 else res = 1;
630 return res;
631 }
632 //-----------------------------------------------------------------------------
mgls_view(mglGraph * gr,long,mglArg * a,const char * k,const char *)633 int static mgls_view(mglGraph *gr, long , mglArg *a, const char *k, const char *)
634 {
635 int res=0;
636 if(!strcmp(k,"nn")) gr->View(a[0].v, a[1].v);
637 else if(!strcmp(k,"nnn")) gr->View(a[0].v, a[1].v, a[2].v);
638 else res = 1;
639 return res;
640 }
641 //-----------------------------------------------------------------------------
mgls_write(mglGraph * gr,long,mglArg * a,const char * k,const char *)642 int static mgls_write(mglGraph *gr, long , mglArg *a, const char *k, const char *)
643 {
644 int res=0;
645 if(k[0]==0) gr->WriteFrame("", "MathGL");
646 else if(!strcmp(k,"s")) gr->WriteFrame(a[0].s.s, "MathGL");
647 else res = 1;
648 return res;
649 }
650 //-----------------------------------------------------------------------------
mgls_xrange(mglGraph * gr,long,mglArg * a,const char * k,const char *)651 int static mgls_xrange(mglGraph *gr, long , mglArg *a, const char *k, const char *)
652 {
653 int res=0;
654 if(!strcmp(k,"d")) gr->SetRange('x',*(a[0].d));
655 else if(!strcmp(k,"dn")) gr->SetRange('x',*(a[0].d),a[1].v);
656 else if(!strcmp(k,"nn")) gr->SetRange('x', a[0].v, a[1].v);
657 else if(!strcmp(k,"nnn"))
658 {
659 if(a[2].v) gr->AddRange('x', a[0].v, a[1].v);
660 else gr->SetRange('x', a[0].v, a[1].v);
661 }
662 else res = 1;
663 return res;
664 }
665 //-----------------------------------------------------------------------------
mgls_xtick(mglGraph * gr,long n,mglArg * a,const char * k,const char *)666 int static mgls_xtick(mglGraph *gr, long n, mglArg *a, const char *k, const char *)
667 {
668 int res=0;
669 if(!strcmp(k,"n")) gr->SetTicks('x', a[0].v);
670 // else if(!strcmp(k,"ns")) gr->SetTicks('x', a[0].v, 0, NAN, a[1].s.w);
671 else if(!strcmp(k,"nn")) gr->SetTicks('x', a[0].v, mgl_int(a[1].v));
672 else if(!strcmp(k,"nns")) gr->SetTicks('x', a[0].v, mgl_int(a[1].v), NAN, a[2].s.w);
673 else if(!strcmp(k,"nnn")) gr->SetTicks('x', a[0].v, mgl_int(a[1].v), a[2].v);
674 else if(!strcmp(k,"nnns")) gr->SetTicks('x', a[0].v, mgl_int(a[1].v), a[2].v, a[3].s.w);
675 else if(!strcmp(k,"s")) gr->SetTickTempl('x',a[0].s.w);
676 else if(!strcmp(k,"ds")) gr->SetTicksVal('x', *(a[0].d), a[1].s.w);
677 else if(!strcmp(k,"dsn")) gr->SetTicksVal('x', *(a[0].d), a[1].s.w, a[2].v);
678 else if(!strncmp(k,"ns",2))
679 {
680 std::wstring s;
681 std::vector<mreal> v;
682 for(long i=0;i<n/2;i++)
683 {
684 if(a[2*i].type==2 && a[2*i+1].type==1)
685 { v.push_back(a[2*i].v); s += std::wstring(a[2*i+1].s.w)+L"\n"; }
686 else break;
687 }
688 gr->SetTicksVal('x',mglDataS(v),s.c_str(),v.size()==1?true:false);
689 }
690 else res = 1;
691 return res;
692 }
693 //-----------------------------------------------------------------------------
mgls_yrange(mglGraph * gr,long,mglArg * a,const char * k,const char *)694 int static mgls_yrange(mglGraph *gr, long , mglArg *a, const char *k, const char *)
695 {
696 int res=0;
697 if(!strcmp(k,"d")) gr->SetRange('y',*(a[0].d));
698 else if(!strcmp(k,"dn")) gr->SetRange('y',*(a[0].d),a[1].v);
699 else if(!strcmp(k,"nn")) gr->SetRange('y', a[0].v, a[1].v);
700 else if(!strcmp(k,"nnn"))
701 {
702 if(a[2].v) gr->AddRange('y', a[0].v, a[1].v);
703 else gr->SetRange('y', a[0].v, a[1].v);
704 }
705 else res = 1;
706 return res;
707 }
708 //-----------------------------------------------------------------------------
mgls_ytick(mglGraph * gr,long n,mglArg * a,const char * k,const char *)709 int static mgls_ytick(mglGraph *gr, long n, mglArg *a, const char *k, const char *)
710 {
711 int res=0;
712 if(!strcmp(k,"n")) gr->SetTicks('y', a[0].v);
713 // else if(!strcmp(k,"ns")) gr->SetTicks('y', a[0].v, 0, NAN, a[1].s.w);
714 else if(!strcmp(k,"nn")) gr->SetTicks('y', a[0].v, mgl_int(a[1].v));
715 else if(!strcmp(k,"nns")) gr->SetTicks('y', a[0].v, mgl_int(a[1].v), NAN, a[2].s.w);
716 else if(!strcmp(k,"nnn")) gr->SetTicks('y', a[0].v, mgl_int(a[1].v), a[2].v);
717 else if(!strcmp(k,"nnns")) gr->SetTicks('y', a[0].v, mgl_int(a[1].v), a[2].v, a[3].s.w);
718 else if(!strcmp(k,"s")) gr->SetTickTempl('y',a[0].s.w);
719 else if(!strcmp(k,"ds")) gr->SetTicksVal('y', *(a[0].d), a[1].s.w);
720 else if(!strcmp(k,"dsn")) gr->SetTicksVal('y', *(a[0].d), a[1].s.w, a[2].v);
721 else if(!strncmp(k,"ns",2))
722 {
723 std::wstring s;
724 std::vector<mreal> v;
725 for(long i=0;i<n/2;i++)
726 {
727 if(a[2*i].type==2 && a[2*i+1].type==1)
728 { v.push_back(a[2*i].v); s += std::wstring(a[2*i+1].s.w)+L"\n"; }
729 else break;
730 }
731 gr->SetTicksVal('y',mglDataS(v),s.c_str(),v.size()==1?true:false);
732 }
733 else res = 1;
734 return res;
735 }
736 //-----------------------------------------------------------------------------
mgls_zoom(mglGraph * gr,long,mglArg * a,const char * k,const char *)737 int static mgls_zoom(mglGraph *gr, long , mglArg *a, const char *k, const char *)
738 {
739 int res=0;
740 if(!strcmp(k,"nnnn")) gr->Zoom(a[0].v, a[1].v, a[2].v, a[3].v);
741 else res = 1;
742 return res;
743 }
744 //-----------------------------------------------------------------------------
mgls_zoomaxis(mglGraph * gr,long,mglArg * a,const char * k,const char *)745 int static mgls_zoomaxis(mglGraph *gr, long , mglArg *a, const char *k, const char *)
746 {
747 int res=0;
748 if(!strcmp(k,"nn")) gr->ZoomAxis(mglPoint(a[0].v), mglPoint(a[1].v));
749 else if(!strcmp(k,"nnnn")) gr->ZoomAxis(mglPoint(a[0].v, a[1].v), mglPoint(a[2].v, a[3].v));
750 else if(!strcmp(k,"nnnnnn")) gr->ZoomAxis(mglPoint(a[0].v, a[1].v, a[2].v), mglPoint(a[3].v, a[4].v, a[5].v));
751 else if(!strcmp(k,"nnnnnnnn")) gr->ZoomAxis(mglPoint(a[0].v, a[1].v, a[2].v, a[3].v), mglPoint(a[4].v, a[5].v, a[6].v, a[7].v));
752 else res = 1;
753 return res;
754 }
755 //-----------------------------------------------------------------------------
mgls_zrange(mglGraph * gr,long,mglArg * a,const char * k,const char *)756 int static mgls_zrange(mglGraph *gr, long , mglArg *a, const char *k, const char *)
757 {
758 int res=0;
759 if(!strcmp(k,"d")) gr->SetRange('z',*(a[0].d));
760 else if(!strcmp(k,"dn")) gr->SetRange('z',*(a[0].d),a[1].v);
761 else if(!strcmp(k,"nn")) gr->SetRange('z', a[0].v, a[1].v);
762 else if(!strcmp(k,"nnn"))
763 {
764 if(a[2].v) gr->AddRange('z', a[0].v, a[1].v);
765 else gr->SetRange('z', a[0].v, a[1].v);
766 }
767 else res = 1;
768 return res;
769 }
770 //-----------------------------------------------------------------------------
mgls_ztick(mglGraph * gr,long n,mglArg * a,const char * k,const char *)771 int static mgls_ztick(mglGraph *gr, long n, mglArg *a, const char *k, const char *)
772 {
773 int res=0;
774 if(!strcmp(k,"n")) gr->SetTicks('z', a[0].v);
775 // else if(!strcmp(k,"ns")) gr->SetTicks('z', a[0].v, 0, NAN, a[1].s.w);
776 else if(!strcmp(k,"nn")) gr->SetTicks('z', a[0].v, mgl_int(a[1].v));
777 else if(!strcmp(k,"nns")) gr->SetTicks('z', a[0].v, mgl_int(a[1].v), NAN, a[2].s.w);
778 else if(!strcmp(k,"nnn")) gr->SetTicks('z', a[0].v, mgl_int(a[1].v), a[2].v);
779 else if(!strcmp(k,"nnns")) gr->SetTicks('z', a[0].v, mgl_int(a[1].v), a[2].v, a[3].s.w);
780 else if(!strcmp(k,"s")) gr->SetTickTempl('z',a[0].s.w);
781 else if(!strcmp(k,"ds")) gr->SetTicksVal('z', *(a[0].d), a[1].s.w);
782 else if(!strcmp(k,"dsn")) gr->SetTicksVal('z', *(a[0].d), a[1].s.w, a[2].v);
783 else if(!strncmp(k,"ns",2))
784 {
785 std::wstring s;
786 std::vector<mreal> v;
787 for(long i=0;i<n/2;i++)
788 {
789 if(a[2*i].type==2 && a[2*i+1].type==1)
790 { v.push_back(a[2*i].v); s += std::wstring(a[2*i+1].s.w)+L"\n"; }
791 else break;
792 }
793 gr->SetTicksVal('z',mglDataS(v),s.c_str(),v.size()==1?true:false);
794 }
795 else res = 1;
796 return res;
797 }
798 //-----------------------------------------------------------------------------
799 mglCommand mgls_set_cmd[] = {
800 {"addlegend",_("Add legend entry"),"addlegend 'txt' 'fmt'", mgls_addlegend,15},
801 {"addsymbol",_("Add user-defined symbol"),"addsymbol 'id' Xdat Ydat", mgls_addsymbol,15},
802 {"adjust",_("Adjust ticks for best view"),"adjust ['dir']", mgls_adjust ,14},
803 {"alpha",_("Switch on/off transparency"),"alpha [val]", mgls_alpha ,2},
804 {"alphadef",_("Set default transparency"),"alphadef val", mgls_alphadef ,2},
805 {"ambient",_("Set ambient light brightness"),"ambient val", mgls_ambient ,2},
806 {"arrowsize",_("Set size of arrows"),"arrowsize val", mgls_arrowsize ,2},
807 {"aspect",_("Set aspect ration"),"aspect valx valy [valz]", mgls_aspect ,5},
808 {"attachlight",_("Attach light settings to inplot"),"attachlight val", mgls_attachlight ,2},
809 {"axisstl",_("Set axis and tick style"),"axisstl 'stl' ['tick' 'sub']", mgls_axisstl ,14},
810 {"barwidth",_("Set default bars width"),"barwidth val", mgls_barwidth ,2},
811 {"bbox",_("Set bounding box for 2d export"),"bbox x1 y1 [x2 y2]", mgls_bbox ,2},
812 {"chdir",_("Change current directory"),"chdir 'path'", mgls_chdir ,2},
813 {"clearlegend",_("Clear legend entries"),"clearlegend", mgls_clearlegend ,15},
814 {"clf",_("Clear picture"),"clf|'col'|r g b", mgls_clf ,12},
815 {"columnplot",_("Set position of plot inside cell of column"), "columnplot num ind [d]", mgls_columnplot ,5},
816 {"crange",_("Set color range"),"crange Dat [add]|c1 c2 [add]", mgls_crange ,14},
817 {"ctick",_("Set ticks for colorbar"),"ctick 'tmpl'|dc ['factor']", mgls_ctick ,14},
818 {"cut",_("Setup plot points cutting"),"cut val|x1 y1 z1 x2 y2 z2|'cond'", mgls_cut ,2},
819 {"diffuse",_("Set diffusive light brightness"),"diffuse val", mgls_diffuse ,2},
820 {"drawreg",_("Set draw region for quality&4"),"drawreg|nx ny m", mgls_drawreg ,2},
821 {"facenum",_("Set number of visible faces"),"facenum val", mgls_facenum ,2},
822 {"fog",_("Switch on/off fog"),"fog val [dz]", mgls_fog ,2},
823 {"font",_("Setup font"),"font 'fmt' [size]", mgls_font ,15},
824 {"gray",_("Switch on/off gray-scale mode"),"gray [val]", mgls_gray ,2},
825 {"gridplot",_("Set position of plot inside cell of matrix"), "gridplot nx ny ind [d]", mgls_gridplot ,5},
826 {"inplot",_("Set arbitrary position of plot in picture"),"x1 x2 y1 y2 [rel]", mgls_inplot ,5},
827 {"legendmarks",_("Set number of marks in the legend"),"legendmarks val", mgls_legendmarks ,15},
828 {"light",_("Setup light"),"light [val]|num val|num xpos ypos zpos ['fmt' br ap]|num xpos ypos zpos px py pz ['fmt' br ap]", mgls_light ,2},
829 {"load",_("Load commands from external DLL"),"load 'fname'", mgls_load, 6},
830 {"loadfont",_("Load fontfaces"),"loadfont ['face']", mgls_loadfont ,15},
831 {"marksize",_("Set size of markers"),"marksize val", mgls_marksize ,2},
832 {"mask",_("Set brush for given mask id"),"mask 'id' 'val'|'id' val|angle", mgls_mask ,2},
833 {"meshnum",_("Set number of lines in mesh/fall/vect and so on"),"meshnum val", mgls_meshnum ,2},
834 {"multiplot",_("Set position of plot block in matrix"),"multiplot m n pos dx dy 'style' [sx sy]", mgls_multiplot ,5},
835 {"origin",_("Set axis origin"),"origin x0 y0 [z0]", mgls_origin ,14},
836 {"origintick",_("Set tick labels drawing at origin"),"origintick val", mgls_origintick ,14},
837 {"palette",_("Set palette for 1D plots"),"palette 'colors'", mgls_palette ,2},
838 {"pendelta",_("Set size of semi-transparent area around line"),"pendelta val", mgls_pendelta ,2},
839 {"perspective",_("Set perspective"),"perspective val", mgls_perspective ,2},
840 {"plotid",_("Set default filename"),"plotid 'name'", mgls_plotid ,2},
841 {"quality",_("Set plot quality"),"quality [val]", mgls_quality ,2},
842 {"ranges",_("Set axis ranges"),"ranges x1 x2 y1 y2 [z1 z2]|Xdat Ydat [Zdat Cdat]", mgls_ranges ,14},
843 {"rasterize",_("Rasterize plot and save to background"),"rasterize", mgls_rasterize ,12},
844 {"reset",_("Reset settings and clear picture"),"reset", mgls_reset ,12},
845 {"rotate",_("Rotate plot"),"rotate tetz tetx [tety]|tet x y z", mgls_rotate ,5},
846 {"rotatetext",_("Set to auto rotate text or not"),"rotatetext val", mgls_rotatetext ,15},
847 {"scaletext",_("Set scale text in relative subplots too"),"scaletext val", mgls_scaletext ,15},
848 {"setsize",_("Set picture size"),"setsize width height", mgls_setsize ,2},
849 {"setsizescl",_("Set scaling factor for further setsize"),"setsizescl val", mgls_setsizescl ,2},
850 {"setup",_("Set bit-flags (for advanced users only)"),"setup val flag", mgls_setup ,2},
851 {"shear",_("Shear plot"),"shear valx valy", mgls_shear ,5},
852 {"shearplot",_("Set position of plot inside cell of sheared stick"), "shearplot num ind sx sy [xd yd]", mgls_shearplot ,5},
853 {"stickplot",_("Set position of plot inside cell of rotated stick"), "stickplot num ind tet phi", mgls_stickplot ,5},
854 {"subplot",_("Set position of plot as cell of matrix"),"subplot m n pos ['style' dx dy]", mgls_subplot ,5},
855 {"ternary",_("Switch on/off to use ternary axis"),"ternary val", mgls_ternary ,14},
856 {"texparse",_("Switch on/off TeX parsing at text output"), "texparse val", mgls_texparse, 2},
857 {"ticklen",_("Set tick length"),"ticklen val [stt]", mgls_ticklen ,14},
858 {"tickshift",_("Set additional tick and axis labels shift"),"tickshift dx [dy dz dc]", mgls_tickshift ,14},
859 {"ticktime",_("Set ticks in time format"),"ticktime 'dir' [dv 'tmpl']", mgls_ticktime ,14},
860 {"transptype",_("Set type transparency"),"transptype val", mgls_transptype ,2},
861 {"tuneticks",_("Set ticks tuning"),"tuneticks val [pos]", mgls_tuneticks ,14},
862 {"variant",_("Select variant of plot style(s)"),"variant var", mgls_variant, 6},
863 {"version",_("Print MathGL version or check if it is valid"),"version ['ver']", mgls_version, 2},
864 {"view",_("Change view angles - use 'rotate' for plot rotation"),"view tetz tetx [tety]", mgls_view ,5},
865 {"write",_("Write current image to graphical file"),"write ['fname']", mgls_write ,2},
866 {"xrange",_("Set range for x-axis"),"xrange Dat [add]|x1 x2 [add]", mgls_xrange ,14},
867 {"xtick",_("Set ticks for x-axis"),"xtick dx sx ['factor']|dx sx tx ['factor']|'tmpl'|Xdat 'lbl' [add]|v1 'lbl1' ...", mgls_xtick,14},
868 {"yrange",_("Set range for y-axis"),"yrange Dat [add]|y1 y2 [add]", mgls_yrange,14},
869 {"ytick",_("Set ticks for y-axis"),"ytick dy sy ['factor']|dy sy ty ['factor']|'tmpl'|Ydat 'lbl' [add]|v1 'lbl1' ...", mgls_ytick,14},
870 {"zoom",_("Zoom plot region"),"zoom x1 x2 y1 y2", mgls_zoom,5},
871 {"zoomaxis",_("Zoom axis range"),"zoomaxis x1 x2|x1 y1 x2 y2|x1 y1 z1 x2 y2 z2|x1 y1 z1 c1 x2 y2 z2 c2", mgls_zoomaxis,14},
872 {"zrange",_("Set range for z-axis"),"yrange Dat [add]|z1 z2 [add]", mgls_zrange ,14},
873 {"ztick",_("Set ticks for z-axis"),"ztick dz sz ['factor']|dz sz tz ['factor']|'tmpl'|Zdat 'lbl' [add]|v1 'lbl1' ...", mgls_ztick,14},
874 {"","","",NULL,0}};
875 //-----------------------------------------------------------------------------
876