1 /***************************************************************************
2  * base.cpp is part of Math gric 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 #include "mgl2/font.h"
21 #include "mgl2/base_cf.h"
22 #include "mgl2/base.h"
23 //-----------------------------------------------------------------------------
24 //
25 //		C interfaces
26 //
27 //-----------------------------------------------------------------------------
28 bool mglPrintWarn = true;
mgl_suppress_warn(int on)29 void MGL_EXPORT mgl_suppress_warn(int on)	{	mglPrintWarn = !on;	}
mgl_suppress_warn_(int * on)30 void MGL_EXPORT mgl_suppress_warn_(int *on)	{	mgl_suppress_warn(*on);	}
mgl_set_quality(HMGL gr,int qual)31 void MGL_EXPORT mgl_set_quality(HMGL gr, int qual)	{	gr->SetQuality(qual);	}
mgl_set_quality_(uintptr_t * gr,int * qual)32 void MGL_EXPORT mgl_set_quality_(uintptr_t *gr, int *qual)	{	_GR_->SetQuality(*qual);	}
mgl_get_quality(HMGL gr)33 int MGL_EXPORT_PURE mgl_get_quality(HMGL gr)	{	return gr->GetQuality();	}
mgl_get_quality_(uintptr_t * gr)34 int MGL_EXPORT_PURE mgl_get_quality_(uintptr_t *gr)	{	return _GR_->GetQuality();	}
mgl_is_frames(HMGL gr)35 int MGL_EXPORT_PURE mgl_is_frames(HMGL gr)
36 {	return gr->get(MGL_VECT_FRAME) && !(gr->GetQuality()&MGL_DRAW_LMEM);	}
mgl_set_draw_reg(HMGL gr,long nx,long ny,long m)37 void MGL_EXPORT mgl_set_draw_reg(HMGL gr, long nx, long ny, long m)	{	gr->SetDrawReg(nx,ny,m);	}
mgl_set_draw_reg_(uintptr_t * gr,int * nx,int * ny,int * m)38 void MGL_EXPORT mgl_set_draw_reg_(uintptr_t *gr, int *nx, int *ny, int *m)	{	_GR_->SetDrawReg(*nx,*ny,*m);	}
39 //-----------------------------------------------------------------------------
mgl_get_flag(HMGL gr,uint32_t flag)40 int MGL_EXPORT_PURE mgl_get_flag(HMGL gr, uint32_t flag)	{	return gr->get(flag);	}
mgl_get_flag_(uintptr_t * gr,unsigned long * flag)41 int MGL_EXPORT_PURE mgl_get_flag_(uintptr_t *gr, unsigned long *flag)	{	return _GR_->get(*flag);	}
mgl_set_flag(HMGL gr,int val,uint32_t flag)42 void MGL_EXPORT mgl_set_flag(HMGL gr, int val, uint32_t flag)		{	gr->set(val,flag);	}
mgl_set_flag_(uintptr_t * gr,int * val,unsigned long * flag)43 void MGL_EXPORT mgl_set_flag_(uintptr_t *gr, int *val, unsigned long *flag)	{	_GR_->set(*val,*flag);	}
44 //-----------------------------------------------------------------------------
mgl_set_color(char id,double r,double g,double b)45 void MGL_EXPORT mgl_set_color(char id, double r, double g, double b)
46 {
47 	for(long i=0;mglColorIds[i].id;i++)
48 		if(mglColorIds[i].id==id)	mglColorIds[i].col = mglColor(r,g,b);
49 }
mgl_set_color_(char * id,mreal * r,mreal * g,mreal * b,int)50 void MGL_EXPORT mgl_set_color_(char *id, mreal *r, mreal *g, mreal *b, int)	{	mgl_set_color(*id,*r,*g,*b);	}
51 //-----------------------------------------------------------------------------
mgl_set_def_sch(HMGL gr,const char * sch)52 void MGL_EXPORT mgl_set_def_sch(HMGL gr, const char *sch)	{	gr->SetDefScheme(sch);	}
mgl_set_def_sch_(uintptr_t * gr,const char * sch,int l)53 void MGL_EXPORT mgl_set_def_sch_(uintptr_t *gr, const char *sch,int l)
54 {	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
55 	mgl_set_def_sch(_GR_, s);	delete []s;	}
56 //-----------------------------------------------------------------------------
mgl_set_plotid(HMGL gr,const char * id)57 void MGL_EXPORT mgl_set_plotid(HMGL gr, const char *id)	{	gr->PlotId = id;	}
mgl_set_plotid_(uintptr_t * gr,const char * id,int l)58 void MGL_EXPORT mgl_set_plotid_(uintptr_t *gr, const char *id,int l)
59 {	char *s=new char[l+1];	memcpy(s,id,l);	s[l]=0;
60 	_GR_->PlotId = s;	delete []s;	}
mgl_get_plotid(HMGL gr)61 MGL_EXPORT_PURE const char *mgl_get_plotid(HMGL gr)	{	return gr->PlotId.c_str();	}
mgl_get_plotid_(uintptr_t * gr,char * out,int len)62 int MGL_EXPORT mgl_get_plotid_(uintptr_t *gr, char *out, int len)
63 {
64 	const char *res = mgl_get_plotid(_GR_);
65 	if(out)	mgl_strncpy(out,res,len);
66 	return strlen(res);
67 }
68 //-----------------------------------------------------------------------------
mgl_get_mess(HMGL gr)69 MGL_EXPORT_PURE const char *mgl_get_mess(HMGL gr)	{	return gr->Mess.c_str();	}
mgl_get_mess_(uintptr_t * gr,char * out,int len)70 int MGL_EXPORT mgl_get_mess_(uintptr_t *gr, char *out, int len)
71 {
72 	const char *res = mgl_get_mess(_GR_);
73 	if(out)	mgl_strncpy(out,res,len);
74 	return strlen(res);
75 }
mgl_get_warn(HMGL gr)76 int MGL_EXPORT_PURE mgl_get_warn(HMGL gr)	{	return gr->GetWarn();	}
mgl_set_warn(HMGL gr,int code,const char * txt)77 void MGL_EXPORT mgl_set_warn(HMGL gr, int code, const char *txt)
78 {	gr->SetWarn(code,txt);	}
79 extern bool mglPrintWarn;
80 extern MGL_EXPORT std::string *mglGlobalMess;	///< Buffer for receiving global messages
mgl_set_global_warn(const char * txt)81 void MGL_EXPORT mgl_set_global_warn(const char *txt)
82 {
83 	if(txt && *txt)
84 	{
85 		*mglGlobalMess += txt;	*mglGlobalMess += '\n';
86 		if(mglPrintWarn)	fprintf(stderr,_("Global message - %s\n"),txt);
87 	}
88 }
mgl_set_global_warn_(const char * txt,int l)89 void MGL_EXPORT mgl_set_global_warn_(const char *txt, int l)
90 {	char *s=new char[l+1];	memcpy(s,txt,l);	s[l]=0;	mgl_set_global_warn(s);	delete []s;	}
mgl_clear_global_warn()91 void MGL_EXPORT mgl_clear_global_warn()
92 {	*mglGlobalMess = "";	}
mgl_clear_global_warn_()93 void MGL_EXPORT mgl_clear_global_warn_()
94 {	mgl_clear_global_warn();	}
mgl_get_global_warn()95 MGL_EXPORT_PURE const char *mgl_get_global_warn()
96 {	return mglGlobalMess->empty()?"":mglGlobalMess->c_str();	}
mgl_get_global_warn_(char * out,int len)97 int MGL_EXPORT mgl_get_global_warn_(char *out, int len)
98 {
99 	const char *res = mgl_get_global_warn();
100 	if(out)	mgl_strncpy(out,res,len);
101 	return strlen(res);
102 }
103 //-----------------------------------------------------------------------------
mgl_set_origin(HMGL gr,double x0,double y0,double z0)104 void MGL_EXPORT mgl_set_origin(HMGL gr, double x0, double y0, double z0)
105 {	gr->SetOrigin(x0,y0,z0);	}
mgl_set_palette(HMGL gr,const char * colors)106 void MGL_EXPORT mgl_set_palette(HMGL gr, const char *colors)
107 {	gr->SetPalette(colors);	}
mgl_set_meshnum(HMGL gr,int num)108 void MGL_EXPORT mgl_set_meshnum(HMGL gr, int num)	{	gr->SetMeshNum(num);	}
mgl_set_facenum(HMGL gr,int num)109 void MGL_EXPORT mgl_set_facenum(HMGL gr, int num)	{	gr->FaceNum=num;		}
mgl_set_alpha_default(HMGL gr,double alpha)110 void MGL_EXPORT mgl_set_alpha_default(HMGL gr, double alpha)	{	gr->SetAlphaDef(alpha);	}
mgl_set_light_dif(HMGL gr,int enable)111 void MGL_EXPORT mgl_set_light_dif(HMGL gr, int enable)		{	gr->SetDifLight(enable);	}
mgl_clear_unused(HMGL gr)112 void MGL_EXPORT mgl_clear_unused(HMGL gr)	{	gr->ClearUnused();	}
113 //-----------------------------------------------------------------------------
mgl_set_rdc_acc(HMGL gr,int reduce)114 void MGL_EXPORT mgl_set_rdc_acc(HMGL gr, int reduce)	{	gr->SetReduceAcc(reduce);	}
mgl_highlight(HMGL gr,int id)115 void MGL_EXPORT mgl_highlight(HMGL gr, int id)			{	gr->Highlight(id);	}
mgl_set_cut(HMGL gr,int cut)116 void MGL_EXPORT mgl_set_cut(HMGL gr, int cut)	{	gr->SetCut(cut);	}
mgl_set_cut_box(HMGL gr,double x1,double y1,double z1,double x2,double y2,double z2)117 void MGL_EXPORT mgl_set_cut_box(HMGL gr, double x1,double y1,double z1,double x2,double y2,double z2)
118 {	gr->SetCutBox(x1,y1,z1,x2,y2,z2);	}
mgl_set_cutoff(HMGL gr,const char * EqC)119 void MGL_EXPORT mgl_set_cutoff(HMGL gr, const char *EqC)	{	gr->CutOff(EqC);	}
120 //-----------------------------------------------------------------------------
mgl_set_ternary(HMGL gr,int enable)121 void MGL_EXPORT mgl_set_ternary(HMGL gr, int enable)			{	gr->Ternary(enable);	}
mgl_set_range_val(HMGL gr,char dir,double v1,double v2)122 void MGL_EXPORT mgl_set_range_val(HMGL gr, char dir, double v1,double v2)
123 {
124 	if(dir=='c' || dir=='a')	gr->CRange(v1,v2);
125 	else if(dir=='x')	gr->XRange(v1,v2);
126 	else if(dir=='y')	gr->YRange(v1,v2);
127 	else if(dir=='z')	gr->ZRange(v1,v2);
128 }
mgl_add_range_val(HMGL gr,char dir,double v1,double v2)129 void MGL_EXPORT mgl_add_range_val(HMGL gr, char dir, double v1,double v2)
130 {
131 	if(dir=='c' || dir=='a')	gr->CRange(v1,v2,true);
132 	else if(dir=='x')	gr->XRange(v1,v2,true);
133 	else if(dir=='y')	gr->YRange(v1,v2,true);
134 	else if(dir=='z')	gr->ZRange(v1,v2,true);
135 }
mgl_set_range_dat(HMGL gr,char dir,HCDT a,int add)136 void MGL_EXPORT mgl_set_range_dat(HMGL gr, char dir, HCDT a, int add)
137 {
138 	if(dir=='c' || dir=='a')	gr->CRange(a,add);
139 	else if(dir=='x')	gr->XRange(a,add);
140 	else if(dir=='y')	gr->YRange(a,add);
141 	else if(dir=='z')	gr->ZRange(a,add);
142 }
mgl_set_ranges(HMGL gr,double x1,double x2,double y1,double y2,double z1,double z2)143 void MGL_EXPORT mgl_set_ranges(HMGL gr, double x1, double x2, double y1, double y2, double z1, double z2)
144 {	gr->SetRanges(x1,x2,y1,y2,z1,z2);	}
mgl_set_auto_ranges(HMGL gr,double x1,double x2,double y1,double y2,double z1,double z2,double c1,double c2)145 void MGL_EXPORT mgl_set_auto_ranges(HMGL gr, double x1, double x2, double y1, double y2, double z1, double z2, double c1, double c2)
146 {	gr->SetAutoRanges(x1,x2,y1,y2,z1,z2,c1,c2);	}
mgl_set_func(HMGL gr,const char * EqX,const char * EqY,const char * EqZ,const char * EqA)147 void MGL_EXPORT mgl_set_func(HMGL gr, const char *EqX,const char *EqY,const char *EqZ,const char *EqA)
148 {	gr->SetFunc(EqX,EqY,EqZ,EqA);	}
mgl_set_coor(HMGL gr,int how)149 void MGL_EXPORT mgl_set_coor(HMGL gr, int how)	{	gr->SetCoor(how);	}
150 //-----------------------------------------------------------------------------
mgl_set_bar_width(HMGL gr,double width)151 void MGL_EXPORT mgl_set_bar_width(HMGL gr, double width)	{	gr->SetBarWidth(width);	}
152 //-----------------------------------------------------------------------------
153 //
154 //		Fortran interfaces
155 //
156 //-----------------------------------------------------------------------------
mgl_set_rdc_acc_(uintptr_t * gr,int * reduce)157 void MGL_EXPORT mgl_set_rdc_acc_(uintptr_t *gr, int *reduce)
158 {	_GR_->SetReduceAcc(*reduce);	}
mgl_highlight_(uintptr_t * gr,int * id)159 void MGL_EXPORT mgl_highlight_(uintptr_t *gr, int *id)	{	_GR_->Highlight(*id);	}
mgl_set_origin_(uintptr_t * gr,mreal * x0,mreal * y0,mreal * z0)160 void MGL_EXPORT mgl_set_origin_(uintptr_t *gr, mreal *x0, mreal *y0, mreal *z0)
161 {	_GR_->SetOrigin(*x0,*y0,*z0);	}
mgl_get_warn_(uintptr_t * gr)162 int MGL_EXPORT_PURE mgl_get_warn_(uintptr_t *gr)	{	return _GR_->GetWarn();	}
mgl_set_warn_(uintptr_t * gr,int * code,const char * txt,int l)163 void MGL_EXPORT mgl_set_warn_(uintptr_t *gr, int *code, const char *txt, int l)
164 {	char *s=new char[l+1];	memcpy(s,txt,l);	s[l]=0;
165 	_GR_->SetWarn(*code, s);	delete []s;	}
mgl_set_palette_(uintptr_t * gr,const char * colors,int l)166 void MGL_EXPORT mgl_set_palette_(uintptr_t *gr, const char *colors, int l)
167 {	char *s=new char[l+1];	memcpy(s,colors,l);	s[l]=0;
168 	_GR_->SetPalette(s);	delete []s;	}
mgl_set_meshnum_(uintptr_t * gr,int * num)169 void MGL_EXPORT mgl_set_meshnum_(uintptr_t *gr, int *num)	{	_GR_->SetMeshNum(*num);	}
mgl_set_facenum_(uintptr_t * gr,int * num)170 void MGL_EXPORT mgl_set_facenum_(uintptr_t *gr, int *num)	{	_GR_->FaceNum=*num;		}
mgl_set_alpha_default_(uintptr_t * gr,mreal * alpha)171 void MGL_EXPORT mgl_set_alpha_default_(uintptr_t *gr, mreal *alpha)	{	_GR_->SetAlphaDef(*alpha);	}
mgl_set_light_dif_(uintptr_t * gr,int * enable)172 void MGL_EXPORT mgl_set_light_dif_(uintptr_t *gr, int *enable)			{	_GR_->SetDifLight(*enable);	}
mgl_clear_unused_(uintptr_t * gr)173 void MGL_EXPORT mgl_clear_unused_(uintptr_t *gr)	{	_GR_->ClearUnused();	}
174 //-----------------------------------------------------------------------------
mgl_set_cut_box_(uintptr_t * gr,mreal * x1,mreal * y1,mreal * z1,mreal * x2,mreal * y2,mreal * z2)175 void MGL_EXPORT mgl_set_cut_box_(uintptr_t *gr, mreal *x1, mreal *y1, mreal *z1, mreal *x2, mreal *y2, mreal *z2)
176 {	_GR_->SetCutBox(*x1,*y1,*z1,*x2,*y2,*z2);	}
mgl_set_cut_(uintptr_t * gr,int * cut)177 void MGL_EXPORT mgl_set_cut_(uintptr_t *gr, int *cut)	{	_GR_->SetCut(*cut);	}
mgl_set_cutoff_(uintptr_t * gr,const char * EqC,int l)178 void MGL_EXPORT mgl_set_cutoff_(uintptr_t *gr, const char *EqC, int l)
179 {	char *s=new char[l+1];	memcpy(s,EqC,l);	s[l]=0;
180 	_GR_->CutOff(s);	delete []s;	}
181 //-----------------------------------------------------------------------------
mgl_set_ternary_(uintptr_t * gr,int * enable)182 void MGL_EXPORT mgl_set_ternary_(uintptr_t *gr, int *enable)	{	_GR_->Ternary(*enable);	}
mgl_set_range_val_(uintptr_t * gr,const char * dir,mreal * v1,mreal * v2,int)183 void MGL_EXPORT mgl_set_range_val_(uintptr_t *gr, const char *dir, mreal *v1, mreal *v2,int)
184 {	mgl_set_range_val(_GR_,*dir,*v1,*v2);	}
mgl_add_range_val_(uintptr_t * gr,const char * dir,mreal * v1,mreal * v2,int)185 void MGL_EXPORT mgl_add_range_val_(uintptr_t *gr, const char *dir, mreal *v1, mreal *v2,int)
186 {	mgl_add_range_val(_GR_,*dir,*v1,*v2);	}
mgl_set_range_dat_(uintptr_t * gr,const char * dir,uintptr_t * a,int * add,int)187 void MGL_EXPORT mgl_set_range_dat_(uintptr_t *gr, const char *dir, uintptr_t *a, int *add,int)
188 {	mgl_set_range_dat(_GR_,*dir,_DA_(a),*add);	}
mgl_set_ranges_(uintptr_t * gr,mreal * x1,mreal * x2,mreal * y1,mreal * y2,mreal * z1,mreal * z2)189 void MGL_EXPORT mgl_set_ranges_(uintptr_t *gr, mreal *x1, mreal *x2, mreal *y1, mreal *y2, mreal *z1, mreal *z2)
190 {	_GR_->SetRanges(*x1,*x2,*y1,*y2,*z1,*z2);	}
mgl_set_auto_ranges_(uintptr_t * gr,mreal * x1,mreal * x2,mreal * y1,mreal * y2,mreal * z1,mreal * z2,mreal * c1,mreal * c2)191 void MGL_EXPORT mgl_set_auto_ranges_(uintptr_t *gr, mreal *x1, mreal *x2, mreal *y1, mreal *y2, mreal *z1, mreal *z2, mreal *c1, mreal *c2)
192 {	_GR_->SetAutoRanges(*x1,*x2,*y1,*y2,*z1,*z2,*c1,*c2);	}
mgl_set_func_(uintptr_t * gr,const char * EqX,const char * EqY,const char * EqZ,const char * EqA,int lx,int ly,int lz,int la)193 void MGL_EXPORT mgl_set_func_(uintptr_t *gr, const char *EqX,const char *EqY,const char *EqZ,const char *EqA,int lx,int ly,int lz,int la)
194 {
195 	char *sx=new char[lx+1];	memcpy(sx,EqX,lx);	sx[lx]=0;
196 	char *sy=new char[ly+1];	memcpy(sy,EqY,ly);	sy[ly]=0;
197 	char *sz=new char[lz+1];	memcpy(sz,EqZ,lz);	sz[lz]=0;
198 	char *sa=new char[la+1];	memcpy(sa,EqA,la);	sa[la]=0;
199 	_GR_->SetFunc(sx,sy,sz,sa);
200 	delete []sx;	delete []sy;	delete []sz;	delete []sa;
201 }
mgl_set_coor_(uintptr_t * gr,int * how)202 void MGL_EXPORT mgl_set_coor_(uintptr_t *gr, int *how)
203 {	_GR_->SetCoor(*how);	}
204 //-----------------------------------------------------------------------------
mgl_set_tick_rotate(HMGL gr,int enable)205 void MGL_EXPORT mgl_set_tick_rotate(HMGL gr, int enable){	gr->SetTickRotate(enable);	}
mgl_set_tick_skip(HMGL gr,int enable)206 void MGL_EXPORT mgl_set_tick_skip(HMGL gr, int enable)	{	gr->SetTickSkip(enable);	}
mgl_set_tick_rotate_(uintptr_t * gr,int * enable)207 void MGL_EXPORT mgl_set_tick_rotate_(uintptr_t *gr,int *enable){	_GR_->SetTickRotate(*enable);	}
mgl_set_tick_skip_(uintptr_t * gr,int * enable)208 void MGL_EXPORT mgl_set_tick_skip_(uintptr_t *gr, int *enable)	{	_GR_->SetTickSkip(*enable);	}
209 //-----------------------------------------------------------------------------
mgl_set_rotated_text(HMGL gr,int enable)210 void MGL_EXPORT mgl_set_rotated_text(HMGL gr, int enable)	{	gr->SetRotatedText(enable);	}
mgl_set_scale_text(HMGL gr,int enable)211 void MGL_EXPORT mgl_set_scale_text(HMGL gr, int enable)		{	gr->set(!enable, MGL_NO_SCALE_REL);	}
mgl_set_mark_size(HMGL gr,double size)212 void MGL_EXPORT mgl_set_mark_size(HMGL gr, double size)		{	gr->SetMarkSize(size);	}
mgl_set_arrow_size(HMGL gr,double size)213 void MGL_EXPORT mgl_set_arrow_size(HMGL gr, double size)	{	gr->SetArrowSize(size);	}
mgl_set_font_size(HMGL gr,double size)214 void MGL_EXPORT mgl_set_font_size(HMGL gr, double size)		{	gr->SetFontSize(size);	}
mgl_set_font_hscale(HMGL gr,double scale)215 void MGL_EXPORT mgl_set_font_hscale(HMGL gr, double scale)	{	gr->SetFontHscale(scale);	}
mgl_set_font_def(HMGL gr,const char * fnt)216 void MGL_EXPORT mgl_set_font_def(HMGL gr, const char *fnt)	{	gr->SetFontDef(fnt);	}
mgl_load_font(HMGL gr,const char * name,const char * path)217 void MGL_EXPORT mgl_load_font(HMGL gr, const char *name, const char *path)
218 {	gr->LoadFont(name,path);	}
mgl_copy_font(HMGL gr,HMGL gr_from)219 void MGL_EXPORT mgl_copy_font(HMGL gr, HMGL gr_from)	{	gr->CopyFont(gr_from);	}
mgl_restore_font(HMGL gr)220 void MGL_EXPORT mgl_restore_font(HMGL gr)	{	gr->RestoreFont();	}
mgl_define_symbol(HMGL gr,char id,HCDT x,HCDT y)221 void MGL_EXPORT mgl_define_symbol(HMGL gr, char id, HCDT x, HCDT y)	{	gr->DefineGlyph(x,y,id);	}
222 //-----------------------------------------------------------------------------
mgl_set_bar_width_(uintptr_t * gr,mreal * width)223 void MGL_EXPORT mgl_set_bar_width_(uintptr_t *gr, mreal *width)	{	_GR_->SetBarWidth(*width);	}
mgl_set_rotated_text_(uintptr_t * gr,int * enable)224 void MGL_EXPORT mgl_set_rotated_text_(uintptr_t *gr, int *enable)	{	_GR_->SetRotatedText(*enable);	}
mgl_set_scale_text_(uintptr_t * gr,int * enable)225 void MGL_EXPORT mgl_set_scale_text_(uintptr_t *gr, int *enable)	{	mgl_set_scale_text(_GR_,*enable);	}
mgl_set_mark_size_(uintptr_t * gr,mreal * size)226 void MGL_EXPORT mgl_set_mark_size_(uintptr_t *gr, mreal *size)		{	_GR_->SetMarkSize(*size);	}
mgl_set_arrow_size_(uintptr_t * gr,mreal * size)227 void MGL_EXPORT mgl_set_arrow_size_(uintptr_t *gr, mreal *size)	{	_GR_->SetArrowSize(*size);	}
mgl_set_font_size_(uintptr_t * gr,mreal * size)228 void MGL_EXPORT mgl_set_font_size_(uintptr_t *gr, mreal *size)		{	_GR_->SetFontSize(*size);	}
mgl_set_font_hscale_(uintptr_t * gr,double * scale)229 void MGL_EXPORT mgl_set_font_hscale_(uintptr_t *gr, double *scale)	{	_GR_->SetFontHscale(*scale);	}
mgl_set_font_def_(uintptr_t * gr,const char * name,int l)230 void MGL_EXPORT mgl_set_font_def_(uintptr_t *gr, const char *name, int l)
231 {	char *s=new char[l+1];		memcpy(s,name,l);	s[l]=0;
232 	_GR_->SetFontDef(s);	delete []s;	}
mgl_load_font_(uintptr_t * gr,char * name,char * path,int l,int n)233 void MGL_EXPORT mgl_load_font_(uintptr_t *gr, char *name, char *path, int l,int n)
234 {	char *s=new char[l+1];		memcpy(s,name,l);	s[l]=0;
235 	char *d=new char[n+1];		memcpy(d,path,n);	d[n]=0;
236 	_GR_->LoadFont(s,d);	delete []s;		delete []d;	}
mgl_copy_font_(uintptr_t * gr,uintptr_t * gr_from)237 void MGL_EXPORT mgl_copy_font_(uintptr_t *gr, uintptr_t *gr_from)
238 {	_GR_->CopyFont((mglBase *)(*gr_from));	}
mgl_restore_font_(uintptr_t * gr)239 void MGL_EXPORT mgl_restore_font_(uintptr_t *gr)	{	_GR_->RestoreFont();	}
mgl_define_symbol_(uintptr_t * gr,char * id,uintptr_t * x,uintptr_t * y,int)240 void MGL_EXPORT mgl_define_symbol_(uintptr_t *gr, char *id, uintptr_t *x, uintptr_t *y, int)
241 {	_GR_->DefineGlyph(_DA_(x),_DA_(y),id?*id:0);	}
242 //-----------------------------------------------------------------------------
243 extern mglFont *mglDefFont;
mgl_def_font(const char * name,const char * path)244 void MGL_EXPORT mgl_def_font(const char *name, const char *path)
245 {	mglDefFont->Load(name,path);	}
mgl_def_font_(const char * name,const char * path,int l,int n)246 void MGL_EXPORT mgl_def_font_(const char *name, const char *path,int l,int n)
247 {	char *s=new char[l+1];		memcpy(s,name,l);	s[l]=0;
248 	char *d=new char[n+1];		memcpy(d,path,n);	d[n]=0;
249 	mglDefFont->Load(name,path);	delete []s;		delete []d;	}
250 //-----------------------------------------------------------------------------
mgl_check_version(const char * ver)251 int MGL_EXPORT mgl_check_version(const char *ver)
252 {	double v=0;	int r = sscanf(ver,"2.%lg",&v);
253 	return r<1 || v>MGL_VER2;	}
mgl_check_version_(const char * ver,int l)254 int MGL_EXPORT mgl_check_version_(const char *ver, int l)
255 {	char *s=new char[l+1];		memcpy(s,ver,l);	s[l]=0;
256 	int r=mgl_check_version(s);	delete []s;	return r;	}
257 //-----------------------------------------------------------------------------
mgl_set_tex_parse(HMGL gr,int val)258 void MGL_EXPORT mgl_set_tex_parse(HMGL gr, int val)
259 {	gr->GetFont()->parse=val;	}
mgl_set_tex_parse_(uintptr_t * gr,int * val)260 void MGL_EXPORT mgl_set_tex_parse_(uintptr_t *gr, int *val)
261 {	_GR_->GetFont()->parse=*val;	}
262 //-----------------------------------------------------------------------------
mgl_start_group(HMGL gr,const char * s)263 void MGL_EXPORT mgl_start_group(HMGL gr, const char *s)	{	gr->StartAutoGroup(s);	}
mgl_end_group(HMGL gr)264 void MGL_EXPORT mgl_end_group(HMGL gr)	{	gr->EndGroup();	}
mgl_start_group_(uintptr_t * gr,const char * name,int l)265 void MGL_EXPORT mgl_start_group_(uintptr_t *gr, const char *name,int l)
266 {	char *s=new char[l+1];		memcpy(s,name,l);	s[l]=0;
267 	_GR_->StartAutoGroup(s);	delete []s;	}
mgl_end_group_(uintptr_t * gr)268 void MGL_EXPORT mgl_end_group_(uintptr_t *gr)	{	_GR_->EndGroup();	}
269 //-----------------------------------------------------------------------------
270 #include <stdarg.h>
271 bool mglTestMode=false;
mgl_test_txt(const char * str,...)272 void MGL_EXPORT mgl_test_txt(const char *str, ...)
273 {
274 	if(mglTestMode)
275 	{
276 		char buf[256];
277 		va_list lst;
278 		va_start(lst,str);
279 		vsnprintf(buf,256,str,lst);	buf[255]=0;
280 		va_end(lst);
281 		printf(_("TEST: %s\n"),buf);
282 		fflush(stdout);
283 	}
284 }
mgl_set_test_mode(int enable)285 void MGL_EXPORT mgl_set_test_mode(int enable)	{	mglTestMode=enable;	}
286 //---------------------------------------------------------------------------
mgl_use_graph(HMGL gr,int inc)287 long MGL_EXPORT mgl_use_graph(HMGL gr, int inc)
288 {	if(!gr)	return 0;	gr->InUse+=inc;	return gr->InUse;	}
mgl_use_graph_(uintptr_t * gr,int * inc)289 long MGL_EXPORT mgl_use_graph_(uintptr_t *gr, int *inc)
290 {	return mgl_use_graph(_GR_,*inc);	}
291 //---------------------------------------------------------------------------
mgl_set_ambbr(HMGL gr,double i)292 void MGL_EXPORT mgl_set_ambbr(HMGL gr, double i)		{	gr->SetAmbient(i);	}
mgl_set_ambbr_(uintptr_t * gr,mreal * i)293 void MGL_EXPORT mgl_set_ambbr_(uintptr_t *gr, mreal *i){	_GR_->SetAmbient(*i);	}
294 //---------------------------------------------------------------------------
mgl_set_difbr(HMGL gr,double i)295 void MGL_EXPORT mgl_set_difbr(HMGL gr, double i)		{	gr->SetDiffuse(i);	}
mgl_set_difbr_(uintptr_t * gr,mreal * i)296 void MGL_EXPORT mgl_set_difbr_(uintptr_t *gr, mreal *i){	_GR_->SetDiffuse(*i);	}
297 //---------------------------------------------------------------------------
mgl_zoom_axis(HMGL gr,double x1,double y1,double z1,double c1,double x2,double y2,double z2,double c2)298 void MGL_EXPORT mgl_zoom_axis(HMGL gr, double x1,double y1,double z1,double c1,double x2,double y2,double z2,double c2)
299 {	gr->ZoomAxis(mglPoint(x1,y1,z1,c1), mglPoint(x2,y2,z2,c2));	}
mgl_zoom_axis_(uintptr_t * gr,mreal * x1,mreal * y1,mreal * z1,mreal * c1,mreal * x2,mreal * y2,mreal * z2,mreal * c2)300 void MGL_EXPORT mgl_zoom_axis_(uintptr_t *gr, mreal *x1, mreal *y1, mreal *z1, mreal *c1, mreal *x2, mreal *y2, mreal *z2, mreal *c2)
301 {	_GR_->ZoomAxis(mglPoint(*x1,*y1,*z1,*c1), mglPoint(*x2,*y2,*z2,*c2));	}
302 //---------------------------------------------------------------------------
303 extern uint64_t mgl_mask_def[16];
mgl_set_mask(char id,const char * mask)304 void MGL_EXPORT mgl_set_mask(char id, const char *mask)
305 {
306 	const char *msk = MGL_MASK_ID, *s = mglchr(msk, id);
307 	if(s)
308 	{
309 		uint64_t val = (mask && *mask) ? strtoull(mask,NULL,16) : mgl_mask_def[s-msk];
310 		mgl_mask_val[s-msk] = val;
311 	}
312 }
mgl_set_mask_(const char * id,const char * mask,int,int l)313 void MGL_EXPORT mgl_set_mask_(const char *id, const char *mask,int,int l)
314 {	char *s=new char[l+1];	memcpy(s,mask,l);	s[l]=0;	mgl_set_mask(*id,s);	delete []s;	}
315 //---------------------------------------------------------------------------
mgl_set_mask_val(char id,uint64_t mask)316 void MGL_EXPORT mgl_set_mask_val(char id, uint64_t mask)
317 {
318 	const char *msk = MGL_MASK_ID, *s = mglchr(msk, id);
319 	if(s)	mgl_mask_val[s-msk]=mask;
320 }
mgl_set_mask_val_(const char * id,uint64_t * mask,int)321 void MGL_EXPORT mgl_set_mask_val_(const char *id, uint64_t *mask,int)
322 {	mgl_set_mask_val(*id,*mask);	}
323 //---------------------------------------------------------------------------
mgl_set_mask_angle(HMGL gr,int angle)324 void MGL_EXPORT mgl_set_mask_angle(HMGL gr, int angle)	{	gr->SetMaskAngle(angle);	}
mgl_set_mask_angle_(uintptr_t * gr,int * angle)325 void MGL_EXPORT mgl_set_mask_angle_(uintptr_t *gr, int *angle)	{	_GR_->SetMaskAngle(*angle);	}
326 //---------------------------------------------------------------------------
mgl_ask_stop(HMGL gr,int stop)327 void MGL_EXPORT mgl_ask_stop(HMGL gr, int stop)		{	gr->AskStop(stop);	}
mgl_ask_stop_(uintptr_t * gr,int * stop)328 void MGL_EXPORT mgl_ask_stop_(uintptr_t *gr, int *stop){	_GR_->AskStop(*stop);	}
mgl_need_stop(HMGL gr)329 int MGL_EXPORT mgl_need_stop(HMGL gr)			{	return gr->NeedStop();	}
mgl_need_stop_(uintptr_t * gr)330 int MGL_EXPORT mgl_need_stop_(uintptr_t *gr)	{	return _GR_->NeedStop();}
mgl_set_event_func(HMGL gr,void (* func)(void *),void * par)331 void MGL_EXPORT mgl_set_event_func(HMGL gr, void (*func)(void *), void *par)
332 {	gr->SetEventFunc(func,par);	}
333 //---------------------------------------------------------------------------
334