[mathgl] 01/01: upstream release 2.4.1

Alastair McKinstry mckinstry at moszumanska.debian.org
Thu Sep 21 13:40:20 UTC 2017


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to tag upstream/2.4.1
in repository mathgl.

commit ad2fae2e1072b823b2dba63e00655ed4ac5bb04e
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Tue Aug 1 09:04:50 2017 +0100

    upstream release 2.4.1
---
 CMakeLists.txt                                     |  47 +-
 ChangeLog.txt                                      |   7 +
 examples/CMakeLists.txt                            |   4 +-
 examples/fltk_example.cpp                          |   2 +-
 examples/full_test.cpp                             |   2 +-
 examples/qt_example.cpp                            |   2 +-
 include/mgl2/abstract.h                            |   1 +
 include/mgl2/base.h                                |   8 +-
 include/mgl2/canvas.h                              |  21 +-
 include/mgl2/data.h                                |   1 +
 include/mgl2/define.h                              |   3 +-
 include/mgl2/mgl.h                                 |   8 +
 include/mgl2/qmathgl.h                             |   1 -
 include/mgl2/surf.h                                |   9 +
 include/mgl2/wnd.h                                 |   2 +-
 include/mgl2/wx.h                                  |   1 -
 json/CMakeLists.txt                                |   4 +-
 mathgl_en.po                                       | 304 ++++++------
 mathgl_es.po                                       | 518 ++++++++++----------
 mathgl_ru.po                                       | 519 +++++++++++----------
 mgllab/grid.cpp                                    |   4 +-
 mgllab/help.cpp                                    |   1 +
 mgllab/mathgl.cpp                                  |   2 +-
 mgllab/mgllab.cpp                                  |   3 -
 mgllab/table.cpp                                   |   2 +-
 scripts/CMakeLists.txt                             |  31 ++
 FindMathGL2.cmake => scripts/FindMathGL2.cmake     |   0
 .../MathGLConfig.cmake.in                          |   0
 .../MathGLConfigVersion.cmake.in                   |   0
 .../install-deps.txt => scripts/install-deps.cmake |   0
 cmake-qt4.txt => scripts/qt4.cmake                 |   0
 cmake-qt5.txt => scripts/qt5.cmake                 |   0
 src/addon.cpp                                      |   1 +
 src/axis.cpp                                       |  47 +-
 src/base.cpp                                       |   4 +-
 src/base_cf.cpp                                    |   6 +-
 src/canvas.cpp                                     |  39 +-
 src/complex.cpp                                    |  11 +-
 src/data.cpp                                       |  15 +-
 src/data_io.cpp                                    |  10 +-
 src/eval.cpp                                       |   2 +-
 src/evalc.cpp                                      |   2 +-
 src/evalp.cpp                                      |   6 +-
 src/exec_gr.cpp                                    |  11 +
 src/export.cpp                                     |  50 +-
 src/export_2d.cpp                                  |   4 +-
 src/export_3d.cpp                                  |  14 +-
 src/fft.cpp                                        |   4 +-
 src/fit.cpp                                        |   8 +-
 src/font.cpp                                       |   6 +-
 src/obj.cpp                                        |   7 +-
 src/opengl.cpp                                     |  11 +-
 src/parser.cpp                                     |   9 +-
 src/pde.cpp                                        |   4 +-
 src/pixel.cpp                                      |  23 +-
 src/pixel_gen.cpp                                  |   2 +-
 src/plot.cpp                                       | 102 +++-
 src/prc.cpp                                        |   9 +-
 src/prc/oPRCFile.cc                                |   2 +-
 src/prim.cpp                                       |   5 +-
 src/surf.cpp                                       |  31 +-
 src/volume.cpp                                     |  18 +-
 texinfo/core_en.texi                               |  26 +-
 texinfo/core_ru.texi                               |  23 +-
 texinfo/symbols_en.texi                            |   4 +
 texinfo/symbols_ru.texi                            |   4 +
 texinfo/version_hist.txt                           |   2 +
 texinfo/web_en.texi                                |  15 +-
 texinfo/web_ru.texi                                |  20 +-
 todo.txt                                           |   1 +
 translations/mathgl_es.mo                          | Bin 9458 -> 9652 bytes
 translations/mathgl_ru.mo                          | Bin 138490 -> 138658 bytes
 udav/CMakeLists.txt                                |   4 +-
 udav/anim_dlg.cpp                                  |   1 +
 udav/args_dlg.cpp                                  |   2 +-
 udav/data_dlg.h                                    |   4 +-
 udav/files_dlg.cpp                                 |   2 +-
 udav/style_dlg.h                                   |   4 +-
 utils/CMakeLists.txt                               |   4 +-
 utils/mglcgi.cpp                                   |   2 +-
 utils/mglconv.cpp                                  |   6 +-
 utils/mglview.cpp                                  |   2 +-
 widgets/fltk.cpp                                   |   5 +-
 widgets/qt.cpp                                     |   4 +-
 widgets/qt4/CMakeLists.txt                         |   2 +-
 widgets/qt5/CMakeLists.txt                         |   2 +-
 widgets/wx.cpp                                     |   4 +-
 win32-install-deps/CMakeLists.txt                  |  10 -
 88 files changed, 1180 insertions(+), 943 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index fbe2e6e..9070595 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,7 +17,7 @@ endif(NOT CMAKE_BUILD_TYPE)
 set(CMAKE_VERBOSE_MAKEFILE ON)
 set(MathGL_VERSION_MAJOR 2)
 set(MathGL_VERSION_MINOR 4)
-set(MathGL_PATCH_VERSION 0)
+set(MathGL_PATCH_VERSION 1)
 set(MathGL_VERSION ${MathGL_VERSION_MAJOR}.${MathGL_VERSION_MINOR}.${MathGL_PATCH_VERSION})
 set(MathGL_SOVERSION 7.5.0)
 
@@ -734,46 +734,30 @@ if(enable-mgltex)
 	add_subdirectory( mgltex )
 endif(enable-mgltex)
 
-if(WIN32)
-	install(FILES ${CMAKE_SOURCE_DIR}/FindMathGL2.cmake DESTINATION ${CMAKE_INSTALL_PREFIX} RENAME mathgl2-config.cmake)
-else(WIN32)
-	install(FILES ${CMAKE_SOURCE_DIR}/FindMathGL2.cmake DESTINATION ${MGL_LIB_INSTALL_DIR}/cmake/mathgl2/ RENAME mathgl2-config.cmake)
-endif(WIN32)
-
-#export(TARGETS MathGLTargets FILE "${PROJECT_BINARY_DIR}/MathGLTargets.cmake")
-#export(PACKAGE MathGL2)
-
-#configure_file(MathGLConfig.cmake.in "${MathGL2_BINARY_DIR}/MathGLConfig.cmake" @ONLY)
-#configure_file(MathGLConfigVersion.cmake.in "${MathGL2_BINARY_DIR}/MathGLConfigVersion.cmake" @ONLY)
-
-#install(FILES
-#	"${MathGL2_BINARY_DIR}/MathGLConfig.cmake"
-#	"${MathGL2_BINARY_DIR}/MathGLConfigVersion.cmake"
-#	DESTINATION "${MathGL_INSTALL_CMAKE_DIR}" COMPONENT dev)
-
-#install(EXPORT MathGLTargets DESTINATION "${MathGL_INSTALL_CMAKE_DIR}" COMPONENT dev)
-
-
 if(MGL_USE_LIBINTL)
 	if(USE_GETTEXT)
-		add_custom_target(mathgl.pot ALL
+		set(mgl_tl_list )
+		add_custom_command(OUTPUT mathgl.pot
 			COMMAND ${findxgettext} -s --keyword=_ -C -c --package-name=MathGL2 --package-version=${MathGL_VERSION} -o ${MathGL2_BINARY_DIR}/mathgl.pot ${po_files}
 			WORKING_DIRECTORY ${MathGL2_SOURCE_DIR}/
 			DEPENDS ${po_files} )
 		set(mgl_clean_files mathgl.pot ${mgl_clean_files})
-		foreach(tl ru es en)
-			add_custom_target(mathgl_${tl}.po ALL
+		foreach(tl ru es) # en)
+			add_custom_command(OUTPUT mathgl_${tl}.po.done
 				COMMAND ${findmsgmerge} -U mathgl_${tl}.po ${MathGL2_BINARY_DIR}/mathgl.pot
+				COMMAND ${CMAKE_COMMAND} -E touch ${MathGL2_BINARY_DIR}/mathgl_${tl}.po.done
 				WORKING_DIRECTORY ${MathGL2_SOURCE_DIR}/
-				DEPENDS mathgl.pot )
-			add_custom_target(mathgl_${tl}.mo ALL
+				DEPENDS mathgl.pot mathgl_${tl}.po)
+			add_custom_command(OUTPUT mathgl_${tl}.mo
 				COMMAND ${findmsgfmt} -o mathgl_${tl}.mo ${MathGL2_SOURCE_DIR}/mathgl_${tl}.po
-				DEPENDS mathgl_${tl}.po)
+				DEPENDS mathgl_${tl}.po.done)
 			install( FILES ${MathGL2_BINARY_DIR}/mathgl_${tl}.mo DESTINATION "${CMAKE_INSTALL_PREFIX}/share/locale/${tl}/LC_MESSAGES/" RENAME mathgl.mo )
-			set(mgl_clean_files mathgl_${tl}.mo ${mgl_clean_files})
+			set(mgl_tl_list mathgl_${tl}.mo ${mgl_tl_list})
+			set(mgl_clean_files mathgl_${tl}.mo mathgl_${tl}.po.done ${mgl_clean_files})
 		endforeach(tl)
+		add_custom_target(mgl_translations ALL DEPENDS ${mgl_tl_list})
 	else(USE_GETTEXT)
-		foreach(tl ru es en)
+		foreach(tl ru es) # en)
 			install( FILES ${MathGL2_SOURCE_DIR}/translations/mathgl_${tl}.mo DESTINATION "${CMAKE_INSTALL_PREFIX}/share/locale/${tl}/LC_MESSAGES/" RENAME mathgl.mo )
 		endforeach(tl)
 	endif(USE_GETTEXT)
@@ -782,7 +766,4 @@ endif(MGL_USE_LIBINTL)
 set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${mgl_clean_files}")
 
 # WARNING!!! DO NOT ADD ANYTHING AFTER THIS LINE!
-
-if(enable-dep-dll)
-	add_subdirectory ( win32-install-deps )
-endif(enable-dep-dll)
+add_subdirectory ( scripts )
diff --git a/ChangeLog.txt b/ChangeLog.txt
index d1e4f79..bc31bff 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,10 @@
+2.4.1 Released 20 July 2017
+
+* Add 'beltc' plot, which is 'belt' with manual coloring.
+* Add style '~' for 'plot' and 'tens' to omit some points at output.
+* Add style ':' for 'axis' to draw lines through point (0,0,0).
+* Bugfixes
+
 2.4 Released 17 May 2017
 
 * Add mgllab executable, which is FLTK based version of UDAV. Most things mgllab do faster.
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 0fa52bc..1b9879d 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -23,10 +23,10 @@ endif(MGL_HAVE_WX)
 if(QT_ENABLED)
 	add_executable(mgl_qt_example wnd_samples.cpp qt_example.cpp)
 	if(enable-qt5)
-		include(../cmake-qt5.txt)
+		include(../scripts/qt5.cmake)
 		target_link_libraries(mgl_qt_example mgl-qt5)
 	else(enable-qt5)
-		include(../cmake-qt4.txt)
+		include(../scripts/qt4.cmake)
 		target_link_libraries(mgl_qt_example mgl-qt4)
 	endif(enable-qt5)
 	
diff --git a/examples/fltk_example.cpp b/examples/fltk_example.cpp
index 7670da3..9dc8db3 100644
--- a/examples/fltk_example.cpp
+++ b/examples/fltk_example.cpp
@@ -97,7 +97,7 @@ class myDraw : public mglDraw
 	long i;			// another variable to be shown
 	mglWnd *wnd;	// external window for plotting
 public:
-	myDraw(mglWnd *w=0) : mglDraw()	{	wnd=w;	}
+	myDraw(mglWnd *w=0) : mglDraw()	{	i=0;	wnd=w;	}
 	void SetWnd(mglWnd *w)	{	wnd=w;	}
 	int Draw(mglGraph *gr)
 	{
diff --git a/examples/full_test.cpp b/examples/full_test.cpp
index e9821e0..64dc8fb 100644
--- a/examples/full_test.cpp
+++ b/examples/full_test.cpp
@@ -418,7 +418,7 @@ int main(int argc,char **argv)
 			case 'w':	width =atoi(optarg);	break;
 			case 'h':	height=atoi(optarg);	break;
 			case 'q':	quality =atoi(optarg);	break;
-			case 'k':	strncpy(name, optarg,256);
+			case 'k':	mgl_strncpy(name, optarg,256);
 						tmp=strchr(name,'.');	if(tmp)	*tmp=0;
 						tmp=strchr(name,'-');	if(tmp)	*tmp=0;
 						break;
diff --git a/examples/qt_example.cpp b/examples/qt_example.cpp
index 2f80129..c27b101 100644
--- a/examples/qt_example.cpp
+++ b/examples/qt_example.cpp
@@ -111,7 +111,7 @@ class myDraw : public mglDraw
 	long i;			// another variable to be shown
 	mglWnd *wnd;	// external window for plotting
 public:
-	myDraw(mglWnd *w=0) : mglDraw()	{	wnd=w;	}
+	myDraw(mglWnd *w=0) : mglDraw()	{	wnd=w;	i=0;	}
 	void SetWnd(mglWnd *w)	{	wnd=w;	}
 	int Draw(mglGraph *gr)
 	{
diff --git a/include/mgl2/abstract.h b/include/mgl2/abstract.h
index f689baf..a252b63 100644
--- a/include/mgl2/abstract.h
+++ b/include/mgl2/abstract.h
@@ -57,6 +57,7 @@ extern "C" {
 
 #else
 #define mglDataA void
+#define mglNum void
 typedef void *HMGL;
 typedef void *HMDT;
 typedef void *HADT;
diff --git a/include/mgl2/base.h b/include/mgl2/base.h
index 13594a3..37e10b0 100644
--- a/include/mgl2/base.h
+++ b/include/mgl2/base.h
@@ -484,7 +484,7 @@ public:
 	/// Set to use or not text rotation
 	inline void SetRotatedText(bool val)	{	set(val,MGL_ENABLE_RTEXT);	}
 	/// Set default font style and color
-	void SetFontDef(const char *font);
+	inline void SetFontDef(const char *font){	mgl_strncpy(FontDef, font, 31);	}
 	/// Set to use or not text rotation
 	inline void SetTickRotate(bool val)	{	set(val,MGL_TICKS_ROTATE);	}
 	/// Set to use or not text rotation
@@ -509,8 +509,8 @@ public:
 	long CopyNtoC(long k, mreal c);
 	long CopyProj(long from, mglPoint p, mglPoint n, short sub=0);
 	void SetRGBA(long k, const mglColor &c)
-	{	mglPnt &p=Pnt[k];	p.r = c.r;	p.g = c.g;	p.b = c.b;	p.a = c.a;	}
-	virtual void Reserve(long n);		///< Allocate n-cells for Pnt and return current position
+	{	if(k>=0)	{mglPnt &p=Pnt[k];	p.r = c.r;	p.g = c.g;	p.b = c.b;	p.a = c.a;}	}
+	virtual void Reserve(long n);	///< Allocate n-cells for Pnt and return current position
 	/// Set to reduce accuracy of points (to reduce size of output files)
 	inline void SetReduceAcc(bool val)	{	set(val, MGL_REDUCEACC);	}
 	/// Add glyph of current font to the Glf and return its position
@@ -658,7 +658,7 @@ protected:
 	long CurrPal;		///< Current palette index
 	mreal MarkSize;		///< The size of marks for 1D plots.
 	mreal ArrowSize;	///< The size of arrows.
-	char last_style[64];///< Last pen style
+	char last_style[64];///< Last pen style	TODO: replace by std::string
 	mreal font_factor;	///< Font scaling factor
 
 	long dr_x, dr_y, dr_p;	///< default drawing region for quality&4 mode
diff --git a/include/mgl2/canvas.h b/include/mgl2/canvas.h
index ddf8db2..3bb463b 100644
--- a/include/mgl2/canvas.h
+++ b/include/mgl2/canvas.h
@@ -26,10 +26,10 @@ struct GifFileType;
 /// Structure for drawing axis and ticks
 struct MGL_EXPORT mglAxis
 {
-	mglAxis() : dv(0),ds(0),d(0),ns(0),	v0(0),v1(0),v2(0),o(NAN),	f(0),	ch(0),	pos('t'),sh(0),inv(false)	{}
-	mglAxis(const mglAxis &aa) : dv(aa.dv),ds(aa.ds),d(aa.d),ns(aa.ns),	t(aa.t),fact(aa.fact),stl(aa.stl),	dir(aa.dir),a(aa.a),b(aa.b),org(aa.org), v0(aa.v0),v1(aa.v1),v2(aa.v2),o(aa.o),	f(aa.f),txt(aa.txt),	ch(aa.ch),	pos(aa.pos),sh(aa.sh),inv(aa.inv)	{}
+	mglAxis() : dv(0),ds(0),d(0),ns(0),	v0(0),v1(0),v2(0),o(NAN),	f(0),	ch(0),	pos('t'),sh(0),inv(false),angl(NAN)	{}
+	mglAxis(const mglAxis &aa) : dv(aa.dv),ds(aa.ds),d(aa.d),ns(aa.ns),	t(aa.t),fact(aa.fact),stl(aa.stl),	dir(aa.dir),a(aa.a),b(aa.b),org(aa.org), v0(aa.v0),v1(aa.v1),v2(aa.v2),o(aa.o),	f(aa.f),txt(aa.txt),	ch(aa.ch),	pos(aa.pos),sh(aa.sh),inv(aa.inv),angl(aa.angl)	{}
 #if MGL_HAVE_RVAL
-	mglAxis(mglAxis &&aa) : dv(aa.dv),ds(aa.ds),d(aa.d),ns(aa.ns),	t(aa.t),fact(aa.fact),stl(aa.stl),	dir(aa.dir),a(aa.a),b(aa.b),org(aa.org), v0(aa.v0),v1(aa.v1),v2(aa.v2),o(aa.o),	f(aa.f),txt(aa.txt),	ch(aa.ch),	pos(aa.pos),sh(aa.sh),inv(aa.inv)	{}
+	mglAxis(mglAxis &&aa) : dv(aa.dv),ds(aa.ds),d(aa.d),ns(aa.ns),	t(aa.t),fact(aa.fact),stl(aa.stl),	dir(aa.dir),a(aa.a),b(aa.b),org(aa.org), v0(aa.v0),v1(aa.v1),v2(aa.v2),o(aa.o),	f(aa.f),txt(aa.txt),	ch(aa.ch),	pos(aa.pos),sh(aa.sh),inv(aa.inv),angl(aa.angl)	{}
 #endif
 
 	const mglAxis &operator=(const mglAxis &aa)
@@ -68,7 +68,7 @@ class mglCanvas;
 /// Structure for drawing region
 struct MGL_EXPORT mglDrawReg
 {
-	mglDrawReg() {}
+	mglDrawReg() {	memset(this,0,sizeof(mglDrawReg));	}
 	mglDrawReg(const mglDrawReg &aa) : PDef(aa.PDef),angle(aa.angle),ObjId(aa.ObjId),PenWidth(aa.PenWidth),pPos(aa.pPos) ,x1(aa.x1),x2(aa.x2),y1(aa.y1),y2(aa.y2)	{}
 #if MGL_HAVE_RVAL
 	mglDrawReg(mglDrawReg &&aa) : PDef(aa.PDef),angle(aa.angle),ObjId(aa.ObjId),PenWidth(aa.PenWidth),pPos(aa.pPos) ,x1(aa.x1),x2(aa.x2),y1(aa.y1),y2(aa.y2)	{}
@@ -145,7 +145,7 @@ using mglBase::Light;
 	/// Get PlotFactor
 	inline mreal GetPlotFactor()	{	return B.pf;	}
 	/// Pop transformation matrix from stack
-	inline void Pop()	{	B = stack.back(); stack.pop_back();	}
+	void Pop();
 	/// Clear up the frame
 	virtual void Clf(mglColor back=NC);
 	virtual void Clf(const char *col);
@@ -173,6 +173,12 @@ using mglBase::Light;
 	/// Set perspective (in range [0,1)) for plot. Set to zero for switching off. Return the current perspective.
 	void Perspective(mreal a, bool req=true)
 	{	if(req)	persp = Bp.pf = a;	else	Bp.pf = persp?persp:fabs(a);	}
+	/// Save parameters of current inplot
+	inline void SaveInPlot()
+	{	sB=B;	sW=inW, sH=inH, sZ=ZMin, sX=inX, sY=inY, sFF=font_factor;	}
+	/// Use saved parameters as current inplot
+	inline void LoadInPlot()
+	{	B=sB;	inW=sW, inH=sH, ZMin=sZ, inX=sX, inY=sY, font_factor=sFF;	}
 
 	/// Set size of frame in pixels. Normally this function is called internaly.
 	virtual void SetSize(int w,int h,bool clf=true);
@@ -385,7 +391,7 @@ protected:
 	/// Prepare labels for ticks
 	void LabelTicks(mglAxis &aa);
 	/// Draw axis
-	void DrawAxis(mglAxis &aa, bool text=true, char arr=0,const char *stl="",mreal angl=NAN);
+	void DrawAxis(mglAxis &aa, int text=1, char arr=0,const char *stl="",mreal angl=NAN);
 	/// Draw axis grid lines
 	void DrawGrid(mglAxis &aa, bool at_tick=false);
 	/// Update axis ranges
@@ -462,6 +468,9 @@ private:
     mglCanvas(const mglCanvas &){}	// copying is not allowed
 	const mglCanvas &operator=(const mglCanvas &t){return t;}	// copying is not allowed
 
+	mglMatrix sB;	// parameters of saved inplot
+	mreal sW, sH, sZ, sX, sY, sFF;
+
 	uint32_t *pnt_col;
 //	mreal _tetx,_tety,_tetz;		// extra angles
 	std::vector<mglMatrix> stack;	///< stack for transformation matrices
diff --git a/include/mgl2/data.h b/include/mgl2/data.h
index 9241882..e0d496f 100644
--- a/include/mgl2/data.h
+++ b/include/mgl2/data.h
@@ -143,6 +143,7 @@ using mglDataA::Momentum;
 		mgl_data_create(this,n,1,1);
 		va_list vl;	va_start(vl,n);
 		for(long i=0;i<n;i++)	a[i] = va_arg(vl,double);
+		va_end(vl);
 	}
 
 	/// Create or recreate the array with specified size and fill it by zero
diff --git a/include/mgl2/define.h b/include/mgl2/define.h
index ee0f002..dd60a86 100644
--- a/include/mgl2/define.h
+++ b/include/mgl2/define.h
@@ -273,7 +273,7 @@ extern MGL_EXPORT uint64_t mgl_mask_val[16];
 #define MGL_PREFERVC 		0x040000 	///< Prefer vertex color instead of texture if output format supports
 #define MGL_ONESIDED 		0x080000 	///< Render only front side of surfaces if output format supports (for debugging)
 #define MGL_NO_ORIGIN 		0x100000 	///< Don't draw tick labels at axis origin
-#define MGL_GRAY_MODE 		0x100000 	///< Convert all colors to gray ones
+#define MGL_GRAY_MODE 		0x200000 	///< Convert all colors to gray ones
 //-----------------------------------------------------------------------------
 #if MGL_HAVE_C99_COMPLEX
 #include <complex.h>
@@ -331,6 +331,7 @@ inline int mgl_sign(double a)	{	return a<0?-1:1;	}
 inline long mgl_int(double a)	{	return long(a+(a>=0?0.5:-0.5));	}
 inline double mgl_min(double a, double b)	{	return a>b?b:a;	}
 inline double mgl_max(double a, double b)	{	return a>b?a:b;	}
+inline void mgl_strncpy(char *a, const char *b, size_t s)	{	strncpy(a,b,s);	a[s-1]=0;	}
 //-----------------------------------------------------------------------------
 extern "C" {
 #else
diff --git a/include/mgl2/mgl.h b/include/mgl2/mgl.h
index 3d12d9b..4fc85ed 100644
--- a/include/mgl2/mgl.h
+++ b/include/mgl2/mgl.h
@@ -1283,6 +1283,14 @@ public:
 	/** Style 'x' draw belts in x-direction. */
 	inline void Belt(const mglDataA &z, const char *stl="", const char *opt="")
 	{	mgl_belt(gr, &z, stl, opt);	}
+	/// Draw belts for 2d data specified parametrically with color proportional to c
+	/** Style 'x' draw belts in x-direction. */
+	inline void BeltC(const mglDataA &x, const mglDataA &y, const mglDataA &z, const mglDataA &c, const char *stl="", const char *opt="")
+	{	mgl_beltc_xy(gr, &x, &y, &z, &c, stl, opt);	}
+	/// Draw belts for 2d data with color proportional to c
+	/** Style 'x' draw belts in x-direction. */
+	inline void BeltC(const mglDataA &z, const mglDataA &c, const char *stl="", const char *opt="")
+	{	mgl_beltc(gr, &z, &c, stl, opt);	}
 
 	/// Draw surface for 2d data specified parametrically with color proportional to z
 	/** Style ‘#’ draw grid lines. Style ‘.’ produce plot by dots.*/
diff --git a/include/mgl2/qmathgl.h b/include/mgl2/qmathgl.h
index de95e27..228ddc5 100644
--- a/include/mgl2/qmathgl.h
+++ b/include/mgl2/qmathgl.h
@@ -206,7 +206,6 @@ protected:
 	bool dotsRefr;		///< Set dots for image preview/rotation
 	mreal x1,x2,y1,y2;	///< Zoom in region
 	mreal ax1,ax2,ay1,ay2;	///< Axis range zoom
-	bool showMessage;	///< Flag for showing messages (enabled by each execute())
 	QMenu *popup;		///< Pointer to pop-up menu
 	QTimer *timer;		///< Timer for animation
 	QTimer *timerRefr;	///< Timer for redrawing
diff --git a/include/mgl2/surf.h b/include/mgl2/surf.h
index 046c7e7..c828354 100644
--- a/include/mgl2/surf.h
+++ b/include/mgl2/surf.h
@@ -66,6 +66,15 @@ void MGL_EXPORT mgl_belt_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintp
 void MGL_EXPORT mgl_belt(HMGL graph, HCDT z, const char *sch, const char *opt);
 void MGL_EXPORT mgl_belt_(uintptr_t *graph, uintptr_t *z, const char *sch, const char *opt,int,int);
 
+/// Draw belts for 2d data specified parametrically with color proportional to c
+/** Style 'x' draw belts in x-direction. */
+void MGL_EXPORT mgl_beltc_xy(HMGL graph, HCDT x, HCDT y, HCDT z, HCDT c, const char *sch, const char *opt);
+void MGL_EXPORT mgl_beltc_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, const char *opt,int,int);
+/// Draw belts for 2d data with color proportional to c
+/** Style 'x' draw belts in x-direction. */
+void MGL_EXPORT mgl_beltc(HMGL graph, HCDT z, HCDT c, const char *sch, const char *opt);
+void MGL_EXPORT mgl_beltc_(uintptr_t *graph, uintptr_t *z, uintptr_t *c, const char *sch, const char *opt,int,int);
+
 /// Draw surface for 2d data specified parametrically with color proportional to z
 /** Style ‘#’ draw grid lines. Style ‘.’ produce plot by dots.*/
 void MGL_EXPORT mgl_surf_xy(HMGL graph, HCDT x, HCDT y, HCDT z, const char *sch, const char *opt);
diff --git a/include/mgl2/wnd.h b/include/mgl2/wnd.h
index 8cadd9c..4e4c456 100644
--- a/include/mgl2/wnd.h
+++ b/include/mgl2/wnd.h
@@ -33,7 +33,7 @@ public:
 	virtual void Reload(){}		///< Function for reloading data
 	virtual void Click() {}		///< Callback function on mouse click
 #if MGL_HAVE_PTHR_WIDGET
-	mglDraw()	{	running=false;	pthread_mutex_init(&mutex,NULL);	}
+	mglDraw()	{	running=false;	pthread_mutex_init(&mutex,NULL);	thr=0;	}
 	virtual ~mglDraw()	{	pthread_mutex_destroy(&mutex);	}
 
 	virtual void Calc()	{}		///< Function for calculations
diff --git a/include/mgl2/wx.h b/include/mgl2/wx.h
index 6e1d051..b7d208e 100644
--- a/include/mgl2/wx.h
+++ b/include/mgl2/wx.h
@@ -127,7 +127,6 @@ protected:
 	bool zoom;			///< Mouse zoom state
 	bool rotate;		///< Mouse rotation state
 	mreal x1,x2,y1,y2;	///< Zoom in region
-	bool showMessage;	///< Flag for showing messages (enabled by each execute())
 	wxMenu *popup;		///< Pointer to pop-up menu
 	wxTimer *timer;		///< Timer for animation
 	DECLARE_EVENT_TABLE()
diff --git a/json/CMakeLists.txt b/json/CMakeLists.txt
index be5b12c..8e50149 100644
--- a/json/CMakeLists.txt
+++ b/json/CMakeLists.txt
@@ -1,5 +1,5 @@
 if(enable-qt5)
-	include(../cmake-qt5.txt)
+	include(../scripts/qt5.cmake)
 
 	find_qt5_libs(OFF ON Network)
 	if(TARGET Qt5::Network)
@@ -25,7 +25,7 @@ if(enable-qt5)
 		set(enable-json-sample OFF)
 	endif(TARGET Qt5::Network)
 else(enable-qt5)
-	include(../cmake-qt4.txt)
+	include(../scripts/qt4.cmake)
 
 	foreach(mgl_qt4_lib ${MGL_QT4_LIBS_FIND_JSON})
 		if(TARGET Qt4::${mgl_qt4_lib})
diff --git a/mathgl_en.po b/mathgl_en.po
index 159df64..3db32ce 100644
--- a/mathgl_en.po
+++ b/mathgl_en.po
@@ -1,4 +1,4 @@
-#: mgllab/mgllab.cpp:417
+#: mgllab/mgllab.cpp:415
 #, c-format
 msgid ""
 "\t-1 str       set str as argument $1 for script\n"
@@ -120,7 +120,7 @@ msgstr ""
 msgid " Save"
 msgstr ""
 
-#: mgllab/mgllab.cpp:227
+#: mgllab/mgllab.cpp:225
 msgid " Yes "
 msgstr ""
 
@@ -424,7 +424,7 @@ msgstr ""
 msgid "1D plots"
 msgstr ""
 
-#: mgllab/help.cpp:359
+#: mgllab/help.cpp:360
 msgid "1D view"
 msgstr ""
 
@@ -440,7 +440,7 @@ msgstr ""
 msgid "2D plots"
 msgstr ""
 
-#: mgllab/help.cpp:361
+#: mgllab/help.cpp:362
 msgid "2D view"
 msgstr ""
 
@@ -456,7 +456,7 @@ msgstr ""
 msgid "3D plots"
 msgstr ""
 
-#: mgllab/help.cpp:363
+#: mgllab/help.cpp:364
 msgid "3D view"
 msgstr ""
 
@@ -494,7 +494,7 @@ msgstr ""
 msgid "@<-  Prev"
 msgstr ""
 
-#: widgets/qt.cpp:1277 udav/udav_wnd.cpp:331 mgllab/mgllab.cpp:332
+#: widgets/qt.cpp:1277 udav/udav_wnd.cpp:331 mgllab/mgllab.cpp:330
 msgid "About"
 msgstr ""
 
@@ -612,11 +612,11 @@ msgstr ""
 msgid "Add user-defined symbol"
 msgstr ""
 
-#: widgets/fltk.cpp:851
+#: widgets/fltk.cpp:852
 msgid "Adjust picture size to fill drawing area"
 msgstr ""
 
-#: widgets/fltk.cpp:814 widgets/qt.cpp:1139 udav/plot_pnl.cpp:337
+#: widgets/fltk.cpp:815 widgets/qt.cpp:1139 udav/plot_pnl.cpp:337
 msgid "Adjust size"
 msgstr ""
 
@@ -779,7 +779,7 @@ msgstr ""
 msgid "Backward"
 msgstr ""
 
-#: src/font.cpp:947
+#: src/font.cpp:948
 #, c-format
 msgid "Bad '%ls' at %zu\n"
 msgstr ""
@@ -860,8 +860,8 @@ msgstr ""
 
 #. TODO
 #. connect(hidden,SIGNAL(cursorPositionChanged()),this,SLOT(hiddenClicked()));
-#: udav/udav_wnd.cpp:194 udav/udav_wnd.cpp:206 mgllab/mgllab.cpp:326
-#: mgllab/mgllab.cpp:557
+#: udav/udav_wnd.cpp:194 udav/udav_wnd.cpp:206 mgllab/mgllab.cpp:324
+#: mgllab/mgllab.cpp:554
 msgid "Calculator"
 msgstr ""
 
@@ -873,7 +873,7 @@ msgstr ""
 #: mgllab/editor.cpp:282 mgllab/mathgl.cpp:164 mgllab/mathgl.cpp:195
 #: mgllab/dialogs.cpp:120 mgllab/dialogs.cpp:164 mgllab/dialogs.cpp:410
 #: mgllab/dialogs.cpp:584 mgllab/dialogs.cpp:749 mgllab/dialogs.cpp:1071
-#: mgllab/dialogs.cpp:1318 mgllab/dialogs.cpp:1473 mgllab/mgllab.cpp:482
+#: mgllab/dialogs.cpp:1318 mgllab/dialogs.cpp:1473 mgllab/mgllab.cpp:479
 #: mgllab/table.cpp:101 mgllab/table.cpp:179 mgllab/table.cpp:353
 #: mgllab/table.cpp:556 mgllab/table.cpp:619 mgllab/table.cpp:674
 msgid "Cancel"
@@ -883,7 +883,7 @@ msgstr ""
 msgid "Cannot triangulate this set!"
 msgstr ""
 
-#: udav/udav_wnd.cpp:226 mgllab/mgllab.cpp:355 mgllab/mgllab.cpp:356
+#: udav/udav_wnd.cpp:226 mgllab/mgllab.cpp:353 mgllab/mgllab.cpp:354
 msgid "Canvas"
 msgstr ""
 
@@ -946,8 +946,8 @@ msgstr ""
 
 #. o = new Fl_Button(180, 130, 25, 25);o->image(img_save);	o->tooltip("img_save");
 #: widgets/qt.cpp:1091 udav/find_dlg.cpp:52 udav/hint_dlg.cpp:70
-#: mgllab/editor.cpp:565 mgllab/help.cpp:308 mgllab/help.cpp:367
-#: mgllab/help.cpp:483
+#: mgllab/editor.cpp:565 mgllab/help.cpp:308 mgllab/help.cpp:368
+#: mgllab/help.cpp:484
 msgid "Close"
 msgstr ""
 
@@ -991,7 +991,7 @@ msgstr ""
 msgid "Column expr"
 msgstr ""
 
-#: mgllab/dialogs.cpp:724 mgllab/mgllab.cpp:305
+#: mgllab/dialogs.cpp:724 mgllab/mgllab.cpp:303
 msgid "Command"
 msgstr ""
 
@@ -1047,7 +1047,7 @@ msgstr ""
 msgid "Copy data from another variable"
 msgstr ""
 
-#: widgets/fltk.cpp:811
+#: widgets/fltk.cpp:812
 msgid "Copy graphics"
 msgstr ""
 
@@ -1055,7 +1055,7 @@ msgstr ""
 msgid "Copy graphics to clipboard (Ctrl+Shift+G)."
 msgstr ""
 
-#: widgets/fltk.cpp:855
+#: widgets/fltk.cpp:856
 msgid "Copy image to clipboard"
 msgstr ""
 
@@ -1075,7 +1075,7 @@ msgstr ""
 msgid "Copy selection to clipboard"
 msgstr ""
 
-#: udav/text_pnl.cpp:533 mgllab/mgllab.cpp:295
+#: udav/text_pnl.cpp:533 mgllab/mgllab.cpp:293
 msgid "Copy text"
 msgstr ""
 
@@ -1196,7 +1196,7 @@ msgstr ""
 msgid "Cut selected text to clipboard (Ctrl+X)."
 msgstr ""
 
-#: udav/text_pnl.cpp:528 mgllab/mgllab.cpp:294
+#: udav/text_pnl.cpp:528 mgllab/mgllab.cpp:292
 msgid "Cut text"
 msgstr ""
 
@@ -1841,7 +1841,7 @@ msgstr ""
 msgid "Edges"
 msgstr ""
 
-#: udav/text_pnl.cpp:84 mgllab/mgllab.cpp:292
+#: udav/text_pnl.cpp:84 mgllab/mgllab.cpp:290
 msgid "Edit"
 msgstr ""
 
@@ -1853,13 +1853,13 @@ msgstr ""
 msgid "Elliptic"
 msgstr ""
 
-#: udav/prop_dlg.cpp:171 mgllab/mgllab.cpp:474
+#: udav/prop_dlg.cpp:171 mgllab/mgllab.cpp:471
 msgid "Enable keywords completion"
 msgstr ""
 
 #. pure = new QCheckBox(_("Disable face drawing (faster) for mouse rotation/shift/zoom."), this);
 #. pure->setChecked(mglAutoPure);	v->addWidget(pure);	pure->setEnabled(false);
-#: udav/prop_dlg.cpp:169 mgllab/mgllab.cpp:476
+#: udav/prop_dlg.cpp:169 mgllab/mgllab.cpp:473
 msgid "Enable mouse wheel for zooming"
 msgstr ""
 
@@ -1989,7 +1989,7 @@ msgstr ""
 msgid "Execute if condition is false"
 msgstr ""
 
-#: mgllab/mgllab.cpp:472
+#: mgllab/mgllab.cpp:469
 msgid "Execute script after loading"
 msgstr ""
 
@@ -2005,7 +2005,7 @@ msgstr ""
 msgid "Existed data arrays"
 msgstr ""
 
-#: mgllab/mgllab.cpp:290
+#: mgllab/mgllab.cpp:288
 msgid "Exit"
 msgstr ""
 
@@ -2021,7 +2021,7 @@ msgstr ""
 msgid "Export Data?"
 msgstr ""
 
-#: widgets/fltk.cpp:789
+#: widgets/fltk.cpp:790
 msgid "Export as ..."
 msgstr ""
 
@@ -2068,7 +2068,7 @@ msgstr ""
 
 #. file menu
 #: widgets/qt.cpp:1066 udav/udav_wnd.cpp:281 udav/dat_pnl.cpp:681
-#: mgllab/mgllab.cpp:277 mgllab/table.cpp:748
+#: mgllab/mgllab.cpp:275 mgllab/table.cpp:748
 msgid "File"
 msgstr ""
 
@@ -2076,7 +2076,7 @@ msgstr ""
 msgid "File %1 saved"
 msgstr ""
 
-#: mgllab/mgllab.cpp:227
+#: mgllab/mgllab.cpp:225
 msgid "File is exesist. Overwrite it?"
 msgstr ""
 
@@ -2084,7 +2084,7 @@ msgstr ""
 msgid "File name"
 msgstr ""
 
-#: mgllab/mgllab.cpp:303
+#: mgllab/mgllab.cpp:301
 msgid "File path"
 msgstr ""
 
@@ -2092,7 +2092,7 @@ msgstr ""
 msgid "File to export"
 msgstr ""
 
-#: mgllab/editor.cpp:267 mgllab/mgllab.cpp:396
+#: mgllab/editor.cpp:267 mgllab/mgllab.cpp:394
 msgid "File/Recent files"
 msgstr ""
 
@@ -2156,7 +2156,7 @@ msgstr ""
 msgid "Find minimal value over direction"
 msgstr ""
 
-#: udav/text_pnl.cpp:551 mgllab/mgllab.cpp:301
+#: udav/text_pnl.cpp:551 mgllab/mgllab.cpp:299
 msgid "Find next"
 msgstr ""
 
@@ -2188,7 +2188,7 @@ msgstr ""
 msgid "Find/Replace"
 msgstr ""
 
-#: mgllab/mgllab.cpp:300
+#: mgllab/mgllab.cpp:298
 msgid "Find|Replace"
 msgstr ""
 
@@ -2208,7 +2208,7 @@ msgstr ""
 msgid "Fit data to formula"
 msgstr ""
 
-#: udav/text_pnl.cpp:567 mgllab/mgllab.cpp:307
+#: udav/text_pnl.cpp:567 mgllab/mgllab.cpp:305
 msgid "Fitted formula"
 msgstr ""
 
@@ -2224,11 +2224,11 @@ msgstr ""
 msgid "Fog dist."
 msgstr ""
 
-#: mgllab/mgllab.cpp:533
+#: mgllab/mgllab.cpp:530
 msgid "Folder for help files"
 msgstr ""
 
-#: udav/text_pnl.cpp:587 mgllab/mgllab.cpp:304
+#: udav/text_pnl.cpp:587 mgllab/mgllab.cpp:302
 msgid "Folder path"
 msgstr ""
 
@@ -2236,7 +2236,7 @@ msgstr ""
 msgid "Font"
 msgstr ""
 
-#: mgllab/mgllab.cpp:524
+#: mgllab/mgllab.cpp:521
 msgid "Font file name"
 msgstr ""
 
@@ -2244,11 +2244,11 @@ msgstr ""
 msgid "Font files (*.vfm)"
 msgstr ""
 
-#: mgllab/mgllab.cpp:463
+#: mgllab/mgllab.cpp:460
 msgid "Font kind"
 msgstr ""
 
-#: mgllab/mgllab.cpp:465
+#: mgllab/mgllab.cpp:462
 msgid "Font size"
 msgstr ""
 
@@ -2277,7 +2277,7 @@ msgstr ""
 msgid "From"
 msgstr ""
 
-#: mgllab/mgllab.cpp:592
+#: mgllab/mgllab.cpp:589
 msgid "Function"
 msgstr ""
 
@@ -2349,7 +2349,7 @@ msgid "Go to the specified slice for 3D data."
 msgstr ""
 
 #: widgets/qt.cpp:1095 widgets/qt.cpp:1097 udav/plot_pnl.cpp:66
-#: mgllab/mgllab.cpp:319
+#: mgllab/mgllab.cpp:317
 msgid "Graphics"
 msgstr ""
 
@@ -2357,7 +2357,7 @@ msgstr ""
 msgid "Graphics setup"
 msgstr ""
 
-#: widgets/fltk.cpp:927
+#: widgets/fltk.cpp:928
 msgid "Graphics/Adjust size"
 msgstr ""
 
@@ -2366,143 +2366,143 @@ msgstr ""
 #. /< Callback function for prev frame
 #. /< Callback function for delay
 #. /< Callback function for reloading
-#: widgets/fltk.cpp:921 include/mgl2/Fl_MathGL.h:150
+#: widgets/fltk.cpp:922 include/mgl2/Fl_MathGL.h:150
 msgid "Graphics/Alpha"
 msgstr ""
 
-#: widgets/fltk.cpp:956
+#: widgets/fltk.cpp:957
 msgid "Graphics/Animation/Next frame"
 msgstr ""
 
-#: widgets/fltk.cpp:957
+#: widgets/fltk.cpp:958
 msgid "Graphics/Animation/Prev frame"
 msgstr ""
 
-#: mgllab/mgllab.cpp:371
+#: mgllab/mgllab.cpp:369
 msgid "Graphics/Animation/Setup animation"
 msgstr ""
 
-#: widgets/fltk.cpp:955 include/mgl2/Fl_MathGL.h:152
+#: widgets/fltk.cpp:956 include/mgl2/Fl_MathGL.h:152
 msgid "Graphics/Animation/Slideshow"
 msgstr ""
 
-#: widgets/fltk.cpp:931
+#: widgets/fltk.cpp:932
 msgid "Graphics/Copy click coor."
 msgstr ""
 
-#: widgets/fltk.cpp:930
+#: widgets/fltk.cpp:931
 msgid "Graphics/Copy graphics"
 msgstr ""
 
-#: widgets/fltk.cpp:944
+#: widgets/fltk.cpp:945
 msgid "Graphics/Export/as BMP"
 msgstr ""
 
-#: widgets/fltk.cpp:942
+#: widgets/fltk.cpp:943
 msgid "Graphics/Export/as GIF"
 msgstr ""
 
-#: widgets/fltk.cpp:939
+#: widgets/fltk.cpp:940
 msgid "Graphics/Export/as JPEG"
 msgstr ""
 
-#: widgets/fltk.cpp:950
+#: widgets/fltk.cpp:951
 msgid "Graphics/Export/as OBJ"
 msgstr ""
 
-#: widgets/fltk.cpp:951
+#: widgets/fltk.cpp:952
 msgid "Graphics/Export/as OFF"
 msgstr ""
 
-#: widgets/fltk.cpp:935
+#: widgets/fltk.cpp:936
 msgid "Graphics/Export/as PNG"
 msgstr ""
 
-#: widgets/fltk.cpp:949
+#: widgets/fltk.cpp:950
 msgid "Graphics/Export/as PRC"
 msgstr ""
 
-#: widgets/fltk.cpp:952
+#: widgets/fltk.cpp:953
 msgid "Graphics/Export/as STL"
 msgstr ""
 
-#: widgets/fltk.cpp:945
+#: widgets/fltk.cpp:946
 msgid "Graphics/Export/as SVG"
 msgstr ""
 
-#: widgets/fltk.cpp:948
+#: widgets/fltk.cpp:949
 msgid "Graphics/Export/as TeX"
 msgstr ""
 
-#: widgets/fltk.cpp:953
+#: widgets/fltk.cpp:954
 msgid "Graphics/Export/as XYZ"
 msgstr ""
 
-#: widgets/fltk.cpp:947
+#: widgets/fltk.cpp:948
 msgid "Graphics/Export/as bitmap EPS"
 msgstr ""
 
-#: widgets/fltk.cpp:936
+#: widgets/fltk.cpp:937
 msgid "Graphics/Export/as solid PNG"
 msgstr ""
 
-#: widgets/fltk.cpp:946
+#: widgets/fltk.cpp:947
 msgid "Graphics/Export/as vector EPS"
 msgstr ""
 
-#: widgets/fltk.cpp:923 include/mgl2/Fl_MathGL.h:153
+#: widgets/fltk.cpp:924 include/mgl2/Fl_MathGL.h:153
 msgid "Graphics/Grid"
 msgstr ""
 
-#: widgets/fltk.cpp:922 include/mgl2/Fl_MathGL.h:151
+#: widgets/fltk.cpp:923 include/mgl2/Fl_MathGL.h:151
 msgid "Graphics/Light"
 msgstr ""
 
-#: widgets/fltk.cpp:932 include/mgl2/Fl_MathGL.h:159 mgllab/mgllab.cpp:372
+#: widgets/fltk.cpp:933 include/mgl2/Fl_MathGL.h:159 mgllab/mgllab.cpp:370
 msgid "Graphics/Pause calc"
 msgstr ""
 
-#: mgllab/mgllab.cpp:370
+#: mgllab/mgllab.cpp:368
 msgid "Graphics/Primitive"
 msgstr ""
 
-#: widgets/fltk.cpp:926
+#: widgets/fltk.cpp:927
 msgid "Graphics/Redraw"
 msgstr ""
 
-#: widgets/fltk.cpp:928
+#: widgets/fltk.cpp:929
 msgid "Graphics/Reload data"
 msgstr ""
 
-#: widgets/fltk.cpp:925
+#: widgets/fltk.cpp:926
 msgid "Graphics/Restore"
 msgstr ""
 
-#: widgets/fltk.cpp:929
+#: widgets/fltk.cpp:930
 msgid "Graphics/Stop"
 msgstr ""
 
-#: widgets/fltk.cpp:963
+#: widgets/fltk.cpp:964
 msgid "Graphics/Transform/Move down"
 msgstr ""
 
-#: widgets/fltk.cpp:959
+#: widgets/fltk.cpp:960
 msgid "Graphics/Transform/Move left"
 msgstr ""
 
-#: widgets/fltk.cpp:964
+#: widgets/fltk.cpp:965
 msgid "Graphics/Transform/Move right"
 msgstr ""
 
-#: widgets/fltk.cpp:960
+#: widgets/fltk.cpp:961
 msgid "Graphics/Transform/Move up"
 msgstr ""
 
-#: widgets/fltk.cpp:961
+#: widgets/fltk.cpp:962
 msgid "Graphics/Transform/Zoom in"
 msgstr ""
 
-#: widgets/fltk.cpp:962
+#: widgets/fltk.cpp:963
 msgid "Graphics/Transform/Zoom out"
 msgstr ""
 
@@ -2545,8 +2545,8 @@ msgid "Height of selected cells"
 msgstr ""
 
 #: widgets/qt.cpp:1276 udav/help_pnl.cpp:57 udav/udav_wnd.cpp:231
-#: udav/udav_wnd.cpp:323 mgllab/mgllab.cpp:329 mgllab/mgllab.cpp:330
-#: mgllab/mgllab.cpp:358
+#: udav/udav_wnd.cpp:323 mgllab/mgllab.cpp:327 mgllab/mgllab.cpp:328
+#: mgllab/mgllab.cpp:356
 msgid "Help"
 msgstr ""
 
@@ -2556,7 +2556,7 @@ msgid ""
 "Options are used for additional plot tunning."
 msgstr ""
 
-#: udav/udav_wnd.cpp:186 mgllab/mgllab.cpp:298
+#: udav/udav_wnd.cpp:186 mgllab/mgllab.cpp:296
 msgid "Hidden plots"
 msgstr ""
 
@@ -2568,11 +2568,11 @@ msgstr ""
 msgid "Hide selected plots."
 msgstr ""
 
-#: udav/prop_dlg.cpp:173 mgllab/mgllab.cpp:475
+#: udav/prop_dlg.cpp:173 mgllab/mgllab.cpp:472
 msgid "Highlight current object(s)"
 msgstr ""
 
-#: udav/udav_wnd.cpp:328 mgllab/mgllab.cpp:331
+#: udav/udav_wnd.cpp:328 mgllab/mgllab.cpp:329
 msgid "Hints"
 msgstr ""
 
@@ -2592,7 +2592,7 @@ msgstr ""
 msgid "ID"
 msgstr ""
 
-#: mgllab/mgllab.cpp:333
+#: mgllab/mgllab.cpp:331
 msgid "Icon list"
 msgstr ""
 
@@ -2652,16 +2652,16 @@ msgstr ""
 msgid "Info"
 msgstr ""
 
-#: udav/info_dlg.cpp:55 mgllab/help.cpp:353
+#: udav/info_dlg.cpp:55 mgllab/help.cpp:354
 msgid "Information"
 msgstr ""
 
-#: mgllab/mgllab.cpp:306
+#: mgllab/mgllab.cpp:304
 msgid "Inplot"
 msgstr ""
 
 #. insert menu
-#: udav/text_pnl.cpp:557 mgllab/mgllab.cpp:302
+#: udav/text_pnl.cpp:557 mgllab/mgllab.cpp:300
 msgid "Insert"
 msgstr ""
 
@@ -2783,7 +2783,7 @@ msgstr ""
 msgid "Language for UDAV"
 msgstr ""
 
-#: mgllab/mgllab.cpp:478
+#: mgllab/mgllab.cpp:475
 msgid "Language for mgllab"
 msgstr ""
 
@@ -2915,11 +2915,11 @@ msgstr ""
 msgid "MGL commands for selected group"
 msgstr ""
 
-#: mgllab/mgllab.cpp:214
+#: mgllab/mgllab.cpp:212
 msgid "MGL files \t*.mgl"
 msgstr ""
 
-#: mgllab/mgllab.cpp:173
+#: mgllab/mgllab.cpp:172
 msgid ""
 "MGL files \t*.mgl\n"
 "DAT files \t*.{dat,csv}"
@@ -2977,7 +2977,7 @@ msgstr ""
 msgid "Manual mask"
 msgstr ""
 
-#: udav/text_pnl.cpp:591 mgllab/mgllab.cpp:308
+#: udav/text_pnl.cpp:591 mgllab/mgllab.cpp:306
 msgid "Manual primitives"
 msgstr ""
 
@@ -3063,7 +3063,7 @@ msgstr ""
 msgid "Maximum of"
 msgstr ""
 
-#: udav/mem_pnl.cpp:68 udav/mem_pnl.cpp:73 mgllab/mgllab.cpp:360
+#: udav/mem_pnl.cpp:68 udav/mem_pnl.cpp:73 mgllab/mgllab.cpp:358
 msgid "Memory"
 msgstr ""
 
@@ -3075,7 +3075,7 @@ msgstr ""
 msgid "MeshNum"
 msgstr ""
 
-#: mgllab/mgllab.cpp:327
+#: mgllab/mgllab.cpp:325
 msgid "Messages"
 msgstr ""
 
@@ -3253,7 +3253,7 @@ msgstr ""
 msgid "New order of dimensions"
 msgstr ""
 
-#: udav/udav_wnd.cpp:282 mgllab/mgllab.cpp:278
+#: udav/udav_wnd.cpp:282 mgllab/mgllab.cpp:276
 msgid "New script"
 msgstr ""
 
@@ -3285,7 +3285,7 @@ msgstr ""
 msgid "Next slide"
 msgstr ""
 
-#: mgllab/help.cpp:135 mgllab/mgllab.cpp:227
+#: mgllab/help.cpp:135 mgllab/mgllab.cpp:225
 msgid "No"
 msgstr ""
 
@@ -3325,7 +3325,7 @@ msgstr ""
 msgid "No text rotation"
 msgstr ""
 
-#: widgets/fltk.cpp:812
+#: widgets/fltk.cpp:813
 msgid "Normal view"
 msgstr ""
 
@@ -3396,7 +3396,7 @@ msgstr ""
 #: udav/data_dlg.cpp:92 udav/subplot_dlg.cpp:221 mgllab/mathgl.cpp:196
 #: mgllab/dialogs.cpp:121 mgllab/dialogs.cpp:165 mgllab/dialogs.cpp:411
 #: mgllab/dialogs.cpp:585 mgllab/dialogs.cpp:750 mgllab/dialogs.cpp:1072
-#: mgllab/dialogs.cpp:1319 mgllab/dialogs.cpp:1474 mgllab/mgllab.cpp:483
+#: mgllab/dialogs.cpp:1319 mgllab/dialogs.cpp:1474 mgllab/mgllab.cpp:480
 #: mgllab/table.cpp:621
 msgid "OK"
 msgstr ""
@@ -3405,7 +3405,7 @@ msgstr ""
 msgid "Only current slice will be inserted"
 msgstr ""
 
-#: mgllab/mgllab.cpp:172
+#: mgllab/mgllab.cpp:171
 msgid "Open File?"
 msgstr ""
 
@@ -3427,7 +3427,7 @@ msgstr ""
 msgid "Open file"
 msgstr ""
 
-#: mgllab/mgllab.cpp:279
+#: mgllab/mgllab.cpp:277
 msgid "Open file ..."
 msgstr ""
 
@@ -3456,7 +3456,7 @@ msgid "Operations"
 msgstr ""
 
 #: udav/prop_dlg.cpp:91 udav/newcmd_dlg.cpp:72 mgllab/dialogs.cpp:746
-#: mgllab/mgllab.cpp:310
+#: mgllab/mgllab.cpp:308
 msgid "Options"
 msgstr ""
 
@@ -3522,7 +3522,7 @@ msgstr ""
 msgid "Paste range of numbers from clipboard (Ctrl+Shift+P)."
 msgstr ""
 
-#: udav/text_pnl.cpp:538 mgllab/mgllab.cpp:296
+#: udav/text_pnl.cpp:538 mgllab/mgllab.cpp:294
 msgid "Paste text"
 msgstr ""
 
@@ -3534,11 +3534,11 @@ msgstr ""
 msgid "Paste text or data from clipboard (Ctrl+V)."
 msgstr ""
 
-#: mgllab/mgllab.cpp:469
+#: mgllab/mgllab.cpp:466
 msgid "Path for MathGL font (without extension)"
 msgstr ""
 
-#: udav/prop_dlg.cpp:110 mgllab/mgllab.cpp:466
+#: udav/prop_dlg.cpp:110 mgllab/mgllab.cpp:463
 msgid "Path for help files"
 msgstr ""
 
@@ -3551,7 +3551,7 @@ msgid "Pause calculation"
 msgstr ""
 
 #. Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(setPause()));
-#: widgets/fltk.cpp:891 widgets/qt.cpp:1270
+#: widgets/fltk.cpp:892 widgets/qt.cpp:1270
 msgid "Pause on/off external calculations"
 msgstr ""
 
@@ -3559,7 +3559,7 @@ msgstr ""
 msgid "Perform Runge-Kutta step"
 msgstr ""
 
-#: widgets/fltk.cpp:864
+#: widgets/fltk.cpp:865
 msgid "Phi angle (rotate in x*y plane)"
 msgstr ""
 
@@ -3590,11 +3590,11 @@ msgid ""
 "of plot, its style and so on."
 msgstr ""
 
-#: mgllab/mgllab.cpp:325
+#: mgllab/mgllab.cpp:323
 msgid "Plot setup"
 msgstr ""
 
-#: udav/text_pnl.cpp:571 mgllab/dialogs.cpp:312 mgllab/mgllab.cpp:309
+#: udav/text_pnl.cpp:571 mgllab/dialogs.cpp:312 mgllab/mgllab.cpp:307
 msgid "Plot style"
 msgstr ""
 
@@ -3622,7 +3622,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: mgllab/mgllab.cpp:566
+#: mgllab/mgllab.cpp:563
 msgid "Previous expressions"
 msgstr ""
 
@@ -3658,7 +3658,7 @@ msgstr ""
 msgid "Print message or information about the data"
 msgstr ""
 
-#: mgllab/mgllab.cpp:282
+#: mgllab/mgllab.cpp:280
 msgid "Print plot"
 msgstr ""
 
@@ -3686,7 +3686,7 @@ msgstr ""
 msgid "Program flow"
 msgstr ""
 
-#: udav/udav_wnd.cpp:312 mgllab/mgllab.cpp:322 mgllab/mgllab.cpp:461
+#: udav/udav_wnd.cpp:312 mgllab/mgllab.cpp:320 mgllab/mgllab.cpp:458
 msgid "Properties"
 msgstr ""
 
@@ -3698,7 +3698,7 @@ msgstr ""
 msgid "Pulse prop."
 msgstr ""
 
-#: udav/calc_dlg.cpp:127 mgllab/mgllab.cpp:600
+#: udav/calc_dlg.cpp:127 mgllab/mgllab.cpp:597
 msgid "Put function"
 msgstr ""
 
@@ -3752,7 +3752,7 @@ msgstr ""
 msgid "Read data with name 'id' from HDF file"
 msgstr ""
 
-#: udav/udav_wnd.cpp:268 mgllab/mgllab.cpp:367
+#: udav/udav_wnd.cpp:268 mgllab/mgllab.cpp:365
 msgid "Ready"
 msgstr ""
 
@@ -3760,7 +3760,7 @@ msgstr ""
 msgid "Rearrange data dimensions"
 msgstr ""
 
-#: udav/udav_wnd.cpp:301 mgllab/mgllab.cpp:283
+#: udav/udav_wnd.cpp:301 mgllab/mgllab.cpp:281
 msgid "Recent files"
 msgstr ""
 
@@ -3784,7 +3784,7 @@ msgstr ""
 msgid "Redraw picture for $0 equal to"
 msgstr ""
 
-#: widgets/fltk.cpp:813
+#: widgets/fltk.cpp:814
 msgid "Redraw plot"
 msgstr ""
 
@@ -3792,7 +3792,7 @@ msgstr ""
 msgid "Refresh"
 msgstr ""
 
-#: widgets/fltk.cpp:847
+#: widgets/fltk.cpp:848
 msgid "Refresh the picture"
 msgstr ""
 
@@ -3804,11 +3804,11 @@ msgstr ""
 msgid "Reload"
 msgstr ""
 
-#: widgets/fltk.cpp:815
+#: widgets/fltk.cpp:816
 msgid "Reload data"
 msgstr ""
 
-#: widgets/fltk.cpp:853
+#: widgets/fltk.cpp:854
 msgid "Reload data and refresh the picture"
 msgstr ""
 
@@ -3894,7 +3894,7 @@ msgstr ""
 msgid "Restore"
 msgstr ""
 
-#: widgets/fltk.cpp:844
+#: widgets/fltk.cpp:845
 msgid "Restore default graphics rotation, zoom and perspective"
 msgstr ""
 
@@ -3964,7 +3964,7 @@ msgstr ""
 msgid "Rotate on"
 msgstr ""
 
-#: widgets/fltk.cpp:840
+#: widgets/fltk.cpp:841
 msgid "Rotate picture by holding left mouse button"
 msgstr ""
 
@@ -3994,7 +3994,7 @@ msgid ""
 "then the dialog with slideshow options will appear."
 msgstr ""
 
-#: widgets/fltk.cpp:885
+#: widgets/fltk.cpp:886
 msgid "Run/Stop slideshow (graphics animation)"
 msgstr ""
 
@@ -4022,7 +4022,7 @@ msgstr ""
 msgid "Save Data?"
 msgstr ""
 
-#: widgets/fltk.cpp:572 mgllab/mgllab.cpp:214
+#: widgets/fltk.cpp:573 mgllab/mgllab.cpp:212
 msgid "Save File As?"
 msgstr ""
 
@@ -4030,7 +4030,7 @@ msgstr ""
 msgid "Save JPEG frames"
 msgstr ""
 
-#: udav/udav_wnd.cpp:290 mgllab/mgllab.cpp:281
+#: udav/udav_wnd.cpp:290 mgllab/mgllab.cpp:279
 msgid "Save as ..."
 msgstr ""
 
@@ -4050,11 +4050,11 @@ msgstr ""
 msgid "Save data to file"
 msgstr ""
 
-#: mgllab/mgllab.cpp:280
+#: mgllab/mgllab.cpp:278
 msgid "Save file"
 msgstr ""
 
-#: mgllab/mgllab.cpp:473
+#: mgllab/mgllab.cpp:470
 msgid "Save file before redrawing"
 msgstr ""
 
@@ -4094,7 +4094,7 @@ msgstr ""
 msgid "Search backward"
 msgstr ""
 
-#: udav/text_pnl.cpp:543 mgllab/mgllab.cpp:297
+#: udav/text_pnl.cpp:543 mgllab/mgllab.cpp:295
 msgid "Select all"
 msgstr ""
 
@@ -4150,7 +4150,7 @@ msgstr ""
 msgid "Set arbitrary position of plot in picture"
 msgstr ""
 
-#: udav/udav_wnd.cpp:315 mgllab/mgllab.cpp:323
+#: udav/udav_wnd.cpp:315 mgllab/mgllab.cpp:321
 msgid "Set arguments"
 msgstr ""
 
@@ -4390,11 +4390,11 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: mgllab/mgllab.cpp:321
+#: mgllab/mgllab.cpp:319
 msgid "Setup"
 msgstr ""
 
-#: mgllab/mgllab.cpp:324
+#: mgllab/mgllab.cpp:322
 msgid "Setup animation"
 msgstr ""
 
@@ -4442,19 +4442,19 @@ msgstr ""
 msgid "Shear plot"
 msgstr ""
 
-#: widgets/fltk.cpp:878
+#: widgets/fltk.cpp:879
 msgid "Shift the picture down"
 msgstr ""
 
-#: widgets/fltk.cpp:870
+#: widgets/fltk.cpp:871
 msgid "Shift the picture left"
 msgstr ""
 
-#: widgets/fltk.cpp:876
+#: widgets/fltk.cpp:877
 msgid "Shift the picture right"
 msgstr ""
 
-#: widgets/fltk.cpp:868
+#: widgets/fltk.cpp:869
 msgid "Shift the picture up"
 msgstr ""
 
@@ -4534,11 +4534,11 @@ msgstr ""
 msgid "Show info"
 msgstr ""
 
-#: mgllab/mgllab.cpp:299
+#: mgllab/mgllab.cpp:297
 msgid "Show lines"
 msgstr ""
 
-#: widgets/fltk.cpp:886
+#: widgets/fltk.cpp:887
 msgid "Show next frame in slideshow"
 msgstr ""
 
@@ -4546,7 +4546,7 @@ msgstr ""
 msgid "Show next slide (Ctrl+.)."
 msgstr ""
 
-#: widgets/fltk.cpp:881
+#: widgets/fltk.cpp:882
 msgid "Show previous frame in slideshow"
 msgstr ""
 
@@ -4706,7 +4706,7 @@ msgstr ""
 msgid "Stop"
 msgstr ""
 
-#: widgets/fltk.cpp:849
+#: widgets/fltk.cpp:850
 msgid "Stop drawing"
 msgstr ""
 
@@ -4855,7 +4855,7 @@ msgstr ""
 msgid "Switch on/off gray-scale mode"
 msgstr ""
 
-#: widgets/fltk.cpp:836
+#: widgets/fltk.cpp:837
 msgid "Switch on/off grid drawing"
 msgstr ""
 
@@ -4871,7 +4871,7 @@ msgstr ""
 msgid "Switch on/off lightning for the graphics (Ctrl+L)."
 msgstr ""
 
-#: widgets/fltk.cpp:833
+#: widgets/fltk.cpp:834
 msgid "Switch on/off lightning in the picture"
 msgstr ""
 
@@ -4901,7 +4901,7 @@ msgstr ""
 msgid "Switch on/off transparency for the graphics (Ctrl+T)."
 msgstr ""
 
-#: widgets/fltk.cpp:830
+#: widgets/fltk.cpp:831
 msgid "Switch on/off transparency in the picture"
 msgstr ""
 
@@ -4913,7 +4913,7 @@ msgstr ""
 msgid "Symmetrical?"
 msgstr ""
 
-#: src/addon.cpp:110 src/base_cf.cpp:266
+#: src/addon.cpp:111 src/base_cf.cpp:266
 #, c-format
 msgid "TEST: %s\n"
 msgstr ""
@@ -5035,7 +5035,7 @@ msgstr ""
 msgid "There is wrong command(s) in script"
 msgstr ""
 
-#: widgets/fltk.cpp:862
+#: widgets/fltk.cpp:863
 msgid "Theta angle (tilt z-axis)"
 msgstr ""
 
@@ -5267,7 +5267,7 @@ msgstr ""
 msgid "UDAV - about"
 msgstr ""
 
-#: udav/anim_dlg.cpp:104
+#: udav/anim_dlg.cpp:105
 msgid "UDAV - animation"
 msgstr ""
 
@@ -5310,7 +5310,7 @@ msgid "Underline"
 msgstr ""
 
 #. edit menu
-#: udav/text_pnl.cpp:516 mgllab/mgllab.cpp:293
+#: udav/text_pnl.cpp:516 mgllab/mgllab.cpp:291
 msgid "Undo"
 msgstr ""
 
@@ -5322,7 +5322,7 @@ msgstr ""
 msgid "Untitled"
 msgstr ""
 
-#: mgllab/mgllab.cpp:345 mgllab/mgllab.cpp:349
+#: mgllab/mgllab.cpp:343 mgllab/mgllab.cpp:347
 msgid "Untitled - mgllab"
 msgstr ""
 
@@ -5339,7 +5339,7 @@ msgstr ""
 msgid "Usage:\tmglconv [parameter(s)] scriptfile\n"
 msgstr ""
 
-#: mgllab/mgllab.cpp:416
+#: mgllab/mgllab.cpp:414
 #, c-format
 msgid "Usage:\tmgllab [parameter(s)] scriptfile\n"
 msgstr ""
@@ -5375,7 +5375,7 @@ msgstr ""
 msgid "Use dots plot for preview"
 msgstr ""
 
-#: mgllab/mgllab.cpp:477
+#: mgllab/mgllab.cpp:474
 msgid "Use multi-threading for drawing"
 msgstr ""
 
@@ -5425,7 +5425,7 @@ msgstr ""
 msgid "Whole area"
 msgstr ""
 
-#: mgllab/mgllab.cpp:480
+#: mgllab/mgllab.cpp:477
 msgid "Widget scheme"
 msgstr ""
 
@@ -5652,7 +5652,7 @@ msgstr ""
 msgid "You should put text inside ' ' for argument "
 msgstr ""
 
-#: udav/anim_dlg.cpp:105
+#: udav/anim_dlg.cpp:106
 msgid "You should select one of case"
 msgstr ""
 
@@ -5712,7 +5712,7 @@ msgstr ""
 msgid "Zoom in graphics."
 msgstr ""
 
-#: widgets/fltk.cpp:843
+#: widgets/fltk.cpp:844
 msgid "Zoom in selected region of the picture"
 msgstr ""
 
@@ -5721,7 +5721,7 @@ msgstr ""
 msgid "Zoom in text"
 msgstr ""
 
-#: widgets/fltk.cpp:872
+#: widgets/fltk.cpp:873
 msgid "Zoom in the picture"
 msgstr ""
 
@@ -5737,7 +5737,7 @@ msgstr ""
 msgid "Zoom out text"
 msgstr ""
 
-#: widgets/fltk.cpp:874
+#: widgets/fltk.cpp:875
 msgid "Zoom out the picture"
 msgstr ""
 
@@ -5846,7 +5846,7 @@ msgstr ""
 msgid "center"
 msgstr ""
 
-#: widgets/fltk.cpp:768
+#: widgets/fltk.cpp:769
 #, c-format
 msgid "click at %g, %g, %g"
 msgstr ""
@@ -6028,7 +6028,7 @@ msgid ""
 "Current version is 2.%g\n"
 msgstr ""
 
-#: mgllab/mgllab.cpp:415
+#: mgllab/mgllab.cpp:413
 #, c-format
 msgid ""
 "mgllab draw mgl script interactively.\n"
@@ -6243,7 +6243,7 @@ msgstr ""
 msgid "to"
 msgstr ""
 
-#: mgllab/mgllab.cpp:564
+#: mgllab/mgllab.cpp:561
 msgid "to script"
 msgstr ""
 
diff --git a/mathgl_es.po b/mathgl_es.po
index ec6a946..1bb71d6 100644
--- a/mathgl_es.po
+++ b/mathgl_es.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: MathGL2 2.4.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-05-17 07:55+0300\n"
+"POT-Creation-Date: 2017-07-12 22:00+0300\n"
 "PO-Revision-Date: 2017-05-11 23:14-0400\n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -18,7 +18,7 @@ msgstr ""
 "X-Generator: Poedit 1.8.7.1\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: mgllab/mgllab.cpp:417
+#: mgllab/mgllab.cpp:415
 #, c-format
 msgid ""
 "\t-1 str       set str as argument $1 for script\n"
@@ -70,7 +70,7 @@ msgid ""
 "http://mathgl.sourceforge.net/"
 msgstr ""
 
-#: src/parser.cpp:1010
+#: src/parser.cpp:1013
 #, c-format
 msgid ""
 "\n"
@@ -79,7 +79,7 @@ msgstr ""
 "\n"
 "Cambiar datos temporales en linea %ld"
 
-#: src/parser.cpp:1008
+#: src/parser.cpp:1011
 #, c-format
 msgid ""
 "\n"
@@ -88,14 +88,14 @@ msgstr ""
 "\n"
 "Cadena de caracteres demasiado larga en linea %ld"
 
-#: src/parser.cpp:1009
+#: src/parser.cpp:1012
 #, c-format
 msgid ""
 "\n"
 "Unbalanced ' in line %ld"
 msgstr ""
 
-#: src/parser.cpp:1006
+#: src/parser.cpp:1009
 #, c-format
 msgid ""
 "\n"
@@ -104,7 +104,7 @@ msgstr ""
 "\n"
 "Argumento(s) incorrecto(s) en linea %ld"
 
-#: src/parser.cpp:1007
+#: src/parser.cpp:1010
 #, c-format
 msgid ""
 "\n"
@@ -148,7 +148,7 @@ msgstr " Nuevo"
 msgid " Save"
 msgstr " Guardar"
 
-#: mgllab/mgllab.cpp:227
+#: mgllab/mgllab.cpp:225
 msgid " Yes "
 msgstr " Si "
 
@@ -452,7 +452,7 @@ msgstr "Grafico 1D"
 msgid "1D plots"
 msgstr "Graficos 1D"
 
-#: mgllab/help.cpp:359
+#: mgllab/help.cpp:360
 msgid "1D view"
 msgstr "Vista 1D"
 
@@ -468,7 +468,7 @@ msgstr "Grafico 2D"
 msgid "2D plots"
 msgstr "Graficos 2D"
 
-#: mgllab/help.cpp:361
+#: mgllab/help.cpp:362
 msgid "2D view"
 msgstr "Vista 2D"
 
@@ -484,7 +484,7 @@ msgstr "Datos 3D con tamaños de archivo"
 msgid "3D plots"
 msgstr "graficos 3D"
 
-#: mgllab/help.cpp:363
+#: mgllab/help.cpp:364
 msgid "3D view"
 msgstr "Vista 3D"
 
@@ -522,7 +522,7 @@ msgstr ""
 msgid "@<-  Prev"
 msgstr ""
 
-#: widgets/qt.cpp:1277 udav/udav_wnd.cpp:331 mgllab/mgllab.cpp:332
+#: widgets/qt.cpp:1277 udav/udav_wnd.cpp:331 mgllab/mgllab.cpp:330
 msgid "About"
 msgstr "Acerca de"
 
@@ -648,11 +648,11 @@ msgstr "Anadir a"
 msgid "Add user-defined symbol"
 msgstr "Anadir simbolo definido por el usuario"
 
-#: widgets/fltk.cpp:851
+#: widgets/fltk.cpp:852
 msgid "Adjust picture size to fill drawing area"
 msgstr "Ajustar tamano de la imagen para llenar el area de grafico"
 
-#: widgets/fltk.cpp:814 widgets/qt.cpp:1139 udav/plot_pnl.cpp:337
+#: widgets/fltk.cpp:815 widgets/qt.cpp:1139 udav/plot_pnl.cpp:337
 msgid "Adjust size"
 msgstr "Ajustar tamano"
 
@@ -817,12 +817,12 @@ msgstr ""
 msgid "Backward"
 msgstr ""
 
-#: src/font.cpp:947
+#: src/font.cpp:948
 #, c-format
 msgid "Bad '%ls' at %zu\n"
 msgstr ""
 
-#: src/parser.cpp:766
+#: src/parser.cpp:769
 #, c-format
 msgid "Bad arguments for %ls: %ld instead of %d\n"
 msgstr ""
@@ -863,7 +863,7 @@ msgstr ""
 msgid "Both fields in zrange must be filled"
 msgstr ""
 
-#: src/parser.cpp:1423
+#: src/parser.cpp:1426
 msgid "Break for-loop"
 msgstr ""
 
@@ -898,8 +898,8 @@ msgstr ""
 
 #. TODO
 #. connect(hidden,SIGNAL(cursorPositionChanged()),this,SLOT(hiddenClicked()));
-#: udav/udav_wnd.cpp:194 udav/udav_wnd.cpp:206 mgllab/mgllab.cpp:326
-#: mgllab/mgllab.cpp:557
+#: udav/udav_wnd.cpp:194 udav/udav_wnd.cpp:206 mgllab/mgllab.cpp:324
+#: mgllab/mgllab.cpp:554
 msgid "Calculator"
 msgstr ""
 
@@ -911,7 +911,7 @@ msgstr ""
 #: mgllab/editor.cpp:282 mgllab/mathgl.cpp:164 mgllab/mathgl.cpp:195
 #: mgllab/dialogs.cpp:120 mgllab/dialogs.cpp:164 mgllab/dialogs.cpp:410
 #: mgllab/dialogs.cpp:584 mgllab/dialogs.cpp:749 mgllab/dialogs.cpp:1071
-#: mgllab/dialogs.cpp:1318 mgllab/dialogs.cpp:1473 mgllab/mgllab.cpp:482
+#: mgllab/dialogs.cpp:1318 mgllab/dialogs.cpp:1473 mgllab/mgllab.cpp:479
 #: mgllab/table.cpp:101 mgllab/table.cpp:179 mgllab/table.cpp:353
 #: mgllab/table.cpp:556 mgllab/table.cpp:619 mgllab/table.cpp:674
 msgid "Cancel"
@@ -921,7 +921,7 @@ msgstr ""
 msgid "Cannot triangulate this set!"
 msgstr ""
 
-#: udav/udav_wnd.cpp:226 mgllab/mgllab.cpp:355 mgllab/mgllab.cpp:356
+#: udav/udav_wnd.cpp:226 mgllab/mgllab.cpp:353 mgllab/mgllab.cpp:354
 msgid "Canvas"
 msgstr ""
 
@@ -984,8 +984,8 @@ msgstr ""
 
 #. o = new Fl_Button(180, 130, 25, 25);o->image(img_save);	o->tooltip("img_save");
 #: widgets/qt.cpp:1091 udav/find_dlg.cpp:52 udav/hint_dlg.cpp:70
-#: mgllab/editor.cpp:565 mgllab/help.cpp:308 mgllab/help.cpp:367
-#: mgllab/help.cpp:483
+#: mgllab/editor.cpp:565 mgllab/help.cpp:308 mgllab/help.cpp:368
+#: mgllab/help.cpp:484
 msgid "Close"
 msgstr ""
 
@@ -1029,7 +1029,7 @@ msgstr ""
 msgid "Column expr"
 msgstr ""
 
-#: mgllab/dialogs.cpp:724 mgllab/mgllab.cpp:305
+#: mgllab/dialogs.cpp:724 mgllab/mgllab.cpp:303
 msgid "Command"
 msgstr ""
 
@@ -1065,7 +1065,7 @@ msgstr ""
 msgid "Computes the flame fractal"
 msgstr ""
 
-#: src/parser.cpp:1431 src/parser.cpp:1435
+#: src/parser.cpp:1434 src/parser.cpp:1438
 msgid "Conditional operator"
 msgstr ""
 
@@ -1085,7 +1085,7 @@ msgstr ""
 msgid "Copy data from another variable"
 msgstr ""
 
-#: widgets/fltk.cpp:811
+#: widgets/fltk.cpp:812
 msgid "Copy graphics"
 msgstr ""
 
@@ -1093,7 +1093,7 @@ msgstr ""
 msgid "Copy graphics to clipboard (Ctrl+Shift+G)."
 msgstr ""
 
-#: widgets/fltk.cpp:855
+#: widgets/fltk.cpp:856
 msgid "Copy image to clipboard"
 msgstr ""
 
@@ -1113,7 +1113,7 @@ msgstr ""
 msgid "Copy selection to clipboard"
 msgstr ""
 
-#: udav/text_pnl.cpp:533 mgllab/mgllab.cpp:295
+#: udav/text_pnl.cpp:533 mgllab/mgllab.cpp:293
 msgid "Copy text"
 msgstr ""
 
@@ -1190,7 +1190,7 @@ msgstr ""
 msgid "Create new empty script window (Ctrl+N)."
 msgstr ""
 
-#: src/parser.cpp:1436
+#: src/parser.cpp:1439
 msgid "Creates new variable from list of numbers or data"
 msgstr ""
 
@@ -1234,7 +1234,7 @@ msgstr ""
 msgid "Cut selected text to clipboard (Ctrl+X)."
 msgstr ""
 
-#: udav/text_pnl.cpp:528 mgllab/mgllab.cpp:294
+#: udav/text_pnl.cpp:528 mgllab/mgllab.cpp:292
 msgid "Cut text"
 msgstr ""
 
@@ -1304,19 +1304,19 @@ msgstr ""
 msgid "Decrease font size"
 msgstr ""
 
-#: src/parser.cpp:1427
+#: src/parser.cpp:1430
 msgid "Define constant or parameter"
 msgstr ""
 
-#: src/parser.cpp:1426
+#: src/parser.cpp:1429
 msgid "Define parameter as character"
 msgstr ""
 
-#: src/parser.cpp:1428
+#: src/parser.cpp:1431
 msgid "Define parameter as numerical value"
 msgstr ""
 
-#: src/parser.cpp:1422
+#: src/parser.cpp:1425
 msgid "Define parameter from user input"
 msgstr ""
 
@@ -1438,31 +1438,31 @@ msgstr ""
 msgid "Double diff."
 msgstr ""
 
-#: src/exec_gr.cpp:1032
+#: src/exec_gr.cpp:1043
 msgid "Draw Bifurcation diagram"
 msgstr ""
 
-#: src/exec_gr.cpp:1067
+#: src/exec_gr.cpp:1078
 msgid "Draw Iris plots"
 msgstr ""
 
-#: src/exec_gr.cpp:1069
+#: src/exec_gr.cpp:1080
 msgid "Draw Lamerey diagram"
 msgstr ""
 
-#: src/exec_gr.cpp:1073
+#: src/exec_gr.cpp:1084
 msgid "Draw Open-High-Low-Close (OHLC) diagram"
 msgstr ""
 
-#: src/exec_gr.cpp:1076
+#: src/exec_gr.cpp:1087
 msgid "Draw Poincare map"
 msgstr ""
 
-#: src/exec_gr.cpp:1082
+#: src/exec_gr.cpp:1093
 msgid "Draw STFA diagram"
 msgstr ""
 
-#: src/exec_gr.cpp:1094
+#: src/exec_gr.cpp:1105
 msgid "Draw TeX mark at point position"
 msgstr ""
 
@@ -1470,19 +1470,23 @@ msgstr ""
 msgid "Draw angle arc"
 msgstr ""
 
-#: src/exec_gr.cpp:1026
+#: src/exec_gr.cpp:1036
 msgid "Draw area plot for 1D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1029
+#: src/exec_gr.cpp:1039
 msgid "Draw bars for 1D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1031
+#: src/exec_gr.cpp:1041
 msgid "Draw belts"
 msgstr ""
 
-#: src/exec_gr.cpp:1092
+#: src/exec_gr.cpp:1042
+msgid "Draw belts colored by other data"
+msgstr ""
+
+#: src/exec_gr.cpp:1103
 msgid "Draw binormales for 1D data"
 msgstr ""
 
@@ -1494,19 +1498,19 @@ msgstr ""
 msgid "Draw bounding box"
 msgstr ""
 
-#: src/exec_gr.cpp:1034
+#: src/exec_gr.cpp:1045
 msgid "Draw boxes"
 msgstr ""
 
-#: src/exec_gr.cpp:1033
+#: src/exec_gr.cpp:1044
 msgid "Draw boxplot for 2D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1035
+#: src/exec_gr.cpp:1046
 msgid "Draw candlestick chart"
 msgstr ""
 
-#: src/exec_gr.cpp:1036
+#: src/exec_gr.cpp:1047
 msgid "Draw chart"
 msgstr ""
 
@@ -1514,7 +1518,7 @@ msgstr ""
 msgid "Draw circle"
 msgstr ""
 
-#: src/exec_gr.cpp:1037
+#: src/exec_gr.cpp:1048
 msgid "Draw cloud"
 msgstr ""
 
@@ -1526,43 +1530,43 @@ msgstr ""
 msgid "Draw cone"
 msgstr ""
 
-#: src/exec_gr.cpp:1038
+#: src/exec_gr.cpp:1049
 msgid "Draw cones for 1D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1039
+#: src/exec_gr.cpp:1050
 msgid "Draw contour lines"
 msgstr ""
 
-#: src/exec_gr.cpp:1049
+#: src/exec_gr.cpp:1060
 msgid "Draw contour lines at x-slice (or x-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1050
+#: src/exec_gr.cpp:1061
 msgid "Draw contour lines at y-slice (or y-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1051
+#: src/exec_gr.cpp:1062
 msgid "Draw contour lines at z-slice (or z-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1040
+#: src/exec_gr.cpp:1051
 msgid "Draw contour lines for 3D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1099
+#: src/exec_gr.cpp:1110
 msgid "Draw contour lines for surface of triangles"
 msgstr ""
 
-#: src/exec_gr.cpp:1047
+#: src/exec_gr.cpp:1058
 msgid "Draw contour lines on parametric surface"
 msgstr ""
 
-#: src/exec_gr.cpp:1048
+#: src/exec_gr.cpp:1059
 msgid "Draw contour tubes"
 msgstr ""
 
-#: src/exec_gr.cpp:1100
+#: src/exec_gr.cpp:1111
 msgid "Draw contour tubes for surface of triangles"
 msgstr ""
 
@@ -1570,35 +1574,35 @@ msgstr ""
 msgid "Draw curve"
 msgstr ""
 
-#: src/exec_gr.cpp:1102
+#: src/exec_gr.cpp:1113
 msgid "Draw curve by tube"
 msgstr ""
 
-#: src/exec_gr.cpp:1053
+#: src/exec_gr.cpp:1064
 msgid "Draw density plot"
 msgstr ""
 
-#: src/exec_gr.cpp:1054
+#: src/exec_gr.cpp:1065
 msgid "Draw density plot at slices of 3D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1055
+#: src/exec_gr.cpp:1066
 msgid "Draw density plot at x-slice (or x-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1056
+#: src/exec_gr.cpp:1067
 msgid "Draw density plot at y-slice (or y-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1057
+#: src/exec_gr.cpp:1068
 msgid "Draw density plot at z-slice (or z-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1058
+#: src/exec_gr.cpp:1069
 msgid "Draw dew plot"
 msgstr ""
 
-#: src/exec_gr.cpp:1059
+#: src/exec_gr.cpp:1070
 msgid "Draw dots for arbitrary data points"
 msgstr ""
 
@@ -1614,7 +1618,7 @@ msgstr ""
 msgid "Draw error box"
 msgstr ""
 
-#: src/exec_gr.cpp:1060
+#: src/exec_gr.cpp:1071
 msgid "Draw error boxes"
 msgstr ""
 
@@ -1634,19 +1638,19 @@ msgstr ""
 msgid "Draw face perpendicular to z-axis"
 msgstr ""
 
-#: src/exec_gr.cpp:1079
+#: src/exec_gr.cpp:1090
 msgid "Draw filled region (ribbon) between 2 curves"
 msgstr ""
 
-#: src/exec_gr.cpp:1074
+#: src/exec_gr.cpp:1085
 msgid "Draw flow pipes for vector field"
 msgstr ""
 
-#: src/exec_gr.cpp:1062
+#: src/exec_gr.cpp:1073
 msgid "Draw flow threads for vector field"
 msgstr ""
 
-#: src/exec_gr.cpp:1064
+#: src/exec_gr.cpp:1075
 msgid "Draw gradient lines for scalar field"
 msgstr ""
 
@@ -1654,43 +1658,43 @@ msgstr ""
 msgid "Draw grid"
 msgstr ""
 
-#: src/exec_gr.cpp:1066
+#: src/exec_gr.cpp:1077
 msgid "Draw grid at slices of 3D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1065
+#: src/exec_gr.cpp:1076
 msgid "Draw grid for data array(s)"
 msgstr ""
 
-#: src/exec_gr.cpp:1028
+#: src/exec_gr.cpp:1038
 msgid "Draw horizontal bars for 1D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1095
+#: src/exec_gr.cpp:1106
 msgid "Draw horizontal tiles"
 msgstr ""
 
-#: src/exec_gr.cpp:1096
+#: src/exec_gr.cpp:1107
 msgid "Draw horizontal tiles with variable size"
 msgstr ""
 
-#: src/exec_gr.cpp:1084
+#: src/exec_gr.cpp:1095
 msgid "Draw isosurface for 3D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1087
+#: src/exec_gr.cpp:1098
 msgid "Draw isosurface for 3D data colored and transpared by other data"
 msgstr ""
 
-#: src/exec_gr.cpp:1086
+#: src/exec_gr.cpp:1097
 msgid "Draw isosurface for 3D data colored by other data"
 msgstr ""
 
-#: src/exec_gr.cpp:1085
+#: src/exec_gr.cpp:1096
 msgid "Draw isosurface for 3D data transpared by other data"
 msgstr ""
 
-#: src/exec_gr.cpp:1068
+#: src/exec_gr.cpp:1079
 msgid "Draw label at arbitrary position"
 msgstr ""
 
@@ -1718,15 +1722,15 @@ msgstr ""
 msgid "Draw line"
 msgstr ""
 
-#: src/exec_gr.cpp:1070
+#: src/exec_gr.cpp:1081
 msgid "Draw mapping plot"
 msgstr ""
 
-#: src/exec_gr.cpp:1071
+#: src/exec_gr.cpp:1082
 msgid "Draw mark plot for 1D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1072
+#: src/exec_gr.cpp:1083
 msgid "Draw mesh surface"
 msgstr ""
 
@@ -1738,15 +1742,15 @@ msgstr ""
 msgid "Draw polygon"
 msgstr ""
 
-#: src/exec_gr.cpp:1030
+#: src/exec_gr.cpp:1040
 msgid "Draw quasi-optical beam"
 msgstr ""
 
-#: src/exec_gr.cpp:1078
+#: src/exec_gr.cpp:1089
 msgid "Draw radar chart"
 msgstr ""
 
-#: src/exec_gr.cpp:1052
+#: src/exec_gr.cpp:1063
 msgid "Draw reconstructed surface for arbitrary data points"
 msgstr ""
 
@@ -1758,43 +1762,43 @@ msgstr ""
 msgid "Draw rhombus"
 msgstr ""
 
-#: src/exec_gr.cpp:1044
+#: src/exec_gr.cpp:1055
 msgid "Draw solid contour lines at x-slice (or x-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1045
+#: src/exec_gr.cpp:1056
 msgid "Draw solid contour lines at y-slice (or y-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1046
+#: src/exec_gr.cpp:1057
 msgid "Draw solid contour lines at z-slice (or z-plane)"
 msgstr ""
 
-#: src/exec_gr.cpp:1043
+#: src/exec_gr.cpp:1054
 msgid "Draw solid contour lines for 3D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1042
+#: src/exec_gr.cpp:1053
 msgid "Draw solid contours"
 msgstr ""
 
-#: src/exec_gr.cpp:1041
+#: src/exec_gr.cpp:1052
 msgid "Draw solid contours with manual colors"
 msgstr ""
 
-#: src/exec_gr.cpp:1083
+#: src/exec_gr.cpp:1094
 msgid "Draw solid surface"
 msgstr ""
 
-#: src/exec_gr.cpp:1090
+#: src/exec_gr.cpp:1101
 msgid "Draw solid surface colored and transpared by other data"
 msgstr ""
 
-#: src/exec_gr.cpp:1089
+#: src/exec_gr.cpp:1100
 msgid "Draw solid surface colored by other data"
 msgstr ""
 
-#: src/exec_gr.cpp:1088
+#: src/exec_gr.cpp:1099
 msgid "Draw solid surface transpared by other data"
 msgstr ""
 
@@ -1802,35 +1806,35 @@ msgstr ""
 msgid "Draw sphere"
 msgstr ""
 
-#: src/exec_gr.cpp:1080
+#: src/exec_gr.cpp:1091
 msgid "Draw stem plot for 1D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1081
+#: src/exec_gr.cpp:1092
 msgid "Draw step plot for 1D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1097
+#: src/exec_gr.cpp:1108
 msgid "Draw surface of curve rotation"
 msgstr ""
 
-#: src/exec_gr.cpp:1077
+#: src/exec_gr.cpp:1088
 msgid "Draw surface of quadrangles"
 msgstr ""
 
-#: src/exec_gr.cpp:1101
+#: src/exec_gr.cpp:1112
 msgid "Draw surface of triangles"
 msgstr ""
 
-#: src/exec_gr.cpp:1027
+#: src/exec_gr.cpp:1037
 msgid "Draw surfaces of contour lines rotation"
 msgstr ""
 
-#: src/exec_gr.cpp:1091
+#: src/exec_gr.cpp:1102
 msgid "Draw table with data values"
 msgstr ""
 
-#: src/exec_gr.cpp:1093
+#: src/exec_gr.cpp:1104
 msgid "Draw tension plot for 1D data"
 msgstr ""
 
@@ -1842,23 +1846,23 @@ msgstr ""
 msgid "Draw user-defined symbol at given position and direction"
 msgstr ""
 
-#: src/exec_gr.cpp:1075
+#: src/exec_gr.cpp:1086
 msgid "Draw usual plot for 1D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1103
+#: src/exec_gr.cpp:1114
 msgid "Draw vector field"
 msgstr ""
 
-#: src/exec_gr.cpp:1104
+#: src/exec_gr.cpp:1115
 msgid "Draw vector field at slices of 3D data"
 msgstr ""
 
-#: src/exec_gr.cpp:1098
+#: src/exec_gr.cpp:1109
 msgid "Draw vectors along a curve"
 msgstr ""
 
-#: src/exec_gr.cpp:1061
+#: src/exec_gr.cpp:1072
 msgid "Draw waterfalls"
 msgstr ""
 
@@ -1879,7 +1883,7 @@ msgstr ""
 msgid "Edges"
 msgstr ""
 
-#: udav/text_pnl.cpp:84 mgllab/mgllab.cpp:292
+#: udav/text_pnl.cpp:84 mgllab/mgllab.cpp:290
 msgid "Edit"
 msgstr ""
 
@@ -1891,13 +1895,13 @@ msgstr ""
 msgid "Elliptic"
 msgstr ""
 
-#: udav/prop_dlg.cpp:171 mgllab/mgllab.cpp:474
+#: udav/prop_dlg.cpp:171 mgllab/mgllab.cpp:471
 msgid "Enable keywords completion"
 msgstr ""
 
 #. pure = new QCheckBox(_("Disable face drawing (faster) for mouse rotation/shift/zoom."), this);
 #. pure->setChecked(mglAutoPure);	v->addWidget(pure);	pure->setEnabled(false);
-#: udav/prop_dlg.cpp:169 mgllab/mgllab.cpp:476
+#: udav/prop_dlg.cpp:169 mgllab/mgllab.cpp:473
 msgid "Enable mouse wheel for zooming"
 msgstr ""
 
@@ -2023,11 +2027,11 @@ msgid ""
 msgstr ""
 
 #. {"defpal",_("Define parameter as palette color"),"defpal $N val", 0, 6},
-#: src/parser.cpp:1430
+#: src/parser.cpp:1433
 msgid "Execute if condition is false"
 msgstr ""
 
-#: mgllab/mgllab.cpp:472
+#: mgllab/mgllab.cpp:469
 msgid "Execute script after loading"
 msgstr ""
 
@@ -2035,7 +2039,7 @@ msgstr ""
 msgid "Execute script and redraw graphics (F5)."
 msgstr ""
 
-#: src/parser.cpp:1424
+#: src/parser.cpp:1427
 msgid "Execute script in external file"
 msgstr ""
 
@@ -2043,7 +2047,7 @@ msgstr ""
 msgid "Existed data arrays"
 msgstr ""
 
-#: mgllab/mgllab.cpp:290
+#: mgllab/mgllab.cpp:288
 msgid "Exit"
 msgstr ""
 
@@ -2059,7 +2063,7 @@ msgstr ""
 msgid "Export Data?"
 msgstr ""
 
-#: widgets/fltk.cpp:789
+#: widgets/fltk.cpp:790
 msgid "Export as ..."
 msgstr ""
 
@@ -2106,7 +2110,7 @@ msgstr ""
 
 #. file menu
 #: widgets/qt.cpp:1066 udav/udav_wnd.cpp:281 udav/dat_pnl.cpp:681
-#: mgllab/mgllab.cpp:277 mgllab/table.cpp:748
+#: mgllab/mgllab.cpp:275 mgllab/table.cpp:748
 msgid "File"
 msgstr ""
 
@@ -2114,7 +2118,7 @@ msgstr ""
 msgid "File %1 saved"
 msgstr ""
 
-#: mgllab/mgllab.cpp:227
+#: mgllab/mgllab.cpp:225
 msgid "File is exesist. Overwrite it?"
 msgstr ""
 
@@ -2122,7 +2126,7 @@ msgstr ""
 msgid "File name"
 msgstr ""
 
-#: mgllab/mgllab.cpp:303
+#: mgllab/mgllab.cpp:301
 msgid "File path"
 msgstr ""
 
@@ -2130,7 +2134,7 @@ msgstr ""
 msgid "File to export"
 msgstr ""
 
-#: mgllab/editor.cpp:267 mgllab/mgllab.cpp:396
+#: mgllab/editor.cpp:267 mgllab/mgllab.cpp:394
 msgid "File/Recent files"
 msgstr ""
 
@@ -2194,7 +2198,7 @@ msgstr ""
 msgid "Find minimal value over direction"
 msgstr ""
 
-#: udav/text_pnl.cpp:551 mgllab/mgllab.cpp:301
+#: udav/text_pnl.cpp:551 mgllab/mgllab.cpp:299
 msgid "Find next"
 msgstr ""
 
@@ -2226,11 +2230,11 @@ msgstr ""
 msgid "Find/Replace"
 msgstr ""
 
-#: mgllab/mgllab.cpp:300
+#: mgllab/mgllab.cpp:298
 msgid "Find|Replace"
 msgstr ""
 
-#: src/parser.cpp:1432
+#: src/parser.cpp:1435
 msgid "Finish if/else block"
 msgstr ""
 
@@ -2246,7 +2250,7 @@ msgstr ""
 msgid "Fit data to formula"
 msgstr ""
 
-#: udav/text_pnl.cpp:567 mgllab/mgllab.cpp:307
+#: udav/text_pnl.cpp:567 mgllab/mgllab.cpp:305
 msgid "Fitted formula"
 msgstr ""
 
@@ -2262,11 +2266,11 @@ msgstr ""
 msgid "Fog dist."
 msgstr ""
 
-#: mgllab/mgllab.cpp:533
+#: mgllab/mgllab.cpp:530
 msgid "Folder for help files"
 msgstr ""
 
-#: udav/text_pnl.cpp:587 mgllab/mgllab.cpp:304
+#: udav/text_pnl.cpp:587 mgllab/mgllab.cpp:302
 msgid "Folder path"
 msgstr ""
 
@@ -2274,7 +2278,7 @@ msgstr ""
 msgid "Font"
 msgstr ""
 
-#: mgllab/mgllab.cpp:524
+#: mgllab/mgllab.cpp:521
 msgid "Font file name"
 msgstr ""
 
@@ -2282,11 +2286,11 @@ msgstr ""
 msgid "Font files (*.vfm)"
 msgstr ""
 
-#: mgllab/mgllab.cpp:463
+#: mgllab/mgllab.cpp:460
 msgid "Font kind"
 msgstr ""
 
-#: mgllab/mgllab.cpp:465
+#: mgllab/mgllab.cpp:462
 msgid "Font size"
 msgstr ""
 
@@ -2298,7 +2302,7 @@ msgstr ""
 msgid "FontSize"
 msgstr ""
 
-#: src/parser.cpp:1433
+#: src/parser.cpp:1436
 msgid "For loop"
 msgstr ""
 
@@ -2315,7 +2319,7 @@ msgstr ""
 msgid "From"
 msgstr ""
 
-#: mgllab/mgllab.cpp:592
+#: mgllab/mgllab.cpp:589
 msgid "Function"
 msgstr ""
 
@@ -2387,7 +2391,7 @@ msgid "Go to the specified slice for 3D data."
 msgstr ""
 
 #: widgets/qt.cpp:1095 widgets/qt.cpp:1097 udav/plot_pnl.cpp:66
-#: mgllab/mgllab.cpp:319
+#: mgllab/mgllab.cpp:317
 msgid "Graphics"
 msgstr ""
 
@@ -2395,7 +2399,7 @@ msgstr ""
 msgid "Graphics setup"
 msgstr ""
 
-#: widgets/fltk.cpp:927
+#: widgets/fltk.cpp:928
 msgid "Graphics/Adjust size"
 msgstr ""
 
@@ -2404,143 +2408,143 @@ msgstr ""
 #. /< Callback function for prev frame
 #. /< Callback function for delay
 #. /< Callback function for reloading
-#: widgets/fltk.cpp:921 include/mgl2/Fl_MathGL.h:150
+#: widgets/fltk.cpp:922 include/mgl2/Fl_MathGL.h:150
 msgid "Graphics/Alpha"
 msgstr ""
 
-#: widgets/fltk.cpp:956
+#: widgets/fltk.cpp:957
 msgid "Graphics/Animation/Next frame"
 msgstr ""
 
-#: widgets/fltk.cpp:957
+#: widgets/fltk.cpp:958
 msgid "Graphics/Animation/Prev frame"
 msgstr ""
 
-#: mgllab/mgllab.cpp:371
+#: mgllab/mgllab.cpp:369
 msgid "Graphics/Animation/Setup animation"
 msgstr ""
 
-#: widgets/fltk.cpp:955 include/mgl2/Fl_MathGL.h:152
+#: widgets/fltk.cpp:956 include/mgl2/Fl_MathGL.h:152
 msgid "Graphics/Animation/Slideshow"
 msgstr ""
 
-#: widgets/fltk.cpp:931
+#: widgets/fltk.cpp:932
 msgid "Graphics/Copy click coor."
 msgstr ""
 
-#: widgets/fltk.cpp:930
+#: widgets/fltk.cpp:931
 msgid "Graphics/Copy graphics"
 msgstr ""
 
-#: widgets/fltk.cpp:944
+#: widgets/fltk.cpp:945
 msgid "Graphics/Export/as BMP"
 msgstr ""
 
-#: widgets/fltk.cpp:942
+#: widgets/fltk.cpp:943
 msgid "Graphics/Export/as GIF"
 msgstr ""
 
-#: widgets/fltk.cpp:939
+#: widgets/fltk.cpp:940
 msgid "Graphics/Export/as JPEG"
 msgstr ""
 
-#: widgets/fltk.cpp:950
+#: widgets/fltk.cpp:951
 msgid "Graphics/Export/as OBJ"
 msgstr ""
 
-#: widgets/fltk.cpp:951
+#: widgets/fltk.cpp:952
 msgid "Graphics/Export/as OFF"
 msgstr ""
 
-#: widgets/fltk.cpp:935
+#: widgets/fltk.cpp:936
 msgid "Graphics/Export/as PNG"
 msgstr ""
 
-#: widgets/fltk.cpp:949
+#: widgets/fltk.cpp:950
 msgid "Graphics/Export/as PRC"
 msgstr ""
 
-#: widgets/fltk.cpp:952
+#: widgets/fltk.cpp:953
 msgid "Graphics/Export/as STL"
 msgstr ""
 
-#: widgets/fltk.cpp:945
+#: widgets/fltk.cpp:946
 msgid "Graphics/Export/as SVG"
 msgstr ""
 
-#: widgets/fltk.cpp:948
+#: widgets/fltk.cpp:949
 msgid "Graphics/Export/as TeX"
 msgstr ""
 
-#: widgets/fltk.cpp:953
+#: widgets/fltk.cpp:954
 msgid "Graphics/Export/as XYZ"
 msgstr ""
 
-#: widgets/fltk.cpp:947
+#: widgets/fltk.cpp:948
 msgid "Graphics/Export/as bitmap EPS"
 msgstr ""
 
-#: widgets/fltk.cpp:936
+#: widgets/fltk.cpp:937
 msgid "Graphics/Export/as solid PNG"
 msgstr ""
 
-#: widgets/fltk.cpp:946
+#: widgets/fltk.cpp:947
 msgid "Graphics/Export/as vector EPS"
 msgstr ""
 
-#: widgets/fltk.cpp:923 include/mgl2/Fl_MathGL.h:153
+#: widgets/fltk.cpp:924 include/mgl2/Fl_MathGL.h:153
 msgid "Graphics/Grid"
 msgstr ""
 
-#: widgets/fltk.cpp:922 include/mgl2/Fl_MathGL.h:151
+#: widgets/fltk.cpp:923 include/mgl2/Fl_MathGL.h:151
 msgid "Graphics/Light"
 msgstr ""
 
-#: widgets/fltk.cpp:932 include/mgl2/Fl_MathGL.h:159 mgllab/mgllab.cpp:372
+#: widgets/fltk.cpp:933 include/mgl2/Fl_MathGL.h:159 mgllab/mgllab.cpp:370
 msgid "Graphics/Pause calc"
 msgstr ""
 
-#: mgllab/mgllab.cpp:370
+#: mgllab/mgllab.cpp:368
 msgid "Graphics/Primitive"
 msgstr ""
 
-#: widgets/fltk.cpp:926
+#: widgets/fltk.cpp:927
 msgid "Graphics/Redraw"
 msgstr ""
 
-#: widgets/fltk.cpp:928
+#: widgets/fltk.cpp:929
 msgid "Graphics/Reload data"
 msgstr ""
 
-#: widgets/fltk.cpp:925
+#: widgets/fltk.cpp:926
 msgid "Graphics/Restore"
 msgstr ""
 
-#: widgets/fltk.cpp:929
+#: widgets/fltk.cpp:930
 msgid "Graphics/Stop"
 msgstr ""
 
-#: widgets/fltk.cpp:963
+#: widgets/fltk.cpp:964
 msgid "Graphics/Transform/Move down"
 msgstr ""
 
-#: widgets/fltk.cpp:959
+#: widgets/fltk.cpp:960
 msgid "Graphics/Transform/Move left"
 msgstr ""
 
-#: widgets/fltk.cpp:964
+#: widgets/fltk.cpp:965
 msgid "Graphics/Transform/Move right"
 msgstr ""
 
-#: widgets/fltk.cpp:960
+#: widgets/fltk.cpp:961
 msgid "Graphics/Transform/Move up"
 msgstr ""
 
-#: widgets/fltk.cpp:961
+#: widgets/fltk.cpp:962
 msgid "Graphics/Transform/Zoom in"
 msgstr ""
 
-#: widgets/fltk.cpp:962
+#: widgets/fltk.cpp:963
 msgid "Graphics/Transform/Zoom out"
 msgstr ""
 
@@ -2583,8 +2587,8 @@ msgid "Height of selected cells"
 msgstr ""
 
 #: widgets/qt.cpp:1276 udav/help_pnl.cpp:57 udav/udav_wnd.cpp:231
-#: udav/udav_wnd.cpp:323 mgllab/mgllab.cpp:329 mgllab/mgllab.cpp:330
-#: mgllab/mgllab.cpp:358
+#: udav/udav_wnd.cpp:323 mgllab/mgllab.cpp:327 mgllab/mgllab.cpp:328
+#: mgllab/mgllab.cpp:356
 msgid "Help"
 msgstr ""
 
@@ -2594,7 +2598,7 @@ msgid ""
 "Options are used for additional plot tunning."
 msgstr ""
 
-#: udav/udav_wnd.cpp:186 mgllab/mgllab.cpp:298
+#: udav/udav_wnd.cpp:186 mgllab/mgllab.cpp:296
 msgid "Hidden plots"
 msgstr ""
 
@@ -2606,11 +2610,11 @@ msgstr ""
 msgid "Hide selected plots."
 msgstr ""
 
-#: udav/prop_dlg.cpp:173 mgllab/mgllab.cpp:475
+#: udav/prop_dlg.cpp:173 mgllab/mgllab.cpp:472
 msgid "Highlight current object(s)"
 msgstr ""
 
-#: udav/udav_wnd.cpp:328 mgllab/mgllab.cpp:331
+#: udav/udav_wnd.cpp:328 mgllab/mgllab.cpp:329
 msgid "Hints"
 msgstr ""
 
@@ -2630,7 +2634,7 @@ msgstr ""
 msgid "ID"
 msgstr ""
 
-#: mgllab/mgllab.cpp:333
+#: mgllab/mgllab.cpp:331
 msgid "Icon list"
 msgstr ""
 
@@ -2690,16 +2694,16 @@ msgstr ""
 msgid "Info"
 msgstr ""
 
-#: udav/info_dlg.cpp:55 mgllab/help.cpp:353
+#: udav/info_dlg.cpp:55 mgllab/help.cpp:354
 msgid "Information"
 msgstr ""
 
-#: mgllab/mgllab.cpp:306
+#: mgllab/mgllab.cpp:304
 msgid "Inplot"
 msgstr ""
 
 #. insert menu
-#: udav/text_pnl.cpp:557 mgllab/mgllab.cpp:302
+#: udav/text_pnl.cpp:557 mgllab/mgllab.cpp:300
 msgid "Insert"
 msgstr ""
 
@@ -2821,7 +2825,7 @@ msgstr ""
 msgid "Language for UDAV"
 msgstr ""
 
-#: mgllab/mgllab.cpp:478
+#: mgllab/mgllab.cpp:475
 msgid "Language for mgllab"
 msgstr ""
 
@@ -2945,7 +2949,7 @@ msgstr ""
 msgid "M - purple"
 msgstr ""
 
-#: src/parser.cpp:1018
+#: src/parser.cpp:1021
 msgid "MGL Parser"
 msgstr ""
 
@@ -2953,11 +2957,11 @@ msgstr ""
 msgid "MGL commands for selected group"
 msgstr ""
 
-#: mgllab/mgllab.cpp:214
+#: mgllab/mgllab.cpp:212
 msgid "MGL files \t*.mgl"
 msgstr ""
 
-#: mgllab/mgllab.cpp:173
+#: mgllab/mgllab.cpp:172
 msgid ""
 "MGL files \t*.mgl\n"
 "DAT files \t*.{dat,csv}"
@@ -3015,7 +3019,7 @@ msgstr ""
 msgid "Manual mask"
 msgstr ""
 
-#: udav/text_pnl.cpp:591 mgllab/mgllab.cpp:308
+#: udav/text_pnl.cpp:591 mgllab/mgllab.cpp:306
 msgid "Manual primitives"
 msgstr ""
 
@@ -3101,7 +3105,7 @@ msgstr ""
 msgid "Maximum of"
 msgstr ""
 
-#: udav/mem_pnl.cpp:68 udav/mem_pnl.cpp:73 mgllab/mgllab.cpp:360
+#: udav/mem_pnl.cpp:68 udav/mem_pnl.cpp:73 mgllab/mgllab.cpp:358
 msgid "Memory"
 msgstr ""
 
@@ -3113,7 +3117,7 @@ msgstr ""
 msgid "MeshNum"
 msgstr ""
 
-#: mgllab/mgllab.cpp:327
+#: mgllab/mgllab.cpp:325
 msgid "Messages"
 msgstr ""
 
@@ -3291,7 +3295,7 @@ msgstr ""
 msgid "New order of dimensions"
 msgstr ""
 
-#: udav/udav_wnd.cpp:282 mgllab/mgllab.cpp:278
+#: udav/udav_wnd.cpp:282 mgllab/mgllab.cpp:276
 msgid "New script"
 msgstr ""
 
@@ -3323,7 +3327,7 @@ msgstr ""
 msgid "Next slide"
 msgstr ""
 
-#: mgllab/help.cpp:135 mgllab/mgllab.cpp:227
+#: mgllab/help.cpp:135 mgllab/mgllab.cpp:225
 msgid "No"
 msgstr ""
 
@@ -3363,7 +3367,7 @@ msgstr ""
 msgid "No text rotation"
 msgstr ""
 
-#: widgets/fltk.cpp:812
+#: widgets/fltk.cpp:813
 msgid "Normal view"
 msgstr ""
 
@@ -3434,7 +3438,7 @@ msgstr ""
 #: udav/data_dlg.cpp:92 udav/subplot_dlg.cpp:221 mgllab/mathgl.cpp:196
 #: mgllab/dialogs.cpp:121 mgllab/dialogs.cpp:165 mgllab/dialogs.cpp:411
 #: mgllab/dialogs.cpp:585 mgllab/dialogs.cpp:750 mgllab/dialogs.cpp:1072
-#: mgllab/dialogs.cpp:1319 mgllab/dialogs.cpp:1474 mgllab/mgllab.cpp:483
+#: mgllab/dialogs.cpp:1319 mgllab/dialogs.cpp:1474 mgllab/mgllab.cpp:480
 #: mgllab/table.cpp:621
 msgid "OK"
 msgstr ""
@@ -3443,7 +3447,7 @@ msgstr ""
 msgid "Only current slice will be inserted"
 msgstr ""
 
-#: mgllab/mgllab.cpp:172
+#: mgllab/mgllab.cpp:171
 msgid "Open File?"
 msgstr ""
 
@@ -3465,7 +3469,7 @@ msgstr ""
 msgid "Open file"
 msgstr ""
 
-#: mgllab/mgllab.cpp:279
+#: mgllab/mgllab.cpp:277
 msgid "Open file ..."
 msgstr ""
 
@@ -3494,7 +3498,7 @@ msgid "Operations"
 msgstr ""
 
 #: udav/prop_dlg.cpp:91 udav/newcmd_dlg.cpp:72 mgllab/dialogs.cpp:746
-#: mgllab/mgllab.cpp:310
+#: mgllab/mgllab.cpp:308
 msgid "Options"
 msgstr ""
 
@@ -3523,7 +3527,7 @@ msgstr ""
 msgid "P - darkpink"
 msgstr ""
 
-#: src/prc.cpp:981
+#: src/prc.cpp:982
 msgid "PDF support was disabled. Please, enable it and rebuild MathGL."
 msgstr ""
 
@@ -3560,7 +3564,7 @@ msgstr ""
 msgid "Paste range of numbers from clipboard (Ctrl+Shift+P)."
 msgstr ""
 
-#: udav/text_pnl.cpp:538 mgllab/mgllab.cpp:296
+#: udav/text_pnl.cpp:538 mgllab/mgllab.cpp:294
 msgid "Paste text"
 msgstr ""
 
@@ -3572,11 +3576,11 @@ msgstr ""
 msgid "Paste text or data from clipboard (Ctrl+V)."
 msgstr ""
 
-#: mgllab/mgllab.cpp:469
+#: mgllab/mgllab.cpp:466
 msgid "Path for MathGL font (without extension)"
 msgstr ""
 
-#: udav/prop_dlg.cpp:110 mgllab/mgllab.cpp:466
+#: udav/prop_dlg.cpp:110 mgllab/mgllab.cpp:463
 msgid "Path for help files"
 msgstr ""
 
@@ -3589,7 +3593,7 @@ msgid "Pause calculation"
 msgstr ""
 
 #. Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(setPause()));
-#: widgets/fltk.cpp:891 widgets/qt.cpp:1270
+#: widgets/fltk.cpp:892 widgets/qt.cpp:1270
 msgid "Pause on/off external calculations"
 msgstr ""
 
@@ -3597,7 +3601,7 @@ msgstr ""
 msgid "Perform Runge-Kutta step"
 msgstr ""
 
-#: widgets/fltk.cpp:864
+#: widgets/fltk.cpp:865
 msgid "Phi angle (rotate in x*y plane)"
 msgstr ""
 
@@ -3628,11 +3632,11 @@ msgid ""
 "of plot, its style and so on."
 msgstr ""
 
-#: mgllab/mgllab.cpp:325
+#: mgllab/mgllab.cpp:323
 msgid "Plot setup"
 msgstr ""
 
-#: udav/text_pnl.cpp:571 mgllab/dialogs.cpp:312 mgllab/mgllab.cpp:309
+#: udav/text_pnl.cpp:571 mgllab/dialogs.cpp:312 mgllab/mgllab.cpp:307
 msgid "Plot style"
 msgstr ""
 
@@ -3660,7 +3664,7 @@ msgstr ""
 msgid "Preview"
 msgstr ""
 
-#: mgllab/mgllab.cpp:566
+#: mgllab/mgllab.cpp:563
 msgid "Previous expressions"
 msgstr ""
 
@@ -3696,7 +3700,7 @@ msgstr ""
 msgid "Print message or information about the data"
 msgstr ""
 
-#: mgllab/mgllab.cpp:282
+#: mgllab/mgllab.cpp:280
 msgid "Print plot"
 msgstr ""
 
@@ -3724,7 +3728,7 @@ msgstr ""
 msgid "Program flow"
 msgstr ""
 
-#: udav/udav_wnd.cpp:312 mgllab/mgllab.cpp:322 mgllab/mgllab.cpp:461
+#: udav/udav_wnd.cpp:312 mgllab/mgllab.cpp:320 mgllab/mgllab.cpp:458
 msgid "Properties"
 msgstr ""
 
@@ -3736,7 +3740,7 @@ msgstr ""
 msgid "Pulse prop."
 msgstr ""
 
-#: udav/calc_dlg.cpp:127 mgllab/mgllab.cpp:600
+#: udav/calc_dlg.cpp:127 mgllab/mgllab.cpp:597
 msgid "Put function"
 msgstr ""
 
@@ -3790,7 +3794,7 @@ msgstr ""
 msgid "Read data with name 'id' from HDF file"
 msgstr ""
 
-#: udav/udav_wnd.cpp:268 mgllab/mgllab.cpp:367
+#: udav/udav_wnd.cpp:268 mgllab/mgllab.cpp:365
 msgid "Ready"
 msgstr ""
 
@@ -3798,7 +3802,7 @@ msgstr ""
 msgid "Rearrange data dimensions"
 msgstr ""
 
-#: udav/udav_wnd.cpp:301 mgllab/mgllab.cpp:283
+#: udav/udav_wnd.cpp:301 mgllab/mgllab.cpp:281
 msgid "Recent files"
 msgstr ""
 
@@ -3822,7 +3826,7 @@ msgstr ""
 msgid "Redraw picture for $0 equal to"
 msgstr ""
 
-#: widgets/fltk.cpp:813
+#: widgets/fltk.cpp:814
 msgid "Redraw plot"
 msgstr ""
 
@@ -3830,7 +3834,7 @@ msgstr ""
 msgid "Refresh"
 msgstr ""
 
-#: widgets/fltk.cpp:847
+#: widgets/fltk.cpp:848
 msgid "Refresh the picture"
 msgstr ""
 
@@ -3842,11 +3846,11 @@ msgstr ""
 msgid "Reload"
 msgstr ""
 
-#: widgets/fltk.cpp:815
+#: widgets/fltk.cpp:816
 msgid "Reload data"
 msgstr ""
 
-#: widgets/fltk.cpp:853
+#: widgets/fltk.cpp:854
 msgid "Reload data and refresh the picture"
 msgstr ""
 
@@ -3932,7 +3936,7 @@ msgstr ""
 msgid "Restore"
 msgstr ""
 
-#: widgets/fltk.cpp:844
+#: widgets/fltk.cpp:845
 msgid "Restore default graphics rotation, zoom and perspective"
 msgstr ""
 
@@ -3961,7 +3965,7 @@ msgstr ""
 msgid "Resulting string"
 msgstr ""
 
-#: src/parser.cpp:1439
+#: src/parser.cpp:1442
 msgid "Return from function"
 msgstr ""
 
@@ -4002,7 +4006,7 @@ msgstr ""
 msgid "Rotate on"
 msgstr ""
 
-#: widgets/fltk.cpp:840
+#: widgets/fltk.cpp:841
 msgid "Rotate picture by holding left mouse button"
 msgstr ""
 
@@ -4032,7 +4036,7 @@ msgid ""
 "then the dialog with slideshow options will appear."
 msgstr ""
 
-#: widgets/fltk.cpp:885
+#: widgets/fltk.cpp:886
 msgid "Run/Stop slideshow (graphics animation)"
 msgstr ""
 
@@ -4060,7 +4064,7 @@ msgstr ""
 msgid "Save Data?"
 msgstr ""
 
-#: widgets/fltk.cpp:572 mgllab/mgllab.cpp:214
+#: widgets/fltk.cpp:573 mgllab/mgllab.cpp:212
 msgid "Save File As?"
 msgstr ""
 
@@ -4068,7 +4072,7 @@ msgstr ""
 msgid "Save JPEG frames"
 msgstr ""
 
-#: udav/udav_wnd.cpp:290 mgllab/mgllab.cpp:281
+#: udav/udav_wnd.cpp:290 mgllab/mgllab.cpp:279
 msgid "Save as ..."
 msgstr ""
 
@@ -4088,11 +4092,11 @@ msgstr ""
 msgid "Save data to file"
 msgstr ""
 
-#: mgllab/mgllab.cpp:280
+#: mgllab/mgllab.cpp:278
 msgid "Save file"
 msgstr ""
 
-#: mgllab/mgllab.cpp:473
+#: mgllab/mgllab.cpp:470
 msgid "Save file before redrawing"
 msgstr ""
 
@@ -4132,7 +4136,7 @@ msgstr ""
 msgid "Search backward"
 msgstr ""
 
-#: udav/text_pnl.cpp:543 mgllab/mgllab.cpp:297
+#: udav/text_pnl.cpp:543 mgllab/mgllab.cpp:295
 msgid "Select all"
 msgstr ""
 
@@ -4188,7 +4192,7 @@ msgstr ""
 msgid "Set arbitrary position of plot in picture"
 msgstr ""
 
-#: udav/udav_wnd.cpp:315 mgllab/mgllab.cpp:323
+#: udav/udav_wnd.cpp:315 mgllab/mgllab.cpp:321
 msgid "Set arguments"
 msgstr ""
 
@@ -4428,11 +4432,11 @@ msgstr ""
 msgid "Settings"
 msgstr ""
 
-#: mgllab/mgllab.cpp:321
+#: mgllab/mgllab.cpp:319
 msgid "Setup"
 msgstr ""
 
-#: mgllab/mgllab.cpp:324
+#: mgllab/mgllab.cpp:322
 msgid "Setup animation"
 msgstr ""
 
@@ -4480,19 +4484,19 @@ msgstr ""
 msgid "Shear plot"
 msgstr ""
 
-#: widgets/fltk.cpp:878
+#: widgets/fltk.cpp:879
 msgid "Shift the picture down"
 msgstr ""
 
-#: widgets/fltk.cpp:870
+#: widgets/fltk.cpp:871
 msgid "Shift the picture left"
 msgstr ""
 
-#: widgets/fltk.cpp:876
+#: widgets/fltk.cpp:877
 msgid "Shift the picture right"
 msgstr ""
 
-#: widgets/fltk.cpp:868
+#: widgets/fltk.cpp:869
 msgid "Shift the picture up"
 msgstr ""
 
@@ -4572,11 +4576,11 @@ msgstr ""
 msgid "Show info"
 msgstr ""
 
-#: mgllab/mgllab.cpp:299
+#: mgllab/mgllab.cpp:297
 msgid "Show lines"
 msgstr ""
 
-#: widgets/fltk.cpp:886
+#: widgets/fltk.cpp:887
 msgid "Show next frame in slideshow"
 msgstr ""
 
@@ -4584,7 +4588,7 @@ msgstr ""
 msgid "Show next slide (Ctrl+.)."
 msgstr ""
 
-#: widgets/fltk.cpp:881
+#: widgets/fltk.cpp:882
 msgid "Show previous frame in slideshow"
 msgstr ""
 
@@ -4626,7 +4630,7 @@ msgstr ""
 msgid "Sizes"
 msgstr ""
 
-#: src/parser.cpp:1425
+#: src/parser.cpp:1428
 msgid "Skip commands and iterate for-loop again"
 msgstr ""
 
@@ -4716,15 +4720,15 @@ msgstr ""
 msgid "Start"
 msgstr ""
 
-#: src/parser.cpp:1434
+#: src/parser.cpp:1437
 msgid "Start function definition and stop execution of main script"
 msgstr ""
 
-#: src/parser.cpp:1437
+#: src/parser.cpp:1440
 msgid "Start next for-loop iteration"
 msgstr ""
 
-#: src/parser.cpp:1438
+#: src/parser.cpp:1441
 msgid "Start/close commands which should executed only once"
 msgstr ""
 
@@ -4744,11 +4748,11 @@ msgstr ""
 msgid "Stop"
 msgstr ""
 
-#: widgets/fltk.cpp:849
+#: widgets/fltk.cpp:850
 msgid "Stop drawing"
 msgstr ""
 
-#: src/parser.cpp:1440
+#: src/parser.cpp:1443
 msgid "Stop execution"
 msgstr ""
 
@@ -4893,7 +4897,7 @@ msgstr ""
 msgid "Switch on/off gray-scale mode"
 msgstr ""
 
-#: widgets/fltk.cpp:836
+#: widgets/fltk.cpp:837
 msgid "Switch on/off grid drawing"
 msgstr ""
 
@@ -4909,7 +4913,7 @@ msgstr ""
 msgid "Switch on/off lightning for the graphics (Ctrl+L)."
 msgstr ""
 
-#: widgets/fltk.cpp:833
+#: widgets/fltk.cpp:834
 msgid "Switch on/off lightning in the picture"
 msgstr ""
 
@@ -4939,7 +4943,7 @@ msgstr ""
 msgid "Switch on/off transparency for the graphics (Ctrl+T)."
 msgstr ""
 
-#: widgets/fltk.cpp:830
+#: widgets/fltk.cpp:831
 msgid "Switch on/off transparency in the picture"
 msgstr ""
 
@@ -4951,7 +4955,7 @@ msgstr ""
 msgid "Symmetrical?"
 msgstr ""
 
-#: src/addon.cpp:110 src/base_cf.cpp:266
+#: src/addon.cpp:111 src/base_cf.cpp:266
 #, c-format
 msgid "TEST: %s\n"
 msgstr ""
@@ -5073,7 +5077,7 @@ msgstr ""
 msgid "There is wrong command(s) in script"
 msgstr ""
 
-#: widgets/fltk.cpp:862
+#: widgets/fltk.cpp:863
 msgid "Theta angle (tilt z-axis)"
 msgstr ""
 
@@ -5305,7 +5309,7 @@ msgstr ""
 msgid "UDAV - about"
 msgstr ""
 
-#: udav/anim_dlg.cpp:104
+#: udav/anim_dlg.cpp:105
 msgid "UDAV - animation"
 msgstr ""
 
@@ -5348,7 +5352,7 @@ msgid "Underline"
 msgstr ""
 
 #. edit menu
-#: udav/text_pnl.cpp:516 mgllab/mgllab.cpp:293
+#: udav/text_pnl.cpp:516 mgllab/mgllab.cpp:291
 msgid "Undo"
 msgstr ""
 
@@ -5360,7 +5364,7 @@ msgstr ""
 msgid "Untitled"
 msgstr ""
 
-#: mgllab/mgllab.cpp:345 mgllab/mgllab.cpp:349
+#: mgllab/mgllab.cpp:343 mgllab/mgllab.cpp:347
 msgid "Untitled - mgllab"
 msgstr ""
 
@@ -5377,7 +5381,7 @@ msgstr ""
 msgid "Usage:\tmglconv [parameter(s)] scriptfile\n"
 msgstr ""
 
-#: mgllab/mgllab.cpp:416
+#: mgllab/mgllab.cpp:414
 #, c-format
 msgid "Usage:\tmgllab [parameter(s)] scriptfile\n"
 msgstr ""
@@ -5413,7 +5417,7 @@ msgstr ""
 msgid "Use dots plot for preview"
 msgstr ""
 
-#: mgllab/mgllab.cpp:477
+#: mgllab/mgllab.cpp:474
 msgid "Use multi-threading for drawing"
 msgstr ""
 
@@ -5463,7 +5467,7 @@ msgstr ""
 msgid "Whole area"
 msgstr ""
 
-#: mgllab/mgllab.cpp:480
+#: mgllab/mgllab.cpp:477
 msgid "Widget scheme"
 msgstr ""
 
@@ -5690,7 +5694,7 @@ msgstr ""
 msgid "You should put text inside ' ' for argument "
 msgstr ""
 
-#: udav/anim_dlg.cpp:105
+#: udav/anim_dlg.cpp:106
 msgid "You should select one of case"
 msgstr ""
 
@@ -5750,7 +5754,7 @@ msgstr ""
 msgid "Zoom in graphics."
 msgstr ""
 
-#: widgets/fltk.cpp:843
+#: widgets/fltk.cpp:844
 msgid "Zoom in selected region of the picture"
 msgstr ""
 
@@ -5759,7 +5763,7 @@ msgstr ""
 msgid "Zoom in text"
 msgstr ""
 
-#: widgets/fltk.cpp:872
+#: widgets/fltk.cpp:873
 msgid "Zoom in the picture"
 msgstr ""
 
@@ -5775,7 +5779,7 @@ msgstr ""
 msgid "Zoom out text"
 msgstr ""
 
-#: widgets/fltk.cpp:874
+#: widgets/fltk.cpp:875
 msgid "Zoom out the picture"
 msgstr ""
 
@@ -5884,7 +5888,7 @@ msgstr ""
 msgid "center"
 msgstr ""
 
-#: widgets/fltk.cpp:768
+#: widgets/fltk.cpp:769
 #, c-format
 msgid "click at %g, %g, %g"
 msgstr ""
@@ -5975,7 +5979,7 @@ msgstr ""
 msgid "h - gray"
 msgstr ""
 
-#: src/parser.cpp:1011
+#: src/parser.cpp:1014
 #, c-format
 msgid "in line %ld"
 msgstr ""
@@ -6066,7 +6070,7 @@ msgid ""
 "Current version is 2.%g\n"
 msgstr ""
 
-#: mgllab/mgllab.cpp:415
+#: mgllab/mgllab.cpp:413
 #, c-format
 msgid ""
 "mgllab draw mgl script interactively.\n"
@@ -6281,7 +6285,7 @@ msgstr ""
 msgid "to"
 msgstr ""
 
-#: mgllab/mgllab.cpp:564
+#: mgllab/mgllab.cpp:561
 msgid "to script"
 msgstr ""
 
diff --git a/mathgl_ru.po b/mathgl_ru.po
index ee43760..b3d4f1b 100644
--- a/mathgl_ru.po
+++ b/mathgl_ru.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: MathGL2 2.4.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-05-17 07:55+0300\n"
+"POT-Creation-Date: 2017-07-12 22:00+0300\n"
 "PO-Revision-Date: 2017-04-19 01:17+0300\n"
 "Last-Translator: Alexey Balakin <mathgl.abalakin at gmail.com>\n"
 "Language-Team: Russian\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: mgllab/mgllab.cpp:417
+#: mgllab/mgllab.cpp:415
 #, c-format
 msgid ""
 "\t-1 str       set str as argument $1 for script\n"
@@ -104,7 +104,7 @@ msgstr ""
 "(c) Алексей Балакин, 2007\n"
 "http://mathgl.sourceforge.net/"
 
-#: src/parser.cpp:1010
+#: src/parser.cpp:1013
 #, c-format
 msgid ""
 "\n"
@@ -113,7 +113,7 @@ msgstr ""
 "\n"
 "Попытка изменить временные данные в строке %ld"
 
-#: src/parser.cpp:1008
+#: src/parser.cpp:1011
 #, c-format
 msgid ""
 "\n"
@@ -122,7 +122,7 @@ msgstr ""
 "\n"
 "Строковый аргумент слишком длинный в строке %ld"
 
-#: src/parser.cpp:1009
+#: src/parser.cpp:1012
 #, c-format
 msgid ""
 "\n"
@@ -131,7 +131,7 @@ msgstr ""
 "\n"
 "Лишняя кавычка ' в строке %ld"
 
-#: src/parser.cpp:1006
+#: src/parser.cpp:1009
 #, c-format
 msgid ""
 "\n"
@@ -140,7 +140,7 @@ msgstr ""
 "\n"
 "Неправильные аргументы в строке %ld"
 
-#: src/parser.cpp:1007
+#: src/parser.cpp:1010
 #, c-format
 msgid ""
 "\n"
@@ -184,7 +184,7 @@ msgstr " Новый"
 msgid " Save"
 msgstr " Сохранить"
 
-#: mgllab/mgllab.cpp:227
+#: mgllab/mgllab.cpp:225
 msgid " Yes "
 msgstr "Да"
 
@@ -488,7 +488,7 @@ msgstr "1D график"
 msgid "1D plots"
 msgstr "1D графики"
 
-#: mgllab/help.cpp:359
+#: mgllab/help.cpp:360
 msgid "1D view"
 msgstr "1D вид"
 
@@ -504,7 +504,7 @@ msgstr "2D график"
 msgid "2D plots"
 msgstr "2D графики"
 
-#: mgllab/help.cpp:361
+#: mgllab/help.cpp:362
 msgid "2D view"
 msgstr "2D вид"
 
@@ -520,7 +520,7 @@ msgstr "3D данные с размерами из файла"
 msgid "3D plots"
 msgstr "3D графики"
 
-#: mgllab/help.cpp:363
+#: mgllab/help.cpp:364
 msgid "3D view"
 msgstr "3D вид"
 
@@ -560,7 +560,7 @@ msgstr ""
 msgid "@<-  Prev"
 msgstr "@<-  Пред."
 
-#: widgets/qt.cpp:1277 udav/udav_wnd.cpp:331 mgllab/mgllab.cpp:332
+#: widgets/qt.cpp:1277 udav/udav_wnd.cpp:331 mgllab/mgllab.cpp:330
 msgid "About"
 msgstr "О программе"
 
@@ -678,11 +678,11 @@ msgstr "Добавить к"
 msgid "Add user-defined symbol"
 msgstr "Добавить пользовательский символ"
 
-#: widgets/fltk.cpp:851
+#: widgets/fltk.cpp:852
 msgid "Adjust picture size to fill drawing area"
 msgstr "Подогнать размер картинки под область окна"
 
-#: widgets/fltk.cpp:814 widgets/qt.cpp:1139 udav/plot_pnl.cpp:337
+#: widgets/fltk.cpp:815 widgets/qt.cpp:1139 udav/plot_pnl.cpp:337
 msgid "Adjust size"
 msgstr "Подогнать размер"
 
@@ -847,12 +847,12 @@ msgstr "B - темно-синий"
 msgid "Backward"
 msgstr "Назад"
 
-#: src/font.cpp:947
+#: src/font.cpp:948
 #, c-format
 msgid "Bad '%ls' at %zu\n"
 msgstr "Неправильный '%ls' при %zu\n"
 
-#: src/parser.cpp:766
+#: src/parser.cpp:769
 #, c-format
 msgid "Bad arguments for %ls: %ld instead of %d\n"
 msgstr "Неправильные аргументы для %ls: %ld вместо %d\n"
@@ -893,7 +893,7 @@ msgstr "Оба поля в yrange должны быть заполнены"
 msgid "Both fields in zrange must be filled"
 msgstr "Оба поля в zrange должны быть заполнены"
 
-#: src/parser.cpp:1423
+#: src/parser.cpp:1426
 msgid "Break for-loop"
 msgstr "Прервать выполнение цикла for"
 
@@ -928,8 +928,8 @@ msgstr "Вычисления"
 
 #. TODO
 #. connect(hidden,SIGNAL(cursorPositionChanged()),this,SLOT(hiddenClicked()));
-#: udav/udav_wnd.cpp:194 udav/udav_wnd.cpp:206 mgllab/mgllab.cpp:326
-#: mgllab/mgllab.cpp:557
+#: udav/udav_wnd.cpp:194 udav/udav_wnd.cpp:206 mgllab/mgllab.cpp:324
+#: mgllab/mgllab.cpp:554
 msgid "Calculator"
 msgstr "Калькулятор"
 
@@ -941,7 +941,7 @@ msgstr "Калькулятор"
 #: mgllab/editor.cpp:282 mgllab/mathgl.cpp:164 mgllab/mathgl.cpp:195
 #: mgllab/dialogs.cpp:120 mgllab/dialogs.cpp:164 mgllab/dialogs.cpp:410
 #: mgllab/dialogs.cpp:584 mgllab/dialogs.cpp:749 mgllab/dialogs.cpp:1071
-#: mgllab/dialogs.cpp:1318 mgllab/dialogs.cpp:1473 mgllab/mgllab.cpp:482
+#: mgllab/dialogs.cpp:1318 mgllab/dialogs.cpp:1473 mgllab/mgllab.cpp:479
 #: mgllab/table.cpp:101 mgllab/table.cpp:179 mgllab/table.cpp:353
 #: mgllab/table.cpp:556 mgllab/table.cpp:619 mgllab/table.cpp:674
 msgid "Cancel"
@@ -951,7 +951,7 @@ msgstr "Отмена"
 msgid "Cannot triangulate this set!"
 msgstr "Не могу построить триангуляцию!"
 
-#: udav/udav_wnd.cpp:226 mgllab/mgllab.cpp:355 mgllab/mgllab.cpp:356
+#: udav/udav_wnd.cpp:226 mgllab/mgllab.cpp:353 mgllab/mgllab.cpp:354
 msgid "Canvas"
 msgstr "График"
 
@@ -1014,8 +1014,8 @@ msgstr "Очистить рисунок"
 
 #. o = new Fl_Button(180, 130, 25, 25);o->image(img_save);	o->tooltip("img_save");
 #: widgets/qt.cpp:1091 udav/find_dlg.cpp:52 udav/hint_dlg.cpp:70
-#: mgllab/editor.cpp:565 mgllab/help.cpp:308 mgllab/help.cpp:367
-#: mgllab/help.cpp:483
+#: mgllab/editor.cpp:565 mgllab/help.cpp:308 mgllab/help.cpp:368
+#: mgllab/help.cpp:484
 msgid "Close"
 msgstr "Закрыть"
 
@@ -1062,7 +1062,7 @@ msgstr ""
 msgid "Column expr"
 msgstr ""
 
-#: mgllab/dialogs.cpp:724 mgllab/mgllab.cpp:305
+#: mgllab/dialogs.cpp:724 mgllab/mgllab.cpp:303
 msgid "Command"
 msgstr "Команда"
 
@@ -1102,7 +1102,7 @@ msgstr "Вычисляет точки фрактала IFS с параметра
 msgid "Computes the flame fractal"
 msgstr "Вычисляет точки фрактала flame"
 
-#: src/parser.cpp:1431 src/parser.cpp:1435
+#: src/parser.cpp:1434 src/parser.cpp:1438
 msgid "Conditional operator"
 msgstr "Условный оператор"
 
@@ -1122,7 +1122,7 @@ msgstr "Копировать данные"
 msgid "Copy data from another variable"
 msgstr "Копировать данные из другой переменной"
 
-#: widgets/fltk.cpp:811
+#: widgets/fltk.cpp:812
 msgid "Copy graphics"
 msgstr "Копировать рисунок"
 
@@ -1130,7 +1130,7 @@ msgstr "Копировать рисунок"
 msgid "Copy graphics to clipboard (Ctrl+Shift+G)."
 msgstr "Копировать рисунок в буфер обмена (Ctrl+Shift+G)."
 
-#: widgets/fltk.cpp:855
+#: widgets/fltk.cpp:856
 msgid "Copy image to clipboard"
 msgstr "Копировать рисунок в буфер обмена"
 
@@ -1150,7 +1150,7 @@ msgstr "Копировать выделенный текст или данные
 msgid "Copy selection to clipboard"
 msgstr "Копировать выделение в буфер обмена"
 
-#: udav/text_pnl.cpp:533 mgllab/mgllab.cpp:295
+#: udav/text_pnl.cpp:533 mgllab/mgllab.cpp:293
 msgid "Copy text"
 msgstr "Копировать текст"
 
@@ -1227,7 +1227,7 @@ msgstr "Создать новый массив данных, заполненн
 msgid "Create new empty script window (Ctrl+N)."
 msgstr "Создать новое окно скрипта (Ctrl+N)."
 
-#: src/parser.cpp:1436
+#: src/parser.cpp:1439
 msgid "Creates new variable from list of numbers or data"
 msgstr "Создать новый массив из списка значений или данных"
 
@@ -1272,7 +1272,7 @@ msgstr "Текущий шрифт"
 msgid "Cut selected text to clipboard (Ctrl+X)."
 msgstr "Вырезать выбранный текст в буфер обмена (Ctrl+X)."
 
-#: udav/text_pnl.cpp:528 mgllab/mgllab.cpp:294
+#: udav/text_pnl.cpp:528 mgllab/mgllab.cpp:292
 msgid "Cut text"
 msgstr "Вырезать текст"
 
@@ -1348,19 +1348,19 @@ msgstr "Уменьшить угол θ на 10 градусов."
 msgid "Decrease font size"
 msgstr "Уменьшить размер шрифта"
 
-#: src/parser.cpp:1427
+#: src/parser.cpp:1430
 msgid "Define constant or parameter"
 msgstr "Определит постоянную или параметр"
 
-#: src/parser.cpp:1426
+#: src/parser.cpp:1429
 msgid "Define parameter as character"
 msgstr "Определить параметр как символ"
 
-#: src/parser.cpp:1428
+#: src/parser.cpp:1431
 msgid "Define parameter as numerical value"
 msgstr "Определить параметр как значение выражения"
 
-#: src/parser.cpp:1422
+#: src/parser.cpp:1425
 msgid "Define parameter from user input"
 msgstr "Определить параметр по вводу пользователя"
 
@@ -1482,31 +1482,31 @@ msgstr "Не сохранять"
 msgid "Double diff."
 msgstr "Вторая производная"
 
-#: src/exec_gr.cpp:1032
+#: src/exec_gr.cpp:1043
 msgid "Draw Bifurcation diagram"
 msgstr "Нарисовать бифуркационную диаграмму"
 
-#: src/exec_gr.cpp:1067
+#: src/exec_gr.cpp:1078
 msgid "Draw Iris plots"
 msgstr "Нарисовать график Iris"
 
-#: src/exec_gr.cpp:1069
+#: src/exec_gr.cpp:1080
 msgid "Draw Lamerey diagram"
 msgstr "Нарисовать диаграмму Ламерея"
 
-#: src/exec_gr.cpp:1073
+#: src/exec_gr.cpp:1084
 msgid "Draw Open-High-Low-Close (OHLC) diagram"
 msgstr "Нарисовать диаграмму OHLC (Open-High-Low-Close)"
 
-#: src/exec_gr.cpp:1076
+#: src/exec_gr.cpp:1087
 msgid "Draw Poincare map"
 msgstr "Нарисовать диаграмму Пуанкаре"
 
-#: src/exec_gr.cpp:1082
+#: src/exec_gr.cpp:1093
 msgid "Draw STFA diagram"
 msgstr "Нарисовать диаграмму STFA"
 
-#: src/exec_gr.cpp:1094
+#: src/exec_gr.cpp:1105
 msgid "Draw TeX mark at point position"
 msgstr "Нарисовать ТеХ символы в положении точек"
 
@@ -1514,19 +1514,24 @@ msgstr "Нарисовать ТеХ символы в положении точ
 msgid "Draw angle arc"
 msgstr "Нарисовать дугу"
 
-#: src/exec_gr.cpp:1026
+#: src/exec_gr.cpp:1036
 msgid "Draw area plot for 1D data"
 msgstr "Закрасить область между кривой и осью"
 
-#: src/exec_gr.cpp:1029
+#: src/exec_gr.cpp:1039
 msgid "Draw bars for 1D data"
 msgstr "Нарисовать график из вертикальных полос"
 
-#: src/exec_gr.cpp:1031
+#: src/exec_gr.cpp:1041
 msgid "Draw belts"
 msgstr "Нарисовать поверхность ленточками"
 
-#: src/exec_gr.cpp:1092
+#: src/exec_gr.cpp:1042
+#, fuzzy
+msgid "Draw belts colored by other data"
+msgstr "Нарисовать поверхность с заданным цветом"
+
+#: src/exec_gr.cpp:1103
 msgid "Draw binormales for 1D data"
 msgstr "Нарисовать нормаль и бинормаль для кривой"
 
@@ -1538,19 +1543,19 @@ msgstr "Нарисовать растр (логотип) в области ос
 msgid "Draw bounding box"
 msgstr "Нарисовать ограничивающий параллелепипед"
 
-#: src/exec_gr.cpp:1034
+#: src/exec_gr.cpp:1045
 msgid "Draw boxes"
 msgstr "Нарисовать поверхность ящиками"
 
-#: src/exec_gr.cpp:1033
+#: src/exec_gr.cpp:1044
 msgid "Draw boxplot for 2D data"
 msgstr "Нарисовать box-and-whisker диаграмму"
 
-#: src/exec_gr.cpp:1035
+#: src/exec_gr.cpp:1046
 msgid "Draw candlestick chart"
 msgstr "Нарисовать свечной график"
 
-#: src/exec_gr.cpp:1036
+#: src/exec_gr.cpp:1047
 msgid "Draw chart"
 msgstr "Нарисовать линейчатую (круговую) диаграмму"
 
@@ -1558,7 +1563,7 @@ msgstr "Нарисовать линейчатую (круговую) диагр
 msgid "Draw circle"
 msgstr "Нарисовать окружность (круг)"
 
-#: src/exec_gr.cpp:1037
+#: src/exec_gr.cpp:1048
 msgid "Draw cloud"
 msgstr "Нарисовать облако для 3D данных"
 
@@ -1570,43 +1575,43 @@ msgstr "Нарисовать цветовую шкалу"
 msgid "Draw cone"
 msgstr "Нарисовать конус"
 
-#: src/exec_gr.cpp:1038
+#: src/exec_gr.cpp:1049
 msgid "Draw cones for 1D data"
 msgstr "Нарисовать конусы для 1D данных"
 
-#: src/exec_gr.cpp:1039
+#: src/exec_gr.cpp:1050
 msgid "Draw contour lines"
 msgstr "Нарисовать линии уровня"
 
-#: src/exec_gr.cpp:1049
+#: src/exec_gr.cpp:1060
 msgid "Draw contour lines at x-slice (or x-plane)"
 msgstr "Нарисовать линии уровня на x-срезе"
 
-#: src/exec_gr.cpp:1050
+#: src/exec_gr.cpp:1061
 msgid "Draw contour lines at y-slice (or y-plane)"
 msgstr "Нарисовать линии уровня на y-срезе"
 
-#: src/exec_gr.cpp:1051
+#: src/exec_gr.cpp:1062
 msgid "Draw contour lines at z-slice (or z-plane)"
 msgstr "Нарисовать линии уровня на z-срезе"
 
-#: src/exec_gr.cpp:1040
+#: src/exec_gr.cpp:1051
 msgid "Draw contour lines for 3D data"
 msgstr "Нарисовать линии уровня на срезах 3D данных"
 
-#: src/exec_gr.cpp:1099
+#: src/exec_gr.cpp:1110
 msgid "Draw contour lines for surface of triangles"
 msgstr "Нарисовать линии уровня для поверхности из треугольников"
 
-#: src/exec_gr.cpp:1047
+#: src/exec_gr.cpp:1058
 msgid "Draw contour lines on parametric surface"
 msgstr "Нарисовать линии уровня на параметрической поверхности"
 
-#: src/exec_gr.cpp:1048
+#: src/exec_gr.cpp:1059
 msgid "Draw contour tubes"
 msgstr "Нарисовать цилиндры по линиям уровней"
 
-#: src/exec_gr.cpp:1100
+#: src/exec_gr.cpp:1111
 msgid "Draw contour tubes for surface of triangles"
 msgstr "Нарисовать цилиндры по линиям уровней для поверхности из треугольников"
 
@@ -1614,35 +1619,35 @@ msgstr "Нарисовать цилиндры по линиям уровней 
 msgid "Draw curve"
 msgstr "Нарисовать кривую"
 
-#: src/exec_gr.cpp:1102
+#: src/exec_gr.cpp:1113
 msgid "Draw curve by tube"
 msgstr "Нарисовать трубу около кривой"
 
-#: src/exec_gr.cpp:1053
+#: src/exec_gr.cpp:1064
 msgid "Draw density plot"
 msgstr "Нарисовать график плотности"
 
-#: src/exec_gr.cpp:1054
+#: src/exec_gr.cpp:1065
 msgid "Draw density plot at slices of 3D data"
 msgstr "Нарисовать график плотности на срезе 3D данных"
 
-#: src/exec_gr.cpp:1055
+#: src/exec_gr.cpp:1066
 msgid "Draw density plot at x-slice (or x-plane)"
 msgstr "Нарисовать график плотности на x-срезе"
 
-#: src/exec_gr.cpp:1056
+#: src/exec_gr.cpp:1067
 msgid "Draw density plot at y-slice (or y-plane)"
 msgstr "Нарисовать график плотности на y-срезе"
 
-#: src/exec_gr.cpp:1057
+#: src/exec_gr.cpp:1068
 msgid "Draw density plot at z-slice (or z-plane)"
 msgstr "Нарисовать график плотности на z-срезе"
 
-#: src/exec_gr.cpp:1058
+#: src/exec_gr.cpp:1069
 msgid "Draw dew plot"
 msgstr "Нарисовать векторное поле каплями"
 
-#: src/exec_gr.cpp:1059
+#: src/exec_gr.cpp:1070
 msgid "Draw dots for arbitrary data points"
 msgstr "Нарисовать набор точек"
 
@@ -1658,7 +1663,7 @@ msgstr "Нарисовать эллипс"
 msgid "Draw error box"
 msgstr "Нарисовать размер ошибки"
 
-#: src/exec_gr.cpp:1060
+#: src/exec_gr.cpp:1071
 msgid "Draw error boxes"
 msgstr "Нарисовать размеры ошибок для 1D данных"
 
@@ -1678,19 +1683,19 @@ msgstr "Нарисовать грань поперек оси y"
 msgid "Draw face perpendicular to z-axis"
 msgstr "Нарисовать грань поперек оси z"
 
-#: src/exec_gr.cpp:1079
+#: src/exec_gr.cpp:1090
 msgid "Draw filled region (ribbon) between 2 curves"
 msgstr "Закрасить область между двумя кривыми"
 
-#: src/exec_gr.cpp:1074
+#: src/exec_gr.cpp:1085
 msgid "Draw flow pipes for vector field"
 msgstr "Нарисовать трубки тока для векторного поля"
 
-#: src/exec_gr.cpp:1062
+#: src/exec_gr.cpp:1073
 msgid "Draw flow threads for vector field"
 msgstr "Нарисовать линии тока для векторного поля"
 
-#: src/exec_gr.cpp:1064
+#: src/exec_gr.cpp:1075
 msgid "Draw gradient lines for scalar field"
 msgstr "Нарисовать линии градиента для скалярного поля"
 
@@ -1698,43 +1703,43 @@ msgstr "Нарисовать линии градиента для скалярн
 msgid "Draw grid"
 msgstr "Нарисовать сетку осей координат"
 
-#: src/exec_gr.cpp:1066
+#: src/exec_gr.cpp:1077
 msgid "Draw grid at slices of 3D data"
 msgstr "Нарисовать сетку на срезе 3D данных"
 
-#: src/exec_gr.cpp:1065
+#: src/exec_gr.cpp:1076
 msgid "Draw grid for data array(s)"
 msgstr "Нарисовать сетку для массива"
 
-#: src/exec_gr.cpp:1028
+#: src/exec_gr.cpp:1038
 msgid "Draw horizontal bars for 1D data"
 msgstr "Нарисовать график из горизонтальных полос"
 
-#: src/exec_gr.cpp:1095
+#: src/exec_gr.cpp:1106
 msgid "Draw horizontal tiles"
 msgstr "Нарисовать поверхность горизонтальными плитками"
 
-#: src/exec_gr.cpp:1096
+#: src/exec_gr.cpp:1107
 msgid "Draw horizontal tiles with variable size"
 msgstr "Нарисовать поверхность плитками переменного размера"
 
-#: src/exec_gr.cpp:1084
+#: src/exec_gr.cpp:1095
 msgid "Draw isosurface for 3D data"
 msgstr "Нарисовать поверхность постоянного уровня"
 
-#: src/exec_gr.cpp:1087
+#: src/exec_gr.cpp:1098
 msgid "Draw isosurface for 3D data colored and transpared by other data"
 msgstr "Нарисовать поверхность уровня с заданными цветом и прозрачностью"
 
-#: src/exec_gr.cpp:1086
+#: src/exec_gr.cpp:1097
 msgid "Draw isosurface for 3D data colored by other data"
 msgstr "Нарисовать поверхность уровня с заданным цветом"
 
-#: src/exec_gr.cpp:1085
+#: src/exec_gr.cpp:1096
 msgid "Draw isosurface for 3D data transpared by other data"
 msgstr "Нарисовать поверхность уровня с заданной прозрачностью"
 
-#: src/exec_gr.cpp:1068
+#: src/exec_gr.cpp:1079
 msgid "Draw label at arbitrary position"
 msgstr "Вывести надписи для 1D данных"
 
@@ -1762,15 +1767,15 @@ msgstr "Нарисовать легенду графика"
 msgid "Draw line"
 msgstr "Нарисовать прямую линию"
 
-#: src/exec_gr.cpp:1070
+#: src/exec_gr.cpp:1081
 msgid "Draw mapping plot"
 msgstr "Нарисовать отображение матрицы"
 
-#: src/exec_gr.cpp:1071
+#: src/exec_gr.cpp:1082
 msgid "Draw mark plot for 1D data"
 msgstr "Нарисовать маркеры переменного размера"
 
-#: src/exec_gr.cpp:1072
+#: src/exec_gr.cpp:1083
 msgid "Draw mesh surface"
 msgstr "Нарисовать сетчатую поверхность"
 
@@ -1782,15 +1787,15 @@ msgstr "Нарисовать точку"
 msgid "Draw polygon"
 msgstr "Нарисовать полигон"
 
-#: src/exec_gr.cpp:1030
+#: src/exec_gr.cpp:1040
 msgid "Draw quasi-optical beam"
 msgstr "Нарисовать квазиоптический пучок"
 
-#: src/exec_gr.cpp:1078
+#: src/exec_gr.cpp:1089
 msgid "Draw radar chart"
 msgstr "Нарисовать круговой график"
 
-#: src/exec_gr.cpp:1052
+#: src/exec_gr.cpp:1063
 msgid "Draw reconstructed surface for arbitrary data points"
 msgstr "Нарисовать поверхность по произвольным точкам"
 
@@ -1802,43 +1807,43 @@ msgstr "Нарисовать прямоугольник"
 msgid "Draw rhombus"
 msgstr "Нарисовать ромб"
 
-#: src/exec_gr.cpp:1044
+#: src/exec_gr.cpp:1055
 msgid "Draw solid contour lines at x-slice (or x-plane)"
 msgstr "Закрасить линии уровня на x-срезе"
 
-#: src/exec_gr.cpp:1045
+#: src/exec_gr.cpp:1056
 msgid "Draw solid contour lines at y-slice (or y-plane)"
 msgstr "Закрасить линии уровня на y-срезе"
 
-#: src/exec_gr.cpp:1046
+#: src/exec_gr.cpp:1057
 msgid "Draw solid contour lines at z-slice (or z-plane)"
 msgstr "Закрасить линии уровня на z-срезе"
 
-#: src/exec_gr.cpp:1043
+#: src/exec_gr.cpp:1054
 msgid "Draw solid contour lines for 3D data"
 msgstr "Закрасить линии уровня на 3D данных"
 
-#: src/exec_gr.cpp:1042
+#: src/exec_gr.cpp:1053
 msgid "Draw solid contours"
 msgstr "Закрасить линии уровня"
 
-#: src/exec_gr.cpp:1041
+#: src/exec_gr.cpp:1052
 msgid "Draw solid contours with manual colors"
 msgstr "Закрасить линии уровня заданными цветами"
 
-#: src/exec_gr.cpp:1083
+#: src/exec_gr.cpp:1094
 msgid "Draw solid surface"
 msgstr "Нарисовать поверхность"
 
-#: src/exec_gr.cpp:1090
+#: src/exec_gr.cpp:1101
 msgid "Draw solid surface colored and transpared by other data"
 msgstr "Нарисовать поверхность с заданными цветом и прозрачностью"
 
-#: src/exec_gr.cpp:1089
+#: src/exec_gr.cpp:1100
 msgid "Draw solid surface colored by other data"
 msgstr "Нарисовать поверхность с заданным цветом"
 
-#: src/exec_gr.cpp:1088
+#: src/exec_gr.cpp:1099
 msgid "Draw solid surface transpared by other data"
 msgstr "Нарисовать поверхность с заданной прозрачностью"
 
@@ -1846,35 +1851,35 @@ msgstr "Нарисовать поверхность с заданной проз
 msgid "Draw sphere"
 msgstr "Нарисовать сферу"
 
-#: src/exec_gr.cpp:1080
+#: src/exec_gr.cpp:1091
 msgid "Draw stem plot for 1D data"
 msgstr "Нарисовать линии от 1D данных до оси"
 
-#: src/exec_gr.cpp:1081
+#: src/exec_gr.cpp:1092
 msgid "Draw step plot for 1D data"
 msgstr "Нарисовать ступеньки"
 
-#: src/exec_gr.cpp:1097
+#: src/exec_gr.cpp:1108
 msgid "Draw surface of curve rotation"
 msgstr "Нарисовать поверхность вращения"
 
-#: src/exec_gr.cpp:1077
+#: src/exec_gr.cpp:1088
 msgid "Draw surface of quadrangles"
 msgstr "Нарисовать поверхность из четырехугольников"
 
-#: src/exec_gr.cpp:1101
+#: src/exec_gr.cpp:1112
 msgid "Draw surface of triangles"
 msgstr "Нарисовать поверхность из треугольников"
 
-#: src/exec_gr.cpp:1027
+#: src/exec_gr.cpp:1037
 msgid "Draw surfaces of contour lines rotation"
 msgstr "Нарисовать поверхность вращения линий уровня"
 
-#: src/exec_gr.cpp:1091
+#: src/exec_gr.cpp:1102
 msgid "Draw table with data values"
 msgstr "Нарисовать таблицу значений данных"
 
-#: src/exec_gr.cpp:1093
+#: src/exec_gr.cpp:1104
 msgid "Draw tension plot for 1D data"
 msgstr "Нарисовать кривую с заданным цветом"
 
@@ -1886,23 +1891,23 @@ msgstr "Вывести текст в точке или вдоль кривой"
 msgid "Draw user-defined symbol at given position and direction"
 msgstr "Нарисовать символ в заданных точке и направлении"
 
-#: src/exec_gr.cpp:1075
+#: src/exec_gr.cpp:1086
 msgid "Draw usual plot for 1D data"
 msgstr "Нарисовать кривую для 1D данных"
 
-#: src/exec_gr.cpp:1103
+#: src/exec_gr.cpp:1114
 msgid "Draw vector field"
 msgstr "Нарисовать векторное поле"
 
-#: src/exec_gr.cpp:1104
+#: src/exec_gr.cpp:1115
 msgid "Draw vector field at slices of 3D data"
 msgstr "Нарисовать векторное поле на срезах 3D данных"
 
-#: src/exec_gr.cpp:1098
+#: src/exec_gr.cpp:1109
 msgid "Draw vectors along a curve"
 msgstr "Нарисовать вектора вдоль кривой"
 
-#: src/exec_gr.cpp:1061
+#: src/exec_gr.cpp:1072
 msgid "Draw waterfalls"
 msgstr "Нарисовать поверхность набором линий (водопад)"
 
@@ -1923,7 +1928,7 @@ msgstr "E - темно-салатовый"
 msgid "Edges"
 msgstr "Края"
 
-#: udav/text_pnl.cpp:84 mgllab/mgllab.cpp:292
+#: udav/text_pnl.cpp:84 mgllab/mgllab.cpp:290
 msgid "Edit"
 msgstr "Правка"
 
@@ -1935,13 +1940,13 @@ msgstr "Редактировать выбранный массив данных"
 msgid "Elliptic"
 msgstr "Эллиптические"
 
-#: udav/prop_dlg.cpp:171 mgllab/mgllab.cpp:474
+#: udav/prop_dlg.cpp:171 mgllab/mgllab.cpp:471
 msgid "Enable keywords completion"
 msgstr "Разрешить дополнение команд"
 
 #. pure = new QCheckBox(_("Disable face drawing (faster) for mouse rotation/shift/zoom."), this);
 #. pure->setChecked(mglAutoPure);	v->addWidget(pure);	pure->setEnabled(false);
-#: udav/prop_dlg.cpp:169 mgllab/mgllab.cpp:476
+#: udav/prop_dlg.cpp:169 mgllab/mgllab.cpp:473
 msgid "Enable mouse wheel for zooming"
 msgstr "Колесо мыши приближает график"
 
@@ -2075,11 +2080,11 @@ msgid ""
 msgstr "Интерполирует значения в точках i=idat,j=jdat,k=kdat"
 
 #. {"defpal",_("Define parameter as palette color"),"defpal $N val", 0, 6},
-#: src/parser.cpp:1430
+#: src/parser.cpp:1433
 msgid "Execute if condition is false"
 msgstr "Выполнить если условие ложно"
 
-#: mgllab/mgllab.cpp:472
+#: mgllab/mgllab.cpp:469
 msgid "Execute script after loading"
 msgstr "Выполнить скрипт после загрузки"
 
@@ -2087,7 +2092,7 @@ msgstr "Выполнить скрипт после загрузки"
 msgid "Execute script and redraw graphics (F5)."
 msgstr "Выполнить скрипт и обновить рисунок (F5)."
 
-#: src/parser.cpp:1424
+#: src/parser.cpp:1427
 msgid "Execute script in external file"
 msgstr "Выполнить скрипт из внешнего файла"
 
@@ -2095,7 +2100,7 @@ msgstr "Выполнить скрипт из внешнего файла"
 msgid "Existed data arrays"
 msgstr "Массивы данных"
 
-#: mgllab/mgllab.cpp:290
+#: mgllab/mgllab.cpp:288
 msgid "Exit"
 msgstr "Выход"
 
@@ -2111,7 +2116,7 @@ msgstr "Exp-интегралы"
 msgid "Export Data?"
 msgstr "Экспорт данных?"
 
-#: widgets/fltk.cpp:789
+#: widgets/fltk.cpp:790
 msgid "Export as ..."
 msgstr "Экспорт как ..."
 
@@ -2158,7 +2163,7 @@ msgstr "Фактор"
 
 #. file menu
 #: widgets/qt.cpp:1066 udav/udav_wnd.cpp:281 udav/dat_pnl.cpp:681
-#: mgllab/mgllab.cpp:277 mgllab/table.cpp:748
+#: mgllab/mgllab.cpp:275 mgllab/table.cpp:748
 msgid "File"
 msgstr "Файл"
 
@@ -2166,7 +2171,7 @@ msgstr "Файл"
 msgid "File %1 saved"
 msgstr "Файл %1 сохранен."
 
-#: mgllab/mgllab.cpp:227
+#: mgllab/mgllab.cpp:225
 msgid "File is exesist. Overwrite it?"
 msgstr "Файл существует. Переписать?"
 
@@ -2174,7 +2179,7 @@ msgstr "Файл существует. Переписать?"
 msgid "File name"
 msgstr "Имя файла"
 
-#: mgllab/mgllab.cpp:303
+#: mgllab/mgllab.cpp:301
 msgid "File path"
 msgstr "Путь к файлу"
 
@@ -2182,7 +2187,7 @@ msgstr "Путь к файлу"
 msgid "File to export"
 msgstr "Экспорт в файл"
 
-#: mgllab/editor.cpp:267 mgllab/mgllab.cpp:396
+#: mgllab/editor.cpp:267 mgllab/mgllab.cpp:394
 msgid "File/Recent files"
 msgstr "Файл/Последние файлы"
 
@@ -2246,7 +2251,7 @@ msgstr "Найти максимум по направлению"
 msgid "Find minimal value over direction"
 msgstr "Найти минимум по направлению"
 
-#: udav/text_pnl.cpp:551 mgllab/mgllab.cpp:301
+#: udav/text_pnl.cpp:551 mgllab/mgllab.cpp:299
 msgid "Find next"
 msgstr "Найти следующее"
 
@@ -2278,11 +2283,11 @@ msgstr "Найти что:"
 msgid "Find/Replace"
 msgstr "Найти/Заменить"
 
-#: mgllab/mgllab.cpp:300
+#: mgllab/mgllab.cpp:298
 msgid "Find|Replace"
 msgstr "Найти|Заменить"
 
-#: src/parser.cpp:1432
+#: src/parser.cpp:1435
 msgid "Finish if/else block"
 msgstr "Окончание блока if/else"
 
@@ -2298,7 +2303,7 @@ msgstr "Первый срез"
 msgid "Fit data to formula"
 msgstr "Подогнать данные по формуле"
 
-#: udav/text_pnl.cpp:567 mgllab/mgllab.cpp:307
+#: udav/text_pnl.cpp:567 mgllab/mgllab.cpp:305
 msgid "Fitted formula"
 msgstr "Подобранная формула"
 
@@ -2314,11 +2319,11 @@ msgstr "Туман"
 msgid "Fog dist."
 msgstr "глубина"
 
-#: mgllab/mgllab.cpp:533
+#: mgllab/mgllab.cpp:530
 msgid "Folder for help files"
 msgstr "Папка для файлов справки"
 
-#: udav/text_pnl.cpp:587 mgllab/mgllab.cpp:304
+#: udav/text_pnl.cpp:587 mgllab/mgllab.cpp:302
 msgid "Folder path"
 msgstr "Путь к папке"
 
@@ -2326,7 +2331,7 @@ msgstr "Путь к папке"
 msgid "Font"
 msgstr "Шрифт"
 
-#: mgllab/mgllab.cpp:524
+#: mgllab/mgllab.cpp:521
 msgid "Font file name"
 msgstr "Имя файла шрифта"
 
@@ -2334,11 +2339,11 @@ msgstr "Имя файла шрифта"
 msgid "Font files (*.vfm)"
 msgstr "Файлы шрифтов (*.vfm)"
 
-#: mgllab/mgllab.cpp:463
+#: mgllab/mgllab.cpp:460
 msgid "Font kind"
 msgstr "Шрифт"
 
-#: mgllab/mgllab.cpp:465
+#: mgllab/mgllab.cpp:462
 msgid "Font size"
 msgstr "Размер"
 
@@ -2350,7 +2355,7 @@ msgstr "Шрифт"
 msgid "FontSize"
 msgstr "Размер"
 
-#: src/parser.cpp:1433
+#: src/parser.cpp:1436
 msgid "For loop"
 msgstr "Цикл for"
 
@@ -2367,7 +2372,7 @@ msgstr "Кадр %1 из %2"
 msgid "From"
 msgstr "от"
 
-#: mgllab/mgllab.cpp:592
+#: mgllab/mgllab.cpp:589
 msgid "Function"
 msgstr "Функция"
 
@@ -2439,7 +2444,7 @@ msgid "Go to the specified slice for 3D data."
 msgstr "Перейти к указанному срезу 3D данных"
 
 #: widgets/qt.cpp:1095 widgets/qt.cpp:1097 udav/plot_pnl.cpp:66
-#: mgllab/mgllab.cpp:319
+#: mgllab/mgllab.cpp:317
 msgid "Graphics"
 msgstr "Графика"
 
@@ -2447,7 +2452,7 @@ msgstr "Графика"
 msgid "Graphics setup"
 msgstr "Настройка графика"
 
-#: widgets/fltk.cpp:927
+#: widgets/fltk.cpp:928
 msgid "Graphics/Adjust size"
 msgstr "Графика/Подогнать размер"
 
@@ -2456,143 +2461,143 @@ msgstr "Графика/Подогнать размер"
 #. /< Callback function for prev frame
 #. /< Callback function for delay
 #. /< Callback function for reloading
-#: widgets/fltk.cpp:921 include/mgl2/Fl_MathGL.h:150
+#: widgets/fltk.cpp:922 include/mgl2/Fl_MathGL.h:150
 msgid "Graphics/Alpha"
 msgstr "Графика/Прозрачность"
 
-#: widgets/fltk.cpp:956
+#: widgets/fltk.cpp:957
 msgid "Graphics/Animation/Next frame"
 msgstr "Графика/Анимация/Следующий"
 
-#: widgets/fltk.cpp:957
+#: widgets/fltk.cpp:958
 msgid "Graphics/Animation/Prev frame"
 msgstr "Графика/Анимация/Предыдущий"
 
-#: mgllab/mgllab.cpp:371
+#: mgllab/mgllab.cpp:369
 msgid "Graphics/Animation/Setup animation"
 msgstr "Графика/Анимация/Настройка"
 
-#: widgets/fltk.cpp:955 include/mgl2/Fl_MathGL.h:152
+#: widgets/fltk.cpp:956 include/mgl2/Fl_MathGL.h:152
 msgid "Graphics/Animation/Slideshow"
 msgstr "Графика/Анимация/Запустить"
 
-#: widgets/fltk.cpp:931
+#: widgets/fltk.cpp:932
 msgid "Graphics/Copy click coor."
 msgstr "Графика/Копировать коор."
 
-#: widgets/fltk.cpp:930
+#: widgets/fltk.cpp:931
 msgid "Graphics/Copy graphics"
 msgstr "Графика/Копировать рисунок"
 
-#: widgets/fltk.cpp:944
+#: widgets/fltk.cpp:945
 msgid "Graphics/Export/as BMP"
 msgstr "Графика/Экспорт/как BMP"
 
-#: widgets/fltk.cpp:942
+#: widgets/fltk.cpp:943
 msgid "Graphics/Export/as GIF"
 msgstr "Графика/Экспорт/как GIF"
 
-#: widgets/fltk.cpp:939
+#: widgets/fltk.cpp:940
 msgid "Graphics/Export/as JPEG"
 msgstr "Графика/Экспорт/как JPEG"
 
-#: widgets/fltk.cpp:950
+#: widgets/fltk.cpp:951
 msgid "Graphics/Export/as OBJ"
 msgstr "Графика/Экспорт/как OBJ"
 
-#: widgets/fltk.cpp:951
+#: widgets/fltk.cpp:952
 msgid "Graphics/Export/as OFF"
 msgstr "Графика/Экспорт/как OFF"
 
-#: widgets/fltk.cpp:935
+#: widgets/fltk.cpp:936
 msgid "Graphics/Export/as PNG"
 msgstr "Графика/Экспорт/как PNG"
 
-#: widgets/fltk.cpp:949
+#: widgets/fltk.cpp:950
 msgid "Graphics/Export/as PRC"
 msgstr "Графика/Экспорт/как PRC"
 
-#: widgets/fltk.cpp:952
+#: widgets/fltk.cpp:953
 msgid "Graphics/Export/as STL"
 msgstr "Графика/Экспорт/как STL"
 
-#: widgets/fltk.cpp:945
+#: widgets/fltk.cpp:946
 msgid "Graphics/Export/as SVG"
 msgstr "Графика/Экспорт/как SVG"
 
-#: widgets/fltk.cpp:948
+#: widgets/fltk.cpp:949
 msgid "Graphics/Export/as TeX"
 msgstr "Графика/Экспорт/как TeX"
 
-#: widgets/fltk.cpp:953
+#: widgets/fltk.cpp:954
 msgid "Graphics/Export/as XYZ"
 msgstr "Графика/Экспорт/как XYZ"
 
-#: widgets/fltk.cpp:947
+#: widgets/fltk.cpp:948
 msgid "Graphics/Export/as bitmap EPS"
 msgstr "Графика/Экспорт/как растровый EPS"
 
-#: widgets/fltk.cpp:936
+#: widgets/fltk.cpp:937
 msgid "Graphics/Export/as solid PNG"
 msgstr "Графика/Экспорт/как PNG с заливкой"
 
-#: widgets/fltk.cpp:946
+#: widgets/fltk.cpp:947
 msgid "Graphics/Export/as vector EPS"
 msgstr "Графика/Экспорт/как EPS"
 
-#: widgets/fltk.cpp:923 include/mgl2/Fl_MathGL.h:153
+#: widgets/fltk.cpp:924 include/mgl2/Fl_MathGL.h:153
 msgid "Graphics/Grid"
 msgstr "Графика/Сетка"
 
-#: widgets/fltk.cpp:922 include/mgl2/Fl_MathGL.h:151
+#: widgets/fltk.cpp:923 include/mgl2/Fl_MathGL.h:151
 msgid "Graphics/Light"
 msgstr "Графика/Освещение"
 
-#: widgets/fltk.cpp:932 include/mgl2/Fl_MathGL.h:159 mgllab/mgllab.cpp:372
+#: widgets/fltk.cpp:933 include/mgl2/Fl_MathGL.h:159 mgllab/mgllab.cpp:370
 msgid "Graphics/Pause calc"
 msgstr "Графика/Пауза расчета"
 
-#: mgllab/mgllab.cpp:370
+#: mgllab/mgllab.cpp:368
 msgid "Graphics/Primitive"
 msgstr "Графика/Примитивы"
 
-#: widgets/fltk.cpp:926
+#: widgets/fltk.cpp:927
 msgid "Graphics/Redraw"
 msgstr "Графика/Перерисовать"
 
-#: widgets/fltk.cpp:928
+#: widgets/fltk.cpp:929
 msgid "Graphics/Reload data"
 msgstr "Графика/Перезагрузить"
 
-#: widgets/fltk.cpp:925
+#: widgets/fltk.cpp:926
 msgid "Graphics/Restore"
 msgstr "Графика/Восстановить"
 
-#: widgets/fltk.cpp:929
+#: widgets/fltk.cpp:930
 msgid "Graphics/Stop"
 msgstr "Графика/Стоп"
 
-#: widgets/fltk.cpp:963
+#: widgets/fltk.cpp:964
 msgid "Graphics/Transform/Move down"
 msgstr "Графика/Сдвиг/Вниз"
 
-#: widgets/fltk.cpp:959
+#: widgets/fltk.cpp:960
 msgid "Graphics/Transform/Move left"
 msgstr "Графика/Сдвиг/Влево"
 
-#: widgets/fltk.cpp:964
+#: widgets/fltk.cpp:965
 msgid "Graphics/Transform/Move right"
 msgstr "Графика/Сдвиг/Вправо"
 
-#: widgets/fltk.cpp:960
+#: widgets/fltk.cpp:961
 msgid "Graphics/Transform/Move up"
 msgstr "Графика/Сдвиг/Вверх"
 
-#: widgets/fltk.cpp:961
+#: widgets/fltk.cpp:962
 msgid "Graphics/Transform/Zoom in"
 msgstr "Графика/Сдвиг/Приблизить"
 
-#: widgets/fltk.cpp:962
+#: widgets/fltk.cpp:963
 msgid "Graphics/Transform/Zoom out"
 msgstr "Графика/Сдвиг/Отдалить"
 
@@ -2635,8 +2640,8 @@ msgid "Height of selected cells"
 msgstr "Высота выбранных ячеек"
 
 #: widgets/qt.cpp:1276 udav/help_pnl.cpp:57 udav/udav_wnd.cpp:231
-#: udav/udav_wnd.cpp:323 mgllab/mgllab.cpp:329 mgllab/mgllab.cpp:330
-#: mgllab/mgllab.cpp:358
+#: udav/udav_wnd.cpp:323 mgllab/mgllab.cpp:327 mgllab/mgllab.cpp:328
+#: mgllab/mgllab.cpp:356
 msgid "Help"
 msgstr "Справка"
 
@@ -2648,7 +2653,7 @@ msgstr ""
 "Здесь можно задать опции команды, \n"
 "которые используются для доп.настройки графика."
 
-#: udav/udav_wnd.cpp:186 mgllab/mgllab.cpp:298
+#: udav/udav_wnd.cpp:186 mgllab/mgllab.cpp:296
 msgid "Hidden plots"
 msgstr "Скрытые графики"
 
@@ -2660,11 +2665,11 @@ msgstr "Скрыть выделенное"
 msgid "Hide selected plots."
 msgstr "Скрыть выделенные графики"
 
-#: udav/prop_dlg.cpp:173 mgllab/mgllab.cpp:475
+#: udav/prop_dlg.cpp:173 mgllab/mgllab.cpp:472
 msgid "Highlight current object(s)"
 msgstr "Выделить текущие графики"
 
-#: udav/udav_wnd.cpp:328 mgllab/mgllab.cpp:331
+#: udav/udav_wnd.cpp:328 mgllab/mgllab.cpp:329
 msgid "Hints"
 msgstr "Подсказки"
 
@@ -2684,7 +2689,7 @@ msgstr "Гиперболические"
 msgid "ID"
 msgstr ""
 
-#: mgllab/mgllab.cpp:333
+#: mgllab/mgllab.cpp:331
 msgid "Icon list"
 msgstr "Список иконок"
 
@@ -2744,16 +2749,16 @@ msgstr "Увеличить размер шрифта"
 msgid "Info"
 msgstr "Инфо"
 
-#: udav/info_dlg.cpp:55 mgllab/help.cpp:353
+#: udav/info_dlg.cpp:55 mgllab/help.cpp:354
 msgid "Information"
 msgstr "Информация"
 
-#: mgllab/mgllab.cpp:306
+#: mgllab/mgllab.cpp:304
 msgid "Inplot"
 msgstr "Под-график"
 
 #. insert menu
-#: udav/text_pnl.cpp:557 mgllab/mgllab.cpp:302
+#: udav/text_pnl.cpp:557 mgllab/mgllab.cpp:300
 msgid "Insert"
 msgstr "Вставить"
 
@@ -2880,7 +2885,7 @@ msgstr "Надпись"
 msgid "Language for UDAV"
 msgstr "Язык для UDAV"
 
-#: mgllab/mgllab.cpp:478
+#: mgllab/mgllab.cpp:475
 msgid "Language for mgllab"
 msgstr "Язык для mgllab"
 
@@ -3006,7 +3011,7 @@ msgstr "Нижняя граница для цвета или прозрачно
 msgid "M - purple"
 msgstr "M - пурпурный"
 
-#: src/parser.cpp:1018
+#: src/parser.cpp:1021
 msgid "MGL Parser"
 msgstr "MGL парсер"
 
@@ -3014,11 +3019,11 @@ msgstr "MGL парсер"
 msgid "MGL commands for selected group"
 msgstr "Команда MGL для выбранной группы"
 
-#: mgllab/mgllab.cpp:214
+#: mgllab/mgllab.cpp:212
 msgid "MGL files \t*.mgl"
 msgstr "MGL файлы \t*.mgl"
 
-#: mgllab/mgllab.cpp:173
+#: mgllab/mgllab.cpp:172
 msgid ""
 "MGL files \t*.mgl\n"
 "DAT files \t*.{dat,csv}"
@@ -3086,7 +3091,7 @@ msgstr "Штриховка вручную"
 msgid "Manual mask"
 msgstr "Маска вручную"
 
-#: udav/text_pnl.cpp:591 mgllab/mgllab.cpp:308
+#: udav/text_pnl.cpp:591 mgllab/mgllab.cpp:306
 msgid "Manual primitives"
 msgstr "Примитивы вручную"
 
@@ -3172,7 +3177,7 @@ msgstr "Максимум %g\t при x = %ld\ty = %ld\tz = %ld\n"
 msgid "Maximum of"
 msgstr "Максимум от"
 
-#: udav/mem_pnl.cpp:68 udav/mem_pnl.cpp:73 mgllab/mgllab.cpp:360
+#: udav/mem_pnl.cpp:68 udav/mem_pnl.cpp:73 mgllab/mgllab.cpp:358
 msgid "Memory"
 msgstr "Память"
 
@@ -3184,7 +3189,7 @@ msgstr "Число линий"
 msgid "MeshNum"
 msgstr "Число линий"
 
-#: mgllab/mgllab.cpp:327
+#: mgllab/mgllab.cpp:325
 msgid "Messages"
 msgstr "Сообщения"
 
@@ -3362,7 +3367,7 @@ msgstr "Новый под-график"
 msgid "New order of dimensions"
 msgstr "Новый порядок размерностей"
 
-#: udav/udav_wnd.cpp:282 mgllab/mgllab.cpp:278
+#: udav/udav_wnd.cpp:282 mgllab/mgllab.cpp:276
 msgid "New script"
 msgstr "Новый скрипт"
 
@@ -3394,7 +3399,7 @@ msgstr "Следующий срез"
 msgid "Next slide"
 msgstr "Следующий кадр"
 
-#: mgllab/help.cpp:135 mgllab/mgllab.cpp:227
+#: mgllab/help.cpp:135 mgllab/mgllab.cpp:225
 msgid "No"
 msgstr "Нет"
 
@@ -3434,7 +3439,7 @@ msgstr "Вхождения не найдены"
 msgid "No text rotation"
 msgstr "Не вращать текст"
 
-#: widgets/fltk.cpp:812
+#: widgets/fltk.cpp:813
 msgid "Normal view"
 msgstr "Обычный вид"
 
@@ -3505,7 +3510,7 @@ msgstr ""
 #: udav/data_dlg.cpp:92 udav/subplot_dlg.cpp:221 mgllab/mathgl.cpp:196
 #: mgllab/dialogs.cpp:121 mgllab/dialogs.cpp:165 mgllab/dialogs.cpp:411
 #: mgllab/dialogs.cpp:585 mgllab/dialogs.cpp:750 mgllab/dialogs.cpp:1072
-#: mgllab/dialogs.cpp:1319 mgllab/dialogs.cpp:1474 mgllab/mgllab.cpp:483
+#: mgllab/dialogs.cpp:1319 mgllab/dialogs.cpp:1474 mgllab/mgllab.cpp:480
 #: mgllab/table.cpp:621
 msgid "OK"
 msgstr ""
@@ -3514,7 +3519,7 @@ msgstr ""
 msgid "Only current slice will be inserted"
 msgstr "Только текущий срез будет вставлен"
 
-#: mgllab/mgllab.cpp:172
+#: mgllab/mgllab.cpp:171
 msgid "Open File?"
 msgstr "Открыть файл?"
 
@@ -3538,7 +3543,7 @@ msgstr "Открыть диалог создания новых данных."
 msgid "Open file"
 msgstr "Открыть файл"
 
-#: mgllab/mgllab.cpp:279
+#: mgllab/mgllab.cpp:277
 msgid "Open file ..."
 msgstr "Открыть файл ..."
 
@@ -3567,7 +3572,7 @@ msgid "Operations"
 msgstr "Операции"
 
 #: udav/prop_dlg.cpp:91 udav/newcmd_dlg.cpp:72 mgllab/dialogs.cpp:746
-#: mgllab/mgllab.cpp:310
+#: mgllab/mgllab.cpp:308
 msgid "Options"
 msgstr "Опции"
 
@@ -3596,7 +3601,7 @@ msgstr "Собственная яркость поверхности"
 msgid "P - darkpink"
 msgstr "P - багровый"
 
-#: src/prc.cpp:981
+#: src/prc.cpp:982
 msgid "PDF support was disabled. Please, enable it and rebuild MathGL."
 msgstr "PDF поддержка отключена. Включите ее и пересоберите MathGL."
 
@@ -3633,7 +3638,7 @@ msgstr "Вставить данные"
 msgid "Paste range of numbers from clipboard (Ctrl+Shift+P)."
 msgstr "Вставить диапазон значений из буфера обмена (Ctrl+Shift+P)."
 
-#: udav/text_pnl.cpp:538 mgllab/mgllab.cpp:296
+#: udav/text_pnl.cpp:538 mgllab/mgllab.cpp:294
 msgid "Paste text"
 msgstr "Вставить текст"
 
@@ -3645,11 +3650,11 @@ msgstr "Вставить текст из буфера обмена"
 msgid "Paste text or data from clipboard (Ctrl+V)."
 msgstr "Вставить текст из буфера обмена (Ctrl+V)."
 
-#: mgllab/mgllab.cpp:469
+#: mgllab/mgllab.cpp:466
 msgid "Path for MathGL font (without extension)"
 msgstr "Путь к шрифтам MathGL (без расширения)"
 
-#: udav/prop_dlg.cpp:110 mgllab/mgllab.cpp:466
+#: udav/prop_dlg.cpp:110 mgllab/mgllab.cpp:463
 msgid "Path for help files"
 msgstr "Путь к файлам справки"
 
@@ -3662,7 +3667,7 @@ msgid "Pause calculation"
 msgstr "Пауза вычислений"
 
 #. Wnd->connect(a, SIGNAL(triggered()), QMGL, SLOT(setPause()));
-#: widgets/fltk.cpp:891 widgets/qt.cpp:1270
+#: widgets/fltk.cpp:892 widgets/qt.cpp:1270
 msgid "Pause on/off external calculations"
 msgstr "Пауза вкл/выкл для внешних вычислений"
 
@@ -3670,7 +3675,7 @@ msgstr "Пауза вкл/выкл для внешних вычислений"
 msgid "Perform Runge-Kutta step"
 msgstr "Выполнить шаг Рунге-Кутта"
 
-#: widgets/fltk.cpp:864
+#: widgets/fltk.cpp:865
 msgid "Phi angle (rotate in x*y plane)"
 msgstr "Угол Phi (вращать в плоскости x*y)"
 
@@ -3703,11 +3708,11 @@ msgstr ""
 "Нарисовать данные в новом окне.\n"
 "Вы можете выбрать тип графика, его стиль и т.д."
 
-#: mgllab/mgllab.cpp:325
+#: mgllab/mgllab.cpp:323
 msgid "Plot setup"
 msgstr "Настройки графика"
 
-#: udav/text_pnl.cpp:571 mgllab/dialogs.cpp:312 mgllab/mgllab.cpp:309
+#: udav/text_pnl.cpp:571 mgllab/dialogs.cpp:312 mgllab/mgllab.cpp:307
 msgid "Plot style"
 msgstr "Стиль графика"
 
@@ -3735,7 +3740,7 @@ msgstr "Предыдущий кадр"
 msgid "Preview"
 msgstr "Просмотр"
 
-#: mgllab/mgllab.cpp:566
+#: mgllab/mgllab.cpp:563
 msgid "Previous expressions"
 msgstr "Предыдущее выражение"
 
@@ -3771,7 +3776,7 @@ msgstr "Вывести список имен переменных в HDF фай
 msgid "Print message or information about the data"
 msgstr "Вывести сообщение или информацию о данных"
 
-#: mgllab/mgllab.cpp:282
+#: mgllab/mgllab.cpp:280
 msgid "Print plot"
 msgstr "Напечатать график"
 
@@ -3799,7 +3804,7 @@ msgstr "Печатаю ..."
 msgid "Program flow"
 msgstr "Команды управления"
 
-#: udav/udav_wnd.cpp:312 mgllab/mgllab.cpp:322 mgllab/mgllab.cpp:461
+#: udav/udav_wnd.cpp:312 mgllab/mgllab.cpp:320 mgllab/mgllab.cpp:458
 msgid "Properties"
 msgstr "Свойства"
 
@@ -3811,7 +3816,7 @@ msgstr "Свойства выбранного массива данных"
 msgid "Pulse prop."
 msgstr "Свойства импульса"
 
-#: udav/calc_dlg.cpp:127 mgllab/mgllab.cpp:600
+#: udav/calc_dlg.cpp:127 mgllab/mgllab.cpp:597
 msgid "Put function"
 msgstr "Поместить"
 
@@ -3865,7 +3870,7 @@ msgstr "Загрузить данные из файла с размерами и
 msgid "Read data with name 'id' from HDF file"
 msgstr "Загрузить данные с именем 'id' из HDF файла"
 
-#: udav/udav_wnd.cpp:268 mgllab/mgllab.cpp:367
+#: udav/udav_wnd.cpp:268 mgllab/mgllab.cpp:365
 msgid "Ready"
 msgstr "Готов"
 
@@ -3873,7 +3878,7 @@ msgstr "Готов"
 msgid "Rearrange data dimensions"
 msgstr "Упорядочить размерности массива данных"
 
-#: udav/udav_wnd.cpp:301 mgllab/mgllab.cpp:283
+#: udav/udav_wnd.cpp:301 mgllab/mgllab.cpp:281
 msgid "Recent files"
 msgstr "Последние файлы"
 
@@ -3897,7 +3902,7 @@ msgstr "Перерисовать"
 msgid "Redraw picture for $0 equal to"
 msgstr "Перерисовать для $0 равного"
 
-#: widgets/fltk.cpp:813
+#: widgets/fltk.cpp:814
 msgid "Redraw plot"
 msgstr "Перерисовать график"
 
@@ -3905,7 +3910,7 @@ msgstr "Перерисовать график"
 msgid "Refresh"
 msgstr "Обновить"
 
-#: widgets/fltk.cpp:847
+#: widgets/fltk.cpp:848
 msgid "Refresh the picture"
 msgstr "Обновить рисунок"
 
@@ -3917,11 +3922,11 @@ msgstr "Положение i-го цвета"
 msgid "Reload"
 msgstr "Перезагрузить"
 
-#: widgets/fltk.cpp:815
+#: widgets/fltk.cpp:816
 msgid "Reload data"
 msgstr "Перезагрузить"
 
-#: widgets/fltk.cpp:853
+#: widgets/fltk.cpp:854
 msgid "Reload data and refresh the picture"
 msgstr "Перезагрузить данные и обновить рисунок"
 
@@ -4007,7 +4012,7 @@ msgstr "Изменить размер массива данных со сгла
 msgid "Restore"
 msgstr "Восстановить"
 
-#: widgets/fltk.cpp:844
+#: widgets/fltk.cpp:845
 msgid "Restore default graphics rotation, zoom and perspective"
 msgstr "Восстановить вращение, приближение и перспективу графика"
 
@@ -4036,7 +4041,7 @@ msgstr "Результат (будет иметь размеры "
 msgid "Resulting string"
 msgstr "Итоговая строка"
 
-#: src/parser.cpp:1439
+#: src/parser.cpp:1442
 msgid "Return from function"
 msgstr "Возврат из функции"
 
@@ -4077,7 +4082,7 @@ msgstr "Вращать влево"
 msgid "Rotate on"
 msgstr "Поворот"
 
-#: widgets/fltk.cpp:840
+#: widgets/fltk.cpp:841
 msgid "Rotate picture by holding left mouse button"
 msgstr "Вращать рисунок при удержании кнопок мыши"
 
@@ -4109,7 +4114,7 @@ msgstr ""
 "Запустить анимацию (CTRl+F5). Если ее параметры\n"
 "не заданы, то будет показан диалог настройки."
 
-#: widgets/fltk.cpp:885
+#: widgets/fltk.cpp:886
 msgid "Run/Stop slideshow (graphics animation)"
 msgstr "Запустить/остановить анимацию"
 
@@ -4137,7 +4142,7 @@ msgstr "Сохранить"
 msgid "Save Data?"
 msgstr "Сохранить данные?"
 
-#: widgets/fltk.cpp:572 mgllab/mgllab.cpp:214
+#: widgets/fltk.cpp:573 mgllab/mgllab.cpp:212
 msgid "Save File As?"
 msgstr "Сохранить файл?"
 
@@ -4145,7 +4150,7 @@ msgstr "Сохранить файл?"
 msgid "Save JPEG frames"
 msgstr "Сохранить кадры в JPEG"
 
-#: udav/udav_wnd.cpp:290 mgllab/mgllab.cpp:281
+#: udav/udav_wnd.cpp:290 mgllab/mgllab.cpp:279
 msgid "Save as ..."
 msgstr "Сохранить как ..."
 
@@ -4165,11 +4170,11 @@ msgstr "Сохранить данные в файл (Ctrl+Shift+S)."
 msgid "Save data to file"
 msgstr "Сохранить данные в файл"
 
-#: mgllab/mgllab.cpp:280
+#: mgllab/mgllab.cpp:278
 msgid "Save file"
 msgstr "Сохранить файл"
 
-#: mgllab/mgllab.cpp:473
+#: mgllab/mgllab.cpp:470
 msgid "Save file before redrawing"
 msgstr "Сохранить файл перед рисованием"
 
@@ -4209,7 +4214,7 @@ msgstr "Скрипт"
 msgid "Search backward"
 msgstr "Искать назад"
 
-#: udav/text_pnl.cpp:543 mgllab/mgllab.cpp:297
+#: udav/text_pnl.cpp:543 mgllab/mgllab.cpp:295
 msgid "Select all"
 msgstr "Выделить все"
 
@@ -4265,7 +4270,7 @@ msgstr "Задает яркость фонового освещения"
 msgid "Set arbitrary position of plot in picture"
 msgstr "Задать произвольную область рисования внутри рисунка"
 
-#: udav/udav_wnd.cpp:315 mgllab/mgllab.cpp:323
+#: udav/udav_wnd.cpp:315 mgllab/mgllab.cpp:321
 msgid "Set arguments"
 msgstr "Задать аргументы"
 
@@ -4509,11 +4514,11 @@ msgstr ""
 msgid "Settings"
 msgstr "Настройки"
 
-#: mgllab/mgllab.cpp:321
+#: mgllab/mgllab.cpp:319
 msgid "Setup"
 msgstr "Настройки"
 
-#: mgllab/mgllab.cpp:324
+#: mgllab/mgllab.cpp:322
 msgid "Setup animation"
 msgstr "Настроить анимацию"
 
@@ -4561,19 +4566,19 @@ msgstr "Контрастные"
 msgid "Shear plot"
 msgstr "Наклон графика"
 
-#: widgets/fltk.cpp:878
+#: widgets/fltk.cpp:879
 msgid "Shift the picture down"
 msgstr "Сдвинуть рисунок вниз"
 
-#: widgets/fltk.cpp:870
+#: widgets/fltk.cpp:871
 msgid "Shift the picture left"
 msgstr "Сдвинуть рисунок слево"
 
-#: widgets/fltk.cpp:876
+#: widgets/fltk.cpp:877
 msgid "Shift the picture right"
 msgstr "Сдвинуть рисунок вправо"
 
-#: widgets/fltk.cpp:868
+#: widgets/fltk.cpp:869
 msgid "Shift the picture up"
 msgstr "Сдвинуть рисунок вверх"
 
@@ -4659,11 +4664,11 @@ msgstr "Показать подсказки по использованию MGL.
 msgid "Show info"
 msgstr "Показать информацию"
 
-#: mgllab/mgllab.cpp:299
+#: mgllab/mgllab.cpp:297
 msgid "Show lines"
 msgstr "Показать строки"
 
-#: widgets/fltk.cpp:886
+#: widgets/fltk.cpp:887
 msgid "Show next frame in slideshow"
 msgstr "Показать следующий кадр"
 
@@ -4671,7 +4676,7 @@ msgstr "Показать следующий кадр"
 msgid "Show next slide (Ctrl+.)."
 msgstr "Показать следующий кадр (Ctrl+.)."
 
-#: widgets/fltk.cpp:881
+#: widgets/fltk.cpp:882
 msgid "Show previous frame in slideshow"
 msgstr "Показать предыдущий кадр"
 
@@ -4713,7 +4718,7 @@ msgstr "Размер бруска"
 msgid "Sizes"
 msgstr "Размеры"
 
-#: src/parser.cpp:1425
+#: src/parser.cpp:1428
 msgid "Skip commands and iterate for-loop again"
 msgstr "Пропустить команды до конца цикла for"
 
@@ -4809,15 +4814,15 @@ msgstr "Сжать данные"
 msgid "Start"
 msgstr "Старт"
 
-#: src/parser.cpp:1434
+#: src/parser.cpp:1437
 msgid "Start function definition and stop execution of main script"
 msgstr "Начало определения функции и остановка выполнения основного скрипта"
 
-#: src/parser.cpp:1437
+#: src/parser.cpp:1440
 msgid "Start next for-loop iteration"
 msgstr "Начать новую итерацию цикла for"
 
-#: src/parser.cpp:1438
+#: src/parser.cpp:1441
 msgid "Start/close commands which should executed only once"
 msgstr "Начало/конец блока команд, которые будут выполняться единожды"
 
@@ -4837,11 +4842,11 @@ msgstr "Шаг для расчета дифракции импульса"
 msgid "Stop"
 msgstr "Стоп"
 
-#: widgets/fltk.cpp:849
+#: widgets/fltk.cpp:850
 msgid "Stop drawing"
 msgstr "Остановить рисование"
 
-#: src/parser.cpp:1440
+#: src/parser.cpp:1443
 msgid "Stop execution"
 msgstr "Остановить выполнение скрипта"
 
@@ -4986,7 +4991,7 @@ msgstr "Вкл/выкл туман"
 msgid "Switch on/off gray-scale mode"
 msgstr "Вкл/выкл режим оттенков серого"
 
-#: widgets/fltk.cpp:836
+#: widgets/fltk.cpp:837
 msgid "Switch on/off grid drawing"
 msgstr "Вкл/выкл рисование сетки"
 
@@ -5002,7 +5007,7 @@ msgstr "Вкл/выкл освещение графика (Alt+L)."
 msgid "Switch on/off lightning for the graphics (Ctrl+L)."
 msgstr "Вкл/выкл освещение графика (Ctrl+L)."
 
-#: widgets/fltk.cpp:833
+#: widgets/fltk.cpp:834
 msgid "Switch on/off lightning in the picture"
 msgstr "Вкл/выкл освещение графика"
 
@@ -5034,7 +5039,7 @@ msgstr "Вкл/выкл прозрачность рисунка (Alt+T)."
 msgid "Switch on/off transparency for the graphics (Ctrl+T)."
 msgstr "Вкл/выкл прозрачность рисунка (Ctrl+T)."
 
-#: widgets/fltk.cpp:830
+#: widgets/fltk.cpp:831
 msgid "Switch on/off transparency in the picture"
 msgstr "Вкл/выкл прозрачность рисунка"
 
@@ -5046,7 +5051,7 @@ msgstr "Симметричный диапазон"
 msgid "Symmetrical?"
 msgstr "Симметрично?"
 
-#: src/addon.cpp:110 src/base_cf.cpp:266
+#: src/addon.cpp:111 src/base_cf.cpp:266
 #, c-format
 msgid "TEST: %s\n"
 msgstr "ТЕСТ: %s\n"
@@ -5176,7 +5181,7 @@ msgstr "Неправильные аргументы команды в скрип
 msgid "There is wrong command(s) in script"
 msgstr "В скрипте неправильная команд(ы)"
 
-#: widgets/fltk.cpp:862
+#: widgets/fltk.cpp:863
 msgid "Theta angle (tilt z-axis)"
 msgstr "Угол Theta (наклон оси z)"
 
@@ -5408,7 +5413,7 @@ msgstr "UDAV - сжать данные"
 msgid "UDAV - about"
 msgstr "UDAV - о программе"
 
-#: udav/anim_dlg.cpp:104
+#: udav/anim_dlg.cpp:105
 msgid "UDAV - animation"
 msgstr "UDAV - анимация"
 
@@ -5451,7 +5456,7 @@ msgid "Underline"
 msgstr "Подчеркивание"
 
 #. edit menu
-#: udav/text_pnl.cpp:516 mgllab/mgllab.cpp:293
+#: udav/text_pnl.cpp:516 mgllab/mgllab.cpp:291
 msgid "Undo"
 msgstr "Отмена"
 
@@ -5463,7 +5468,7 @@ msgstr "Отменить изменения в редакторе (Ctrl+Z)."
 msgid "Untitled"
 msgstr "без имени"
 
-#: mgllab/mgllab.cpp:345 mgllab/mgllab.cpp:349
+#: mgllab/mgllab.cpp:343 mgllab/mgllab.cpp:347
 msgid "Untitled - mgllab"
 msgstr "без имени - mgllab"
 
@@ -5480,7 +5485,7 @@ msgstr "Верхняя граница для цвета или прозрачн
 msgid "Usage:\tmglconv [parameter(s)] scriptfile\n"
 msgstr "Использование:\tmglconv [параметр(ы)] имя_скрипта\n"
 
-#: mgllab/mgllab.cpp:416
+#: mgllab/mgllab.cpp:414
 #, c-format
 msgid "Usage:\tmgllab [parameter(s)] scriptfile\n"
 msgstr "Использование:\tmgllab [параметр(ы)] имя_скрипта\n"
@@ -5529,7 +5534,7 @@ msgstr "Использовать цветовую схему"
 msgid "Use dots plot for preview"
 msgstr "Использовать точки для просмотра"
 
-#: mgllab/mgllab.cpp:477
+#: mgllab/mgllab.cpp:474
 msgid "Use multi-threading for drawing"
 msgstr "Рисование в отдельном потоке"
 
@@ -5584,7 +5589,7 @@ msgstr "Wavelet преобразование вдоль направления"
 msgid "Whole area"
 msgstr "Вся область"
 
-#: mgllab/mgllab.cpp:480
+#: mgllab/mgllab.cpp:477
 msgid "Widget scheme"
 msgstr ""
 
@@ -5840,7 +5845,7 @@ msgstr "Необходимо указать направление"
 msgid "You should put text inside ' ' for argument "
 msgstr "Необходимо ввести текст в ' ' для аргумента"
 
-#: udav/anim_dlg.cpp:105
+#: udav/anim_dlg.cpp:106
 msgid "You should select one of case"
 msgstr "Необходимо выбрать один из вариантов"
 
@@ -5900,7 +5905,7 @@ msgstr "Приблизить"
 msgid "Zoom in graphics."
 msgstr "Приблизить рисунок"
 
-#: widgets/fltk.cpp:843
+#: widgets/fltk.cpp:844
 msgid "Zoom in selected region of the picture"
 msgstr "Приблизить выбранную область рисунка"
 
@@ -5909,7 +5914,7 @@ msgstr "Приблизить выбранную область рисунка"
 msgid "Zoom in text"
 msgstr "Увеличить текст"
 
-#: widgets/fltk.cpp:872
+#: widgets/fltk.cpp:873
 msgid "Zoom in the picture"
 msgstr "Приблизить рисунок"
 
@@ -5925,7 +5930,7 @@ msgstr "Отдалить рисунок"
 msgid "Zoom out text"
 msgstr "Уменьшить текст"
 
-#: widgets/fltk.cpp:874
+#: widgets/fltk.cpp:875
 msgid "Zoom out the picture"
 msgstr "Отдалить рисунок"
 
@@ -6034,7 +6039,7 @@ msgstr "c - голубой"
 msgid "center"
 msgstr "центр"
 
-#: widgets/fltk.cpp:768
+#: widgets/fltk.cpp:769
 #, c-format
 msgid "click at %g, %g, %g"
 msgstr "клик в %g, %g, %g"
@@ -6125,7 +6130,7 @@ msgstr "черно-белый"
 msgid "h - gray"
 msgstr "h - серый"
 
-#: src/parser.cpp:1011
+#: src/parser.cpp:1014
 #, c-format
 msgid "in line %ld"
 msgstr "в строке %ld"
@@ -6218,7 +6223,7 @@ msgstr ""
 "mglconv конвертирует mgl скрипт в рисунок (по умолчанию PNG).\n"
 "Текущая версия 2.%g\n"
 
-#: mgllab/mgllab.cpp:415
+#: mgllab/mgllab.cpp:413
 #, c-format
 msgid ""
 "mgllab draw mgl script interactively.\n"
@@ -6440,7 +6445,7 @@ msgstr "метки"
 msgid "to"
 msgstr "до"
 
-#: mgllab/mgllab.cpp:564
+#: mgllab/mgllab.cpp:561
 msgid "to script"
 msgstr "в скрипт"
 
diff --git a/mgllab/grid.cpp b/mgllab/grid.cpp
index e930b29..cc82b24 100644
--- a/mgllab/grid.cpp
+++ b/mgllab/grid.cpp
@@ -33,7 +33,7 @@ Fl_Data_Table::Fl_Data_Table(int x, int y, int w, int h, const char *l) : Fl_Tab
 	input->callback(input_cb, (void*)this);
 	input->when(FL_WHEN_ENTER_KEY_ALWAYS);
 	input->maximum_size(16);
-	sl = 0;	row=col=-1;
+	nx=ny=sl = 0;	row=col=-1;	data = NULL;
 //	(new Fl_Box(9999,9999,0,0))->hide();  // HACK: prevent flickering in Fl_Scroll
 	end();
 }
@@ -65,7 +65,7 @@ void Fl_Data_Table::draw_cell(TableContext context, int R, int C, int X, int Y,
 		fl_font(FL_HELVETICA, 14);
 		if(mgl_isnan(data->v(C,R,sl)))	strcpy(s,"nan");
 		else if(mgl_isbad(data->v(C,R,sl)))	strcpy(s,data->v(C,R,sl)>0?"inf":"-inf");
-		else	strncpy(s,mgl_str_num(data->vc(C,R,sl)).c_str(),64);
+		else	mgl_strncpy(s,mgl_str_num(data->vc(C,R,sl)).c_str(),64);
 		{	dual vc = data->vc(C,R,sl);
 			mreal v = data->v(C,R,sl);
 			std::vector<mreal> vn;
diff --git a/mgllab/help.cpp b/mgllab/help.cpp
index da9532d..3304ed6 100644
--- a/mgllab/help.cpp
+++ b/mgllab/help.cpp
@@ -348,6 +348,7 @@ class InfoDlg : public GeneralDlg
 public:
 	InfoDlg() : GeneralDlg()
 	{
+		nx=ny=nz=sl=plot=0;
 		Fl_Button *o;
 		w = new Fl_Double_Window(420, 530);
 		out = new Fl_Multiline_Output(10, 25, 400, 150, _("Information"));
diff --git a/mgllab/mathgl.cpp b/mgllab/mathgl.cpp
index bc32806..b739ffd 100644
--- a/mgllab/mathgl.cpp
+++ b/mgllab/mathgl.cpp
@@ -231,7 +231,7 @@ public:
 			double a1=s1?atof(s1):NAN, a2=s2?atof(s2):NAN, a3=s3?atof(s3):1;
 			if(a3*(a2-a1)>0)
 			{
-				result = result + "##c "+s1+' '+s2+' '+(s3?s3:"1")+'\n';
+				result = result + "##c "+(s1?s1:"nan")+' '+(s2?s2:"nan")+' '+(s3?s3:"1")+'\n';
 				if(dr)
 				{
 					dr->a1=a1;	dr->a2=a2;	dr->da=a3;
diff --git a/mgllab/mgllab.cpp b/mgllab/mgllab.cpp
index 425cd27..ea07e61 100644
--- a/mgllab/mgllab.cpp
+++ b/mgllab/mgllab.cpp
@@ -168,10 +168,8 @@ void new_cb(Fl_Widget*, void*)
 void open_cb(Fl_Widget*, void *v)
 {
 	if (!check_save()) return;
-	char *lastname=0;
 	const char *newfile = mgl_file_chooser(_("Open File?"),
 		_("MGL files \t*.mgl\nDAT files \t*.{dat,csv}"));
-	if(lastname)	free(lastname);
 	if(newfile != NULL)
 	{
 		ScriptWindow* e = (ScriptWindow*)v;
@@ -454,7 +452,6 @@ class PropDlg : public GeneralDlg
 	Fl_Choice *lang_w;
 	Fl_Choice *scheme_w;
 public:
-	HMGL gr;
 	PropDlg() : GeneralDlg()
 	{
 		Fl_Button *o;
diff --git a/mgllab/table.cpp b/mgllab/table.cpp
index 72a90db..5e1cd90 100644
--- a/mgllab/table.cpp
+++ b/mgllab/table.cpp
@@ -102,7 +102,7 @@ public:
 		o->tooltip(_("Do nothing and close this window"));	o->callback(cb_dlg_cancel,this);
 		o = new Fl_Return_Button(230, 90, 85, 25, _("Change"));
 		o->tooltip(_("Change (resize) data"));	o->callback(cb_dlg_ok,this);
-		w->end();	w->set_modal();
+		w->end();	w->set_modal();	OK=false;
 	}
 	void cb_ok()	{	OK=true;	hide();	}
 	bool run()	{	OK=false;	w->show();	while(w->shown())	Fl::wait();	return OK;	}
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
new file mode 100644
index 0000000..92db4e1
--- /dev/null
+++ b/scripts/CMakeLists.txt
@@ -0,0 +1,31 @@
+if(enable-dep-dll)
+	if(enable-qt5)
+		find_package(Qt5Gui QUIET)
+		if(Qt5Gui_FOUND)
+			get_target_property(mgl_qt_loc Qt5::QWindowsIntegrationPlugin LOCATION)
+		endif(Qt5Gui_FOUND)
+	endif(enable-qt5)
+
+	install(CODE "SET(mgl_qt_loc \"${mgl_qt_loc}\")")
+	install(CODE "SET(CMAKE_INSTALL_PREFIX \"${CMAKE_INSTALL_PREFIX}\")")
+	install(SCRIPT install-deps.cmake)
+endif(enable-dep-dll)
+
+if(WIN32)
+	install(FILES ${CMAKE_SOURCE_DIR}/scripts/FindMathGL2.cmake DESTINATION ${CMAKE_INSTALL_PREFIX} RENAME mathgl2-config.cmake)
+else(WIN32)
+	install(FILES ${CMAKE_SOURCE_DIR}/scripts/FindMathGL2.cmake DESTINATION ${MathGL_INSTALL_LIB_DIR}/cmake/mathgl2/ RENAME mathgl2-config.cmake)
+endif(WIN32)
+
+#export(TARGETS MathGLTargets FILE "${PROJECT_BINARY_DIR}/MathGLTargets.cmake")
+#export(PACKAGE MathGL2)
+
+#configure_file(MathGLConfig.cmake.in "${MathGL2_BINARY_DIR}/MathGLConfig.cmake" @ONLY)
+#configure_file(MathGLConfigVersion.cmake.in "${MathGL2_BINARY_DIR}/MathGLConfigVersion.cmake" @ONLY)
+
+#install(FILES
+#	"${MathGL2_BINARY_DIR}/MathGLConfig.cmake"
+#	"${MathGL2_BINARY_DIR}/MathGLConfigVersion.cmake"
+#	DESTINATION "${MathGL_INSTALL_CMAKE_DIR}" COMPONENT dev)
+
+#install(EXPORT MathGLTargets DESTINATION "${MathGL_INSTALL_CMAKE_DIR}" COMPONENT dev)
diff --git a/FindMathGL2.cmake b/scripts/FindMathGL2.cmake
similarity index 100%
rename from FindMathGL2.cmake
rename to scripts/FindMathGL2.cmake
diff --git a/MathGLConfig.cmake.in b/scripts/MathGLConfig.cmake.in
similarity index 100%
rename from MathGLConfig.cmake.in
rename to scripts/MathGLConfig.cmake.in
diff --git a/MathGLConfigVersion.cmake.in b/scripts/MathGLConfigVersion.cmake.in
similarity index 100%
rename from MathGLConfigVersion.cmake.in
rename to scripts/MathGLConfigVersion.cmake.in
diff --git a/win32-install-deps/install-deps.txt b/scripts/install-deps.cmake
similarity index 100%
rename from win32-install-deps/install-deps.txt
rename to scripts/install-deps.cmake
diff --git a/cmake-qt4.txt b/scripts/qt4.cmake
similarity index 100%
rename from cmake-qt4.txt
rename to scripts/qt4.cmake
diff --git a/cmake-qt5.txt b/scripts/qt5.cmake
similarity index 100%
rename from cmake-qt5.txt
rename to scripts/qt5.cmake
diff --git a/src/addon.cpp b/src/addon.cpp
index da84360..82d231c 100644
--- a/src/addon.cpp
+++ b/src/addon.cpp
@@ -95,6 +95,7 @@ void MGL_EXPORT mgl_fgetpar(FILE *fp, const char *str, ...)
 		}
 		if(str[i]<=' ')	t = mgl_fgetstr(fp);
 	}
+	va_end(lst);
 }
 //-----------------------------------------------------------------------------
 int MGL_EXPORT_CONST mgl_istrue(char ch)
diff --git a/src/axis.cpp b/src/axis.cpp
index 42c5338..8b8a110 100644
--- a/src/axis.cpp
+++ b/src/axis.cpp
@@ -56,12 +56,12 @@ void MGL_EXPORT mgl_wcstrim(wchar_t *str)
 //-----------------------------------------------------------------------------
 void mglCanvas::SetAxisStl(const char *stl, const char *tck, const char *sub)
 {
-	if(!stl || !(*stl))	strncpy(AxisStl,"k",32);
-	else 				strncpy(AxisStl,stl,32);
-	if(!tck || !(*tck))	strncpy(TickStl,AxisStl,32);
-	else 				strncpy(TickStl,tck,32);
-	if(!sub || !(*sub))	strncpy(SubTStl,TickStl,32);
-	else 				strncpy(SubTStl,sub,32);
+	if(!stl || !(*stl))	mgl_strncpy(AxisStl,"k",32);
+	else 				mgl_strncpy(AxisStl,stl,32);
+	if(!tck || !(*tck))	mgl_strncpy(TickStl,AxisStl,32);
+	else 				mgl_strncpy(TickStl,tck,32);
+	if(!sub || !(*sub))	mgl_strncpy(SubTStl,TickStl,32);
+	else 				mgl_strncpy(SubTStl,sub,32);
 }
 //-----------------------------------------------------------------------------
 void mglCanvas::SetTickLen(mreal tlen, mreal stt)
@@ -463,7 +463,8 @@ void mglCanvas::LabelTicks(mglAxis &aa)
 //-----------------------------------------------------------------------------
 void mglCanvas::Axis(const char *dir, const char *stl, const char *opt)
 {
-	bool text = !(mglchr(dir,'_') || mglchr(dir,'~'));
+	int text = !(mglchr(dir,'_') || mglchr(dir,'~'))?1:0;
+	if(mglchr(dir,':'))	text = text|2;
 	bool inv = mglchr(dir,'^');
 	bool ret = get(MGL_ENABLE_RTEXT);
 	if(mglchr(dir,'U'))	clr(MGL_ENABLE_RTEXT);
@@ -503,7 +504,7 @@ void mglCanvas::Axis(const char *dir, const char *stl, const char *opt)
 	set(ret, MGL_ENABLE_RTEXT);
 }
 //-----------------------------------------------------------------------------
-void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl,mreal angl)
+void mglCanvas::DrawAxis(mglAxis &aa, int text, char arr,const char *stl,mreal angl)
 {
 	aa.angl = angl;
 	if(strchr("xyz",aa.ch))
@@ -518,11 +519,23 @@ void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl,mreal
 	dv.Set(mgl_sign(av.x-o.x), mgl_sign(av.y-o.y), mgl_sign(av.z-o.z));
 	da = aa.a*(dv*aa.a);	db = aa.b*(dv*aa.b);
 
+	static int cgid=1;	StartGroup("Axis",cgid++);
+
 	long k1,k2;
 	bool have_color=mgl_have_color(stl);
 	bool dif_color = !have_color && aa.dv==0 && strcmp(TickStl,SubTStl);
+	if(text&2)	// line throw point (0,0,0)
+	{
+		SetPenPal("k:");
+		p = d*aa.v1;	k1 = AddPnt(&B, p,CDef,q,-1,3);
+		for(long i=1;i<31;i++)
+		{
+			p = d*(aa.v1+(aa.v2-aa.v1)*i/30.);
+			k2 = k1;	k1 = AddPnt(&B, p,CDef,q,-1,3);
+			line_plot(k2,k1);
+		}
+	}
 	SetPenPal(have_color ? stl:AxisStl);
-	static int cgid=1;	StartGroup("Axis",cgid++);
 
 	p = o + d*aa.v1;	k1 = AddPnt(&B, p,CDef,q,-1,3);
 	for(long i=1;i<31;i++)	// axis itself
@@ -564,7 +577,7 @@ void mglCanvas::DrawAxis(mglAxis &aa, bool text, char arr,const char *stl,mreal
 		}
 	}
 	if(!have_color)	SetPenPal(AxisStl);
-	if(text)	DrawLabels(aa);
+	if(text&1)	DrawLabels(aa);
 	EndGroup();
 }
 //-----------------------------------------------------------------------------
@@ -853,7 +866,7 @@ void mglCanvas::Labelw(char dir, const wchar_t *text, mreal pos, const char *opt
 		char font[64],ff[3]=":C";	memset(font,0,64);
 		if(pos<-0.2)	ff[1]='L';
 		if(pos>0.2)	ff[1]='R';
-		strncpy(font,FontDef,32);	strcat(font,ff);
+		mgl_strncpy(font,FontDef,32);	strcat(font,ff);
 		long kk = AddPnt(&B, p,-1,q,0,7);	ff[1]=0;
 		if(kk>=0)
 		{
@@ -878,25 +891,25 @@ void mglCanvas::Box(const char *col, bool ticks)
 	if(TernAxis&1)
 	{
 		Org.x=Max.x;	Org.y=Min.y;	Org.z=Max.z;
-		DrawAxis(ax, false, 0,col);	DrawAxis(az, false, 0,col);
+		DrawAxis(ax, 0, 0,col);	DrawAxis(az, 0, 0,col);
 		Org.x=Min.x;	Org.y=Max.y;	Org.z=Max.z;
-		DrawAxis(az, false, 0,col);
+		DrawAxis(az, 0, 0,col);
 
 		mglAxis ty(ay);				ty.ch='T';
 		ty.dir.Set(-1,1);	ty.org.Set(1,0,Max.z);
-		DrawAxis(ty, false, 0,col);	ty.ch='t';
+		DrawAxis(ty, 0, 0,col);	ty.ch='t';
 		ty.dir.Set(0,-1);	ty.org.Set(0,1,Max.z);
-		DrawAxis(ty, false, 0,col);
+		DrawAxis(ty, 0, 0,col);
 	}
 	else if(TernAxis&2)
 	{
 		mglAxis ty(az);
 		ty.ch='T';	ty.a.Set(1,0);	ty.b.Set(-1,1);
 		ty.dir.Set(-1,0,1);	ty.org.Set(1,0,0);
-		DrawAxis(ty, false, 0,col);
+		DrawAxis(ty, 0, 0,col);
 		ty.ch='t';	ty.a.Set(0,1);	ty.b.Set(-1,1);
 		ty.dir.Set(0,-1,1);	ty.org.Set(0,1,0);
-		DrawAxis(ty, false, 0,col);
+		DrawAxis(ty, 0, 0,col);
 	}
 	else
 	{
diff --git a/src/base.cpp b/src/base.cpp
index 8170fe3..3107794 100644
--- a/src/base.cpp
+++ b/src/base.cpp
@@ -968,7 +968,7 @@ void mglTexture::Set(const char *s, int smooth, mreal alpha)
 {
 	// NOTE: New syntax -- colors are CCCCC or {CNCNCCCN}; options inside []
 	if(!s || !s[0])	return;
-	strncpy(Sch,s,259);	Smooth=smooth;	Alpha=alpha;
+	mgl_strncpy(Sch,s,259);	Smooth=smooth;	Alpha=alpha;
 
 	long l=strlen(s);
 	bool map = smooth==2 || mglchr(s,'%'), sm = smooth>=0 && !strchr(s,'|');	// Use mapping, smoothed colors
@@ -1540,8 +1540,6 @@ bool MGL_EXPORT mgl_check_vec3(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT ax, HCDT ay
 	return false;
 }
 //-----------------------------------------------------------------------------
-void mglBase::SetFontDef(const char *font) {	strncpy(FontDef, font, 31);	}
-//-----------------------------------------------------------------------------
 void mglBase::ClearUnused()
 {
 #if MGL_HAVE_PTHREAD
diff --git a/src/base_cf.cpp b/src/base_cf.cpp
index 3aeb60e..61d6228 100644
--- a/src/base_cf.cpp
+++ b/src/base_cf.cpp
@@ -62,7 +62,7 @@ MGL_EXPORT const char *mgl_get_plotid(HMGL gr)	{	return gr->PlotId.c_str();	}
 int MGL_EXPORT mgl_get_plotid_(uintptr_t *gr, char *out, int len)
 {
 	const char *res = mgl_get_plotid(_GR_);
-	if(out)	strncpy(out,res,len);
+	if(out)	mgl_strncpy(out,res,len);
 	return strlen(res);
 }
 //-----------------------------------------------------------------------------
@@ -70,7 +70,7 @@ MGL_EXPORT const char *mgl_get_mess(HMGL gr)	{	return gr->Mess.c_str();	}
 int MGL_EXPORT mgl_get_mess_(uintptr_t *gr, char *out, int len)
 {
 	const char *res = mgl_get_mess(_GR_);
-	if(out)	strncpy(out,res,len);
+	if(out)	mgl_strncpy(out,res,len);
 	return strlen(res);
 }
 int MGL_EXPORT mgl_get_warn(HMGL gr)	{	return gr->GetWarn();	}
@@ -91,7 +91,7 @@ MGL_EXPORT const char *mgl_get_global_warn()	{	return mglGlobalMess.c_str();	}
 int MGL_EXPORT mgl_get_global_warn_(char *out, int len)
 {
 	const char *res = mgl_get_global_warn();
-	if(out)	strncpy(out,res,len);
+	if(out)	mgl_strncpy(out,res,len);
 	return strlen(res);
 }
 //-----------------------------------------------------------------------------
diff --git a/src/canvas.cpp b/src/canvas.cpp
index 12a1bb0..ba4ffed 100644
--- a/src/canvas.cpp
+++ b/src/canvas.cpp
@@ -362,7 +362,7 @@ void mglCanvas::mark_plot(long p, char type, mreal size)
 	size *= MarkSize*0.35*font_factor;
 	if(type=='.')	size = fabs(PenWidth)*sqrt(font_factor/400);
 	if(TernAxis&12) for(int i=0;i<4;i++)
-	{	p = ProjScale(i, pp);	MGL_MARK_PLOT	}
+	{	p = ProjScale(i, pp);	if(p>=0)	{MGL_MARK_PLOT}	}
 	else	{	MGL_MARK_PLOT	}
 }
 //-----------------------------------------------------------------------------
@@ -377,13 +377,22 @@ void mglCanvas::line_plot(long p1, long p2)
 	if(p1<0 || p2<0 || mgl_isnan(Pnt[p1].x) || mgl_isnan(Pnt[p2].x) || SamePnt(p1,p2))	return;
 	if(p1>p2)	{	long kk=p1;	p1=p2;	p2=kk;	}	// rearrange start/end for proper dashing
 	long pp1=p1,pp2=p2;
-	mreal pw = fabs(PenWidth)*sqrt(font_factor/400);
+	mreal pw = fabs(PenWidth)*sqrt(font_factor/400), d=0;
 	if(TernAxis&12) for(int i=0;i<4;i++)
 	{	p1 = ProjScale(i, pp1);	p2 = ProjScale(i, pp2);
-		MGL_LINE_PLOT	}
-	else	{	MGL_LINE_PLOT	}
-	mreal d = hypot(Pnt[p1].x-Pnt[p2].x, Pnt[p1].y-Pnt[p2].y);
-	pPos = fmod(pPos+d/pw/1.5, 16);
+		if(p1>=0&&p2>=0)
+		{
+			d += hypot(Pnt[p1].x-Pnt[p2].x, Pnt[p1].y-Pnt[p2].y);
+			MGL_LINE_PLOT
+			pPos = fmod(pPos+d/pw/1.5, 16);
+		}
+	}
+	else
+	{
+		d = hypot(Pnt[p1].x-Pnt[p2].x, Pnt[p1].y-Pnt[p2].y);
+		MGL_LINE_PLOT
+		pPos = fmod(pPos+d/pw/1.5, 16);
+	}
 }
 //-----------------------------------------------------------------------------
 #define MGL_TRIG_PLOT	if(Quality&MGL_DRAW_LMEM)	\
@@ -399,7 +408,7 @@ void mglCanvas::trig_plot(long p1, long p2, long p3)
 	mreal pw = fabs(PenWidth)*sqrt(font_factor/400);
 	if(TernAxis&12) for(int i=0;i<4;i++)
 	{	p1 = ProjScale(i, pp1);	p2 = ProjScale(i, pp2);
-		p3 = ProjScale(i, pp3);	MGL_TRIG_PLOT	}
+		p3 = ProjScale(i, pp3);	if(p1>=0&&p2>=0&&p3>=0)	{MGL_TRIG_PLOT}	}
 	else	{	MGL_TRIG_PLOT	}
 }
 //-----------------------------------------------------------------------------
@@ -419,7 +428,7 @@ void mglCanvas::quad_plot(long p1, long p2, long p3, long p4)
 	if(TernAxis&12) for(int i=0;i<4;i++)
 	{	p1 = ProjScale(i, pp1);	p2 = ProjScale(i, pp2);
 		p3 = ProjScale(i, pp3);	p4 = ProjScale(i, pp4);
-		MGL_QUAD_PLOT	}
+		if(p1>=0&&p2>=0&&p3>=0&&p4>=0)	{MGL_QUAD_PLOT}	}
 	else	{	MGL_QUAD_PLOT	}
 }
 //-----------------------------------------------------------------------------
@@ -1169,7 +1178,7 @@ void mglCanvas::StartAutoGroup (const char *lbl)
 	if(grp_counter>1)	return;	// do nothing in "subgroups"
 	if(ObjId<0)	{	ObjId = -id;	id++;	}
 	size_t len = Grp.size();
-	if(ObjId>=0 && len>0 && ObjId!=Grp[len-1].Id)
+	if(ObjId>=0 && (len==0 || (len>0 && ObjId!=Grp[len-1].Id)))
 #pragma omp critical(grp)
 	{	MGL_PUSH(Grp,mglGroup(lbl,ObjId),mutexGrp);}
 	else if(ObjId<0)
@@ -1206,3 +1215,15 @@ void mglCanvas::Push()
 	{MGL_PUSH(stack,B,mutexStk);}
 }
 //-----------------------------------------------------------------------------
+void mglCanvas::Pop()
+{
+	B = stack.back(); 
+#if MGL_HAVE_PTHREAD
+	pthread_mutex_lock(&m);
+	stack.pop_back();
+	pthread_mutex_unlock(&m);
+#else
+#pragma omp critical(stk)
+	stack.pop_back();
+#endif
+}
diff --git a/src/complex.cpp b/src/complex.cpp
index e95f615..416a986 100644
--- a/src/complex.cpp
+++ b/src/complex.cpp
@@ -602,7 +602,7 @@ void MGL_EXPORT mgl_datac_mirror(HADT d, const char *dir)
 	if(strchr(dir,'z') && nz>1)
 	{
 #pragma omp parallel for collapse(2)
-		for(long i=0;i<nx*ny;i++)	for(long j=0;j<nz/2;j++)
+		for(long j=0;j<nz/2;j++)	for(long i=0;i<nx*ny;i++)
 		{
 			long i0 = i+j*nx*ny, j0 = i+(nz-1-j)*nx*ny;
 			dual b = a[i0];	a[i0] = a[j0];	a[j0] = b;
@@ -611,7 +611,7 @@ void MGL_EXPORT mgl_datac_mirror(HADT d, const char *dir)
 	if(strchr(dir,'y') && ny>1)
 	{
 #pragma omp parallel for collapse(2)
-		for(long i=0;i<nx*nz;i++)	for(long j=0;j<ny/2;j++)
+		for(long j=0;j<ny/2;j++)	for(long i=0;i<nx*nz;i++)
 		{
 			long j0 = (i%nx)+nx*(ny*(i/nx)+j), i0 = j0+(ny-1-2*j)*nx;
 			dual b = a[j0];	a[j0] = a[i0];	a[i0] = b;
@@ -760,7 +760,7 @@ void MGL_EXPORT mgl_datac_crop(HADT d, long n1, long n2, char dir)
 		if(n2<0 || n2>=ny || n2<n1)	n2 = ny;
 		nn = n2-n1;	b = new dual[nn*nx*nz];
 #pragma omp parallel for
-		for(long i=0;i<nn;i++)	for(long j=0;j<nz;j++)
+		for(long j=0;j<nz;j++)	for(long i=0;i<nn;i++)
 			memcpy(b+nx*(i+nn*j),d->a+nx*(n1+i+ny*j),nx*sizeof(dual));
 		d->ny = nn;	if(!d->link)	delete []d->a;
 		d->a = b;	d->link=false;
@@ -938,7 +938,7 @@ void MGL_EXPORT mgl_datac_put_val(HADT d, dual val, long xx, long yy, long zz)
 		for(long i=0;i<nz*ny;i++)	a[xx+i*nx] = val;
 	else if(xx<0 && zz<0)
 #pragma omp parallel for collapse(2)
-		for(long i=0;i<nx;i++)	for(long j=0;j<nz;j++)	a[i+nx*(yy+j*ny)] = val;
+		for(long j=0;j<nz;j++)	for(long i=0;i<nx;i++)	a[i+nx*(yy+j*ny)] = val;
 	else if(xx<0)
 #pragma omp parallel for
 		for(long i=0;i<nx;i++)	a[i+nx*(yy+zz*ny)] = val;
@@ -1169,7 +1169,7 @@ mdual MGL_EXPORT mgl_gsplinec(HCDT c, mreal dx, dual *d1, dual *d2)
 	while(dx>c->v(5*i) && i<n-1)	{	dx-=c->v(5*i);	i++;	}
 	dual res;
 	const mglDataC *d = dynamic_cast<const mglDataC *>(c);
-	if(c)
+	if(d)
 	{
 		const dual *a = d->a+5*i;
 		if(d1)	*d1 = a[2]+dx*(mreal(2)*a[3]+(3*dx)*a[4]);
@@ -1298,6 +1298,7 @@ void MGL_EXPORT mgl_datac_refill_xy(HADT dat, HCDT xdat, HCDT ydat, HCDT vdat, m
 //-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_datac_refill_xyz(HADT dat, HCDT xdat, HCDT ydat, HCDT zdat, HCDT vdat, mreal x1, mreal x2, mreal y1, mreal y2, mreal z1, mreal z2)
 {
+	if(!dat || !xdat || !ydat || !zdat || !vdat)	return;
 	long nx=dat->nx,ny=dat->ny,nz=dat->nz,mx=vdat->GetNx(),my=vdat->GetNy(),mz=vdat->GetNz();
 	bool both=(xdat->GetNN()==vdat->GetNN() && ydat->GetNN()==vdat->GetNN() && zdat->GetNN()==vdat->GetNN());
 	if(!both && (xdat->GetNx()!=mx || ydat->GetNx()!=my || zdat->GetNx()!=mz))	return;	// incompatible dimensions
diff --git a/src/data.cpp b/src/data.cpp
index b49a5fc..2e43bd9 100644
--- a/src/data.cpp
+++ b/src/data.cpp
@@ -1168,8 +1168,8 @@ void MGL_EXPORT mgl_data_crop(HMDT d, long n1, long n2, char dir)
 		n2 = n2>0 ? n2 : ny+n2;
 		if(n2<0 || n2>=ny || n2<n1)	n2 = ny;
 		nn = n2-n1;	b = new mreal[nn*nx*nz];
-#pragma omp parallel for
-		for(long i=0;i<nn;i++)	for(long j=0;j<nz;j++)
+#pragma omp parallel for collapse(2)
+		for(long j=0;j<nz;j++)	for(long i=0;i<nn;i++)
 			memcpy(b+nx*(i+nn*j),d->a+nx*(n1+i+ny*j),nx*sizeof(mreal));
 		d->ny = nn;	if(!d->link)	delete []d->a;
 		d->a = b;	d->link=false;
@@ -1281,7 +1281,7 @@ mreal MGL_EXPORT mgl_data_momentum_val(HCDT dd, char dir, mreal *x, mreal *w, mr
 #pragma omp parallel for reduction(+:i0,i1,i2,i3,i4)
 		for(long i=0;i<nx*ny*nz;i++)
 		{
-			mreal d = i%nx, t = d*d, v = dd->vthr(i);
+			mreal d = mreal(i%nx), t = d*d, v = dd->vthr(i);
 			i0+= v;	i1+= v*d;	i2+= v*t;
 			i3+= v*d*t;		i4+= v*t*t;
 		}
@@ -1290,7 +1290,7 @@ mreal MGL_EXPORT mgl_data_momentum_val(HCDT dd, char dir, mreal *x, mreal *w, mr
 #pragma omp parallel for reduction(+:i0,i1,i2,i3,i4)
 		for(long i=0;i<nx*ny*nz;i++)
 		{
-			mreal d = (i/nx)%ny, t = d*d, v = dd->vthr(i);
+			mreal d = mreal((i/nx)%ny), t = d*d, v = dd->vthr(i);
 			i0+= v;	i1+= v*d;	i2+= v*t;
 			i3+= v*d*t;		i4+= v*t*t;
 		}
@@ -1299,7 +1299,7 @@ mreal MGL_EXPORT mgl_data_momentum_val(HCDT dd, char dir, mreal *x, mreal *w, mr
 #pragma omp parallel for reduction(+:i0,i1,i2,i3,i4)
 		for(long i=0;i<nx*ny*nz;i++)
 		{
-			mreal d = i/(nx*ny), t = d*d, v = dd->vthr(i);
+			mreal d = mreal(i/(nx*ny)), t = d*d, v = dd->vthr(i);
 			i0+= v;	i1+= v*d;	i2+= v*t;
 			i3+= v*d*t;		i4+= v*t*t;
 		}
@@ -1431,7 +1431,7 @@ MGL_EXPORT const char *mgl_data_info(HCDT d)	// NOTE: Not thread safe function!
 int MGL_EXPORT mgl_data_info_(uintptr_t *d, char *out, int len)
 {
 	const char *res = mgl_data_info(_DA_(d));
-	if(out)	strncpy(out,res,len);
+	if(out)	mgl_strncpy(out,res,len);
 	return strlen(res);
 }
 //-----------------------------------------------------------------------------
@@ -1613,7 +1613,7 @@ void MGL_EXPORT mgl_data_put_val(HMDT d, mreal val, long xx, long yy, long zz)
 		for(long i=0;i<nz*ny;i++)	a[xx+i*nx] = val;
 	else if(xx<0 && zz<0)
 #pragma omp parallel for collapse(2)
-		for(long i=0;i<nx;i++)	for(long j=0;j<nz;j++)	a[i+nx*(yy+j*ny)] = val;
+		for(long j=0;j<nz;j++)	for(long i=0;i<nx;i++)	a[i+nx*(yy+j*ny)] = val;
 	else if(xx<0)
 #pragma omp parallel for
 		for(long i=0;i<nx;i++)	a[i+nx*(yy+zz*ny)] = val;
@@ -2116,6 +2116,7 @@ void MGL_EXPORT mgl_data_refill_xy(HMDT dat, HCDT xdat, HCDT ydat, HCDT vdat, mr
 //-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_data_refill_xyz(HMDT dat, HCDT xdat, HCDT ydat, HCDT zdat, HCDT vdat, mreal x1, mreal x2, mreal y1, mreal y2, mreal z1, mreal z2)
 {
+	if(!dat || !xdat || !ydat || !zdat || !vdat)	return;
 	long nx=dat->nx,ny=dat->ny,nz=dat->nz,mx=vdat->GetNx(),my=vdat->GetNy(),mz=vdat->GetNz();
 	bool both=(xdat->GetNN()==vdat->GetNN() && ydat->GetNN()==vdat->GetNN() && zdat->GetNN()==vdat->GetNN());
 	if(!both && (xdat->GetNx()!=mx || ydat->GetNx()!=my || zdat->GetNx()!=mz))	return;	// incompatible dimensions
diff --git a/src/data_io.cpp b/src/data_io.cpp
index 9633eb7..3d4df5f 100644
--- a/src/data_io.cpp
+++ b/src/data_io.cpp
@@ -938,8 +938,7 @@ void MGL_EXPORT mgl_data_transpose(HMDT d, const char *dim)
 {
 	long nx=d->nx, ny=d->ny, nz=d->nz, n;
 	mreal *b=new mreal[nx*ny*nz], *a=d->a;
-	if(!strcmp(dim,"xyz"))	memcpy(b,a,nx*ny*nz*sizeof(mreal));
-	else if(!strcmp(dim,"xzy") || !strcmp(dim,"zy"))
+	if(!strcmp(dim,"xzy") || !strcmp(dim,"zy"))
 	{
 #pragma omp parallel for collapse(3)
 		for(long j=0;j<ny;j++)	for(long k=0;k<nz;k++)	for(long i=0;i<nx;i++)
@@ -974,6 +973,7 @@ void MGL_EXPORT mgl_data_transpose(HMDT d, const char *dim)
 			b[k+nz*(j+ny*i)] = a[i+nx*(j+ny*k)];
 		n=nz;	nz=nx;	nx=n;
 	}
+	else	memcpy(b,a,nx*ny*nz*sizeof(mreal));
 	memcpy(a,b,nx*ny*nz*sizeof(mreal));	delete []b;
 	n=d->nx;	d->nx=nx;	d->ny=ny;	d->nz=nz;
 	if(nx!=n)	d->NewId();
@@ -1361,7 +1361,7 @@ size_t MGL_EXPORT mgl_fread(FILE *fp, void *vals, size_t size, size_t num, int s
 		{
 			memcpy(buf,ptr+i*size,size);
 			ch=buf[0];	buf[0]=buf[3];	buf[3]=ch;
-			ch=buf[1];	buf[1]=buf[2];	buf[1]=ch;
+			ch=buf[1];	buf[1]=buf[2];	buf[2]=ch;
 		}
 		else if(size==2)	for(size_t i=0;i<r;i++)
 		{
@@ -1384,13 +1384,14 @@ size_t MGL_EXPORT mgl_fread(FILE *fp, void *vals, size_t size, size_t num, int s
 /** Parse Tektronix TDS5000/B, TDS6000/B/C, TDS/CSA7000/B, MSO70000/C, DSA70000/B/C DPO70000/B/C DPO7000/ MSO/DPO5000. */
 int MGL_EXPORT mgl_data_read_wfm(HMDT d,const char *fname, long num, long step/*=1*/, long start/*=0*/)
 {
-	if(step<1)	step=1;
+/*	if(step<1)	step=1;
 	if(start<0)	start=0;
 	FILE *fp = fopen(fname,"rb");
 	if(!fp)	return 0;	// couldn't open file
 	unsigned short byte_order;
 	fread(&byte_order,2,1,fp);
 	bool byteorder;	// TODO
+*/	return 0;	
 }
 int MGL_EXPORT mgl_data_read_wfm_(uintptr_t *d, const char *fname, long *num, long *step, long *start,int l)
 {	char *s=new char[l+1];	memcpy(s,fname,l);	s[l]=0;
@@ -1400,6 +1401,7 @@ int MGL_EXPORT mgl_data_read_wfm_(uintptr_t *d, const char *fname, long *num, lo
 int MGL_EXPORT mgl_data_read_matlab(HMDT d,const char *fname,const char *data)
 {
 	// TODO
+/**/return 0;
 }
 int MGL_EXPORT mgl_data_read_matlab_(uintptr_t *d, const char *fname, const char *data,int l,int n)
 {	char *s=new char[l+1];	memcpy(s,fname,l);	s[l]=0;
diff --git a/src/eval.cpp b/src/eval.cpp
index 23db683..6038582 100644
--- a/src/eval.cpp
+++ b/src/eval.cpp
@@ -276,7 +276,7 @@ mglFormula::mglFormula(const char *string)
 	else
 	{
 		char name[128];
-		strncpy(name,str,128);	name[127]=name[n]=0;
+		mgl_strncpy(name,str,128);	name[127]=name[n]=0;
 		memmove(str,str+n+1,len-n);
 		len=strlen(str);		str[--len]=0;
 		if(!strncmp(name,"jacobi_",7))
diff --git a/src/evalc.cpp b/src/evalc.cpp
index 4347f88..2a0e719 100644
--- a/src/evalc.cpp
+++ b/src/evalc.cpp
@@ -153,7 +153,7 @@ mglFormulaC::mglFormulaC(const char *string)
 	else
 	{
 		char name[128];
-		strncpy(name,str,128);	name[127]=name[n]=0;
+		mgl_strncpy(name,str,128);	name[127]=name[n]=0;
 		memmove(str,str+n+1,len-n);
 		len=strlen(str);		str[--len]=0;
 		if(!strcmp(name,"sin")) Kod=EQ_SIN;
diff --git a/src/evalp.cpp b/src/evalp.cpp
index 4783d2d..b828ab3 100644
--- a/src/evalp.cpp
+++ b/src/evalp.cpp
@@ -832,8 +832,9 @@ HADT MGL_NO_EXPORT mglFormulaCalcC(std::wstring str, mglParser *arg, const std::
 					{	k = res->ny;	res->Insert('y',k);	mgl_datac_put_dat(res,a1,-1,k,-1);	}
 					else		// res 3d array
 					{	k = res->nz;	res->Insert('z',k);	mgl_datac_put_dat(res,a1,-1,-1,k);	}
+					mgl_delete_datac(a1);
 				}
-				mgl_delete_datac(a1);	j=i+1;
+				j=i+1;
 			}
 		}
 		HADT a1=mglFormulaCalcC(str.substr(j,i-j), arg, head);
@@ -847,8 +848,9 @@ HADT MGL_NO_EXPORT mglFormulaCalcC(std::wstring str, mglParser *arg, const std::
 			{	k = res->ny;	res->Insert('y',k);	mgl_datac_put_dat(res,a1,-1,k,-1);	}
 			else		// res 3d array
 			{	k = res->nz;	res->Insert('z',k);	mgl_datac_put_dat(res,a1,-1,-1,k);	}
+			mgl_delete_datac(a1);
 		}
-		mgl_delete_datac(a1);	return res;
+		return res;
 	}
 
 	n=mglFindInText(str,"<>=");	// low priority -- conditions
diff --git a/src/exec_gr.cpp b/src/exec_gr.cpp
index 2d200e9..8e7e966 100644
--- a/src/exec_gr.cpp
+++ b/src/exec_gr.cpp
@@ -355,6 +355,16 @@ int MGL_NO_EXPORT mgls_belt(mglGraph *gr, long , mglArg *a, const char *k, const
 	else res = 1;	return res;
 }
 //-----------------------------------------------------------------------------
+int MGL_NO_EXPORT mgls_beltc(mglGraph *gr, long , mglArg *a, const char *k, const char *opt)
+{
+	int res=0;
+	if(!strcmp(k,"dd"))	gr->BeltC(*(a[0].d),*(a[1].d),"",opt);
+	else if(!strcmp(k,"dds"))	gr->BeltC(*(a[0].d),*(a[1].d),a[2].s.c_str(),opt);
+	else if(!strcmp(k,"dddd"))	gr->BeltC(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),"",opt);
+	else if(!strcmp(k,"dddds"))	gr->BeltC(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),a[4].s.c_str(),opt);
+	else res = 1;	return res;
+}
+//-----------------------------------------------------------------------------
 int MGL_NO_EXPORT mgls_boxs(mglGraph *gr, long , mglArg *a, const char *k, const char *opt)
 {
 	int res=0;
@@ -1029,6 +1039,7 @@ mglCommand mgls_grf_cmd[] = {
 	{"bars",_("Draw bars for 1D data"),"bars Ydat ['fmt' above]|Xdat Ydat ['fmt' above]|Xdat Ydat Zdat ['fmt' above]", mgls_bars ,7},
 	{"beam",_("Draw quasi-optical beam"),"beam Ray G1 G2 Adat r ['sch' flag num]|val Ray G1 G2 Adat r ['sch' flag num]", mgls_beam ,9},
 	{"belt",_("Draw belts"),"belt Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_belt ,8},
+	{"beltc",_("Draw belts colored by other data"),"beltc Zdat Cdat ['fmt']|Xdat Ydat Zdat Cdat ['fmt']", mgls_beltc ,8},
 	{"bifurcation",_("Draw Bifurcation diagram"),"bifurcation dx Func ['fmt']|dx 'func' ['fmt']", mgls_bifurcation,13},
 	{"boxplot",_("Draw boxplot for 2D data"),"boxplot Ydat ['fmt']|Xdat Ydat ['fmt']", mgls_boxplot ,7},
 	{"boxs",_("Draw boxes"),"boxs Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_boxs ,8},
diff --git a/src/export.cpp b/src/export.cpp
index f18dca9..1e0dcc9 100644
--- a/src/export.cpp
+++ b/src/export.cpp
@@ -574,31 +574,31 @@ void MGL_EXPORT mgl_write_frame(HMGL gr, const char *fname,const char *descr)
 	{	snprintf(buf,64,"%s%04d.jpg",_Gr_->PlotId.c_str(),_Gr_->GetNumFrame());	buf[63]=0;	fname = buf;	}
 	int len=strlen(fname);
 	if(!strcmp(fname+len-4,".jpg")) 	mgl_write_jpg(gr,fname,descr);
-	if(!strcmp(fname+len-5,".jpeg"))	mgl_write_jpg(gr,fname,descr);
-	if(!strcmp(fname+len-4,".prc")) 	mgl_write_prc(gr,fname,descr,1);
-	if(!strcmp(fname+len-4,".pdf")) 	mgl_write_prc(gr,fname,descr,1);
-	if(!strcmp(fname+len-4,".png")) 	mgl_write_png(gr,fname,descr);
-	if(!strcmp(fname+len-4,".eps")) 	mgl_write_eps(gr,fname,descr);
-	if(!strcmp(fname+len-5,".epsz"))	mgl_write_eps(gr,fname,descr);
-	if(!strcmp(fname+len-7,".eps.gz"))	mgl_write_eps(gr,fname,descr);
-	if(!strcmp(fname+len-4,".bps")) 	mgl_write_bps(gr,fname,descr);
-	if(!strcmp(fname+len-5,".bpsz"))	mgl_write_bps(gr,fname,descr);
-	if(!strcmp(fname+len-7,".bps.gz"))	mgl_write_bps(gr,fname,descr);
-	if(!strcmp(fname+len-4,".svg")) 	mgl_write_svg(gr,fname,descr);
-	if(!strcmp(fname+len-5,".svgz"))	mgl_write_svg(gr,fname,descr);
-	if(!strcmp(fname+len-7,".svg.gz"))	mgl_write_svg(gr,fname,descr);
-	if(!strcmp(fname+len-4,".gif")) 	mgl_write_gif(gr,fname,descr);
-	if(!strcmp(fname+len-4,".bmp")) 	mgl_write_bmp(gr,fname,descr);
-	if(!strcmp(fname+len-4,".tga")) 	mgl_write_tga(gr,fname,descr);
-	if(!strcmp(fname+len-5,".mgld"))	mgl_export_mgld(gr,fname,descr);
-	if(!strcmp(fname+len-5,".json"))	mgl_write_json(gr,fname,descr);
-	if(!strcmp(fname+len-6,".jsonz"))	mgl_write_json(gr,fname,descr);
-	if(!strcmp(fname+len-4,".obj")) 	mgl_write_obj(gr,fname,descr,1);
-	if(!strcmp(fname+len-4,".tex")) 	mgl_write_tex(gr,fname,descr);
-	if(!strcmp(fname+len-4,".xyz")) 	mgl_write_xyz(gr,fname,descr);
-	if(!strcmp(fname+len-4,".stl")) 	mgl_write_stl(gr,fname,descr);
-	if(!strcmp(fname+len-4,".off")) 	mgl_write_off(gr,fname,descr,0);
-//	if(!strcmp(fname+len-4,".x3d")) 	mgl_write_x3d(gr,fname,descr,1);
+	else if(!strcmp(fname+len-5,".jpeg"))	mgl_write_jpg(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".prc")) 	mgl_write_prc(gr,fname,descr,1);
+	else if(!strcmp(fname+len-4,".pdf")) 	mgl_write_prc(gr,fname,descr,1);
+	else if(!strcmp(fname+len-4,".png")) 	mgl_write_png(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".eps")) 	mgl_write_eps(gr,fname,descr);
+	else if(!strcmp(fname+len-5,".epsz"))	mgl_write_eps(gr,fname,descr);
+	else if(!strcmp(fname+len-7,".eps.gz"))	mgl_write_eps(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".bps")) 	mgl_write_bps(gr,fname,descr);
+	else if(!strcmp(fname+len-5,".bpsz"))	mgl_write_bps(gr,fname,descr);
+	else if(!strcmp(fname+len-7,".bps.gz"))	mgl_write_bps(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".svg")) 	mgl_write_svg(gr,fname,descr);
+	else if(!strcmp(fname+len-5,".svgz"))	mgl_write_svg(gr,fname,descr);
+	else if(!strcmp(fname+len-7,".svg.gz"))	mgl_write_svg(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".gif")) 	mgl_write_gif(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".bmp")) 	mgl_write_bmp(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".tga")) 	mgl_write_tga(gr,fname,descr);
+	else if(!strcmp(fname+len-5,".mgld"))	mgl_export_mgld(gr,fname,descr);
+	else if(!strcmp(fname+len-5,".json"))	mgl_write_json(gr,fname,descr);
+	else if(!strcmp(fname+len-6,".jsonz"))	mgl_write_json(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".obj")) 	mgl_write_obj(gr,fname,descr,1);
+	else if(!strcmp(fname+len-4,".tex")) 	mgl_write_tex(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".xyz")) 	mgl_write_xyz(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".stl")) 	mgl_write_stl(gr,fname,descr);
+	else if(!strcmp(fname+len-4,".off")) 	mgl_write_off(gr,fname,descr,0);
+//	else if(!strcmp(fname+len-4,".x3d")) 	mgl_write_x3d(gr,fname,descr,1);
 }
 void MGL_EXPORT mgl_write_frame_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)
 {	char *s=new char[l+1];	memcpy(s,fname,l);	s[l]=0;
diff --git a/src/export_2d.cpp b/src/export_2d.cpp
index 5a5580c..318e49c 100644
--- a/src/export_2d.cpp
+++ b/src/export_2d.cpp
@@ -592,9 +592,9 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
 	if(gr->GetPrmNum()<1)	return;
 	_Gr_->clr(MGL_FINISHED);	_Gr_->PreparePrim(1);
 
-	FILE *fp = fopen(fname,"w");	fwide(fp,1);
+	FILE *fp = fopen(fname,"w");
 	if(!fp)		{	gr->SetWarn(mglWarnOpen,fname);	return;	}
-	const std::string loc = setlocale(LC_NUMERIC, "C");
+	const std::string loc = setlocale(LC_NUMERIC, "C");	fwide(fp,1);
 	fwprintf(fp, L"%% Created by MathGL library\n%% Title: %s\n\n",descr?descr:fname);
 	// provide marks
 	fwprintf(fp, L"\\providecommand{\\mglp}[4]{\\draw[#3] (#1-#4, #2) -- (#1+#4,#2) (#1,#2-#4) -- (#1,#2+#4);}\n");
diff --git a/src/export_3d.cpp b/src/export_3d.cpp
index cb01fcb..55a2191 100644
--- a/src/export_3d.cpp
+++ b/src/export_3d.cpp
@@ -308,12 +308,12 @@ void MGL_EXPORT mgl_write_obj_old(HMGL gr, const char *fname,const char *descr,
 	{
 		const mglPnt &pp = gr->GetPnt(i);
 		fprintf(fp,"v %g %g %g\n",pp.x,pp.y,pp.z);
-		fprintf(fp,"vt %g %g\n",1-pp.ta,pp.c/ntxt);
+		fprintf(fp,"vt %g %g\n",1-pp.ta,1-pp.c/ntxt);
 //		if(mgl_isnan(pp.u))	fprintf(fp,"vn 0 0 0\n");
 //		else fprintf(fp,"vn %g %g %g\n",pp.u,pp.v,pp.w);
 	}
 	// primitive definition in groups
-	char *tname = new char[len+5];	strcpy(tname,fname);
+	char *tname = new char[len+15];	strcpy(tname,fname);
 	tname[len-4]=0;	fprintf(fp,"# Primitives Definitions\nmtllib %s.mtl\nusemtl %s\n",tname,tname);
 	for(size_t i=0;i<gr->Grp.size();i++)
 	{
@@ -335,10 +335,10 @@ void MGL_EXPORT mgl_write_obj_old(HMGL gr, const char *fname,const char *descr,
 	fprintf(fp,"Ka 1.000 1.000 1.000\n");
 	fprintf(fp,"Kd 1.000 1.000 1.000\n");
 	fprintf(fp,"Ks 0.000 0.000 0.000\n");
-	fprintf(fp,"d 1.0\nillum 2\n");
-	if(use_png)	strcat(tname,"_txt.png");
+	fprintf(fp,"d 1.0\nTr 0.0\nillum 2\n");
+	if(use_png)	strcat(tname,"_texture.png");
 //	{	tname[len-4]='.';	tname[len-3]='p';	tname[len-2]='n';	tname[len-1]='g';	}
-	else		strcat(tname,"_txt.tga");
+	else		strcat(tname,"_texture.tga");
 //	{	tname[len-4]='.';	tname[len-3]='t';	tname[len-2]='g';	tname[len-1]='a';	}
 	fprintf(fp,"map_Ka %s\nmap_Kd %s\nmap_Ks %s\n",tname,tname,tname);
 	fclose(fp);
@@ -485,7 +485,7 @@ void MGL_EXPORT mgl_write_off(HMGL gr, const char *fname,const char *descr, int
 		{
 			if(q.type==2)
 				fprintf(fp,"3 %ld %ld %ld\n",q.n1,q.n2,q.n3);
-			if(q.type==3)
+			else if(q.type==3)
 				fprintf(fp,"4 %ld %ld %ld %ld\n",q.n1,q.n2,q.n4,q.n3);
 		}
 		else
@@ -497,7 +497,7 @@ void MGL_EXPORT mgl_write_off(HMGL gr, const char *fname,const char *descr, int
 					fprintf(fp,"3 %ld %ld %ld %.2g %.2g %.2g %.2g\n",q.n1,q.n2,q.n3,
 							(p1.r+p2.r+p3.r)/3, (p1.g+p2.g+p3.g)/3, (p1.b+p2.b+p3.b)/3, (p1.a+p2.a+p3.a)/3);
 			}
-			if(q.type==3)
+			else if(q.type==3)
 			{
 				const mglPnt &p2=gr->GetPnt(q.n2), &p3=gr->GetPnt(q.n3), &p4=gr->GetPnt(q.n4);
 				if(p1.a>mgl_min_a || p2.a>mgl_min_a || p3.a>mgl_min_a || p4.a>mgl_min_a)
diff --git a/src/fft.cpp b/src/fft.cpp
index f5d6fd1..6fe02b1 100644
--- a/src/fft.cpp
+++ b/src/fft.cpp
@@ -1264,11 +1264,11 @@ void MGL_EXPORT mgl_data_wavelet(HMDT dat, const char *how, int k)
 		gsl_wavelet_workspace *work = gsl_wavelet_workspace_alloc(n);
 		if(mglchr(how,'i'))
 #pragma omp for collapse(2)
-			for(long i=0;i<dat->nx;i++)	for(long j=0;j<dat->nz;j++)
+			for(long j=0;j<dat->nz;j++)	for(long i=0;i<dat->nx;i++)
 				gsl_wavelet_transform_inverse(w, a+i+n*s*j, s, n, work);
 		else
 #pragma omp for collapse(2)
-			for(long i=0;i<dat->nx;i++)	for(long j=0;j<dat->nz;j++)
+			for(long j=0;j<dat->nz;j++)	for(long i=0;i<dat->nx;i++)
 				gsl_wavelet_transform_forward(w, a+i+n*s*j, s, n, work);
 		gsl_wavelet_workspace_free(work);
 	}
diff --git a/src/fit.cpp b/src/fit.cpp
index 852cfae..970b583 100644
--- a/src/fit.cpp
+++ b/src/fit.cpp
@@ -46,7 +46,7 @@ void MGL_EXPORT mgl_puts_fit(HMGL gr, double x, double y, double z, const char *
 	long n = strlen(mglFitRes)+(pre?strlen(pre):0)+1;
 	char *buf = new char[n];
 	if(pre)	snprintf(buf,n,"%s%s",pre,mglFitRes);
-	else	strncpy(buf,mglFitRes,n);
+	else	mgl_strncpy(buf,mglFitRes,n);
 	buf[n-1]=0;	mgl_puts(gr,x,y,z,buf,font,size);
 	delete []buf;
 }
@@ -371,7 +371,7 @@ HMDT MGL_EXPORT mgl_fit_xyzs(HMGL gr, HCDT xx, HCDT yy, HCDT zz, HCDT ss, const
 	mglData x(m, n), y(m, n), z(zz), s(ss);	x.s=L"x";	y.s=L"y";
 	long nz = zz->GetNz(), mm = n*m;
 #pragma omp parallel for collapse(2)
-	for(long i=0;i<m;i++)	for(long j=0;j<n;j++)
+	for(long j=0;j<n;j++)	for(long i=0;i<m;i++)
 	{
 		long i0 = i+m*j;
 		x.a[i0] = GetX(xx,i,j,0).x;
@@ -417,7 +417,7 @@ HMDT MGL_EXPORT mgl_fit_xyzas(HMGL gr, HCDT xx, HCDT yy, HCDT zz, HCDT aa, HCDT
 	mglData x(m,n,l), y(m,n,l), z(m,n,l), a(aa), s(ss);
 	x.s=L"x";	y.s=L"y";	z.s=L"z";
 #pragma omp parallel for collapse(3)
-	for(long i=0;i<m;i++)	for(long j=0;j<n;j++)	for(long k=0;k<l;k++)
+	for(long k=0;k<l;k++)	for(long j=0;j<n;j++)	for(long i=0;i<m;i++)
 	{
 		long i0 = i+m*(j+n*k);
 		x.a[i0] = GetX(xx,i,j,k).x;
@@ -516,7 +516,7 @@ MGL_EXPORT const char *mgl_get_fit(HMGL )	{	return mglFitRes;	}
 int MGL_EXPORT mgl_get_fit_(uintptr_t *gr, char *out, int len)
 {
 	const char *res = mgl_get_fit(_GR_);
-	if(out)	strncpy(out,res,len);
+	if(out)	mgl_strncpy(out,res,len);
 	return strlen(res);
 }
 //-----------------------------------------------------------------------------
diff --git a/src/font.cpp b/src/font.cpp
index 0996ded..3896e7d 100644
--- a/src/font.cpp
+++ b/src/font.cpp
@@ -534,7 +534,8 @@ float mglFont::Puts(const unsigned *text, float x,float y,float f,int style,floa
 						unsigned sn = str[i+j];
 						if(sn<unsigned(-15) && (sn&MGL_FONT_MASK)>' ')	// specially center
 						{
-							dx = 0.75*ff*(GetWidth(a,Internal(sn&MGL_FONT_MASK))-GetWidth(a,j))/fact[a];
+							long jj = Internal(sn&MGL_FONT_MASK);
+							dx = jj<0?0:0.75*ff*(GetWidth(a,jj)-GetWidth(a,j))/fact[a];
 							if(dx<0)	dx=0;
 						}
 					}
@@ -544,7 +545,7 @@ float mglFont::Puts(const unsigned *text, float x,float y,float f,int style,floa
 						else					gr->Glyph(x+dx,yy,ff,a,j,ccol);
 					}
 				}
-				ww = ff*GetWidth(a,j)/fact[a];
+				ww = j>=0?ff*GetWidth(a,j)/fact[a]:0;
 				if(gr && !(style&0x10))	// add under-/over- line now
 					draw_ouline(st,x,y,f,fact[a],ww,ccol);
 				if(s & MGL_FONT_ZEROW)	ww = 0;
@@ -951,6 +952,7 @@ long MGL_EXPORT mgl_check_tex_table()
 //---------------------------------------------------------------------------
 bool MGL_NO_EXPORT test_transl(const char *p)
 {
+	if(!p)	return false;
 #if MGL_USE_GETTEXT
 	std::string f = std::string(p) + "/ru/LC_MESSAGES/mathgl.mo";
 	FILE *fp = fopen(f.c_str(),"r");
diff --git a/src/obj.cpp b/src/obj.cpp
index 2aa1a49..93a0231 100644
--- a/src/obj.cpp
+++ b/src/obj.cpp
@@ -395,7 +395,8 @@ size_t MGL_LOCAL_CONST power_of_two(size_t input)
 
 void MGL_EXPORT mgl_write_obj(HMGL gr, const char *fname,const char *descr, int use_png)
 {
-	if(gr->GetPrmNum()==0)	return;	// nothing to do
+	mglCanvas *gg = dynamic_cast<mglCanvas *>(gr);
+	if(!gg || gr->GetPrmNum()==0)	return;	// nothing to do
 
 	{
 		long mmin=0,mmax=0,m;
@@ -425,8 +426,8 @@ void MGL_EXPORT mgl_write_obj(HMGL gr, const char *fname,const char *descr, int
 
 	// center point
 	mglPnt p0;
-	const mreal width  = dynamic_cast<mglCanvas *>(gr)->GetWidth();
-	const mreal height = dynamic_cast<mglCanvas *>(gr)->GetHeight();
+	const mreal width  = gg->GetWidth();
+	const mreal height = gg->GetHeight();
 	const mreal depth  = sqrt(width*height);
 
 	p0.x = width/2.;
diff --git a/src/opengl.cpp b/src/opengl.cpp
index 538a099..9c862a7 100644
--- a/src/opengl.cpp
+++ b/src/opengl.cpp
@@ -63,17 +63,18 @@ void mglCanvasGL::Finish()
 		{
 			p=GetPrm(i);	PDef=p.n3;	pPos=p.s;	PenWidth=p.w;
 			long n1=p.n1, n2=p.n2, n3=p.n3, n4=p.n4;
+			mglDrawReg d;	d.set(this,1,1,0);
 			switch(p.type)
 			{
 /*			case 0:	mark_draw(Pnt[n1],n4,p.s,0);	break;
 			case 1:	line_draw(n1,n2);	break;
 			case 2:	trig_draw(n1,n2,n3);	break;
 			case 3:	quad_draw(n1,n2,n3,n4);	break;*/
-			case 0:	mark_draw(Pnt[n1],n4,p.s,0);	break;
-			case 1:	line_draw(Pnt[n1],Pnt[n2],0);	break;
-			case 2:	trig_draw(Pnt[n1],Pnt[n2],Pnt[n3],true,0);	break;
-			case 3:	quad_draw(Pnt[n1],Pnt[n2],Pnt[n3],Pnt[n4],0);	break;
-			case 4:	glyph_draw(p,0);	break;
+			case 0:	mark_draw(Pnt[n1],n4,p.s,&d);	break;
+			case 1:	line_draw(Pnt[n1],Pnt[n2],&d);	break;
+			case 2:	trig_draw(Pnt[n1],Pnt[n2],Pnt[n3],true,&d);	break;
+			case 3:	quad_draw(Pnt[n1],Pnt[n2],Pnt[n3],Pnt[n4],&d);	break;
+			case 4:	glyph_draw(p,&d);	break;
 			}
 		}
 		PDef=pdef;	pPos=ss;	PenWidth=ww;
diff --git a/src/parser.cpp b/src/parser.cpp
index d51a3e0..558137f 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -613,7 +613,10 @@ int mglParser::ParseDef(std::wstring &str)
 	{
 		int res = 1;	mreal d;
 		PutArg(str,true);
-		const std::wstring s = mgl_trim_ws(str.substr(7));
+		size_t end;	bool ss=false;
+		for(end=7;str[end] && (str[end]!='#' || ss);end++)
+		{	if(str[end]=='\'')	ss=!ss;	}
+		const std::wstring s = mgl_trim_ws(str.substr(7,end-7));
 		if(!str.compare(3,3,L"ine"))
 		{
 			int nn = s[1]<='9' ? s[1]-'0' : (s[1]>='a' ? s[1]-'a'+10:-1);
@@ -855,7 +858,7 @@ int mglParser::ParseDat(mglGraph *gr, std::wstring str, mglData &res)
 		str = str.substr(n+1);	str = mgl_trim_ws(str);
 	}
 	// try to find last argument
-	if(!str.empty())	{	arg[k] = str;	k++;	}
+	if(!str.empty() && k<32)	{	arg[k] = str;	k++;	}
 	if(k<1) n = 0;
 	else
 	{	// fill arguments by its values
@@ -1074,7 +1077,7 @@ void mglParser::AddCommand(const mglCommand *cmd)
 	memcpy(buf+mc, Cmd, (mp+1)*sizeof(mglCommand));
 	qsort(buf, mp+mc, sizeof(mglCommand), mgl_cmd_cmp);	// sort it
 #pragma omp critical(cmd_parser)
-	{	if(Cmd && Cmd!=BaseCmd)   delete []Cmd;	Cmd = buf;	}
+	{	if(Cmd!=BaseCmd)   delete []Cmd;	Cmd = buf;	}
 }
 //-----------------------------------------------------------------------------
 HMPR MGL_EXPORT mgl_create_parser()		{	return new mglParser;	}
diff --git a/src/pde.cpp b/src/pde.cpp
index 81cd9df..111e4d3 100644
--- a/src/pde.cpp
+++ b/src/pde.cpp
@@ -409,7 +409,7 @@ HADT MGL_EXPORT mgl_pde_solve_c(HMGL gr, const char *ham, HCDT ini_re, HCDT ini_
 		hh0=hu[0];
 		if(ny>1)
 #pragma omp parallel for collapse(2)
-			for(long i=0;i<2*nx;i++) for(long j=0;j<2*ny;j++)
+		 for(long j=0;j<2*ny;j++)	for(long i=0;i<2*nx;i++)
 			{
 				long i0 = i+2*nx*j;	huv[i0] -= hh0;
 				hxv[i0] -= hx[i]+hv[j]-hh0;
@@ -456,7 +456,7 @@ HADT MGL_EXPORT mgl_pde_solve_c(HMGL gr, const char *ham, HCDT ini_re, HCDT ini_
 			mgl_fft_free_thr(wsx);
 		}
 #pragma omp parallel for collapse(2)
-		for(long i=0;i<nx;i++)	for(long j=0;j<ny;j++)	// save result
+		for(long j=0;j<ny;j++)	for(long i=0;i<nx;i++)	// save result
 			res->a[k+nz*(i+nx*j)] = a[i+nx/2+2*nx*(j+ny/2)];
 	}
 	mgl_fft_free(wtx,0,0);	mgl_fft_free(wty,0,0);
diff --git a/src/pixel.cpp b/src/pixel.cpp
index 23538b8..7174850 100644
--- a/src/pixel.cpp
+++ b/src/pixel.cpp
@@ -643,9 +643,9 @@ void mglCanvas::pnt_draw(const mglPnt &p, const mglDrawReg *dr)
 	}
 }
 //-----------------------------------------------------------------------------
-void mglCanvas::mark_draw(const mglPnt &q, char type, mreal size, mglDrawReg *d)
+void mglCanvas::mark_draw(const mglPnt &q, char type, mreal size, mglDrawReg *dr)
 {
-	const int oi = d?d->ObjId:-1;
+	const int oi = dr->ObjId;
 	unsigned char cs[4];	col2int(q,cs,oi);
 	const unsigned char ca = cs[3];// = size>0 ? 255 : 255*q.t;
 	const mreal ss=(strchr("xsSoO",type)?1:1.1)*fabs(size), dpw=(oi==HighId?2:3)*pen_delta;
@@ -653,14 +653,14 @@ void mglCanvas::mark_draw(const mglPnt &q, char type, mreal size, mglDrawReg *d)
 
 	if(type=='.' || ss==0)
 	{
-		if(d)	PW = 3*(ss?ss:sqrt(font_factor/400));
+		PW = 3*(ss?ss:sqrt(font_factor/400));
 		if(oi==HighId)	PW *= 2;
 		const mreal pw = PW;
 		mreal dd = pw+10/dpw;
 		long x1 = long(q.x-dd), y1 = long(q.y-dd);	// bounding box
 		long x2 = long(q.x+dd), y2 = long(q.y+dd);
-		x1=x1>d->x1?x1:d->x1;	x2=x2<d->x2?x2:d->x2;
-		y1=y1>d->y1?y1:d->y1;	y2=y2<d->y2?y2:d->y2;
+		x1=x1>dr->x1?x1:dr->x1;	x2=x2<dr->x2?x2:dr->x2;
+		y1=y1>dr->y1?y1:dr->y1;	y2=y2<dr->y2?y2:dr->y2;
 		if(x1>x2 || y1>y2)	return;
 		const float V=(pw-1)*(pw-1)/4,S=(1-pw)/2;
 
@@ -674,20 +674,17 @@ void mglCanvas::mark_draw(const mglPnt &q, char type, mreal size, mglDrawReg *d)
 	}
 	else
 	{
-		if(d)
-		{
-			d->PDef = MGL_SOLID_MASK;	d->angle = 0;
-			PW = d->PenWidth*sqrt(fabs(50*size));
-			if(PW<1)	PW=1;
-		}
+		dr->PDef = MGL_SOLID_MASK;	dr->angle = 0;
+		PW = dr->PenWidth*sqrt(fabs(50*size));
+		if(PW<1)	PW=1;
 		if(oi==HighId)	PW *= 2;
 		const mreal pw = PW;
 
 		mreal dd = ss+pw+10/dpw;
 		long x1 = long(q.x-dd), y1 = long(q.y-dd);	// bounding box
 		long x2 = long(q.x+dd), y2 = long(q.y+dd);
-		x1=x1>d->x1?x1:d->x1;	x2=x2<d->x2?x2:d->x2;
-		y1=y1>d->y1?y1:d->y1;	y2=y2<d->y2?y2:d->y2;
+		x1=x1>dr->x1?x1:dr->x1;	x2=x2<dr->x2?x2:dr->x2;
+		y1=y1>dr->y1?y1:dr->y1;	y2=y2<dr->y2?y2:dr->y2;
 		if(x1>x2 || y1>y2)	return;
 		const float V=(pw-1)*(pw-1)/4,S=(1-pw)/2;
 
diff --git a/src/pixel_gen.cpp b/src/pixel_gen.cpp
index 4adc49c..54b267e 100644
--- a/src/pixel_gen.cpp
+++ b/src/pixel_gen.cpp
@@ -549,7 +549,7 @@ void mglCanvas::FillBackground(const mglColor &cc)
 //-----------------------------------------------------------------------------
 void mglCanvas::Combine(const mglCanvas *gr)
 {
-	if(Width!=gr->Width || Height!=gr->Height || !gr)	return;	// wrong sizes
+	if(!gr || Width!=gr->Width || Height!=gr->Height)	return;	// wrong sizes
 	mglStartThread(&mglCanvas::pxl_other,this,Width*Height,gr);
 }
 //-----------------------------------------------------------------------------
diff --git a/src/plot.cpp b/src/plot.cpp
index 37fa250..d3489c2 100644
--- a/src/plot.cpp
+++ b/src/plot.cpp
@@ -80,7 +80,7 @@ void MGL_EXPORT mgl_fplot(HMGL gr, const char *eqY, const char *pen, const char
 			}
 		}
 	}
-	mgl_plot_xy(gr,&x,&y,pen,0);
+	delete eq;	mgl_plot_xy(gr,&x,&y,pen,0);
 }
 //-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_fplot_xyz(HMGL gr, const char *eqX, const char *eqY, const char *eqZ, const char *pen, const char *opt)
@@ -209,7 +209,8 @@ void MGL_EXPORT mgl_candle_xyv(HMGL gr, HCDT x, HCDT v1, HCDT v2, HCDT y1, HCDT
 	if(!y1)	{	y1 = new mglData(n);	d1=true;	((mglData *)y1)->Fill(NAN,NAN);	}
 	if(!y2)	{	y2 = new mglData(n);	d2=true;	((mglData *)y2)->Fill(NAN,NAN);	}
 	if(y1->GetNx()!=n || y2->GetNx()!=n)
-	{	gr->SetWarn(mglWarnDim,"Candle");	return;	}
+	{	if(d1)	delete y1;	if(d2)	delete y2;
+		gr->SetWarn(mglWarnDim,"Candle");	return;	}
 	static int cgid=1;	gr->StartGroup("Candle",cgid++);
 	gr->SaveState(opt);	gr->SetPenPal(pen,&pal);	gr->Reserve(8*n);
 	bool sh = mglchr(pen,'!');
@@ -348,7 +349,7 @@ void MGL_EXPORT mgl_plot_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, const char *pen, c
 	gr->SaveState(opt);
 	long m = x->GetNy() > y->GetNy() ? x->GetNy() : y->GetNy();	m = z->GetNy() > m ? z->GetNy() : m;
 	char mk=gr->SetPenPal(pen,&pal);	gr->Reserve(2*n*m);
-	bool sh = mglchr(pen,'!'), orig = !mglchr(pen,'a');
+	bool sh = mglchr(pen,'!'), orig = !mglchr(pen,'a'), appr = mglchr(pen,'~');
 
 	int d = gr->MeshNum>0 ? gr->MeshNum+1 : n, dx = n>d?n/d:1;
 	for(long j=0;j<m;j++)
@@ -359,20 +360,45 @@ void MGL_EXPORT mgl_plot_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, const char *pen, c
 		mglDataR xx(x,mx), yy(y,my), zz(z,mz);
 		const std::vector<mglPointA> &pp = orig ? mgl_pnt_copy(&xx, &yy, &zz, 0) :
 			mgl_pnt_prepare(gr->Min, gr->Max, &xx, &yy, &zz, 0);
-		long n1=-1, n2=-1;
+		size_t num = pp.size();
+		long *nn = new long[num];
+		for(size_t i=0;i<num;i++)
+		{	mreal c = sh ? gr->NextColor(pal,i):gr->CDef;	nn[i] = gr->AddPnt(pp[i].p, c);	}
 		
-		for(size_t i=0;i<pp.size();i++)
+		if(mk)	for(size_t i=0;i<num;i+=dx)
+			if(nn[i]>=0 && pp[i].orig)	gr->mark_plot(nn[i], mk);
+		if(num>1)
 		{
-			mreal c = sh ? gr->NextColor(pal,i):gr->CDef;
-			n2 = n1;	n1 = gr->AddPnt(pp[i].p, c);
-			if(mk && i%dx==0 && n1>=0 && pp[i].orig)	gr->mark_plot(n1,mk);
-			if(n1>=0 && n2>=0)
+			if(nn[0]>=0 && nn[1]>=0)
+				gr->arrow_plot(nn[0],nn[1],gr->Arrow1);
+			if(nn[num-1]>=0 && nn[num-2]>=0)
+				gr->arrow_plot(nn[num-1],nn[num-2],gr->Arrow2);
+		}
+		for(size_t i=0;i+1<num;i++)
+		{
+			if(nn[i]<0 || nn[i+1]<0)	continue;
+			if(!appr)	gr->line_plot(nn[i+1],nn[i]);
+			else
 			{
-				gr->line_plot(n1,n2);
-				if(i==1)	gr->arrow_plot(n2,n1,gr->Arrow1);
+				size_t k=i+2;
+				while(k<num)
+				{
+					const mglPoint p1(gr->GetPntP(i)), p2(gr->GetPntP(k));
+					mreal dy=p2.x-p1.x, dx=p1.y-p2.y, dd=2*(dx*dx+dy*dy);
+					bool ops=false;
+					for(size_t ii=i+1;ii<k;ii++)
+					{
+						const mglPoint p(gr->GetPntP(ii));
+						mreal d = dx*p.x+dy*p.y;
+						if(d*d>dd)	ops = true;
+					}
+					if(ops)	break;
+					k++;
+				}
+				k--;	gr->line_plot(nn[k],nn[i]);	i = k-1;
 			}
 		}
-		if(n1>=0 && n2>=0)	gr->arrow_plot(n1,n2,gr->Arrow2);
+		delete []nn;
 	}
 	gr->EndGroup();
 }
@@ -423,7 +449,7 @@ void MGL_EXPORT mgl_tens_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT c, const char
 	m = x->GetNy() > y->GetNy() ? x->GetNy() : y->GetNy();	m = z->GetNy() > m ? z->GetNy() : m;
 	char mk=gr->SetPenPal(pen, &pal);	gr->Reserve(2*n*m);
 	long ss=gr->AddTexture(pen);
-	bool orig = !mglchr(pen,'a');
+	bool orig = !mglchr(pen,'a'), appr = mglchr(pen,'~');
 
 	int d = gr->MeshNum>0 ? gr->MeshNum+1 : n, dx = n>d?n/d:1;
 	for(long j=0;j<m;j++)
@@ -434,18 +460,45 @@ void MGL_EXPORT mgl_tens_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT c, const char
 		mglDataR xx(x,mx), yy(y,my), zz(z,mz), cc(c,mc);
 		const std::vector<mglPointA> &pp = orig ? mgl_pnt_copy(&xx, &yy, &zz, &cc) :
 			mgl_pnt_prepare(gr->Min, gr->Max, &xx, &yy, &zz, &cc);
-		long n1=-1, n2=-1;
-		for(size_t i=0;i<pp.size();i++)
+
+		size_t num = pp.size();
+		long *nn = new long[num];
+		for(size_t i=0;i<num;i++)	nn[i] = gr->AddPnt(pp[i].p, gr->GetC(ss,pp[i].p.c));
+		
+		if(mk)	for(size_t i=0;i<num;i+=dx)
+			if(nn[i]>=0 && pp[i].orig)	gr->mark_plot(nn[i], mk);
+		if(num>1)
+		{
+			if(nn[0]>=0 && nn[1]>=0)
+				gr->arrow_plot(nn[0],nn[1],gr->Arrow1);
+			if(nn[num-1]>=0 && nn[num-2]>=0)
+				gr->arrow_plot(nn[num-1],nn[num-2],gr->Arrow2);
+		}
+		for(size_t i=0;i+1<num;i++)
 		{
-			n2 = n1;	n1 = gr->AddPnt(pp[i].p, gr->GetC(ss,pp[i].p.c));
-			if(mk && i%dx==0 && n1>=0 && pp[i].orig)	gr->mark_plot(n1,mk);
-			if(n1>=0 && n2>=0)
+			if(nn[i]<0 || nn[i+1]<0)	continue;
+			if(!appr)	gr->line_plot(nn[i+1],nn[i]);
+			else
 			{
-				gr->line_plot(n1,n2);
-				if(i==1)	gr->arrow_plot(n2,n1,gr->Arrow1);
+				size_t k=i+2;
+				while(k<num)
+				{
+					const mglPoint p1(gr->GetPntP(i)), p2(gr->GetPntP(k));
+					mreal dy=p2.x-p1.x, dx=p1.y-p2.y, dd=2*(dx*dx+dy*dy);
+					bool ops=false;
+					for(size_t ii=i+1;ii<k;ii++)
+					{
+						const mglPoint p(gr->GetPntP(ii));
+						mreal d = dx*p.x+dy*p.y;
+						if(d*d>dd)	ops = true;
+					}
+					if(ops)	break;
+					k++;
+				}
+				k--;	gr->line_plot(nn[k],nn[i]);	i = k-1;
 			}
 		}
-		if(n1>=0 && n2>=0)	gr->arrow_plot(n1,n2,gr->Arrow2);
+		delete []nn;
 	}
 	gr->EndGroup();
 }
@@ -664,7 +717,8 @@ void MGL_EXPORT mgl_region_3d(HMGL gr, HCDT x1, HCDT y1, HCDT z1, HCDT x2, HCDT
 	long n=y1->GetNx(), m, pal;
 	if(mgl_check_dim1(gr,x1,y1,z1,0,"Region"))	return;
 	if(mgl_check_dim1(gr,x1,x2,y2,z2,"Region"))	return;
-	m = x1->GetNy() > y1->GetNy() ? x1->GetNy() : y1->GetNy();	m = z1->GetNy() > m ? z1->GetNy() : m;
+	m = x1->GetNy() > y1->GetNy() ? x1->GetNy() : y1->GetNy();
+	m = (z1 && z1->GetNy() > m) ? z1->GetNy() : m;
 	bool zhave = z1 && z2;
 	if(x1->GetNy()!=x2->GetNy() || y1->GetNy()!=y2->GetNy())
 	{	gr->SetWarn(mglWarnDim,"Region");	return;	}
@@ -1106,7 +1160,7 @@ void MGL_EXPORT mgl_bars_xy(HMGL gr, HCDT x, HCDT y, const char *pen, const char
 	if(fixed)
 	{
 		long nn=x->GetNy();
-		for(long i=0;i<n-1;i++)	for(long j=0;j<nn;j++)
+		for(long j=0;j<nn;j++)	for(long i=0;i<n-1;i++)
 		{
 			mreal cx = fabs(x->v(i+1,j)-x->v(i,j));
 			if(cx<dx)	dx=cx;
@@ -1202,7 +1256,7 @@ void MGL_EXPORT mgl_barh_yx(HMGL gr, HCDT y, HCDT v, const char *pen, const char
 	if(fixed)
 	{
 		long nn=y->GetNy();
-		for(long i=0;i<n-1;i++)	for(long j=0;j<nn;j++)
+		for(long j=0;j<nn;j++)	for(long i=0;i<n-1;i++)
 		{
 			mreal cx = fabs(y->v(i+1,j)-y->v(i,j));
 			if(cx<dy)	dy=cx;
diff --git a/src/prc.cpp b/src/prc.cpp
index a351912..49f742c 100644
--- a/src/prc.cpp
+++ b/src/prc.cpp
@@ -244,7 +244,8 @@ void my_png_flush(png_structp /*png_ptr*/)
 //-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_write_prc(HMGL gr, const char *fname,const char* /*descr*/, int make_pdf)
 {
-	if(gr->GetPrmNum()==0)	return;	// nothing to do
+	mglCanvas *gg = dynamic_cast<mglCanvas *>(gr);
+	if(!gg || gr->GetPrmNum()==0)	return;	// nothing to do
 	{
 		long mmin=0,mmax=0,m;
 		for(size_t i=0;i<gr->Grp.size();i++)	// prepare array of indirect indexing
@@ -355,8 +356,8 @@ void MGL_EXPORT mgl_write_prc(HMGL gr, const char *fname,const char* /*descr*/,
 	// primitive definition in groups
 
 	mglPnt p0;
-	const double width  = dynamic_cast<mglCanvas *>(gr)->GetWidth();
-	const double height = dynamic_cast<mglCanvas *>(gr)->GetHeight();
+	const double width  = gg->GetWidth();
+	const double height = gg->GetHeight();
 	const double depth  = sqrt(width*height);
 
 	p0.x = width/2.;
@@ -966,7 +967,7 @@ void MGL_EXPORT mgl_write_prc(HMGL gr, const char *fname,const char* /*descr*/,
 
 		/* save the document to a file */
 		const size_t tlen = strlen(tname);
-		tname[tlen-2]='p';	tname[tlen-2]='d';	tname[tlen-1]='f';
+		tname[tlen-3]='p';	tname[tlen-2]='d';	tname[tlen-1]='f';
 		HPDF_SaveToFile (pdf, tname);
 
 		/* clean up */
diff --git a/src/prc/oPRCFile.cc b/src/prc/oPRCFile.cc
index b090f8a..6e11557 100644
--- a/src/prc/oPRCFile.cc
+++ b/src/prc/oPRCFile.cc
@@ -1259,7 +1259,7 @@ uint32_t oPRCFile::addTransform(const double origin[3], const double x_axis[3],
 {
   PRCCartesianTransformation3d* transform = new PRCCartesianTransformation3d(origin, x_axis, y_axis, scale);
   if(transform->behaviour==PRC_TRANSFORMATION_Identity)
-    return m1;
+  { delete transform;  return m1; }
   PRCCoordinateSystem *coordinateSystem = new PRCCoordinateSystem();
   coordinateSystem->axis_set = transform;
   const uint32_t coordinate_system_index = fileStructures[0]->addCoordinateSystem(coordinateSystem);
diff --git a/src/prim.cpp b/src/prim.cpp
index 7706316..484e131 100644
--- a/src/prim.cpp
+++ b/src/prim.cpp
@@ -706,10 +706,11 @@ void MGL_EXPORT mgl_putsw_dir(HMGL gr, double x, double y, double z, double dx,
 {
 	bool a=mglchr(font,'a'), A=mglchr(font,'A');
 	static int cgid=1;	gr->StartGroup("Puts",cgid++);
+
 	mglCanvas *g = dynamic_cast<mglCanvas *>(gr);
 	if(g && (a||A))
 	{
-		g->Push();	g->Identity(a);
+		g->SaveInPlot();	g->Identity(a);
 		gr->set(MGL_DISABLE_SCALE);
 		mreal s=a?1:g->GetPlotFactor();
 		x = (2*x-1)*s;	y = (2*y-1)*s;
@@ -720,8 +721,8 @@ void MGL_EXPORT mgl_putsw_dir(HMGL gr, double x, double y, double z, double dx,
 	long k = gr->AddPnt(p,-1,d,-1,7);
 	gr->AddActive(k,0);
 	gr->AddActive(gr->AddPnt(mglPoint(dx,dy,dz),-1,d,-1,7),1);
-	if(g && (a||A))	{	g->Pop();	gr->clr(MGL_DISABLE_SCALE);	}
 	gr->text_plot(k,text,font,size);
+	if(g && (a||A))	{	g->LoadInPlot();	gr->clr(MGL_DISABLE_SCALE);	}
 	gr->EndGroup();
 }
 //-----------------------------------------------------------------------------
diff --git a/src/surf.cpp b/src/surf.cpp
index 301fbe1..51c1efa 100644
--- a/src/surf.cpp
+++ b/src/surf.cpp
@@ -428,9 +428,11 @@ void MGL_EXPORT mgl_surfa_(uintptr_t *gr, uintptr_t *z, uintptr_t *a, const char
 //
 //-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_belt_xy(HMGL gr, HCDT x, HCDT y, HCDT z, const char *sch, const char *opt)
+{	mgl_beltc_xy(gr,x,y,z,z,sch,opt);	}
+void MGL_EXPORT mgl_beltc_xy(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT c, const char *sch, const char *opt)
 {
 	long n=z->GetNx(),m=z->GetNy();
-	if(mgl_check_dim2(gr,x,y,z,0,"Belt"))	return;
+	if(mgl_check_dim2(gr,x,y,z,c,"Belt"))	return;
 
 	gr->SaveState(opt);
 	static int cgid=1;	gr->StartGroup("Belt",cgid++);
@@ -441,6 +443,7 @@ void MGL_EXPORT mgl_belt_xy(HMGL gr, HCDT x, HCDT y, HCDT z, const char *sch, co
 	bool how = !mglchr(sch,'x');
 
 	mglPoint p1,p2,q,s,xx,yy;
+	int dk = c->GetNz()>=z->GetNz() ? 1:0;
 	for(long k=0;k<z->GetNz();k++)
 	{
 		if(gr->NeedStop())	break;
@@ -452,10 +455,10 @@ void MGL_EXPORT mgl_belt_xy(HMGL gr, HCDT x, HCDT y, HCDT z, const char *sch, co
 				p1.Set(xx.x, yy.x, z->v(i,j,k));
 				s.Set(xx.z, yy.z, z->dvy(i,j,k));
 				q.Set(xx.y, yy.y, 0);	s = q^s;
-				mreal c = gr->GetC(ss,p1.z);
+				mreal cc = gr->GetC(ss,c->v(i,j,dk*k));
 				p2.Set(GetX(x,i+dx,j,k).x,GetY(y,i+dx,j,k).x,p1.z);
-				pos[2*j] = gr->AddPnt(p1,c,s);
-				pos[2*j+1]=gr->AddPnt(p2,c,s);
+				pos[2*j] = gr->AddPnt(p1,cc,s);
+				pos[2*j+1]=gr->AddPnt(p2,cc,s);
 			}
 			mgl_surf_plot(gr,pos,2,m);
 		}
@@ -467,10 +470,10 @@ void MGL_EXPORT mgl_belt_xy(HMGL gr, HCDT x, HCDT y, HCDT z, const char *sch, co
 				p1.Set(xx.x, yy.x, z->v(i,j,k));
 				q.Set(xx.y, yy.y, z->dvx(i,j,k));
 				s.Set(xx.z, yy.z, 0);	s = q^s;
-				mreal c = gr->GetC(ss,p1.z);
+				mreal cc = gr->GetC(ss,c->v(i,j,dk*k));
 				p2.Set(GetX(x,i,j+dy,k).x,GetY(y,i,j+dy,k).x,p1.z);
-				pos[2*i] = gr->AddPnt(p1,c,s);
-				pos[2*i+1]=gr->AddPnt(p2,c,s);
+				pos[2*i] = gr->AddPnt(p1,cc,s);
+				pos[2*i+1]=gr->AddPnt(p2,cc,s);
 			}
 			mgl_surf_plot(gr,pos,2,n);
 		}
@@ -479,12 +482,14 @@ void MGL_EXPORT mgl_belt_xy(HMGL gr, HCDT x, HCDT y, HCDT z, const char *sch, co
 }
 //-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_belt(HMGL gr, HCDT z, const char *sch, const char *opt)
+{	mgl_beltc(gr,z,z,sch,opt);	}
+void MGL_EXPORT mgl_beltc(HMGL gr, HCDT z, HCDT c, const char *sch, const char *opt)
 {
 	gr->SaveState(opt);
 	mglDataV x(z->GetNx()), y(z->GetNy());
 	x.Fill(gr->Min.x,gr->Max.x);
 	y.Fill(gr->Min.y,gr->Max.y);
-	mgl_belt_xy(gr,&x,&y,z,sch,0);
+	mgl_beltc_xy(gr,&x,&y,z,c,sch,0);
 }
 //-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_belt_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *a, const char *sch, const char *opt,int l,int lo)
@@ -497,6 +502,16 @@ void MGL_EXPORT mgl_belt_(uintptr_t *gr, uintptr_t *a, const char *sch, const ch
 	char *o=new char[lo+1];	memcpy(o,opt,lo);	o[lo]=0;
 	mgl_belt(_GR_, _DA_(a), s, o);	delete []o;	delete []s;	}
 //-----------------------------------------------------------------------------
+void MGL_EXPORT mgl_beltc_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *a, uintptr_t *c, const char *sch, const char *opt,int l,int lo)
+{	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	char *o=new char[lo+1];		memcpy(o,opt,lo);	o[lo]=0;
+	mgl_beltc_xy(_GR_, _DA_(x), _DA_(y), _DA_(a), _DA_(c), s, o);	delete []o;	delete []s;	}
+//-----------------------------------------------------------------------------
+void MGL_EXPORT mgl_beltc_(uintptr_t *gr, uintptr_t *a, uintptr_t *c, const char *sch, const char *opt,int l,int lo)
+{	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	char *o=new char[lo+1];	memcpy(o,opt,lo);	o[lo]=0;
+	mgl_beltc(_GR_, _DA_(a), _DA_(c), s, o);	delete []o;	delete []s;	}
+//-----------------------------------------------------------------------------
 //
 //	Dens series
 //
diff --git a/src/volume.cpp b/src/volume.cpp
index 00f1b53..b6b9148 100644
--- a/src/volume.cpp
+++ b/src/volume.cpp
@@ -48,7 +48,7 @@ void MGL_EXPORT mgl_cloud_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT a, const cha
 	mreal	alpha = gr->AlphaDef;
 	bool inv = mglchr(sch,'i');
 	bool dot = mglchr(sch,'.');
-	alpha /= pow(n/tx*m/ty*l/tz,1./3)/20;
+	alpha /= pow((n/tx)*(m/ty)*(l/tz),1./3)/20;
 	if(alpha>1)	alpha = 1;
 	long ss = gr->AddTexture(sch);
 
@@ -638,25 +638,23 @@ void MGL_EXPORT mgl_beam_val(HMGL gr, double val, HCDT tr, HCDT g1, HCDT g2, HCD
 			amax = amax?sqrt(asum/asum0)/amax:0;
 			for(long j=0;j<m*l;j++)	b.a[j+m*l*i] = b.a[j+m*l*i]*amax;
 		}
-		if(flag & 1)	for(long j=0;j<m;j++)	for(long k=0;k<l;k++)
+		const long ii=m*l*i;
+		if(flag & 1)	for(long k=0;k<l;k++)	for(long j=0;j<m;j++)
 		{
-			long i0 = j+m*(k+l*i);
+			long i0 = ii+j+m*k;
 			x.a[i0] = 2*j/(m-1.)-1;
 			y.a[i0] = 2*k/(l-1.)-1;
 			z.a[i0] = gr->Max.z*i/(n-1.);
 		}
-		else	for(long j=0;j<m;j++)	for(long k=0;k<l;k++)
+		else	for(long k=0;k<l;k++)	for(long j=0;j<m;j++)
 		{
-			long i0 = j+m*(k+l*i);
+			long i0 = ii+j+m*k;
 			x.a[i0] = tr->v(0,i) + g1->v(0,i)*(2*j/(m-1.)-1)*r + g2->v(0,i)*(2*k/(l-1.)-1)*r;
 			y.a[i0] = tr->v(1,i) + g1->v(1,i)*(2*j/(m-1.)-1)*r + g2->v(1,i)*(2*k/(l-1.)-1)*r;
 			z.a[i0] = tr->v(2,i) + g1->v(2,i)*(2*j/(m-1.)-1)*r + g2->v(2,i)*(2*k/(l-1.)-1)*r;
 		}
-		if(flag & 2)	for(long j=0;j<m;j++)	for(long k=0;k<l;k++)
-		{
-			long i0 = j+m*(k+l*i);
-			x.a[i0] = hypot(x.a[i0],y.a[i0]);
-		}
+		if(flag & 2)	for(long j=0;j<m*l;j++)
+		{	long i0 = j+ii;	x.a[i0] = hypot(x.a[i0],y.a[i0]);	}
 	}
 	mgl_surf3_xyz_val(gr,val,&x,&y,&z,&b,stl,0);
 }
diff --git a/texinfo/core_en.texi b/texinfo/core_en.texi
index 7f75ac0..16e7488 100644
--- a/texinfo/core_en.texi
+++ b/texinfo/core_en.texi
@@ -1720,7 +1720,7 @@ Draws a 3d error box at position @var{p}=@{@var{x}, @var{y}, @var{z}@} with size
 @deftypefnx {Method on @code{mglGraph}} @code{void} Line (@code{mglPoint} p1, @code{mglPoint} p2, @code{char *}stl=@code{"B"}, @code{int} num=@code{2})
 @deftypefnx {C function} @code{void} mgl_line (@code{HMGL} gr, @code{mreal} x1, @code{mreal} y1, @code{mreal} z1, @code{mreal} x2, @code{mreal} y2, @code{mreal} z2, @code{char *}stl, @code{int} num)
 @end ifclear
-Draws a geodesic line (straight line in Cartesian coordinates) from point @var{p1} to @var{p2} using line style @var{stl}. Parameter @var{num} define the ``quality'' of the line. If @var{num}=@code{2} then the stright line will be drawn in all coordinate system (independently on transformation formulas (see @ref{Curved coordinates}). Contrary, for large values (for example, =@code{100}) the geodesic line will be drawn in corresponding coordinate system (straight line in Cartesian coordin [...]
+Draws a geodesic line (straight line in Cartesian coordinates) from point @var{p1} to @var{p2} using line style @var{stl}. Parameter @var{num} define the ``quality'' of the line. If @var{num}=@code{2} then the straight line will be drawn in all coordinate system (independently on transformation formulas (see @ref{Curved coordinates}). Contrary, for large values (for example, =@code{100}) the geodesic line will be drawn in corresponding coordinate system (straight line in Cartesian coordi [...]
 @end deftypefn
 
 @anchor{curve}
@@ -2032,6 +2032,7 @@ Draws axes with ticks (see @ref{Axis settings}). Parameter @var{dir} may contain
 @item @samp{!} for disabling ticks tuning (see @ref{tuneticks});
 @item @samp{AKDTVISO} for drawing arrow at the end of axis;
 @item @samp{a} for forced adjusting of axis ticks;
+ at item @samp{:} for drawing lines through point (0,0,0);
 @item @samp{f} for printing ticks labels in fixed format;
 @item @samp{E} for using @samp{E} instead of @samp{e} in ticks labels;
 @item @samp{F} for printing ticks labels in LaTeX format;
@@ -2243,7 +2244,7 @@ String @var{pen} specifies the color and style of line and marks (see @ref{Line
 @deftypefnx {C function} @code{void} mgl_plot_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
 @end ifclear
-These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. If @var{pen} contain @samp{a} then segments between points outside of axis range are drawn too. See also @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}, @ref{tape}, @ref{meshnum}. @sref{Plot sample}
+These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. If @var{pen} contain @samp{a} then segments between points outside of axis range are drawn too. If @var{pen} contain @samp{~} then number of segments is reduce for quasi-straight curves. See also @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}, @ref{tape}, @ref{meshnum}. @sref{Plot sample}
 @end deftypefn
 
 @anchor{radar}
@@ -2282,7 +2283,7 @@ These functions draw continuous stairs for points to axis plane. If @var{x}.nx>@
 @deftypefnx {C function} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
 @end ifclear
-These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} with color defined by the special array @var{c}[i] (look like tension plot). String @var{pen} specifies the color scheme (see @ref{Color scheme}) and style and/or width of line (see @ref{Line styles}). If @var{pen} contain @samp{a} then segments between points outside of axis range are drawn too. See also @ref{plot}, @ref{mesh}, @ref{fall}, @ref{meshnum}. @sref{Tens sample}
+These functions draw continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} with color defined by the special array @var{c}[i] (look like tension plot). String @var{pen} specifies the color scheme (see @ref{Color scheme}) and style and/or width of line (see @ref{Line styles}). If @var{pen} contain @samp{a} then segments between points outside of axis range are drawn too. If @var{pen} contain @samp{~} then number of segments is reduce for quasi-straight curves. See also @r [...]
 @end deftypefn
 
 @anchor{tape}
@@ -2748,7 +2749,7 @@ The function draws fall lines for surface specified parametrically @{@var{x}[i,j
 @deftypefnx {C function} @code{void} mgl_belt (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_belt_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @end ifclear
-The function draws belts for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. This plot can be used as 3d generalization of @ref{plot}). If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) belts are drawn along y-direction. See also @ref{fall}, @ref{surf}, @ref{plot}, @ref{meshnum}. @sref{Belt sample}
+The function draws belts for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. This plot can be used as 3d generalization of @ref{plot}). If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) belts are drawn along y-direction. See also @ref{fall}, @ref{surf}, @ref{beltc}, @ref{plot}, @ref{meshnum}. @sref{Belt sample}
 @end deftypefn
 
 @anchor{boxs}
@@ -3092,9 +3093,24 @@ These plotting functions draw @emph{two matrix} simultaneously. There are 5 gene
 @deftypefnx {C function} @code{void} mgl_surfc (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt)
 @deftypefnx {C function} @code{void} mgl_surfc_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt)
 @end ifclear
-The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j]. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{.} then plot by dots is produced. All dimensions of arrays @var{z} and @var{c} must be equal. Surface is plotted for each z slice of the data. See also @ref{surf}, @ref{surfa}, @ref{surfca}, @ref{surf3c}. @sref{SurfC sample}
+The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j]. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{.} then plot by dots is produced. All dimensions of arrays @var{z} and @var{c} must be equal. Surface is plotted for each z slice of the data. See also @ref{surf}, @ref{surfa}, @ref{surfca}, @ref{beltc}, @ref{surf3c}. @sref{SurfC sample}
 @end deftypefn
 
+
+ at anchor{beltc}
+ at deftypefn {MGL command} {} beltc zdat cdat ['sch'='']
+ at deftypefnx {MGL command} {} beltc xdat ydat zdat cdat ['sch'='']
+ at ifclear UDAV
+ at deftypefnx {Method on @code{mglGraph}} @code{void} BeltC (@code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+ at deftypefnx {Method on @code{mglGraph}} @code{void} BeltC (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const mglDataA &}c, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+ at deftypefnx {C function} @code{void} mgl_beltc (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+ at deftypefnx {C function} @code{void} mgl_beltc_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+ at end ifclear
+The function draws belts for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j]. This plot can be used as 3d generalization of @ref{plot}). If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) belts are drawn along y-direction. See also @ref{belt}, @ref{surfc}, @ref{meshnum}. @c TODO @sref{BeltC sample}
+ at end deftypefn
+
+
+
 @anchor{surf3c}
 @deftypefn {MGL command} {} surf3c adat cdat @code{val} ['sch'='']
 @deftypefnx {MGL command} {} surf3c xdat ydat zdat adat cdat @code{val} ['sch'='']
diff --git a/texinfo/core_ru.texi b/texinfo/core_ru.texi
index 22775a8..684e3ea 100644
--- a/texinfo/core_ru.texi
+++ b/texinfo/core_ru.texi
@@ -1997,6 +1997,7 @@ Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command
 @item @samp{!} для отключения улучшения вида меток (см. @ref{tuneticks});
 @item @samp{AKDTVISO} для вывода стрелки на конце оси;
 @item @samp{a} для принудительной автоматической расстановки меток;
+ at item @samp{:} для рисования линий через точку (0,0,0);
 @item @samp{f} для вывода чисел в фиксированном формате;
 @item @samp{E} для вывода @samp{E} вместо @samp{e};
 @item @samp{F} для вывода в формате LaTeX;
@@ -2207,7 +2208,7 @@ Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command
 @deftypefnx {Функция С} @code{void} mgl_plot_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{const char *}pen, @code{const char *}opt)
 @deftypefnx {Функция С} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}pen, @code{const char *}opt)
 @end ifclear
-Функции рисуют ломанную линию по точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Если @var{pen} содержит @samp{a}, то рисуются и сегменты между точками вне диапазона осей координат. См. также @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}, @ref{tape}, @ref{meshnum}. @sref{Plot sample}
+Функции рисуют ломанную линию по точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Если @var{pen} содержит @samp{a}, то рисуются и сегменты между точками вне диапазона осей координат. Если @var{pen} содержит @samp{~}, то число сегментов уменьшается для квази-линейных участков. См. также @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}, @ref{tape}, @ref{meshnum}. @sref{Plot sample}
 @end deftypefn
 
 @anchor{radar}
@@ -2246,7 +2247,7 @@ Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command
 @deftypefnx {Функция С} @code{void} mgl_tens_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
 @deftypefnx {Функция С} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}pen, @code{const char *}opt)
 @end ifclear
-Функции рисуют ломанную линию по точкам с цветом, определяемым массивом @var{c} (типа графика натяжений). Строка @var{pen} задает цветовую схему (см. @ref{Color scheme}) и стиль линий и/или маркеров (см. @ref{Line styles}). Если @var{pen} содержит @samp{a}, то рисуются и сегменты между точками вне диапазона осей координат. См. также @ref{plot}, @ref{mesh}, @ref{fall}, @ref{meshnum}. @sref{Tens sample}
+Функции рисуют ломанную линию по точкам с цветом, определяемым массивом @var{c} (типа графика натяжений). Строка @var{pen} задает цветовую схему (см. @ref{Color scheme}) и стиль линий и/или маркеров (см. @ref{Line styles}). Если @var{pen} содержит @samp{a}, то рисуются и сегменты между точками вне диапазона осей координат. Если @var{pen} содержит @samp{~}, то число сегментов уменьшается для квази-линейных участков. См. также @ref{plot}, @ref{mesh}, @ref{fall}, @ref{meshnum}. @sref{Tens sample}
 @end deftypefn
 
 @anchor{tape}
@@ -2714,7 +2715,7 @@ Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command
 @deftypefnx {Функция С} @code{void} mgl_belt (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @deftypefnx {Функция С} @code{void} mgl_belt_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
 @end ifclear
-Рисует ленточки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График может использоваться как 3d обобщение графика @ref{plot}. Если @var{sch} содержит @samp{x}, то ленточки рисуются вдоль оси x, иначе (по умолчанию) вдоль оси y. См. также @ref{fall}, @ref{surf}, @ref{plot}, @ref{meshnum}. @sref{Belt sample}
+Рисует ленточки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График может использоваться как 3d обобщение графика @ref{plot}. Если @var{sch} содержит @samp{x}, то ленточки рисуются вдоль оси x, иначе (по умолчанию) вдоль оси y. См. также @ref{fall}, @ref{surf}, @ref{beltc}, @ref{plot}, @ref{meshnum}. @sref{Belt sample}
 @end deftypefn
 
 @anchor{boxs}
@@ -3060,9 +3061,23 @@ Draw bitmap (logo) along whole axis range, which can be changed by @ref{Command
 @deftypefnx {Функция С} @code{void} mgl_surfc (@code{HMGL} gr, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt)
 @deftypefnx {Функция С} @code{void} mgl_surfc_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{HCDT} c, @code{const char *}sch, @code{const char *}opt)
 @end ifclear
-Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. Размерность массивов @var{z} и @var{c} должна быть одинакова. График строится для каждого z среза данных. См. также @ref{surf}, @ref{surfa}, @ref{surf3c}. @sref{SurfC sample}
+Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Если @var{sch} содержит @samp{.}, то рисуется поверхность из точек. Размерность массивов @var{z} и @var{c} должна быть одинакова. График строится для каждого z среза данных. См. также @ref{surf}, @ref{surfa}, @ref{beltc}, @ref{surf3c}. @sref{SurfC sample}
 @end deftypefn
 
+
+ at anchor{beltc}
+ at deftypefn {Команда MGL} {} beltc zdat cdat ['sch'='']
+ at deftypefnx {Команда MGL} {} beltc xdat ydat zdat cdat ['sch'='']
+ at ifclear UDAV
+ at deftypefnx {Метод класса @code{mglGraph}} @code{void} BeltC (@code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+ at deftypefnx {Метод класса @code{mglGraph}} @code{void} BeltC (@code{const mglDataA &}x, @code{const mglDataA &}y, @code{const mglDataA &}z, @code{const char *}sch=@code{""}, @code{const char *}opt=@code{""})
+ at deftypefnx {Функция С} @code{void} mgl_beltc (@code{HMGL} gr, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+ at deftypefnx {Функция С} @code{void} mgl_beltc_xy (@code{HMGL} gr, @code{HCDT} x, @code{HCDT} y, @code{HCDT} z, @code{const char *}sch, @code{const char *}opt)
+ at end ifclear
+Рисует ленточки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. График может использоваться как 3d обобщение графика @ref{plot}. Если @var{sch} содержит @samp{x}, то ленточки рисуются вдоль оси x, иначе (по умолчанию) вдоль оси y. См. также @ref{belt}, @ref{surfc}, @ref{meshnum}. @c TODO @sref{Belt sample}
+ at end deftypefn
+
+
 @anchor{surf3c}
 @deftypefn {Команда MGL} {} surf3c adat cdat @code{val} ['sch'='']
 @deftypefnx {Команда MGL} {} surf3c xdat ydat zdat adat cdat @code{val} ['sch'='']
diff --git a/texinfo/symbols_en.texi b/texinfo/symbols_en.texi
index c0f4a2c..f2c279e 100644
--- a/texinfo/symbols_en.texi
+++ b/texinfo/symbols_en.texi
@@ -122,6 +122,8 @@ stop color scheme parsing (see @ref{Color scheme});
 
 range operation in @ref{MGL scripts};
 
+style for @ref{axis};
+
 separator of commands in @ref{MGL scripts}.
 
 @item ;
@@ -257,6 +259,8 @@ disable drawing of tick labels for @ref{axis} and @ref{colorbar};
 
 disable first segment in @ref{lamerey};
 
+reduce number of segments in @ref{plot} and @ref{tens};
+
 one of mask for face filling (see @ref{Color scheme}).
 
 @item 0,1,2,3,4,5,6,7,8,9
diff --git a/texinfo/symbols_ru.texi b/texinfo/symbols_ru.texi
index c0f4a2c..f2c279e 100644
--- a/texinfo/symbols_ru.texi
+++ b/texinfo/symbols_ru.texi
@@ -122,6 +122,8 @@ stop color scheme parsing (see @ref{Color scheme});
 
 range operation in @ref{MGL scripts};
 
+style for @ref{axis};
+
 separator of commands in @ref{MGL scripts}.
 
 @item ;
@@ -257,6 +259,8 @@ disable drawing of tick labels for @ref{axis} and @ref{colorbar};
 
 disable first segment in @ref{lamerey};
 
+reduce number of segments in @ref{plot} and @ref{tens};
+
 one of mask for face filling (see @ref{Color scheme}).
 
 @item 0,1,2,3,4,5,6,7,8,9
diff --git a/texinfo/version_hist.txt b/texinfo/version_hist.txt
index 5a71907..b0c144e 100644
--- a/texinfo/version_hist.txt
+++ b/texinfo/version_hist.txt
@@ -1,3 +1,5 @@
+2.4.1 Released 20 July 2017
+2.4 Released 17 May 2017
 2.3.5.1 Released 30 May 2015
 2.3.5 Released 16 May 2015
 2.3.4 Released 11 February 2015
diff --git a/texinfo/web_en.texi b/texinfo/web_en.texi
index 7b5330c..dfea373 100644
--- a/texinfo/web_en.texi
+++ b/texinfo/web_en.texi
@@ -53,6 +53,8 @@ Generally, MathGL is GPL library. However, you can use LGPL license for MathGL c
 @strong{Latest news}
 @itemize
 
+ at item @strong{20 July 2017.}
+New version (v.2.4.1) with bugfixes of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released.
 @item @emph{17 May 2017.}
 New version (v.2.4) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are @code{mgllab} executable, string manipulation in MGL, new functions, plot types and styles, translation to Russian using @code{gettext} and bugfixes, which denoted @ref{News, here}.
 @end itemize
@@ -74,6 +76,17 @@ Javascript interface was developed with support of @url{http://www.datadvance.ne
 
 @itemize
 
+ at item @strong{20 July 2017.}
+New version (v.2.4.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released.
+ at itemize @bullet
+
+ at item Add @ref{beltc} plot, which is @ref{belt} with manual coloring.
+ at item Add style @samp{~} for @ref{plot} and @ref{tens} to omit some points at output.
+ at item Add style @samp{:} for @ref{axis} to draw lines through point (0,0,0).
+ at item Bugfixes.
+
+ at end itemize
+
 @item @strong{17 May 2017.}
 New version (v.2.4) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are @code{mgllab} executable, string manipulation in MGL, new functions, plot types and styles, translation to Russian using @code{gettext} and bugfixes:
 @itemize @bullet
@@ -338,7 +351,7 @@ You may download current version of MathGL for following configurations:
 @item
 @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}-mingw.win64.7z,GPL} or @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.LGPL-mingw.win64.7z,LGPL} binaries for MinGW, 64-bit build.
 @item
-MathGL utilities with all required DLL files for @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win32.7z,32-bit} and @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win32.7z,64-bit} versions of MS Windows.
+MathGL utilities with all required DLL files for @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win32.7z,32-bit} and @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win64.7z,64-bit} versions of MS Windows.
 @item
 @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.eng.pdf,PDF} documentation in English.
 @item
diff --git a/texinfo/web_ru.texi b/texinfo/web_ru.texi
index 9d6fd6d..44b65bf 100644
--- a/texinfo/web_ru.texi
+++ b/texinfo/web_ru.texi
@@ -53,7 +53,9 @@ Generally, MathGL is GPL library. However, you can use LGPL license for MathGL c
 @strong{Latest news}
 @itemize
 
- at item @emph{16 May 2017.}
+ at item @strong{20 July 2017.}
+New version (v.2.4.1) with bugfixes of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released.
+ at item @emph{17 May 2017.}
 New version (v.2.4) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are @code{mgllab} executable, string manipulation in MGL, new functions, plot types and styles, translation to Russian using @code{gettext} and bugfixes, which denoted @ref{News, here}.
 @end itemize
 
@@ -74,7 +76,19 @@ Javascript interface was developed with support of @url{http://www.datadvance.ne
 
 @itemize
 
- at item @strong{16 May 2017.}
+
+ at item @strong{20 July 2017.}
+New version (v.2.4.1) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released.
+ at itemize @bullet
+
+ at item Add @ref{beltc} plot, which is @ref{belt} with manual coloring.
+ at item Add style @samp{~} for @ref{plot} and @ref{tens} to omit some points at output.
+ at item Add style @samp{:} for @ref{axis} to draw lines through point (0,0,0).
+ at item Bugfixes.
+
+ at end itemize
+
+ at item @strong{17 May 2017.}
 New version (v.2.4) of @uref{http://sourceforge.net/projects/mathgl, MathGL} is released. There are @code{mgllab} executable, string manipulation in MGL, new functions, plot types and styles, translation to Russian using @code{gettext} and bugfixes:
 @itemize @bullet
 
@@ -338,7 +352,7 @@ You may download current version of MathGL for following configurations:
 @item
 @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}-mingw.win64.7z,GPL} or @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.LGPL-mingw.win64.7z,LGPL} binaries for MinGW, 64-bit build.
 @item
-MathGL utilities with all required DLL files for @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win32.7z,32-bit} and @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win32.7z,64-bit} versions of MS Windows.
+MathGL utilities with all required DLL files for @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win32.7z,32-bit} and @uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.win64.7z,64-bit} versions of MS Windows.
 @item
 @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.eng.pdf,PDF} documentation in English.
 @item
diff --git a/todo.txt b/todo.txt
index dada0d5..d62d7ef 100644
--- a/todo.txt
+++ b/todo.txt
@@ -39,6 +39,7 @@
 7. Add ##d comment(s) -- analogue of 'ask' but update figure after each change ???
 8. Add "mgl_zoomview(int x, int y)" for zoom circle around image point {x,y}
 9. Mask in EPS/SVG
+11. Add momentum dat vdat ... where vdat is corresponding coordinate ???
 
 ZZ. Update *.i for new functions {before release!!!}
 
diff --git a/translations/mathgl_es.mo b/translations/mathgl_es.mo
index 4d9d0ef..14482bf 100644
Binary files a/translations/mathgl_es.mo and b/translations/mathgl_es.mo differ
diff --git a/translations/mathgl_ru.mo b/translations/mathgl_ru.mo
index 55f510b..044b77d 100644
Binary files a/translations/mathgl_ru.mo and b/translations/mathgl_ru.mo differ
diff --git a/udav/CMakeLists.txt b/udav/CMakeLists.txt
index 3b4480b..29df769 100644
--- a/udav/CMakeLists.txt
+++ b/udav/CMakeLists.txt
@@ -19,10 +19,10 @@ if(WIN32)
 endif(WIN32)
 
 if(enable-qt5)
-	include(../cmake-qt5.txt)
+	include(../scripts/qt5.cmake)
 	qt5_add_resources(udav_rc_src ${udav_rc} )
 else(enable-qt5)
-	include(../cmake-qt4.txt)
+	include(../scripts/qt4.cmake)
 	qt4_add_resources(udav_rc_src ${udav_rc} )
 endif(enable-qt5)
 add_executable(udav ${udav_src} ${udav_moc_hdr} ${udav_rc_src})
diff --git a/udav/anim_dlg.cpp b/udav/anim_dlg.cpp
index eea9c78..bef8c5e 100644
--- a/udav/anim_dlg.cpp
+++ b/udav/anim_dlg.cpp
@@ -81,6 +81,7 @@ AnimParam::AnimParam(QWidget *parent) : QDialog(parent)
 //	fname = new QLineEdit(this);	a->addWidget(fname);
 	gif = new QCheckBox(_("Export to GIF"), this);		a->addWidget(gif);
 	jpg = new QCheckBox(_("Save JPEG frames"), this);	a->addWidget(jpg);
+	gifOn = jpgOn = false;
 }
 //-----------------------------------------------------------------------------
 AnimParam::~AnimParam()	{}
diff --git a/udav/args_dlg.cpp b/udav/args_dlg.cpp
index f00ae64..e465582 100644
--- a/udav/args_dlg.cpp
+++ b/udav/args_dlg.cpp
@@ -84,6 +84,6 @@ void ArgsDialog::putArguments()
 		str[j] = 0;
 		parser.AddParam(i, str);
 	}
-	accept();
+	delete []str;	accept();
 }
 //-----------------------------------------------------------------------------
diff --git a/udav/data_dlg.h b/udav/data_dlg.h
index 048da95..ffed088 100644
--- a/udav/data_dlg.h
+++ b/udav/data_dlg.h
@@ -45,8 +45,8 @@ private slots:
 	void userRes();
 private:
 	QString result;
-	QComboBox *name, *suffix, *oper, *dirs;
-	QLineEdit *res, *func;
+	QComboBox *name, *oper, *dirs;
+	QLineEdit *res;
 	QSpinBox  *x1, *y1, *z1, *x2, *y2, *z2;
 	QLabel *sizes;
 };
diff --git a/udav/files_dlg.cpp b/udav/files_dlg.cpp
index 7c6855b..8b82ae1 100644
--- a/udav/files_dlg.cpp
+++ b/udav/files_dlg.cpp
@@ -59,7 +59,7 @@ FilesDialog::FilesDialog(QWidget *parent) : QDialog(parent)
 	connect(b, SIGNAL(clicked()),this, SLOT(reject()));
 	b = new QPushButton(_("OK"), this);		h->addWidget(b);
 	connect(b, SIGNAL(clicked()),this, SLOT(putArguments()));
-	b->setDefault(true);
+	b->setDefault(true);	narg=0;
 }
 //-----------------------------------------------------------------------------
 FilesDialog::~FilesDialog()	{}
diff --git a/udav/style_dlg.h b/udav/style_dlg.h
index 348632c..99d318d 100644
--- a/udav/style_dlg.h
+++ b/udav/style_dlg.h
@@ -51,12 +51,12 @@ private:
 	QComboBox *cc[8], *cline, *cfont;
 	QSlider *nn[8], *nline;
 	QComboBox *axial, *ctext, *a1, *a2, *dash, *mark;
-	QCheckBox *swire, *upd;
+	QCheckBox *swire;
 	QCheckBox *ital, *bold, *wire, *uline, *oline;
 	QSpinBox *width;
 	QGroupBox *align;
 	QTabWidget *tab;
-	QLabel *box, *pic;
+	QLabel *pic;
 	QLineEdit *res;
 	QRadioButton *rbL, *rbC, *rbR;
 	uchar *grBuf;
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
index 72015b9..688e1b1 100644
--- a/utils/CMakeLists.txt
+++ b/utils/CMakeLists.txt
@@ -38,10 +38,10 @@ else(MGL_HAVE_FLTK)
 	if(QT_ENABLED)
 		add_executable(mglview mglview.cpp)
 		if(enable-qt5)
-			include(../cmake-qt5.txt)
+			include(../scripts/qt5.cmake)
 			target_link_libraries(mglview mgl-qt5${link_type} ${getopt_lib-static} ${MGL_QT5_LIBS})
 		else(enable-qt5)
-			include(../cmake-qt4.txt)
+			include(../scripts/qt4.cmake)
 			target_link_libraries(mglview mgl-qt4${link_type} ${getopt_lib-static} ${MGL_QT4_LIBS})
 		endif(enable-qt5)
 
diff --git a/utils/mglcgi.cpp b/utils/mglcgi.cpp
index 907c1d8..d602de0 100644
--- a/utils/mglcgi.cpp
+++ b/utils/mglcgi.cpp
@@ -67,7 +67,7 @@ int main(int argc, char **argv)
 	{
 		long len=atol(getenv("CONTENT_LENGTH"));
 		buf = new char[len+1];
-		if(!fread(buf,len,1,stdin))	len=0;
+		len = fread(buf,len,1,stdin);
 		buf[len]=0;	alloc=true;
 	}
 	else		buf = getenv("QUERY_STRING");
diff --git a/utils/mglconv.cpp b/utils/mglconv.cpp
index 4f4d869..e86e874 100644
--- a/utils/mglconv.cpp
+++ b/utils/mglconv.cpp
@@ -102,11 +102,11 @@ int main(int argc, char *argv[])
 				"\t-h           print this message\n") );
 			return 0;
 		}
-		else if(ch=='o')	strncpy(oname, optarg,256);
+		else if(ch=='o')	mgl_strncpy(oname, optarg,256);
 		else if(ch==-1 && optind<argc)
-		{	strncpy(iname, argv[optind][0]=='-'?"":argv[optind],256);	break;	}
+		{	mgl_strncpy(iname, argv[optind][0]=='-'?"":argv[optind],256);	break;	}
 	}
-	if(*oname==0)	{	strncpy(oname,*iname?iname:"out",250);	strcat(oname,".png");	}
+	if(*oname==0)	{	mgl_strncpy(oname,*iname?iname:"out",250);	strcat(oname,".png");	}
 	else	none = false;
 
 	mgl_ask_func = mgl_ask_gets;
diff --git a/utils/mglview.cpp b/utils/mglview.cpp
index 0faed5b..a13dd67 100644
--- a/utils/mglview.cpp
+++ b/utils/mglview.cpp
@@ -80,7 +80,7 @@ int main(int argc, char **argv)
 			return 0;
 		}
 		else if(ch==-1 && optind<argc)
-		{	strncpy(iname, argv[optind][0]=='-'?"":argv[optind],256);	break;	}
+		{	mgl_strncpy(iname, argv[optind][0]=='-'?"":argv[optind],256);	break;	}
 	}
 
 	bool mgld=(*iname && iname[strlen(iname)-1]=='d');
diff --git a/widgets/fltk.cpp b/widgets/fltk.cpp
index 03e0632..c176f25 100644
--- a/widgets/fltk.cpp
+++ b/widgets/fltk.cpp
@@ -104,6 +104,7 @@ Fl_MathGL::Fl_MathGL(int xx, int yy, int ww, int hh, const char *lbl) : Fl_Widge
 	tet_val = phi_val = 0;
 	draw_par = 0;	draw_func = 0;	draw_cl = 0;
 	last_id = -1;	run = false;
+	popup=0;	vpar=0;	wpar=0;	thr=0;
 }
 //-----------------------------------------------------------------------------
 Fl_MathGL::~Fl_MathGL()	{	if(mgl_use_graph(gr,-1)<1)	mgl_delete_graph(gr);	}
@@ -897,7 +898,7 @@ Fl_MGLView::Fl_MGLView(int xx, int yy, int ww, int hh, const char *lbl) : Fl_Win
 	FMGL->tet_val = tet;
 	FMGL->phi_val = phi;
 	FMGL->set_popup(pop_graph,FMGL,this);
-	scroll->end();	resizable(scroll);	end();
+	scroll->end();	resizable(scroll);	end();	par=0;
 }
 Fl_MGLView::~Fl_MGLView()	{}
 //-----------------------------------------------------------------------------
@@ -905,7 +906,7 @@ Fl_MGLView::~Fl_MGLView()	{}
 //		class mglCanvasFL
 //
 //-----------------------------------------------------------------------------
-mglCanvasFL::mglCanvasFL() : mglCanvasWnd()	{	Wnd=0;	}
+mglCanvasFL::mglCanvasFL() : mglCanvasWnd()	{	Wnd=0;	mgl=0;	}
 mglCanvasFL::~mglCanvasFL()		{	if(Wnd)	{	mgl->FMGL->gr=0;	delete Wnd;	}	}
 //-----------------------------------------------------------------------------
 void mglCanvasFL::GotoFrame(int d)
diff --git a/widgets/qt.cpp b/widgets/qt.cpp
index c4bd394..9c0f072 100644
--- a/widgets/qt.cpp
+++ b/widgets/qt.cpp
@@ -100,8 +100,8 @@ QMathGL::QMathGL(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f)
 	autoResize = false;	draw_par = 0;	draw_func = 0;
 	dotsRefr = true;
 	gr = new mglCanvas;	appName = "MathGL";
-	popup = 0;	grBuf = 0;	draw = 0;
-	phi = tet = per = 0;
+	popup = 0;	grBuf = 0;	draw = 0;	prevQuality=MGL_DRAW_NORM;
+	phi = tet = per = 0;	x0=y0=xe=ye=0;
 	x1 = y1 = ax1 = ay1 = 0;	x2 = y2 = ax2 = ay2 = 1;
 	alpha = light = zoom = rotate = grid = viewYZ = custZoom = custDraw = pause = false;
 	resize(600, 400);	mgl_set_flag(gr, true, MGL_CLF_ON_UPD);
diff --git a/widgets/qt4/CMakeLists.txt b/widgets/qt4/CMakeLists.txt
index 74f117c..5ed5868 100644
--- a/widgets/qt4/CMakeLists.txt
+++ b/widgets/qt4/CMakeLists.txt
@@ -1,7 +1,7 @@
 include(GenerateExportHeader)
 
 if(enable-qt4)
-	include(../../cmake-qt4.txt)
+	include(../../scripts/qt4.cmake)
 	set(MGL_QT4_FILES ../qt.cpp ../../include/mgl2/qt.h ../../include/mgl2/qmathgl.h)
 	mgl_add_lib(qt4 ${MGL_QT4_FILES})
 	target_link_libraries(mgl-qt4 mgl ${MGL_QT4_LIBS})
diff --git a/widgets/qt5/CMakeLists.txt b/widgets/qt5/CMakeLists.txt
index 70e1787..5c5bbd7 100644
--- a/widgets/qt5/CMakeLists.txt
+++ b/widgets/qt5/CMakeLists.txt
@@ -1,7 +1,7 @@
 include(GenerateExportHeader)
 
 if(enable-qt5)
-	include(../../cmake-qt5.txt)
+	include(../../scripts/qt5.cmake)
 	set(MGL_QT5_FILES ../qt.cpp ../../include/mgl2/qt.h ../../include/mgl2/qmathgl.h)
 	mgl_add_lib(qt5 ${MGL_QT5_FILES})
 	target_link_libraries(mgl-qt5 mgl ${MGL_QT5_LIBS})
diff --git a/widgets/wx.cpp b/widgets/wx.cpp
index 94a155e..2a3988e 100644
--- a/widgets/wx.cpp
+++ b/widgets/wx.cpp
@@ -89,8 +89,8 @@ END_EVENT_TABLE()
 wxMathGL::wxMathGL(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxWindow(parent,id,pos,size,style,name)
 {
 	AutoResize = false;	draw_par = 0;	draw_func = 0;
-	gr = new mglCanvas;	popup = 0;
-	phi = tet = per = 0;
+	gr = new mglCanvas;	popup = 0;		draw_cl = 0;
+	phi = tet = per = 0;	x0=y0=xe=ye=0;
 	x1 = y1 = 0;	x2 = y2 = 1;
 	alpha = light = zoom = rotate = false;
 //	SetSize(600, 400);
diff --git a/win32-install-deps/CMakeLists.txt b/win32-install-deps/CMakeLists.txt
deleted file mode 100644
index 2824d13..0000000
--- a/win32-install-deps/CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-if(enable-qt5)
-	find_package(Qt5Gui QUIET)
-	if(Qt5Gui_FOUND)
-		get_target_property(mgl_qt_loc Qt5::QWindowsIntegrationPlugin LOCATION)
-	endif(Qt5Gui_FOUND)
-endif(enable-qt5)
-
-install(CODE "SET(mgl_qt_loc \"${mgl_qt_loc}\")")
-install(CODE "SET(CMAKE_INSTALL_PREFIX \"${CMAKE_INSTALL_PREFIX}\")")
-install(SCRIPT install-deps.txt)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mathgl.git



More information about the debian-science-commits mailing list