[SCM] Packaging for mathgl branch, master, updated. debian/1.10.2.1-3-19-gb05aae0

Dimitrios Eftaxiopoulos eftaxi12 at otenet.gr
Sun Nov 14 08:28:19 UTC 2010


The following commit has been merged in the master branch:
commit 88d236612fa703168445699a19d84f743343845f
Author: Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>
Date:   Thu Nov 11 01:00:04 2010 +0200

    New upstream release 1.11

diff --git a/.pc/.quilt_patches b/.pc/.quilt_patches
new file mode 100644
index 0000000..6857a8d
--- /dev/null
+++ b/.pc/.quilt_patches
@@ -0,0 +1 @@
+debian/patches
diff --git a/.pc/.quilt_series b/.pc/.quilt_series
new file mode 100644
index 0000000..c206706
--- /dev/null
+++ b/.pc/.quilt_series
@@ -0,0 +1 @@
+series
diff --git a/debinstall/pycompat b/.pc/.version
similarity index 100%
copy from debinstall/pycompat
copy to .pc/.version
diff --git a/.pc/applied-patches b/.pc/applied-patches
new file mode 100644
index 0000000..ea22712
--- /dev/null
+++ b/.pc/applied-patches
@@ -0,0 +1 @@
+debian-changes-1.11-1
diff --git a/Makefile.in b/.pc/debian-changes-1.11-1/Makefile.in
similarity index 97%
copy from Makefile.in
copy to .pc/debian-changes-1.11-1/Makefile.in
index 5700690..9aec9a4 100644
--- a/Makefile.in
+++ b/.pc/debian-changes-1.11-1/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -149,6 +149,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -169,6 +171,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -353,7 +356,7 @@ distclean-libtool:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -378,7 +381,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -542,7 +545,8 @@ distdir: $(DISTFILES)
 	  fi; \
 	done
 	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
 	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
@@ -586,17 +590,17 @@ dist dist-all: distdir
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
-	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
-	  unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
diff --git a/aclocal.m4 b/.pc/debian-changes-1.11-1/aclocal.m4
similarity index 99%
copy from aclocal.m4
copy to .pc/debian-changes-1.11-1/aclocal.m4
index 553dd58..846920e 100644
--- a/aclocal.m4
+++ b/.pc/debian-changes-1.11-1/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.11 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 # 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],,
-[m4_warning([this file was generated for autoconf 2.64.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
+[m4_warning([this file was generated for autoconf 2.67.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
@@ -2460,7 +2460,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -3099,7 +3099,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -3720,7 +3720,7 @@ m4_if([$1], [CXX], [
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -4004,7 +4004,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -4300,6 +4300,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -4391,7 +4392,7 @@ _LT_EOF
       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -5871,7 +5872,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -7878,15 +7879,15 @@ m4_define([lt_dict_filter],
 
 # Generated from ltversion.in.
 
-# serial 3012 ltversion.m4
+# serial 3017 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.2.6])
-m4_define([LT_PACKAGE_REVISION], [1.3012])
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6'
-macro_revision='1.3012'
+[macro_version='2.2.6b'
+macro_revision='1.3017'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
@@ -7999,7 +8000,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11], [],
+m4_if([$1], [1.11.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -8015,7 +8016,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11])dnl
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@@ -8831,6 +8832,14 @@ python2.1 python2.0])
        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
        am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
        ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
      esac
     ])
   AC_SUBST([pythondir], [$am_cv_python_pythondir])
@@ -8861,6 +8870,14 @@ python2.1 python2.0])
        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
        am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
        ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
      esac
     ])
   AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
diff --git a/texinfo/mathgl.texi b/.pc/debian-changes-1.11-1/config.log
similarity index 100%
rename from texinfo/mathgl.texi
rename to .pc/debian-changes-1.11-1/config.log
diff --git a/configure b/.pc/debian-changes-1.11-1/configure
similarity index 96%
copy from configure
copy to .pc/debian-changes-1.11-1/configure
index 4016c53..8245fcd 100755
--- a/configure
+++ b/.pc/debian-changes-1.11-1/configure
@@ -1,13 +1,15 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64 for mathgl 1.10.
+# Generated by GNU Autoconf 2.67 for mathgl 1.10.
 #
 # Report bugs to <mathgl.abalakin at gmail.com>.
 #
+#
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
 # Foundation, Inc.
 #
+#
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
 ## -------------------- ##
@@ -317,7 +319,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -357,19 +359,19 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -736,10 +738,11 @@ as_awk_strverscmp='
   }
 '
 
-exec 7<&0 </dev/null 6>&1
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -862,6 +865,10 @@ USE_GIF_FALSE
 USE_GIF_TRUE
 GIF_LIBS
 GIF_FLAGS
+USE_HDF4_FALSE
+USE_HDF4_TRUE
+HDF4_LIBS
+HDF4_FLAGS
 USE_HDF5_FALSE
 USE_HDF5_TRUE
 HDF5_LIBS
@@ -958,6 +965,7 @@ INSTALL_PROGRAM
 MGL_AGE
 MGL_REVISION
 MGL_CURRENT
+MGL_RELEASE
 target_alias
 host_alias
 build_alias
@@ -1014,6 +1022,7 @@ enable_gsl
 enable_glut
 enable_hdf5
 enable_hdf5_18
+enable_hdf4
 enable_gif
 enable_jpeg
 enable_fltk
@@ -1101,8 +1110,9 @@ do
   fi
 
   case $ac_option in
-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)	ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1147,7 +1157,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1173,7 +1183,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1377,7 +1387,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1393,7 +1403,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1423,8 +1433,8 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1432,7 +1442,7 @@ Try \`$0 --help' for more information."
     # Reject names that are not valid shell variable names.
     case $ac_envvar in #(
       '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1450,13 +1460,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  as_fn_error $? "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1479,7 +1489,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1493,8 +1503,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1509,9 +1519,9 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error "working directory cannot be determined"
+  as_fn_error $? "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error "pwd does not report name of working directory"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1550,11 +1560,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1594,7 +1604,7 @@ Configuration:
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
+  -q, --quiet, --silent   do not print \`checking ...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
@@ -1673,6 +1683,7 @@ Optional Features:
   --enable-glut    Turn on glut
   --enable-hdf5    Turn on hdf5
   --enable-hdf5_18    Turn on hdf5 version 1.8
+  --enable-hdf4    Turn on hdf4
   --enable-gif    Turn on gif
   --enable-jpeg    Turn on jpeg
   --enable-fltk    Turn on fltk
@@ -1697,7 +1708,7 @@ Some influential environment variables:
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
@@ -1772,9 +1783,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 mathgl configure 1.10
-generated by GNU Autoconf 2.64
+generated by GNU Autoconf 2.67
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1819,7 +1830,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 	ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
 
@@ -1857,7 +1868,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 	ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_compile
 
@@ -1903,7 +1914,7 @@ fi
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
 
@@ -1916,7 +1927,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1959,7 +1970,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -1971,7 +1982,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
 
@@ -2013,7 +2024,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
 
@@ -2025,7 +2036,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2105,7 +2116,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -2117,7 +2128,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_cpp
 
@@ -2163,7 +2174,7 @@ fi
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_link
 
@@ -2175,10 +2186,10 @@ fi
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  if eval "test \"\${$3+set}\"" = set; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2214,7 +2225,7 @@ if ac_fn_c_try_cpp "$LINENO"; then :
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
 $as_echo "$ac_header_preproc" >&6; }
 
@@ -2237,17 +2248,15 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( cat <<\_ASBOX
-## ---------------------------------------- ##
+( $as_echo "## ---------------------------------------- ##
 ## Report this to mathgl.abalakin at gmail.com ##
-## ---------------------------------------- ##
-_ASBOX
+## ---------------------------------------- ##"
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2264,7 +2273,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mathgl $as_me 1.10, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.67.  Invocation command line was
 
   $ $0 $@
 
@@ -2374,11 +2383,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2412,11 +2419,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2429,11 +2434,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2447,11 +2450,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2506,7 +2507,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -2517,18 +2523,22 @@ fi
 for ac_site_file in "$ac_site_file1" "$ac_site_file2"
 do
   test "x$ac_site_file" = xNONE && continue
-  if test -r "$ac_site_file"; then
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
   fi
 done
 
 if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
 $as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
@@ -2597,7 +2607,7 @@ if $ac_cache_corrupted; then
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2611,19 +2621,28 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+MGL_RELEASE=1.10
+
+
 
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2759,11 +2778,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2785,7 +2804,7 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" "$LINENO" 5
    fi
 
@@ -2795,7 +2814,7 @@ then
    # Ok.
    :
 else
-   as_fn_error "newly created file is older than distributed files!
+   as_fn_error $? "newly created file is older than distributed files!
 Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -2967,6 +2986,7 @@ IFS=$as_save_IFS
 
 fi
 
+  test -d ./--version && rmdir ./--version
   if test "${ac_cv_path_mkdir+set}" = set; then
     MKDIR_P="$ac_cv_path_mkdir -p"
   else
@@ -2974,7 +2994,6 @@ fi
     # value for MKDIR_P within a source directory, because that will
     # break other packages using the cache if that directory is
     # removed, or if the value is a relative name.
-    test -d ./--version && rmdir ./--version
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
@@ -3033,7 +3052,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -3041,7 +3060,7 @@ SHELL = /bin/sh
 all:
 	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -3075,7 +3094,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
   fi
 fi
 
@@ -3432,8 +3451,8 @@ fi
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3454,32 +3473,30 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
 
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdio.h>
+
 int
 main ()
 {
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
 
   ;
   return 0;
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
@@ -3541,62 +3558,28 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
 if test -z "$ac_file"; then :
-  $as_echo "$as_me: failed program was:" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
 
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
 $as_echo_n "checking for suffix of executables... " >&6; }
 if { { ac_try="$ac_link"
@@ -3626,16 +3609,75 @@ done
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
-rm -f conftest$ac_cv_exeext
+rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
 $as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
 if test "${ac_cv_objext+set}" = set; then :
@@ -3678,8 +3720,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -4218,8 +4260,8 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
@@ -4476,7 +4518,7 @@ fi
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
@@ -4487,16 +4529,16 @@ else
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -4521,7 +4563,7 @@ else
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -4529,7 +4571,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -4860,8 +4902,8 @@ esac
 
 
 
-macro_version='2.2.6'
-macro_revision='1.3012'
+macro_version='2.2.6b'
+macro_revision='1.3017'
 
 
 
@@ -4934,7 +4976,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
@@ -5010,7 +5052,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_GREP=$GREP
@@ -5076,7 +5118,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -5143,7 +5185,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -5259,7 +5301,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -5461,13 +5503,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5464: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5506: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5467: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5509: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5470: output\"" >&5)
+  (eval echo "\"\$as_me:5512: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -5930,7 +5972,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -6670,7 +6712,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6673 "configure"' > conftest.$ac_ext
+  echo '#line 6715 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7459,7 +7501,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -7475,11 +7517,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -7518,7 +7560,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -7534,18 +7576,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
 
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
 
 ac_ext=c
@@ -7674,8 +7716,7 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -7830,8 +7871,8 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
@@ -8125,7 +8166,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -8141,11 +8182,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -8184,7 +8225,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -8200,11 +8241,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
 
 else
@@ -8719,11 +8760,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8722: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8763: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8726: \$? = $ac_status" >&5
+   echo "$as_me:8767: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8888,7 +8929,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -9058,11 +9099,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9061: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9102: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9065: \$? = $ac_status" >&5
+   echo "$as_me:9106: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -9163,11 +9204,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9166: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9207: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9170: \$? = $ac_status" >&5
+   echo "$as_me:9211: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9218,11 +9259,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9221: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9262: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9225: \$? = $ac_status" >&5
+   echo "$as_me:9266: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9361,6 +9402,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -9452,7 +9494,7 @@ _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -10914,7 +10956,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -11601,7 +11643,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11604 "configure"
+#line 11646 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11697,7 +11739,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11700 "configure"
+#line 11742 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12112,7 +12154,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -12637,7 +12679,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         inherit_rpath_CXX=yes
         ;;
 
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -13465,7 +13507,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -13653,11 +13695,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13656: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13698: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13660: \$? = $ac_status" >&5
+   echo "$as_me:13702: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13752,11 +13794,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13755: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13797: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13759: \$? = $ac_status" >&5
+   echo "$as_me:13801: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -13804,11 +13846,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13807: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13849: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13811: \$? = $ac_status" >&5
+   echo "$as_me:13853: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -14382,7 +14424,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -14777,7 +14819,7 @@ if test "${enable_double+set}" = set; then :
   enableval=$enable_double; case "${enableval}" in
   yes) double=true ;;
   no)  double=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-double" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-double" "$LINENO" 5  ;;
 esac
 else
   double=false
@@ -14799,7 +14841,7 @@ if test "${enable_all+set}" = set; then :
   enableval=$enable_all; case "${enableval}" in
   yes) all=true ;;
   no)  all=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-all" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-all" "$LINENO" 5  ;;
 esac
 else
   all=false
@@ -14811,7 +14853,7 @@ if test "${enable_langall+set}" = set; then :
   enableval=$enable_langall; case "${enableval}" in
   yes) langall=true ;;
   no)  langall=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-langall" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-langall" "$LINENO" 5  ;;
 esac
 else
   langall=false
@@ -14823,7 +14865,7 @@ if test "${enable_pthread+set}" = set; then :
   enableval=$enable_pthread; case "${enableval}" in
   yes) pthread=true ;;
   no)  pthread=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-pthread" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-pthread" "$LINENO" 5  ;;
 esac
 else
   pthread=true
@@ -14888,7 +14930,7 @@ if test "${enable_gsl+set}" = set; then :
   enableval=$enable_gsl; case "${enableval}" in
   yes) gsl=true ;;
   no)  gsl=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-gsl" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-gsl" "$LINENO" 5  ;;
 esac
 else
   gsl=true
@@ -14996,7 +15038,7 @@ if test "${enable_glut+set}" = set; then :
   enableval=$enable_glut; case "${enableval}" in
   yes) glut=true ;;
   no)  glut=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-glut" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-glut" "$LINENO" 5  ;;
 esac
 else
   glut=false
@@ -15026,7 +15068,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5
 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15055,8 +15097,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   GL_LIBS=-l${GL_LIBS}
 else
   echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit
@@ -15074,7 +15115,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5
 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15103,8 +15144,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS}
 else
   (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit
@@ -15125,7 +15165,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5
 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15154,8 +15194,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   GL_LIBS=-l${GL_LIBS}
 else
   echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit
@@ -15173,7 +15212,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5
 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15202,8 +15241,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS}
 else
   (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit
@@ -15235,7 +15273,7 @@ if test "${enable_hdf5+set}" = set; then :
   enableval=$enable_hdf5; case "${enableval}" in
   yes) hdf5=true ;;
   no)  hdf5=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-hdf5" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf5" "$LINENO" 5  ;;
 esac
 else
   hdf5=false
@@ -15246,7 +15284,7 @@ if test "${enable_hdf5_18+set}" = set; then :
   enableval=$enable_hdf5_18; case "${enableval}" in
   yes) hdf5_18=true ;;
   no)  hdf5_18=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5  ;;
 esac
 else
   hdf5_18=false
@@ -15310,12 +15348,78 @@ else
 fi
 
 
+
+# Check whether --enable-hdf4 was given.
+if test "${enable_hdf4+set}" = set; then :
+  enableval=$enable_hdf4; case "${enableval}" in
+  yes) hdf4=true ;;
+  no)  hdf4=false ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf4" "$LINENO" 5  ;;
+esac
+else
+  hdf4=false
+fi
+
+ac_fn_c_check_header_mongrel "$LINENO" "hdf/mfhdf.h" "ac_cv_header_hdf_mfhdf_h" "$ac_includes_default"
+if test "x$ac_cv_header_hdf_mfhdf_h" = x""yes; then :
+  (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4
+else
+  (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldf" >&5
+$as_echo_n "checking for main in -ldf... " >&6; }
+if test "${ac_cv_lib_df_main+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldf  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_df_main=yes
+else
+  ac_cv_lib_df_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_df_main" >&5
+$as_echo "$ac_cv_lib_df_main" >&6; }
+if test "x$ac_cv_lib_df_main" = x""yes; then :
+  (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf"
+else
+  (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit
+fi
+
+ if (test x$all = xtrue || test x$hdf4 = xtrue); then
+  USE_HDF4_TRUE=
+  USE_HDF4_FALSE='#'
+else
+  USE_HDF4_TRUE='#'
+  USE_HDF4_FALSE=
+fi
+
+
 # Check whether --enable-gif was given.
 if test "${enable_gif+set}" = set; then :
   enableval=$enable_gif; case "${enableval}" in
   yes) gif=true ;;
   no)  gif=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-gif" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-gif" "$LINENO" 5  ;;
 esac
 else
   gif=false
@@ -15426,7 +15530,7 @@ if test "${enable_jpeg+set}" = set; then :
   enableval=$enable_jpeg; case "${enableval}" in
   yes) jpeg=true ;;
   no)  jpeg=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-jpeg" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-jpeg" "$LINENO" 5  ;;
 esac
 else
   jpeg=false
@@ -15491,7 +15595,7 @@ if test "${enable_fltk+set}" = set; then :
   enableval=$enable_fltk; case "${enableval}" in
   yes) fltk=true ;;
   no)  fltk=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-fltk" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-fltk" "$LINENO" 5  ;;
 esac
 else
   fltk=false
@@ -15595,7 +15699,7 @@ if test "${enable_wx+set}" = set; then :
   enableval=$enable_wx; case "${enableval}" in
   yes) wx=true ;;
   no)  wx=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-wx" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-wx" "$LINENO" 5  ;;
 esac
 else
   wx=false
@@ -15700,7 +15804,7 @@ if test "${enable_qt+set}" = set; then :
   enableval=$enable_qt; case "${enableval}" in
   yes) qt=true ;;
   no)  qt=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-qt" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-qt" "$LINENO" 5  ;;
 esac
 else
   qt=false
@@ -15826,7 +15930,7 @@ done
 test -n "$QMAKE" || QMAKE="missing"
 
     if test x"$QMAKE" = xmissing; then
-      as_fn_error "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5
     fi
   fi
 
@@ -15927,7 +16031,7 @@ done
 test -n "$MOC" || MOC="missing"
 
     if test x"$MOC" = xmissing; then
-      as_fn_error "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
     fi
   fi
 
@@ -16028,7 +16132,7 @@ done
 test -n "$UIC" || UIC="missing"
 
     if test x"$UIC" = xmissing; then
-      as_fn_error "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
     fi
   fi
 
@@ -16139,7 +16243,7 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.
     QT_PATH=`dirname "$QMAKE"`
   fi
   if test x"$QT_PATH" = x; then
-    as_fn_error "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5
+    as_fn_error $? "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5
   fi
 
 
@@ -16173,7 +16277,7 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.
   then
     :
   else
-    as_fn_error "Cannot cd to or write in $my_tmpdir" "$LINENO" 5
+    as_fn_error $? "Cannot cd to or write in $my_tmpdir" "$LINENO" 5
   fi
   cat >conftest.h <<_ASEOF
 #include <QObject>
@@ -16212,14 +16316,14 @@ int main()
 }
 _ASEOF
   if $QMAKE -project; then :; else
-    as_fn_error "Calling $QMAKE -project failed." "$LINENO" 5
+    as_fn_error $? "Calling $QMAKE -project failed." "$LINENO" 5
   fi
 
   # Find the .pro file generated by qmake.
   pro_file='conftest.dir.pro'
   test -f $pro_file || pro_file=`echo *.pro`
   if test -f "$pro_file"; then :; else
-    as_fn_error "Can't find the .pro file generated by Qmake." "$LINENO" 5
+    as_fn_error $? "Can't find the .pro file generated by Qmake." "$LINENO" 5
   fi
 
 
@@ -16232,7 +16336,7 @@ _ASEOF
   sed 's/^/| /' "$pro_file" >&5
 
   if $QMAKE; then :; else
-    as_fn_error "Calling $QMAKE failed." "$LINENO" 5
+    as_fn_error $? "Calling $QMAKE failed." "$LINENO" 5
   fi
   # Try to compile a simple Qt app.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt app" >&5
@@ -16298,7 +16402,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5
 $as_echo "$at_cv_qt_build" >&6; }
   if test x"$at_cv_qt_build" = xko; then
-    as_fn_error "Cannot build a test Qt program" "$LINENO" 5
+    as_fn_error $? "Cannot build a test Qt program" "$LINENO" 5
   fi
   QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^^0-9*//'`
 
@@ -16324,7 +16428,7 @@ $as_echo "$at_cv_qt_build" >&6; }
   fi
   if test -f $at_mfile; then :; else
     cd "$my_configure_pwd"
-    as_fn_error "Cannot find the Makefile generated by qmake." "$LINENO" 5
+    as_fn_error $? "Cannot find the Makefile generated by qmake." "$LINENO" 5
   fi
 
   # Find the DEFINES of Qt (should have been named CPPFLAGS).
@@ -16434,7 +16538,7 @@ $as_echo "$at_cv_env_QT_LIBS" >&6; }
 
 
   if test x"$QMAKE" = x; then
-    as_fn_error "\$QMAKE is empty. \
+    as_fn_error $? "\$QMAKE is empty. \
 Did you invoke AT_WITH_QT before AT_REQUIRE_QT_VERSION?" "$LINENO" 5
   fi
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt's version" >&5
@@ -16450,7 +16554,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_QT_VERSION" >&5
 $as_echo "$at_cv_QT_VERSION" >&6; }
   if test x"$at_cv_QT_VERSION" = x; then
-    as_fn_error "Cannot detect Qt's version." "$LINENO" 5
+    as_fn_error $? "Cannot detect Qt's version." "$LINENO" 5
   fi
   QT_VERSION=$at_cv_QT_VERSION
 
@@ -16459,7 +16563,7 @@ as_arg_v2=4.3
 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null
 case $? in #(
   1) :
-    as_fn_error "This package requires Qt 4.3 or above." "$LINENO" 5 ;; #(
+    as_fn_error $? "This package requires Qt 4.3 or above." "$LINENO" 5  ;; #(
   0) :
      ;; #(
   2) :
@@ -16484,7 +16588,7 @@ if test "${enable_python+set}" = set; then :
   enableval=$enable_python; case "${enableval}" in
   yes) python=true ;;
   no)  python=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-python" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5  ;;
 esac
 else
   python=false
@@ -16624,7 +16728,7 @@ test -n "$PYTHON" || PYTHON=":"
 
 
   if test "$PYTHON" = :; then
-      as_fn_error "no suitable Python interpreter found" "$LINENO" 5
+      as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5
   else
 
 
@@ -16679,6 +16783,14 @@ else
        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
        am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
        ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
      esac
 
 fi
@@ -16709,6 +16821,14 @@ else
        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
        am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
        ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
      esac
 
 fi
@@ -16744,7 +16864,7 @@ if test "${enable_octave+set}" = set; then :
   enableval=$enable_octave; case "${enableval}" in
   yes) octave=true ;;
   no)  octave=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-octave" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-octave" "$LINENO" 5  ;;
 esac
 else
   octave=false
@@ -16815,7 +16935,7 @@ if test "${enable_testio+set}" = set; then :
   enableval=$enable_testio; case "${enableval}" in
   yes) testio=true ;;
   no)  testio=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-testio" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-testio" "$LINENO" 5  ;;
 esac
 else
   testio=false
@@ -16835,7 +16955,7 @@ if test "${enable_docs+set}" = set; then :
   enableval=$enable_docs; case "${enableval}" in
   yes) docs=true ;;
   no)  docs=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-docs" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-docs" "$LINENO" 5  ;;
 esac
 else
   docs=false
@@ -16942,6 +17062,7 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
+U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
@@ -16965,71 +17086,75 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_PTHREAD_TRUE}" && test -z "${USE_PTHREAD_FALSE}"; then
-  as_fn_error "conditional \"USE_PTHREAD\" was never defined.
+  as_fn_error $? "conditional \"USE_PTHREAD\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_GSL_TRUE}" && test -z "${USE_GSL_FALSE}"; then
-  as_fn_error "conditional \"USE_GSL\" was never defined.
+  as_fn_error $? "conditional \"USE_GSL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_GLUT_TRUE}" && test -z "${USE_GLUT_FALSE}"; then
-  as_fn_error "conditional \"USE_GLUT\" was never defined.
+  as_fn_error $? "conditional \"USE_GLUT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_HDF5_TRUE}" && test -z "${USE_HDF5_FALSE}"; then
-  as_fn_error "conditional \"USE_HDF5\" was never defined.
+  as_fn_error $? "conditional \"USE_HDF5\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_HDF4_TRUE}" && test -z "${USE_HDF4_FALSE}"; then
+  as_fn_error $? "conditional \"USE_HDF4\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_GIF_TRUE}" && test -z "${USE_GIF_FALSE}"; then
-  as_fn_error "conditional \"USE_GIF\" was never defined.
+  as_fn_error $? "conditional \"USE_GIF\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_JPEG_TRUE}" && test -z "${USE_JPEG_FALSE}"; then
-  as_fn_error "conditional \"USE_JPEG\" was never defined.
+  as_fn_error $? "conditional \"USE_JPEG\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_FLTK_TRUE}" && test -z "${USE_FLTK_FALSE}"; then
-  as_fn_error "conditional \"USE_FLTK\" was never defined.
+  as_fn_error $? "conditional \"USE_FLTK\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_WX_TRUE}" && test -z "${USE_WX_FALSE}"; then
-  as_fn_error "conditional \"USE_WX\" was never defined.
+  as_fn_error $? "conditional \"USE_WX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_QT_TRUE}" && test -z "${USE_QT_FALSE}"; then
-  as_fn_error "conditional \"USE_QT\" was never defined.
+  as_fn_error $? "conditional \"USE_QT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then
-  as_fn_error "conditional \"USE_PYTHON\" was never defined.
+  as_fn_error $? "conditional \"USE_PYTHON\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_OCTAVE_TRUE}" && test -z "${USE_OCTAVE_FALSE}"; then
-  as_fn_error "conditional \"USE_OCTAVE\" was never defined.
+  as_fn_error $? "conditional \"USE_OCTAVE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_TESTIO_TRUE}" && test -z "${USE_TESTIO_FALSE}"; then
-  as_fn_error "conditional \"USE_TESTIO\" was never defined.
+  as_fn_error $? "conditional \"USE_TESTIO\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_DOCS_TRUE}" && test -z "${USE_DOCS_FALSE}"; then
-  as_fn_error "conditional \"USE_DOCS\" was never defined.
+  as_fn_error $? "conditional \"USE_DOCS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
@@ -17179,19 +17304,19 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -17387,7 +17512,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -17441,7 +17566,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by mathgl $as_me 1.10, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.67.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -17481,6 +17606,7 @@ Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
   -q, --quiet, --silent
                    do not print progress messages
   -d, --debug      don't remove temporary files
@@ -17503,12 +17629,13 @@ Report bugs to <mathgl.abalakin at gmail.com>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mathgl config.status 1.10
-configured by $0, generated by GNU Autoconf 2.64,
-  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+configured by $0, generated by GNU Autoconf 2.67,
+  with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -17526,11 +17653,16 @@ ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
-  --*=*)
+  --*=?*)
     ac_option=`expr "X$1" : 'X\([^=]*\)='`
     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
   *)
     ac_option=$1
     ac_optarg=$2
@@ -17544,12 +17676,15 @@ do
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
     $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -17562,7 +17697,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -17571,7 +17706,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -17990,7 +18125,7 @@ do
     "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;;
     "widgets/Makefile") CONFIG_FILES="$CONFIG_FILES widgets/Makefile" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
   esac
 done
 
@@ -18028,7 +18163,7 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -18045,7 +18180,7 @@ if test "x$ac_cr" = x; then
 fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
@@ -18059,18 +18194,18 @@ _ACEOF
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   . ./conf$$subs.sh ||
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
 
   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
   if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -18092,7 +18227,7 @@ s/'"$ac_delim"'$//
 t delim
 :nl
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more1
 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
 p
@@ -18106,7 +18241,7 @@ s/.\{148\}//
 t nl
 :delim
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more2
 s/["\\]/\\&/g; s/^/"/; s/$/"/
 p
@@ -18159,20 +18294,28 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
 else
   cat
 fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[	 ]*\):*/\1/
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
 s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
 s/^[^=]*=[	 ]*$//
 }'
 fi
@@ -18200,7 +18343,7 @@ for ac_last_try in false false :; do
   if test -z "$ac_t"; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -18285,7 +18428,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -18298,7 +18441,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -18326,7 +18469,7 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -18353,7 +18496,7 @@ $as_echo "$as_me: creating $ac_file" >&6;}
 
     case $ac_tag in
     *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
     esac
     ;;
   esac
@@ -18490,22 +18633,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
+which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&2;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
   -) cat "$tmp/out" && rm -f "$tmp/out";;
   *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
   esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -18516,19 +18659,19 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
       $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
     } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
       mv "$tmp/config.h" "$ac_file" \
-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
 _am_arg="$ac_file"
@@ -19486,7 +19629,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -19507,7 +19650,7 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit $?
+  $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
diff --git a/examples/Makefile.in b/.pc/debian-changes-1.11-1/examples/Makefile.in
similarity index 98%
copy from examples/Makefile.in
copy to .pc/debian-changes-1.11-1/examples/Makefile.in
index 719f08a..0979b41 100644
--- a/examples/Makefile.in
+++ b/.pc/debian-changes-1.11-1/examples/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -90,7 +90,8 @@ am__mgl_fltk_example_SOURCES_DIST = wnd_samples.cpp fltk_example.cpp
 mgl_fltk_example_OBJECTS = $(am_mgl_fltk_example_OBJECTS)
 am__DEPENDENCIES_1 =
 @USE_FLTK_TRUE at mgl_fltk_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la \
+ at USE_FLTK_TRUE@	$(top_builddir)/mgl/libmgl.la
 mgl_fltk_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(mgl_fltk_example_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -100,7 +101,8 @@ am__mgl_glut_example_SOURCES_DIST = wnd_samples.cpp glut_example.cpp
 @USE_GLUT_TRUE@	glut_example.$(OBJEXT)
 mgl_glut_example_OBJECTS = $(am_mgl_glut_example_OBJECTS)
 @USE_GLUT_TRUE at mgl_glut_example_DEPENDENCIES =  \
- at USE_GLUT_TRUE@	$(top_builddir)/widgets/libmgl-glut.la
+ at USE_GLUT_TRUE@	$(top_builddir)/widgets/libmgl-glut.la \
+ at USE_GLUT_TRUE@	$(top_builddir)/mgl/libmgl.la
 am__mgl_qt_example_SOURCES_DIST = wnd_samples.cpp \
 	$(top_builddir)/include/mgl/mgl_qt.moc.cpp \
 	$(top_srcdir)/include/mgl/mgl_qt.h qt_example.cpp
@@ -110,7 +112,8 @@ am__mgl_qt_example_SOURCES_DIST = wnd_samples.cpp \
 @USE_QT_TRUE@	mgl_qt_example-qt_example.$(OBJEXT)
 mgl_qt_example_OBJECTS = $(am_mgl_qt_example_OBJECTS)
 @USE_QT_TRUE at mgl_qt_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- at USE_QT_TRUE@	$(top_builddir)/widgets/libmgl-qt.la
+ at USE_QT_TRUE@	$(top_builddir)/widgets/libmgl-qt.la \
+ at USE_QT_TRUE@	$(top_builddir)/mgl/libmgl.la
 mgl_qt_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(mgl_qt_example_CXXFLAGS) $(CXXFLAGS) \
@@ -121,7 +124,8 @@ am__mgl_wx_example_SOURCES_DIST = wnd_samples.cpp wx_example.cpp
 @USE_WX_TRUE@	mgl_wx_example-wx_example.$(OBJEXT)
 mgl_wx_example_OBJECTS = $(am_mgl_wx_example_OBJECTS)
 @USE_WX_TRUE at mgl_wx_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- at USE_WX_TRUE@	$(top_builddir)/widgets/libmgl-wx.la
+ at USE_WX_TRUE@	$(top_builddir)/widgets/libmgl-wx.la \
+ at USE_WX_TRUE@	$(top_builddir)/mgl/libmgl.la
 mgl_wx_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(mgl_wx_example_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -131,7 +135,8 @@ am__test_SOURCES_DIST = wnd_samples.cpp main.cpp
 @USE_FLTK_TRUE@	test-main.$(OBJEXT)
 test_OBJECTS = $(am_test_OBJECTS)
 @USE_FLTK_TRUE at test_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la \
+ at USE_FLTK_TRUE@	$(top_builddir)/mgl/libmgl.la
 test_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CXXLD) $(test_CXXFLAGS) $(CXXFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -210,6 +215,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -230,6 +237,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -342,14 +350,14 @@ top_srcdir = @top_srcdir@
 mgl_example_SOURCES = wnd_samples.cpp full_test.cpp
 mgl_example_LDADD = $(top_builddir)/mgl/libmgl.la
 @USE_FLTK_TRUE at mgl_fltk_example_SOURCES = wnd_samples.cpp fltk_example.cpp
- at USE_FLTK_TRUE@mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la
 @USE_FLTK_TRUE at mgl_fltk_example_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 @USE_FLTK_TRUE at test_SOURCES = wnd_samples.cpp main.cpp
- at USE_FLTK_TRUE@test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la
 @USE_FLTK_TRUE at test_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 @USE_GLUT_TRUE at mgl_glut_example_SOURCES = wnd_samples.cpp glut_example.cpp
- at USE_GLUT_TRUE@mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la
- at USE_WX_TRUE@mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la
+ at USE_GLUT_TRUE@mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la $(top_builddir)/mgl/libmgl.la
+ at USE_WX_TRUE@mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la $(top_builddir)/mgl/libmgl.la
 @USE_WX_TRUE at mgl_wx_example_CXXFLAGS = $(WX_FLAGS) $(AM_CXXFLAGS)
 @USE_WX_TRUE at mgl_wx_example_SOURCES = wnd_samples.cpp wx_example.cpp
 
@@ -361,7 +369,7 @@ mgl_example_LDADD = $(top_builddir)/mgl/libmgl.la
 @USE_QT_TRUE at DISTCLEANFILES = $(BUILT_SOURCES)
 @USE_QT_TRUE at ACLOCAL_AMFLAGS = -I $(top_srcdir)/config/
 @USE_QT_TRUE at mgl_qt_example_SOURCES = wnd_samples.cpp $(top_builddir)/include/mgl/mgl_qt.moc.cpp $(top_srcdir)/include/mgl/mgl_qt.h qt_example.cpp
- at USE_QT_TRUE@mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la
+ at USE_QT_TRUE@mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la $(top_builddir)/mgl/libmgl.la
 @USE_QT_TRUE at mgl_qt_example_LDFLAGS = $(QT_LDFLAGS)
 @USE_QT_TRUE at mgl_qt_example_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)
 @USE_QT_TRUE at mgl_qt_example_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
diff --git a/include/Makefile.in b/.pc/debian-changes-1.11-1/include/Makefile.in
similarity index 99%
copy from include/Makefile.in
copy to .pc/debian-changes-1.11-1/include/Makefile.in
index ca97f93..8c7d802 100644
--- a/include/Makefile.in
+++ b/.pc/debian-changes-1.11-1/include/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -122,6 +122,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -142,6 +144,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
diff --git a/lang/Makefile.in b/.pc/debian-changes-1.11-1/lang/Makefile.in
similarity index 99%
copy from lang/Makefile.in
copy to .pc/debian-changes-1.11-1/lang/Makefile.in
index 59616cc..af61832 100644
--- a/lang/Makefile.in
+++ b/.pc/debian-changes-1.11-1/lang/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -149,6 +149,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -169,6 +171,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
diff --git a/mgl/Makefile.in b/.pc/debian-changes-1.11-1/mgl/Makefile.in
similarity index 98%
copy from mgl/Makefile.in
copy to .pc/debian-changes-1.11-1/mgl/Makefile.in
index b5738df..899e46b 100644
--- a/mgl/Makefile.in
+++ b/.pc/debian-changes-1.11-1/mgl/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -40,9 +40,10 @@ host_triplet = @host@
 @USE_GLUT_TRUE at am__append_4 = -DWITH_GLUT
 @USE_PTHREAD_TRUE at am__append_5 = $(PTHREAD_LIBS)
 @USE_GSL_TRUE at am__append_6 = $(GSL_LIBS)
- at USE_HDF5_TRUE@am__append_7 = $(HDF5_LIBS)
- at USE_GIF_TRUE@am__append_8 = $(GIF_LIBS)
- at USE_JPEG_TRUE@am__append_9 = $(JPEG_LIBS)
+ at USE_HDF4_TRUE@am__append_7 = $(HDF4_LIBS)
+ at USE_HDF5_TRUE@am__append_8 = $(HDF5_LIBS)
+ at USE_GIF_TRUE@am__append_9 = $(GIF_LIBS)
+ at USE_JPEG_TRUE@am__append_10 = $(JPEG_LIBS)
 subdir = mgl
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -80,13 +81,14 @@ LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 @USE_PTHREAD_TRUE at am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 @USE_GSL_TRUE at am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
- at USE_HDF5_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
- at USE_GIF_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
- at USE_JPEG_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
+ at USE_HDF4_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+ at USE_HDF5_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
+ at USE_GIF_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
+ at USE_JPEG_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1)
 libmgl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
 	$(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) \
-	$(am__DEPENDENCIES_6)
+	$(am__DEPENDENCIES_6) $(am__DEPENDENCIES_7)
 am_libmgl_la_OBJECTS = libmgl_la-mgl_data_cf.lo libmgl_la-mgl_axis.lo \
 	libmgl_la-mgl_data_png.lo libmgl_la-mgl_zb2.lo \
 	libmgl_la-mgl_c.lo libmgl_la-mgl_eps.lo libmgl_la-mgl_font.lo \
@@ -167,6 +169,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -187,6 +191,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -301,10 +306,10 @@ WIDGETS = $(am__append_1) $(am__append_2) $(am__append_3) \
 	$(am__append_4)
 libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS) $(LOPENMP) $(am__append_5) \
 	$(am__append_6) $(am__append_7) $(am__append_8) \
-	$(am__append_9)
+	$(am__append_9) $(am__append_10)
 libmgl_la_LDFLAGS = -no-undefined -version-info $(MGL_CURRENT):$(MGL_REVISION):$(MGL_AGE)
 libmgl_la_CXXFLAGS = $(WIDGETS) -DMGL_FONT_PATH=\"$(datadir)/$(PACKAGE)/fonts/\" \
-    -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \
+    -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(HDF4_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \
     $(TIFF_FLAGS) $(PNG_FLAGS) $(FLTK_FLAGS) $(ADDON_FLAGS) $(AM_CXXFLAGS) \
     $(PTHREAD_FLAGS)
 
diff --git a/texinfo/Makefile.in b/.pc/debian-changes-1.11-1/texinfo/Makefile.in
similarity index 84%
copy from texinfo/Makefile.in
copy to .pc/debian-changes-1.11-1/texinfo/Makefile.in
index 8a6869c..da79aba 100644
--- a/texinfo/Makefile.in
+++ b/.pc/debian-changes-1.11-1/texinfo/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -35,7 +35,8 @@ build_triplet = @build@
 host_triplet = @host@
 subdir = texinfo
 DIST_COMMON = $(mathgl_en_TEXINFOS) $(mathgl_ru_TEXINFOS) \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
+	$(mgl_en_TEXINFOS) $(mgl_ru_TEXINFOS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
 	$(top_srcdir)/configure.ac
@@ -47,14 +48,14 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
-INFO_DEPS = mathgl_en.info mathgl_ru.info
+INFO_DEPS = mathgl_en.info mathgl_ru.info mgl_en.info mgl_ru.info
 TEXINFO_TEX = $(top_srcdir)/config/texinfo.tex
 am__TEXINFO_TEX_DIR = $(top_srcdir)/config
-DVIS = mathgl_en.dvi mathgl_ru.dvi
-PDFS = mathgl_en.pdf mathgl_ru.pdf
-PSS = mathgl_en.ps mathgl_ru.ps
-HTMLS = mathgl_en.html mathgl_ru.html
-TEXINFOS = mathgl_en.texi mathgl_ru.texi
+DVIS = mathgl_en.dvi mathgl_ru.dvi mgl_en.dvi mgl_ru.dvi
+PDFS = mathgl_en.pdf mathgl_ru.pdf mgl_en.pdf mgl_ru.pdf
+PSS = mathgl_en.ps mathgl_ru.ps mgl_en.ps mgl_ru.ps
+HTMLS = mathgl_en.html mathgl_ru.html mgl_en.html mgl_ru.html
+TEXINFOS = mathgl_en.texi mathgl_ru.texi mgl_en.texi mgl_ru.texi
 TEXI2DVI = texi2dvi
 DVIPS = dvips
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -161,6 +162,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -181,6 +184,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -291,25 +295,28 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 SUBDIRS = png .
-CLEANFILES = mathgl_en.info mathgl_en.info-1 mathgl_en.info-2 mathgl_en.info-3 \
-mathgl_ru.info mathgl_ru.info-1 mathgl_ru.info-2 mathgl_ru.info-3
+CLEANFILES = mathgl_en.info mathgl_en.info-1 mathgl_en.info-2 mathgl_en.info-3 mgl_en.info \
+mathgl_ru.info mathgl_ru.info-1 mathgl_ru.info-2 mathgl_ru.info-3 mathgl_ru.info-4 mgl_ru.info
 
 MAKEINFOHTML = texi2html
 TEXI2PDF = texi2pdf
 AM_MAKEINFOHTMLFLAGS = --split=chapter
 AM_MAKEINFOFLAGS = --no-validate
-info_TEXINFOS = mathgl_en.texi mathgl_ru.texi
+info_TEXINFOS = mathgl_en.texi mathgl_ru.texi mgl_en.texi mgl_ru.texi
 mathgl_en_TEXINFOS = \
-example_en.texi  gpl-3.0.texi  overview_en.texi  samples_en.texi \
-class_en.texi  fdl.texi      data_en.texi \
-core_en.texi   gpl-2.0.texi  mgl_en.texi
+overview_en.texi example_en.texi core_en.texi class_en.texi widget_en.texi \
+data_en.texi other_en.texi mgl_cmd_en.texi samples_en.texi appendix_en.texi fdl.texi
 
 mathgl_ru_TEXINFOS = \
-samples_ru.texi class_ru.texi overview_ru.texi appendix_ru.texi \
-data_ru.texi mgl_ru.texi core_ru.texi example_ru.texi fdl.texi \
-gpl-2.0.texi gpl-3.0.texi
+overview_ru.texi example_ru.texi core_ru.texi class_ru.texi widget_ru.texi \
+data_ru.texi other_ru.texi mgl_cmd_ru.texi samples_ru.texi appendix_ru.texi fdl.texi
+
+mgl_en_TEXINFOS = \
+mgl_cmd_en.texi samples_en.texi ex_mgl_en.texi concept_en.texi fdl.texi
+
+mgl_ru_TEXINFOS = \
+mgl_cmd_ru.texi samples_ru.texi ex_mgl_ru.texi concept_ru.texi fdl.texi
 
-mglpng = $(DESTDIR)$(docdir)/png_static
 all: all-recursive
 
 .SUFFIXES:
@@ -434,6 +441,90 @@ mathgl_ru.html: mathgl_ru.texi $(mathgl_ru_TEXINFOS)
 	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
 	  exit 1; \
 	fi
+
+mgl_en.info: mgl_en.texi $(mgl_en_TEXINFOS)
+	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+	rm -rf $$backupdir && mkdir $$backupdir && \
+	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+	  done; \
+	else :; fi && \
+	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi; \
+	then \
+	  rc=0; \
+	else \
+	  rc=$$?; \
+	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+	fi; \
+	rm -rf $$backupdir; exit $$rc
+
+mgl_en.dvi: mgl_en.texi $(mgl_en_TEXINFOS) 
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2DVI) -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi
+
+mgl_en.pdf: mgl_en.texi $(mgl_en_TEXINFOS) 
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2PDF) -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi
+
+mgl_en.html: mgl_en.texi $(mgl_en_TEXINFOS) 
+	rm -rf $(@:.html=.htp)
+	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $(@:.html=.htp) `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi; \
+	then \
+	  rm -rf $@; \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+	else \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+	  exit 1; \
+	fi
+
+mgl_ru.info: mgl_ru.texi $(mgl_ru_TEXINFOS)
+	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+	rm -rf $$backupdir && mkdir $$backupdir && \
+	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+	  done; \
+	else :; fi && \
+	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi; \
+	then \
+	  rc=0; \
+	else \
+	  rc=$$?; \
+	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+	fi; \
+	rm -rf $$backupdir; exit $$rc
+
+mgl_ru.dvi: mgl_ru.texi $(mgl_ru_TEXINFOS) 
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2DVI) -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi
+
+mgl_ru.pdf: mgl_ru.texi $(mgl_ru_TEXINFOS) 
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2PDF) -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi
+
+mgl_ru.html: mgl_ru.texi $(mgl_ru_TEXINFOS) 
+	rm -rf $(@:.html=.htp)
+	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $(@:.html=.htp) `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi; \
+	then \
+	  rm -rf $@; \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+	else \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+	  exit 1; \
+	fi
 .dvi.ps:
 	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
 	$(DVIPS) -o $@ $<
@@ -524,13 +615,23 @@ mostlyclean-aminfo:
 	  mathgl_ru.cps mathgl_ru.fn mathgl_ru.fns mathgl_ru.ky \
 	  mathgl_ru.kys mathgl_ru.log mathgl_ru.pg mathgl_ru.tmp \
 	  mathgl_ru.toc mathgl_ru.tp mathgl_ru.tps mathgl_ru.vr \
-	  mathgl_ru.vrs
+	  mathgl_ru.vrs mgl_en.aux mgl_en.cp mgl_en.cps mgl_en.fn \
+	  mgl_en.fns mgl_en.ky mgl_en.kys mgl_en.log mgl_en.pg \
+	  mgl_en.tmp mgl_en.toc mgl_en.tp mgl_en.tps mgl_en.vr \
+	  mgl_en.vrs mgl_ru.aux mgl_ru.cp mgl_ru.cps mgl_ru.fn \
+	  mgl_ru.fns mgl_ru.ky mgl_ru.kys mgl_ru.log mgl_ru.pg \
+	  mgl_ru.tmp mgl_ru.toc mgl_ru.tp mgl_ru.tps mgl_ru.vr \
+	  mgl_ru.vrs
 
 clean-aminfo:
 	-test -z "mathgl_en.dvi mathgl_en.pdf mathgl_en.ps mathgl_en.html mathgl_ru.dvi \
-	  mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html" \
+	  mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html mgl_en.dvi \
+	  mgl_en.pdf mgl_en.ps mgl_en.html mgl_ru.dvi mgl_ru.pdf \
+	  mgl_ru.ps mgl_ru.html" \
 	|| rm -rf mathgl_en.dvi mathgl_en.pdf mathgl_en.ps mathgl_en.html mathgl_ru.dvi \
-	  mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html
+	  mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html mgl_en.dvi \
+	  mgl_en.pdf mgl_en.ps mgl_en.html mgl_ru.dvi mgl_ru.pdf \
+	  mgl_ru.ps mgl_ru.html
 
 maintainer-clean-aminfo:
 	@list='$(INFO_DEPS)'; for i in $$list; do \
@@ -546,7 +647,7 @@ maintainer-clean-aminfo:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -571,7 +672,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -935,16 +1036,18 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
 	uninstall-local uninstall-pdf-am uninstall-ps-am
 
 
-#install-data-local: install-html install-pdf
-install-data-local: install-html
-	mkdir -p $(mglpng)
-	cp -r $(top_srcdir)/texinfo/png_static/*.png $(mglpng)
+#mglpng=$(DESTDIR)$(docdir)/png_static
 
+#install-data-local: install-html install-pdf
+install-data-local: 
+#	mkdir -p $(mglpng)
+#	cp -r $(top_srcdir)/texinfo/png_static/*.png $(mglpng)
 uninstall-local:
-	rm -rf $(mglpng)
+#	rm -rf $(mglpng)
 
 #all-local: html pdf
 all-local: html
+	./filter.py
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/texinfo/png/Makefile.in b/.pc/debian-changes-1.11-1/texinfo/png/Makefile.in
similarity index 98%
copy from texinfo/png/Makefile.in
copy to .pc/debian-changes-1.11-1/texinfo/png/Makefile.in
index 27b62da..07439f3 100644
--- a/texinfo/png/Makefile.in
+++ b/.pc/debian-changes-1.11-1/texinfo/png/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -112,6 +112,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -132,6 +134,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
diff --git a/utils/Makefile.in b/.pc/debian-changes-1.11-1/utils/Makefile.in
similarity index 98%
copy from utils/Makefile.in
copy to .pc/debian-changes-1.11-1/utils/Makefile.in
index ff4454c..8057592 100644
--- a/utils/Makefile.in
+++ b/.pc/debian-changes-1.11-1/utils/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -76,7 +76,8 @@ am__mglview_SOURCES_DIST = mglview.cpp
 @USE_FLTK_TRUE at am_mglview_OBJECTS = mglview-mglview.$(OBJEXT)
 mglview_OBJECTS = $(am_mglview_OBJECTS)
 @USE_FLTK_TRUE at mglview_DEPENDENCIES =  \
- at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la \
+ at USE_FLTK_TRUE@	$(top_builddir)/mgl/libmgl.la
 mglview_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CXXLD) $(mglview_CXXFLAGS) $(CXXFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -143,6 +144,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -163,6 +166,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -281,7 +285,7 @@ mgl2eps_LDADD = $(top_builddir)/mgl/libmgl.la
 mgl2svg_SOURCES = mgl2svg.cpp
 mgl2svg_LDADD = $(top_builddir)/mgl/libmgl.la
 @USE_FLTK_TRUE at mglview_SOURCES = mglview.cpp
- at USE_FLTK_TRUE@mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la 
 @USE_FLTK_TRUE at mglview_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 @USE_GIF_TRUE at mgl2gif_SOURCES = mgl2gif.cpp
 @USE_GIF_TRUE at mgl2gif_LDADD = $(top_builddir)/mgl/libmgl.la
diff --git a/widgets/Makefile.in b/.pc/debian-changes-1.11-1/widgets/Makefile.in
similarity index 99%
copy from widgets/Makefile.in
copy to .pc/debian-changes-1.11-1/widgets/Makefile.in
index cc98296..250f511 100644
--- a/widgets/Makefile.in
+++ b/.pc/debian-changes-1.11-1/widgets/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -208,6 +208,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -228,6 +230,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 07cf8fa..8a6141c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,6 +9,7 @@ option(enable-pthread "Enable POSIX threads support")
 option(enable-gsl "Enable gsl support")
 option(enable-jpeg "Enable jpeg support")
 option(enable-gif "Enable gif support")
+option(enable-hdf4 "Enable hdf4 support")
 option(enable-hdf5 "Enable hdf5 support")
 option(enable-hdf5_18 "Enable hdf5 1.8 support")
 option(enable-glut "Enable glut support")
@@ -33,6 +34,9 @@ endif(enable-all OR enable-jpeg)
 if(enable-all OR enable-gif)
     set(use_gif 1)
 endif(enable-all OR enable-gif)
+if(enable-all OR enable-hdf4)
+    set(use_hdf4 1)
+endif(enable-all OR enable-hdf4)
 if(enable-all OR enable-hdf5)
     set(use_hdf5 1)
 endif(enable-all OR enable-hdf5)
@@ -106,6 +110,16 @@ if(NOT GIF_FOUND)
 	endif(use_gif)
 endif(NOT GIF_FOUND)
 
+find_library(HDF4_LIB df mfhdf)
+find_path(HDF4_INCLUDE_DIR hdf/mfhdf.h)
+if(NOT HDF4_LIB OR NOT HDF4_INCLUDE_DIR)
+	if(use_hdf4)
+		message(SEND_ERROR "${HDF4_LIB}")
+		message(SEND_ERROR "${HDF4_INCLUDE_DIR}")
+		message(SEND_ERROR "Couldn't find HDF4 libraries.")
+	endif(use_hdf4)
+endif(NOT HDF4_LIB OR NOT HDF4_INCLUDE_DIR)
+
 find_library(HDF5_LIB hdf5)
 find_path(HDF5_INCLUDE_DIR hdf5.h)
 if(NOT HDF5_LIB OR NOT HDF5_INCLUDE_DIR)
diff --git a/ChangeLog.txt b/ChangeLog.txt
index d7d7da6..d2ad377 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,5 +1,63 @@
-1.10.2.1 Released ?? March 2010
-	- Add multiline (i.e. separated by \n) text printing.
+1.11 Released 8 November 2010
+	- Add new plot Grad() -- gradient of scalar field by flow threads.
+	- Add new plot QuadPlot() -- plot of irregular quadrangle mesh (like TriPlot()).
+	- Add new plot TriCont[V]() -- contour lines for irregular triangle mesh.
+	- Add gradient filling in Area() and Region() plots if number of specified colors (colors in palette) is equal to 2*number of curves.
+	- Allow 2 colors diagrams (in Bars(), Barh()) -- one for positive, one for negative.
+	- Add style 'f' for Bars(), Barh() which draw diagrams like water-fall ones.
+	- Move argument 'above' of Bars(), Barh() to string (if it contain 'a' symbol).
+	- Add marks '<', '>', '#<', '#>', '#*', '#x', '#+', '#.' for left/right wire/solid triangles, Y sign, squared + and x signs.
+	- Add mini-dash for '=' line style symbol.
+	- Colorbar position can be specified in sch string: '>' - right, '<' - left, '^' - above, '_' - under. If string have 'A' then absolute coordinates is used.
+	- Add "styled" version of SubPlot() for better fitting of subplot according axis/colorbar/title layouts.
+	- Legend coordinates set absolute position if font argument contain 'A' symbol.
+	- Add optional gap for ColumnPlot.
+	- Axis now can have "arrows" at the end by setting arrow style ("AKDTVISO") for Axis().
+	- Add extra text align for axis label if it is located near minimal or maximal axis value.
+	- Allow defining manual array in MGL command argument as [v1,v2,v3,...]. Array can be multidimensional like [[v1,v2],[v3,v4]].
+	- Add functions to MGL by 'func' command.
+	- Add functions mglData::Hankel(), mglData::SinFFT(), mglData::CosFFT(), mglData::FillSample().
+	- Add 's','c','h' symbols for Sine/Cosine/Hankel transforms in functions mglTransform(), mglTransformA().
+	- Add mglData::Roll() for "rolling" data along direction. Improve Swap() function.
+	- Add MGL commands: "insert dat 'dir' [at=0 num=1]", "delete dat 'dir' [at=0 num=1]", "roll Dat 'dir' num".
+	- Now Plot() and Tens() now "accurately" cut off line segments.
+	- Add 'int(x)' function to the expression parser (class mglFormula).
+	- Add \textsc{} for small-caps to TeX parsing.
+	- Now $N is substituted into the second argument of MGL commands 'define', 'defnum', 'defpal', 'defchr'.
+	- Add definitions $a...$z used by the same order as arguments $0...$9.
+	- Add new function SetLegendMarks() to allow multiple marks in Legend() sample.
+	- Add functions GetWarnCode(), mgl_get_warn_code() for getting code of the last warning.
+	- Add possibility to read HDF4 files in mglData.
+	- Now parameter 'cnt' of Flow() and Pipe() is always defined by value of 'num' -- cnt = (num>0)!
+	- Add C/Fortran interface functions for widget features.
+	- Allow to read compressed data files (like, *.dat.gz).
+	- Allow to save compressed files with extensions "eps.gz" and "svgz" as output.
+	- Font files can be compressed now by 'gzip'.
+	- Reduce animation delay to 1 sec.
+	- Add TeX symbol sample in documentation.
+	- Now MathGL use standard random numbers generator: GSL one or simple rand() if NO_GSL is defined.
+	- Now curves always start dashing from zero position.
+	- Restrict usage of original and wrapper classes simultaneously.
+	- Rename MGL command 'grid' to 'grid2' for case of plain grid drawing for data array(s).
+	- Rename MGL command 'set_id' to 'idset'.
+	- Disable color gradient in Vect() by default -- still enabled in VectC(), VectL().
+	- Add extra options/comments for animation parameters in mgl2png.
+	- Update printing in QMathGL.
+	- mglGraphFLTK::Update() now force window redrawing.
+	- Bugfix with newline symbol '\n'
+	- Bugfix with wrong restore previous InPlot() after text with style 'a'.
+	- Bugfix for label position for log-scale axis.
+	- Bugfix for mglData::Insert().
+	- Bugfix for text and marks drawing in OpenGL mode.
+	- Bugfix for T-ticks orientation in Ternary plot.
+	- Bugfix for text position with 'a' option after Rotate().
+	- Bugfix for keeping bold/italic text formatting of next symbol.
+	- Bugfix for Ternary axis with Min.y!=0.
+	- Bugfix for multi-line labels.
+
+
+1.10.2.1 Released 28 March 2010
+	- Add multi-line (i.e. separated by \n) text printing.
 	- Ticks adjusting now correctly work with log-scaled axis.
 	- Bug with MGL options including bug with 'legend' option for automatic colors.
 	- Bug with 'A' option of text style.
@@ -44,6 +102,7 @@
 	- MGL command 'define' now can define scalar variables, like "define xmin dat.min-1". These variables can be used as later as a number, like "xrange xmin 1".
 	- Add MGL command 'ranges' for setting plot ranges (like 'axis' command).
 	- Add MGL commands 'break', 'continue' for improving for-cycles.
+	- Add function in MGL by commands "function 'name' [arg1 arg2 ... arg9]", "return" and modify "call 'name' [arg1 arg2 ... arg9]"
 	- Add automatic increase of the point numbers in plots by formula with singularities (i.e. like Plot("sin(1/x)");
 	- Add mglGraph::GetFit() function which return fitted formula.
 	- Add function mglGraph::Label() for drawing text at arbitrary place of the screen.
diff --git a/Makefile.in b/Makefile.in
index 5700690..59db7cd 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -46,7 +46,11 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	config/texinfo.tex
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -149,6 +153,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -169,6 +175,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -353,7 +360,7 @@ distclean-libtool:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -378,7 +385,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -542,7 +549,8 @@ distdir: $(DISTFILES)
 	  fi; \
 	done
 	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
 	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
@@ -586,17 +594,17 @@ dist dist-all: distdir
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
-	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
-	  unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
diff --git a/TODO b/TODO
index c3ae449..27449bb 100644
--- a/TODO
+++ b/TODO
@@ -1,44 +1,59 @@
 					MathGL (for v.1.11.*)
 
-c. Colorbar: print more digits for manual arrays ... but avoid overlapping ???
-0. Miss MAJOR labels or decrease its fontsize if labels too close.
+1. Colorbar: print more digits for manual arrays ... but avoid overlapping ???
+
+2. Miss MAJOR labels or decrease its fontsize if labels too close.
 	Also check that enough digits is printed to distingush the labels
 	Also allow "time"-labels
 	Also allow rotate labels if they too dense
-4. Plot for gradients of scalar field (like flow)
-8. Contour label should not rotated on ~180 degree
-
-
-1. Import/Export via GIF (as 3d data) ??? + 16bit PNG ?!!
-2. Plot for isolines of vector fields ???
-3. Cloud by boxes?!
-
-4. Add plot layot -- i.e. reserve space for title and so on ... May be the best way to analyze code itself ???
-5. Try to decrease font size if tick labels overlap ???
-
-6. \dfrac for normal size and centering ???
-7. "Chaos" in area.png (near axis) ???
-
-8. Options "iI_-aA" for colorbar
-9. Hankel transform
-
-10. http://en.wikipedia.org/wiki/Waterfall_chart
-
-AA. New docs:
-- Update documentation (Russian)
+5. Legend in OpenGL mode
+
+11. Update STIX fonts (new release) + create PWT fonts
+12. Problem with \calB and so on (\calH, ...) -- they are present only in italic font :(.
+
+21. INCOMPATIBLE CHANGES!!! swap color and font style in text option ('bR:r' -> 'r:bR')
+22. INCOMPATIBLE CHANGES!!! hide 'dir' argument as ':[xyz]' for cont3, dens3, contf3, grid3 + remove conta, densa, grida, contfa
+23. INCOMPATIBLE!!! Allow slice definition as real: sl<1 ? sl=int(n*sl) : int(sl);
+24. INCOMPATIBLE CHANGES!!! tune colors as {} -- for example, 'b{3}'
+25. INCOMPATIBLE CHANGES!!! hide unused arguments (like "size")
+26. Quaternary diagrams plotted in a tetrahedron: equivalent to ternary diagrams, but in 3D.
+27. Export to X3D
+28. Save glyph then it is used for mglGraphPS -- allow different font family in EPS|SVG ??!
+29. Multithreading by "subplots" -- for parser first of all !!!
+
+30. Sample about pthread using.
+
+32. Regroup pictures in WWW by big classes + combo plots
+
+=========================
+			Later
+			
+1. Plot for isolines of vector fields ???
+2. Named arguments in MGL ???
+3. \dfrac for normal size and centering ???
+4. "Chaos" in area.png (near axis) ???
+5. save data coordinates in picture??? -- NO -- slow + a lot of memory!
+6. "Cut off" curves if text is printed along it (for contour labels) ?!?
+7. Allow interpolation in MGL if argument is not integer ???
+8. Check if widget functions can be added to mgl_w.h !?! -- use #define ??!
+9. Add '[' as separator in string ???
+10. Save id of subplots and axis for getting value of click coordinates arbitrary inplot -- fill only part which is overlapped. Clear it at Clf() + update for any Rotate, Aspect, InPlot, SetRanges, 
+11. Surface by interpolation for arbitrary points {x,y,z} -- seems to be too complicated :(
+12. Rename 'stl'->'style', 'sch'->'scheme' in MGL docs ???
+13. Add option ':[xyzd]' in color scheme for coloring along coordinate (default 'z') ?!?
+14. Save ALL plot styles for each curve (0...N) for each subplot (0...M) in format \leg{N_M} ?!?
+15. Add TeX command \leg{plot style} for line+mark of specified style.
+16. Import/Export via GIF (as 3d data) ??? + 16bit PNG ?!!
+17. Contour label should not rotated on ~180 degree ?!
+18. The same function for ticks of axis and colorbar ???
+13. Add "colorbar x y ['sch'='' w=1 h=1]" + "colorbar x y dat ['sch'='' w=1 h=1]" -- NO because need w,h !
 
 
 					MathGL (for v.2.?) ???
 
 1. GTK window ???
-3. Interface for Gambas
-4. Interface for Scilab
-7. Converter MGL->C (+ interface for MGL->Fortran by change HMDT->int, HMGL->int, "->');
-10. Derive mglGraphGL from mglGraphPS ??? (see mgl_gl_new.*)
 11. Use Hershey as built-in font ???
 
-
-
 					FAQ
 
 1. On which things the subplot influence
diff --git a/aclocal.m4 b/aclocal.m4
index 553dd58..77ec6db 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.11 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 # 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
@@ -13,7977 +13,12 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],,
-[m4_warning([this file was generated for autoconf 2.64.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
+[m4_warning([this file was generated for autoconf 2.67.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
 
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-#
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-m4_define([_LT_COPYING], [dnl
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gordon Matzigkeit, 1996
-#
-#   This file is part of GNU Libtool.
-#
-# GNU Libtool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# As a special exception to the GNU General Public License,
-# if you distribute this file as part of a program or library that
-# is built using GNU Libtool, you may include this file under the
-# same distribution terms that you use for the rest of that program.
-#
-# GNU Libtool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Libtool; see the file COPYING.  If not, a copy
-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
-# obtained by writing to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-])
-
-# serial 56 LT_INIT
-
-
-# LT_PREREQ(VERSION)
-# ------------------
-# Complain and exit if this libtool version is less that VERSION.
-m4_defun([LT_PREREQ],
-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
-       [m4_default([$3],
-		   [m4_fatal([Libtool version $1 or higher is required],
-		             63)])],
-       [$2])])
-
-
-# _LT_CHECK_BUILDDIR
-# ------------------
-# Complain if the absolute build directory name contains unusual characters
-m4_defun([_LT_CHECK_BUILDDIR],
-[case `pwd` in
-  *\ * | *\	*)
-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
-esac
-])
-
-
-# LT_INIT([OPTIONS])
-# ------------------
-AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
-AC_BEFORE([$0], [LT_LANG])dnl
-AC_BEFORE([$0], [LT_OUTPUT])dnl
-AC_BEFORE([$0], [LTDL_INIT])dnl
-m4_require([_LT_CHECK_BUILDDIR])dnl
-
-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
-dnl unless we require an AC_DEFUNed macro:
-AC_REQUIRE([LTOPTIONS_VERSION])dnl
-AC_REQUIRE([LTSUGAR_VERSION])dnl
-AC_REQUIRE([LTVERSION_VERSION])dnl
-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
-m4_require([_LT_PROG_LTMAIN])dnl
-
-dnl Parse OPTIONS
-_LT_SET_OPTIONS([$0], [$1])
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-_LT_SETUP
-
-# Only expand once:
-m4_define([LT_INIT])
-])# LT_INIT
-
-# Old names:
-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_FILEUTILS_DEFAULTS
-# ----------------------
-# It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
-m4_defun([_LT_FILEUTILS_DEFAULTS],
-[: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-])# _LT_FILEUTILS_DEFAULTS
-
-
-# _LT_SETUP
-# ---------
-m4_defun([_LT_SETUP],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-_LT_DECL([], [host_alias], [0], [The host system])dnl
-_LT_DECL([], [host], [0])dnl
-_LT_DECL([], [host_os], [0])dnl
-dnl
-_LT_DECL([], [build_alias], [0], [The build system])dnl
-_LT_DECL([], [build], [0])dnl
-_LT_DECL([], [build_os], [0])dnl
-dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-test -z "$LN_S" && LN_S="ln -s"
-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
-dnl
-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
-dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
-m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-
-_LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
-# commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-])
-if test -n "${ZSH_VERSION+set}" ; then
-   setopt NO_GLOB_SUBST
-fi
-
-_LT_CHECK_OBJDIR
-
-m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    _LT_PATH_MAGIC
-  fi
-  ;;
-esac
-
-# Use C for the default configuration in the libtool script
-LT_SUPPORTED_TAG([CC])
-_LT_LANG_C_CONFIG
-_LT_LANG_DEFAULT_CONFIG
-_LT_CONFIG_COMMANDS
-])# _LT_SETUP
-
-
-# _LT_PROG_LTMAIN
-# ---------------
-# Note that this code is called both from `configure', and `config.status'
-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
-# `config.status' has no value for ac_aux_dir unless we are using Automake,
-# so we pass a copy along to make sure it has a sensible value anyway.
-m4_defun([_LT_PROG_LTMAIN],
-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
-ltmain="$ac_aux_dir/ltmain.sh"
-])# _LT_PROG_LTMAIN
-
-
-
-# So that we can recreate a full libtool script including additional
-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
-# in macros and then make a single call at the end using the `libtool'
-# label.
-
-
-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
-# ----------------------------------------
-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL_INIT],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
-
-
-# _LT_CONFIG_LIBTOOL([COMMANDS])
-# ------------------------------
-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
-m4_define([_LT_CONFIG_LIBTOOL],
-[m4_ifval([$1],
-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
-                     [$1
-])])])
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
-
-
-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
-# -----------------------------------------------------
-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
-[_LT_CONFIG_LIBTOOL([$1])
-_LT_CONFIG_LIBTOOL_INIT([$2])
-])
-
-
-# _LT_FORMAT_COMMENT([COMMENT])
-# -----------------------------
-# Add leading comment marks to the start of each line, and a trailing
-# full-stop to the whole comment if one is not present already.
-m4_define([_LT_FORMAT_COMMENT],
-[m4_ifval([$1], [
-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
-)])
-
-
-
-
-
-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
-# -------------------------------------------------------------------
-# CONFIGNAME is the name given to the value in the libtool script.
-# VARNAME is the (base) name used in the configure script.
-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
-# VARNAME.  Any other value will be used directly.
-m4_define([_LT_DECL],
-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
-	[m4_ifval([$1], [$1], [$2])])
-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
-    m4_ifval([$4],
-	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
-    lt_dict_add_subkey([lt_decl_dict], [$2],
-	[tagged?], [m4_ifval([$5], [yes], [no])])])
-])
-
-
-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
-# --------------------------------------------------------
-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
-
-
-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_tag_varnames],
-[_lt_decl_filter([tagged?], [yes], $@)])
-
-
-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
-# ---------------------------------------------------------
-m4_define([_lt_decl_filter],
-[m4_case([$#],
-  [0], [m4_fatal([$0: too few arguments: $#])],
-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
-])
-
-
-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
-# --------------------------------------------------
-m4_define([lt_decl_quote_varnames],
-[_lt_decl_filter([value], [1], $@)])
-
-
-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_dquote_varnames],
-[_lt_decl_filter([value], [2], $@)])
-
-
-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
-# ---------------------------------------------------
-m4_define([lt_decl_varnames_tagged],
-[m4_assert([$# <= 2])dnl
-_$0(m4_quote(m4_default([$1], [[, ]])),
-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
-m4_define([_lt_decl_varnames_tagged],
-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
-
-
-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
-# ------------------------------------------------
-m4_define([lt_decl_all_varnames],
-[_$0(m4_quote(m4_default([$1], [[, ]])),
-     m4_if([$2], [],
-	   m4_quote(lt_decl_varnames),
-	m4_quote(m4_shift($@))))[]dnl
-])
-m4_define([_lt_decl_all_varnames],
-[lt_join($@, lt_decl_varnames_tagged([$1],
-			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
-])
-
-
-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
-# ------------------------------------
-# Quote a variable value, and forward it to `config.status' so that its
-# declaration there will have the same value as in `configure'.  VARNAME
-# must have a single quote delimited value for this to work.
-m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
-
-
-# _LT_CONFIG_STATUS_DECLARATIONS
-# ------------------------------
-# We delimit libtool config variables with single quotes, so when
-# we write them to config.status, we have to be sure to quote all
-# embedded single quotes properly.  In configure, this macro expands
-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
-#
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAGS
-# ----------------
-# Output comment and list of tags supported by the script
-m4_defun([_LT_LIBTOOL_TAGS],
-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
-available_tags="_LT_TAGS"dnl
-])
-
-
-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
-# -----------------------------------
-# Extract the dictionary values for VARNAME (optionally with TAG) and
-# expand to a commented shell variable setting:
-#
-#    # Some comment about what VAR is for.
-#    visible_name=$lt_internal_name
-m4_define([_LT_LIBTOOL_DECLARE],
-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
-					   [description])))[]dnl
-m4_pushdef([_libtool_name],
-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
-    [0], [_libtool_name=[$]$1],
-    [1], [_libtool_name=$lt_[]$1],
-    [2], [_libtool_name=$lt_[]$1],
-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
-])
-
-
-# _LT_LIBTOOL_CONFIG_VARS
-# -----------------------
-# Produce commented declarations of non-tagged libtool config variables
-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
-# section) are produced by _LT_LIBTOOL_TAG_VARS.
-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
-[m4_foreach([_lt_var],
-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
-
-
-# _LT_LIBTOOL_TAG_VARS(TAG)
-# -------------------------
-m4_define([_LT_LIBTOOL_TAG_VARS],
-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
-
-
-# _LT_TAGVAR(VARNAME, [TAGNAME])
-# ------------------------------
-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
-
-
-# _LT_CONFIG_COMMANDS
-# -------------------
-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
-# variables for single and double quote escaping we saved from calls
-# to _LT_DECL, we can put quote escaped variables declarations
-# into `config.status', and then the shell code to quote escape them in
-# for loops in `config.status'.  Finally, any additional code accumulated
-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
-m4_defun([_LT_CONFIG_COMMANDS],
-[AC_PROVIDE_IFELSE([LT_OUTPUT],
-	dnl If the libtool generation code has been placed in $CONFIG_LT,
-	dnl instead of duplicating it all over again into config.status,
-	dnl then we will have config.status run $CONFIG_LT later, so it
-	dnl needs to know what name is stored there:
-        [AC_CONFIG_COMMANDS([libtool],
-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
-    dnl If the libtool generation code is destined for config.status,
-    dnl expand the accumulated commands and init code now:
-    [AC_CONFIG_COMMANDS([libtool],
-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
-])#_LT_CONFIG_COMMANDS
-
-
-# Initialize.
-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
-[
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-sed_quote_subst='$sed_quote_subst'
-double_quote_subst='$double_quote_subst'
-delay_variable_subst='$delay_variable_subst'
-_LT_CONFIG_STATUS_DECLARATIONS
-LTCC='$LTCC'
-LTCFLAGS='$LTCFLAGS'
-compiler='$compiler_DEFAULT'
-
-# Quote evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Double-quote double-evaled strings.
-for var in lt_decl_all_varnames([[ \
-]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
-    *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
-      ;;
-    *)
-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
-      ;;
-    esac
-done
-
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
-_LT_OUTPUT_LIBTOOL_INIT
-])
-
-
-# LT_OUTPUT
-# ---------
-# This macro allows early generation of the libtool script (before
-# AC_OUTPUT is called), incase it is used in configure for compilation
-# tests.
-AC_DEFUN([LT_OUTPUT],
-[: ${CONFIG_LT=./config.lt}
-AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
-exec AS_MESSAGE_LOG_FD>>config.log
-{
-  echo
-  AS_BOX([Running $as_me.])
-} >&AS_MESSAGE_LOG_FD
-
-lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
-for use in further configure time tests before the real libtool is
-generated.
-
-Usage: $[0] [[OPTIONS]]
-
-  -h, --help      print this help, then exit
-  -V, --version   print version number, then exit
-  -q, --quiet     do not print progress messages
-  -d, --debug     don't remove temporary files
-
-Report bugs to <bug-libtool at gnu.org>."
-
-lt_cl_version="\
-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
-configured by $[0], generated by m4_PACKAGE_STRING.
-
-Copyright (C) 2008 Free Software Foundation, Inc.
-This config.lt script is free software; the Free Software Foundation
-gives unlimited permision to copy, distribute and modify it."
-
-while test $[#] != 0
-do
-  case $[1] in
-    --version | --v* | -V )
-      echo "$lt_cl_version"; exit 0 ;;
-    --help | --h* | -h )
-      echo "$lt_cl_help"; exit 0 ;;
-    --debug | --d* | -d )
-      debug=: ;;
-    --quiet | --q* | --silent | --s* | -q )
-      lt_cl_silent=: ;;
-
-    -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
-
-    *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
-  esac
-  shift
-done
-
-if $lt_cl_silent; then
-  exec AS_MESSAGE_FD>/dev/null
-fi
-_LTEOF
-
-cat >>"$CONFIG_LT" <<_LTEOF
-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
-_LTEOF
-
-cat >>"$CONFIG_LT" <<\_LTEOF
-AC_MSG_NOTICE([creating $ofile])
-_LT_OUTPUT_LIBTOOL_COMMANDS
-AS_EXIT(0)
-_LTEOF
-chmod +x "$CONFIG_LT"
-
-# configure is writing to config.log, but config.lt does its own redirection,
-# appending to config.log, which fails on DOS, as config.log is still kept
-# open by configure.  Here we exec the FD to /dev/null, effectively closing
-# config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
-])# LT_OUTPUT
-
-
-# _LT_CONFIG(TAG)
-# ---------------
-# If TAG is the built-in tag, create an initial libtool script with a
-# default configuration from the untagged config vars.  Otherwise add code
-# to config.status for appending the configuration named by TAG from the
-# matching tagged config vars.
-m4_defun([_LT_CONFIG],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_CONFIG_SAVE_COMMANDS([
-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
-  m4_if(_LT_TAG, [C], [
-    # See if we are running on zsh, and set the options which allow our
-    # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
-      setopt NO_GLOB_SUBST
-    fi
-
-    cfgfile="${ofile}T"
-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
-    $RM "$cfgfile"
-
-    cat <<_LT_EOF >> "$cfgfile"
-#! $SHELL
-
-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-_LT_COPYING
-_LT_LIBTOOL_TAGS
-
-# ### BEGIN LIBTOOL CONFIG
-_LT_LIBTOOL_CONFIG_VARS
-_LT_LIBTOOL_TAG_VARS
-# ### END LIBTOOL CONFIG
-
-_LT_EOF
-
-  case $host_os in
-  aix3*)
-    cat <<\_LT_EOF >> "$cfgfile"
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-_LT_EOF
-    ;;
-  esac
-
-  _LT_PROG_LTMAIN
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-],
-[cat <<_LT_EOF >> "$ofile"
-
-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
-dnl in a comment (ie after a #).
-# ### BEGIN LIBTOOL TAG CONFIG: $1
-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
-# ### END LIBTOOL TAG CONFIG: $1
-_LT_EOF
-])dnl /m4_if
-],
-[m4_if([$1], [], [
-    PACKAGE='$PACKAGE'
-    VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
-    RM='$RM'
-    ofile='$ofile'], [])
-])dnl /_LT_CONFIG_SAVE_COMMANDS
-])# _LT_CONFIG
-
-
-# LT_SUPPORTED_TAG(TAG)
-# ---------------------
-# Trace this macro to discover what tags are supported by the libtool
-# --tag option, using:
-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
-AC_DEFUN([LT_SUPPORTED_TAG], [])
-
-
-# C support is built-in for now
-m4_define([_LT_LANG_C_enabled], [])
-m4_define([_LT_TAGS], [])
-
-
-# LT_LANG(LANG)
-# -------------
-# Enable libtool support for the given language if not already enabled.
-AC_DEFUN([LT_LANG],
-[AC_BEFORE([$0], [LT_OUTPUT])dnl
-m4_case([$1],
-  [C],			[_LT_LANG(C)],
-  [C++],		[_LT_LANG(CXX)],
-  [Java],		[_LT_LANG(GCJ)],
-  [Fortran 77],		[_LT_LANG(F77)],
-  [Fortran],		[_LT_LANG(FC)],
-  [Windows Resource],	[_LT_LANG(RC)],
-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
-    [_LT_LANG($1)],
-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
-])# LT_LANG
-
-
-# _LT_LANG(LANGNAME)
-# ------------------
-m4_defun([_LT_LANG],
-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
-  [LT_SUPPORTED_TAG([$1])dnl
-  m4_append([_LT_TAGS], [$1 ])dnl
-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
-  _LT_LANG_$1_CONFIG($1)])dnl
-])# _LT_LANG
-
-
-# _LT_LANG_DEFAULT_CONFIG
-# -----------------------
-m4_defun([_LT_LANG_DEFAULT_CONFIG],
-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
-  [LT_LANG(CXX)],
-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_F77],
-  [LT_LANG(F77)],
-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
-
-AC_PROVIDE_IFELSE([AC_PROG_FC],
-  [LT_LANG(FC)],
-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
-
-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
-dnl pulling things in needlessly.
-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-  [LT_LANG(GCJ)],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-    [LT_LANG(GCJ)],
-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
-      [LT_LANG(GCJ)],
-      [m4_ifdef([AC_PROG_GCJ],
-	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([A][M_PROG_GCJ],
-	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
-       m4_ifdef([LT_PROG_GCJ],
-	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
-
-AC_PROVIDE_IFELSE([LT_PROG_RC],
-  [LT_LANG(RC)],
-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
-])# _LT_LANG_DEFAULT_CONFIG
-
-# Obsolete macros:
-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
-
-
-# _LT_TAG_COMPILER
-# ----------------
-m4_defun([_LT_TAG_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_TAG_COMPILER
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-m4_defun([_LT_COMPILER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-])# _LT_COMPILER_BOILERPLATE
-
-
-# _LT_LINKER_BOILERPLATE
-# ----------------------
-# Check for linker boilerplate output or warnings with
-# the simple link test code.
-m4_defun([_LT_LINKER_BOILERPLATE],
-[m4_require([_LT_DECL_SED])dnl
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-])# _LT_LINKER_BOILERPLATE
-
-# _LT_REQUIRED_DARWIN_CHECKS
-# -------------------------
-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-    AC_CHECK_TOOL([LIPO], [lipo], [:])
-    AC_CHECK_TOOL([OTOOL], [otool], [:])
-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
-    _LT_DECL([], [DSYMUTIL], [1],
-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
-    _LT_DECL([], [NMEDIT], [1],
-      [Tool to change global to local symbols on Mac OS X])
-    _LT_DECL([], [LIPO], [1],
-      [Tool to manipulate fat objects and archives on Mac OS X])
-    _LT_DECL([], [OTOOL], [1],
-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
-    _LT_DECL([], [OTOOL64], [1],
-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
-
-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
-      [lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
-	# By default we will add the -single_module flag. You can override
-	# by either setting the environment variable LT_MULTI_MODULE
-	# non-empty at configure time, or by adding -multi_module to the
-	# link flags.
-	rm -rf libconftest.dylib*
-	echo "int foo(void){return 1;}" > conftest.c
-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
-        _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
-	  lt_cv_apple_cc_single_mod=yes
-	else
-	  cat conftest.err >&AS_MESSAGE_LOG_FD
-	fi
-	rm -rf libconftest.dylib*
-	rm -f conftest.*
-      fi])
-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
-      [lt_cv_ld_exported_symbols_list],
-      [lt_cv_ld_exported_symbols_list=no
-      save_LDFLAGS=$LDFLAGS
-      echo "_main" > conftest.sym
-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-	[lt_cv_ld_exported_symbols_list=yes],
-	[lt_cv_ld_exported_symbols_list=no])
-	LDFLAGS="$save_LDFLAGS"
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*) # darwin 5.x on
-      # if running on 10.5 or later, the deployment target defaults
-      # to the OS version, if on x86, and 10.4, the deployment
-      # target defaults to 10.4. Don't you love it?
-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-	10.*)
-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-      esac
-    ;;
-  esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
-    else
-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    if test "$DSYMUTIL" != ":"; then
-      _lt_dsymutil='~$DSYMUTIL $lib || :'
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
-# Checks for linker and compiler features on darwin
-m4_defun([_LT_DARWIN_LINKER_FEATURES],
-[
-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_automatic, $1)=yes
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
-  _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-  case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
-     *) _lt_dar_can_shared=$GCC ;;
-  esac
-  if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-    m4_if([$1], [CXX],
-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
-    fi
-],[])
-  else
-  _LT_TAGVAR(ld_shlibs, $1)=no
-  fi
-])
-
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-m4_defun([_LT_SYS_MODULE_PATH_AIX],
-[m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_SYS_MODULE_PATH_AIX
-
-
-# _LT_SHELL_INIT(ARG)
-# -------------------
-m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
-
-
-# _LT_PROG_ECHO_BACKSLASH
-# -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(lt_ECHO)
-])
-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
-])# _LT_PROG_ECHO_BACKSLASH
-
-
-# _LT_ENABLE_LOCK
-# ---------------
-m4_defun([_LT_ENABLE_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-  [AS_HELP_STRING([--disable-libtool-lock],
-    [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-      *ELF-32*)
-	HPUX_IA64_MODE="32"
-	;;
-      *ELF-64*)
-	HPUX_IA64_MODE="64"
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -melf32bsmip"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -melf32bmipn32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -melf64bmip"
-	;;
-      esac
-    else
-      case `/usr/bin/file conftest.$ac_objext` in
-	*32-bit*)
-	  LD="${LD-ld} -32"
-	  ;;
-	*N32*)
-	  LD="${LD-ld} -n32"
-	  ;;
-	*64-bit*)
-	  LD="${LD-ld} -64"
-	  ;;
-      esac
-    fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-      *32-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_i386_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_i386"
-	    ;;
-	  ppc64-*linux*|powerpc64-*linux*)
-	    LD="${LD-ld} -m elf32ppclinux"
-	    ;;
-	  s390x-*linux*)
-	    LD="${LD-ld} -m elf_s390"
-	    ;;
-	  sparc64-*linux*)
-	    LD="${LD-ld} -m elf32_sparc"
-	    ;;
-	esac
-	;;
-      *64-bit*)
-	case $host in
-	  x86_64-*kfreebsd*-gnu)
-	    LD="${LD-ld} -m elf_x86_64_fbsd"
-	    ;;
-	  x86_64-*linux*)
-	    LD="${LD-ld} -m elf_x86_64"
-	    ;;
-	  ppc*-*linux*|powerpc*-*linux*)
-	    LD="${LD-ld} -m elf64ppc"
-	    ;;
-	  s390*-*linux*|s390*-*tpf*)
-	    LD="${LD-ld} -m elf64_s390"
-	    ;;
-	  sparc*-*linux*)
-	    LD="${LD-ld} -m elf64_sparc"
-	    ;;
-	esac
-	;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
-	  LD="${LD-ld} -64"
-	fi
-	;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-esac
-
-need_locks="$enable_libtool_lock"
-])# _LT_ENABLE_LOCK
-
-
-# _LT_CMD_OLD_ARCHIVE
-# -------------------
-m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
-
-AC_CHECK_TOOL(STRIP, strip, :)
-test -z "$STRIP" && STRIP=:
-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-test -z "$RANLIB" && RANLIB=:
-_LT_DECL([], [RANLIB], [1],
-    [Commands used to install an old-style archive])
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-_LT_DECL([], [old_postinstall_cmds], [2])
-_LT_DECL([], [old_postuninstall_cmds], [2])
-_LT_TAGDECL([], [old_archive_cmds], [2],
-    [Commands used to build an old-style archive])
-])# _LT_CMD_OLD_ARCHIVE
-
-
-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([_LT_COMPILER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-       $2=yes
-     fi
-   fi
-   $RM conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$5], , :, [$5])
-else
-    m4_if([$6], , :, [$6])
-fi
-])# _LT_COMPILER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
-
-
-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------
-# Check whether the given linker option works
-AC_DEFUN([_LT_LINKER_OPTION],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The linker can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-       if diff conftest.exp conftest.er2 >/dev/null; then
-         $2=yes
-       fi
-     else
-       $2=yes
-     fi
-   fi
-   $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    m4_if([$4], , :, [$4])
-else
-    m4_if([$5], , :, [$5])
-fi
-])# _LT_LINKER_OPTION
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
-
-
-# LT_CMD_MAX_LEN
-#---------------
-AC_DEFUN([LT_CMD_MAX_LEN],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw* | cegcc*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # This has been around since 386BSD, at least.  Likely further.
-    if test -x /sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-    elif test -x /usr/sbin/sysctl; then
-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-    else
-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
-    fi
-    # And add a safety zone
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    ;;
-
-  interix*)
-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
-    lt_cv_sys_max_cmd_len=196608
-    ;;
-
-  osf*)
-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-    # nice to cause kernel panics so lets avoid the loop below.
-    # First set a reasonable default.
-    lt_cv_sys_max_cmd_len=16384
-    #
-    if test -x /sbin/sysconfig; then
-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
-      esac
-    fi
-    ;;
-  sco3.2v5*)
-    lt_cv_sys_max_cmd_len=102400
-    ;;
-  sysv5* | sco5v6* | sysv4.2uw2*)
-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-    if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
-    else
-      lt_cv_sys_max_cmd_len=32768
-    fi
-    ;;
-  *)
-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
-    if test -n "$lt_cv_sys_max_cmd_len"; then
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-    else
-      # Make teststring a little bigger before we do anything with it.
-      # a 1K string should be a reasonable start.
-      for i in 1 2 3 4 5 6 7 8 ; do
-        teststring=$teststring$teststring
-      done
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      # If test is not a shell built-in, we'll probably end up computing a
-      # maximum length that is only half of the actual maximum length, but
-      # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
-	      test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      # Only check the string length outside the loop.
-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
-      teststring=
-      # Add a significant safety factor because C++ compilers can tack on
-      # massive amounts of additional arguments before passing them to the
-      # linker.  It appears as though 1/2 is a usable value.
-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    fi
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-_LT_DECL([], [max_cmd_len], [0],
-    [What is the maximum length of a command?])
-])# LT_CMD_MAX_LEN
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
-
-
-# _LT_HEADER_DLFCN
-# ----------------
-m4_defun([_LT_HEADER_DLFCN],
-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
-])# _LT_HEADER_DLFCN
-
-
-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ----------------------------------------------------------------
-m4_defun([_LT_TRY_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL		RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL		DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL		0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW		DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW	DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW	0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-  return status;
-}]
-_LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_dlunknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_TRY_DLOPEN_SELF
-
-
-# LT_SYS_DLOPEN_SELF
-# ------------------
-AC_DEFUN([LT_SYS_DLOPEN_SELF],
-[m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32* | cegcc*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-    ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-    ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-    ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-	  [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
-	[AC_CHECK_FUNC([dlopen],
-	      [lt_cv_dlopen="dlopen"],
-	  [AC_CHECK_LIB([dl], [dlopen],
-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-	    [AC_CHECK_LIB([svld], [dlopen],
-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-	      [AC_CHECK_LIB([dld], [dld_link],
-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
-	      ])
-	    ])
-	  ])
-	])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-	  lt_cv_dlopen_self, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-	  lt_cv_dlopen_self_static, [dnl
-	  _LT_TRY_DLOPEN_SELF(
-	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-_LT_DECL([dlopen_support], [enable_dlopen], [0],
-	 [Whether dlopen is supported])
-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
-	 [Whether dlopen of programs is supported])
-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
-	 [Whether dlopen of statically linked programs is supported])
-])# LT_SYS_DLOPEN_SELF
-
-# Old name:
-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
-
-
-# _LT_COMPILER_C_O([TAGNAME])
-# ---------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler.
-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
-m4_defun([_LT_COMPILER_C_O],
-[m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $RM -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
-   $RM conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
-   $RM out/* && rmdir out
-   cd ..
-   $RM -r conftest
-   $RM conftest*
-])
-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
-	[Does compiler simultaneously support -c and -o options?])
-])# _LT_COMPILER_C_O
-
-
-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
-# ----------------------------------
-# Check to see if we can do hard links to lock some files if needed
-m4_defun([_LT_COMPILER_FILE_LOCKS],
-[m4_require([_LT_ENABLE_LOCK])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-_LT_COMPILER_C_O([$1])
-
-hard_links="nottested"
-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $RM conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
-])# _LT_COMPILER_FILE_LOCKS
-
-
-# _LT_CHECK_OBJDIR
-# ----------------
-m4_defun([_LT_CHECK_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-_LT_DECL([], [objdir], [0],
-         [The name of the directory that contains temporary libtool files])dnl
-m4_pattern_allow([LT_OBJDIR])dnl
-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
-])# _LT_CHECK_OBJDIR
-
-
-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
-# --------------------------------------
-# Check hardcoding attributes.
-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-_LT_TAGDECL([], [hardcode_action], [0],
-    [How to hardcode a shared library path into an executable])
-])# _LT_LINKER_HARDCODE_LIBPATH
-
-
-# _LT_CMD_STRIPLIB
-# ----------------
-m4_defun([_LT_CMD_STRIPLIB],
-[m4_require([_LT_DECL_EGREP])
-striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-  darwin*)
-    if test -n "$STRIP" ; then
-      striplib="$STRIP -x"
-      old_striplib="$STRIP -S"
-      AC_MSG_RESULT([yes])
-    else
-      AC_MSG_RESULT([no])
-    fi
-    ;;
-  *)
-    AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
-_LT_DECL([], [striplib], [1])
-])# _LT_CMD_STRIPLIB
-
-
-# _LT_SYS_DYNAMIC_LINKER([TAG])
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-m4_defun([_LT_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_OBJDUMP])dnl
-m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-m4_if([$1],
-	[], [
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
-  lt_tmp_lt_search_path_spec=
-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
-  for lt_sys_path in $lt_search_path_spec; do
-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
-    else
-      test -d "$lt_sys_path" && \
-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
-    fi
-  done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
-BEGIN {RS=" "; FS="/|\n";} {
-  lt_foo="";
-  lt_count=0;
-  for (lt_i = NF; lt_i > 0; lt_i--) {
-    if ($lt_i != "" && $lt_i != ".") {
-      if ($lt_i == "..") {
-        lt_count++;
-      } else {
-        if (lt_count == 0) {
-          lt_foo="/" $lt_i lt_foo;
-        } else {
-          lt_count--;
-        }
-      }
-    }
-  }
-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
-}'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix[[4-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-	   echo ' yes '
-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
-	:
-      else
-	can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  case $host_cpu in
-  powerpc)
-    # Since July 2007 AmigaOS4 officially supports .so libraries.
-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    ;;
-  m68k)
-    library_names_spec='$libname.ixlibrary $libname.a'
-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-    ;;
-  esac
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname~
-      chmod a+x \$dldir/$dlname~
-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
-      fi'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $RM \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw* | cegcc*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-m4_if([$1], [],[
-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-freebsd* | dragonfly*)
-  # DragonFly does not have aout.  When/if they implement a new
-  # versioning mechanism, adjust this.
-  if test -x /usr/bin/objformat; then
-    objformat=`/usr/bin/objformat`
-  else
-    case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
-    *) objformat=elf ;;
-    esac
-  fi
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  *) # from 4.6 on, and DragonFly
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case $host_cpu in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  hppa*64*)
-    shrext_cmds='.sl'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-  *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-interix[[3-9]]*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
-	else
-		version_type=irix
-	fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
-
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-netbsdelf*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='NetBSD ld.elf_so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-*nto* | *qnx*)
-  version_type=qnx
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='ldqnx.so'
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
-    *)				need_version=no  ;;
-  esac
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-	shlibpath_overrides_runpath=no
-	;;
-      *)
-	shlibpath_overrides_runpath=yes
-	;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-rdos*)
-  dynamic_linker=no
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  version_type=freebsd-elf
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    case $host_os in
-      sco3.2v5*)
-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-	;;
-    esac
-  fi
-  sys_lib_dlsearch_path_spec='/usr/lib'
-  ;;
-
-tpf*)
-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-fi
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-fi
-
-_LT_DECL([], [variables_saved_for_relink], [1],
-    [Variables whose values should be saved in libtool wrapper scripts and
-    restored at link time])
-_LT_DECL([], [need_lib_prefix], [0],
-    [Do we need the "lib" prefix for modules?])
-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
-_LT_DECL([], [version_type], [0], [Library versioning type])
-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
-_LT_DECL([], [shlibpath_overrides_runpath], [0],
-    [Is shlibpath searched before the hard-coded library search path?])
-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
-_LT_DECL([], [library_names_spec], [1],
-    [[List of archive names.  First name is the real one, the rest are links.
-    The last name is the one that the linker finds with -lNAME]])
-_LT_DECL([], [soname_spec], [1],
-    [[The coded name of the library, if different from the real name]])
-_LT_DECL([], [postinstall_cmds], [2],
-    [Command to use after installation of a shared archive])
-_LT_DECL([], [postuninstall_cmds], [2],
-    [Command to use after uninstallation of a shared archive])
-_LT_DECL([], [finish_cmds], [2],
-    [Commands used to finish a libtool library installation in a directory])
-_LT_DECL([], [finish_eval], [1],
-    [[As "finish_cmds", except a single script fragment to be evaled but
-    not shown]])
-_LT_DECL([], [hardcode_into_libs], [0],
-    [Whether we should hardcode library paths into libraries])
-_LT_DECL([], [sys_lib_search_path_spec], [2],
-    [Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
-    [Run-time system search path for libraries])
-])# _LT_SYS_DYNAMIC_LINKER
-
-
-# _LT_PATH_TOOL_PREFIX(TOOL)
-# --------------------------
-# find a file program which can recognize shared library
-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
-[m4_require([_LT_DECL_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="m4_if([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-	case $deplibs_check_method in
-	"file_magic "*)
-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-	    $EGREP "$file_magic_regex" > /dev/null; then
-	    :
-	  else
-	    cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-_LT_EOF
-	  fi ;;
-	esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-_LT_DECL([], [MAGIC_CMD], [0],
-	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
-])# _LT_PATH_TOOL_PREFIX
-
-# Old name:
-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
-
-
-# _LT_PATH_MAGIC
-# --------------
-# find a file program which can recognize a shared library
-m4_defun([_LT_PATH_MAGIC],
-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# _LT_PATH_MAGIC
-
-
-# LT_PATH_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([LT_PATH_LD],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_ARG_WITH([gnu-ld],
-    [AS_HELP_STRING([--with-gnu-ld],
-	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])dnl
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some variants of GNU ld only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-	test "$with_gnu_ld" != no && break
-	;;
-      *)
-	test "$with_gnu_ld" != yes && break
-	;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-_LT_PATH_LD_GNU
-AC_SUBST([LD])
-
-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
-])# LT_PATH_LD
-
-# Old names:
-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_LD], [])
-dnl AC_DEFUN([AC_PROG_LD], [])
-
-
-# _LT_PATH_LD_GNU
-#- --------------
-m4_defun([_LT_PATH_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# _LT_PATH_LD_GNU
-
-
-# _LT_CMD_RELOAD
-# --------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-m4_defun([_LT_CMD_RELOAD],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
-])# _LT_CMD_RELOAD
-
-
-# _LT_CHECK_MAGIC_METHOD
-# ----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-m4_defun([_LT_CHECK_MAGIC_METHOD],
-[m4_require([_LT_DECL_EGREP])
-m4_require([_LT_DECL_OBJDUMP])
-AC_CACHE_CHECK([how to recognize dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[[4-9]]*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi[[45]]*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
-  # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-    lt_cv_file_magic_cmd='func_win32_libid'
-  else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-cegcc)
-  # use the weaker test based on 'objdump'. See mingw*.
-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | dragonfly*)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case $host_cpu in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-interix[[3-9]]*)
-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd* | netbsdelf*-gnu)
-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-*nto* | *qnx*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-rdos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.3*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  pc)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-tpf*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-_LT_DECL([], [deplibs_check_method], [1],
-    [Method to check whether dependent libraries are shared objects])
-_LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
-])# _LT_CHECK_MAGIC_METHOD
-
-
-# LT_PATH_NM
-# ----------
-# find the pathname to a BSD- or MS-compatible name lister
-AC_DEFUN([LT_PATH_NM],
-[AC_REQUIRE([AC_PROG_CC])dnl
-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-    lt_nm_to_check="$lt_nm_to_check nm"
-  fi
-  for lt_tmp_nm in $lt_nm_to_check; do
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-      IFS="$lt_save_ifs"
-      test -z "$ac_dir" && ac_dir=.
-      tmp_nm="$ac_dir/$lt_tmp_nm"
-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	# Tru64's nm complains that /dev/null is an invalid object file
-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-	*/dev/null* | *'Invalid file or object type'*)
-	  lt_cv_path_NM="$tmp_nm -B"
-	  break
-	  ;;
-	*)
-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-	  */dev/null*)
-	    lt_cv_path_NM="$tmp_nm -p"
-	    break
-	    ;;
-	  *)
-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-	    continue # so that we can try to find one that supports BSD flags
-	    ;;
-	  esac
-	  ;;
-	esac
-      fi
-    done
-    IFS="$lt_save_ifs"
-  done
-  : ${lt_cv_path_NM=no}
-fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
-else
-  # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
-  AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
-  fi
-fi
-test -z "$NM" && NM=nm
-AC_SUBST([NM])
-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
-
-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
-  [lt_cv_nm_interface="BSD nm"
-  echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$ac_compile" 2>conftest.err)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
-  cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
-  cat conftest.out >&AS_MESSAGE_LOG_FD
-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
-    lt_cv_nm_interface="MS dumpbin"
-  fi
-  rm -f conftest*])
-])# LT_PATH_NM
-
-# Old names:
-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_PROG_NM], [])
-dnl AC_DEFUN([AC_PROG_NM], [])
-
-
-# LT_LIB_M
-# --------
-# check for math library
-AC_DEFUN([LT_LIB_M],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-AC_SUBST([LIBM])
-])# LT_LIB_M
-
-# Old name:
-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_CHECK_LIBM], [])
-
-
-# _LT_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------
-m4_defun([_LT_COMPILER_NO_RTTI],
-[m4_require([_LT_TAG_COMPILER])dnl
-
-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
-	[Compiler flag to turn off builtin functions])
-])# _LT_COMPILER_NO_RTTI
-
-
-# _LT_CMD_GLOBAL_SYMBOLS
-# ----------------------
-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-AC_REQUIRE([LT_PATH_LD])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32* | cegcc*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris*)
-  symcode='[[BDRT]]'
-  ;;
-sco3.2v5*)
-  symcode='[[DT]]'
-  ;;
-sysv4.2uw2*)
-  symcode='[[DT]]'
-  ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
-  symcode='[[ABDT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-  symxfrm="\\1 $ac_symprfx\\2 \\2"
-
-  # Write the raw and C identifiers.
-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
-    # Fake it for dumpbin and say T for any non-static function
-    # and D for any global variable.
-    # Also find C++ and __fastcall symbols from MSVC++,
-    # which start with @ or ?.
-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
-"     {last_section=section; section=\$ 3};"\
-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-"     \$ 0!~/External *\|/{next};"\
-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-"     {if(hide[section]) next};"\
-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
-"     ' prfx=^$ac_symprfx]"
-  else
-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-  fi
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<_LT_EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
-	  # Now generate the symbol file.
-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
-	  cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols.  */
-const struct {
-  const char *name;
-  void       *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[[]] =
-{
-  { "@PROGRAM@", (void *) 0 },
-_LT_EOF
-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
-	  cat <<\_LT_EOF >> conftest.$ac_ext
-  {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
-	  # Now try linking the two files.
-	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$ac_objext"
-	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-	    pipe_works=yes
-	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -rf conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-
-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
-    [Take the output of nm and produce a listing of raw symbols and C names])
-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
-    [Transform the output of nm in a proper C declaration])
-_LT_DECL([global_symbol_to_c_name_address],
-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
-    [Transform the output of nm in a C name address pair])
-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
-    [Transform the output of nm in a C name address pair when lib prefix is needed])
-]) # _LT_CMD_GLOBAL_SYMBOLS
-
-
-# _LT_COMPILER_PIC([TAGNAME])
-# ---------------------------
-m4_defun([_LT_COMPILER_PIC],
-[m4_require([_LT_TAG_COMPILER])dnl
-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-m4_if([$1], [CXX], [
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-    *qnx* | *nto*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-	# All AIX code is PIC.
-	if test "$host_cpu" = ia64; then
-	  # AIX 5 now supports IA64 processor
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	else
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-	fi
-	;;
-      chorus*)
-	case $cc_basename in
-	cxch68*)
-	  # Green Hills C++ Compiler
-	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-	  ;;
-	esac
-	;;
-      dgux*)
-	case $cc_basename in
-	  ec++*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  ghcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      freebsd* | dragonfly*)
-	# FreeBSD uses GNU C++
-	;;
-      hpux9* | hpux10* | hpux11*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    if test "$host_cpu" != ia64; then
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	    fi
-	    ;;
-	  aCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-	    case $host_cpu in
-	    hppa*64*|ia64*)
-	      # +Z the default
-	      ;;
-	    *)
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	      ;;
-	    esac
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      interix*)
-	# This is c89, which is MS Visual C++ (no shared libs)
-	# Anyone wants to do a port?
-	;;
-      irix5* | irix6* | nonstopux*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    # CC pic flag -KPIC is the default.
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      linux* | k*bsd*-gnu)
-	case $cc_basename in
-	  KCC*)
-	    # KAI C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    ;;
-	  ecpc* )
-	    # old Intel C++ for x86_64 which still supported -KPIC.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  icpc* )
-	    # Intel C++, used to be incompatible with GCC.
-	    # ICC 10 doesn't accept -KPIC any more.
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-	    ;;
-	  pgCC* | pgcpp*)
-	    # Portland Group C++ compiler
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  cxx*)
-	    # Compaq C++
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-      lynxos*)
-	;;
-      m88k*)
-	;;
-      mvs*)
-	case $cc_basename in
-	  cxx*)
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      netbsd* | netbsdelf*-gnu)
-	;;
-      *qnx* | *nto*)
-        # QNX uses GNU C++, but need to define -shared option too, otherwise
-        # it will coredump.
-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-        ;;
-      osf3* | osf4* | osf5*)
-	case $cc_basename in
-	  KCC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-	    ;;
-	  RCC*)
-	    # Rational C++ 2.4.1
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  cxx*)
-	    # Digital/Compaq C++
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    # Make sure the PIC flag is empty.  It appears that all Alpha
-	    # Linux and Compaq Tru64 Unix objects are PIC.
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      psos*)
-	;;
-      solaris*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-	    ;;
-	  gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sunos4*)
-	case $cc_basename in
-	  CC*)
-	    # Sun C++ 4.x
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	  lcc*)
-	    # Lucid
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-	case $cc_basename in
-	  CC*)
-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	    ;;
-	esac
-	;;
-      tandem*)
-	case $cc_basename in
-	  NCC*)
-	    # NonStop-UX NCC 3.20
-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	    ;;
-	  *)
-	    ;;
-	esac
-	;;
-      vxworks*)
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-	;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-        ;;
-      m68k)
-            # FIXME: we need at least 68020 code to build shared libraries, but
-            # adding the `-m68020' flag to GCC prevents building anything better,
-            # like `-m68040'.
-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-        ;;
-      esac
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
-      # (--disable-auto-import) libraries
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    hpux*)
-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
-      # sets the default TLS model and affects inlining.
-      case $host_cpu in
-      hppa*64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	;;
-      esac
-      ;;
-
-    interix[[3-9]]*)
-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-      # Instead, we relocate shared libraries at runtime.
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-	# AIX 5 now supports IA64 processor
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      m4_if([$1], [GCJ], [],
-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-	# +Z the default
-	;;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-	;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    linux* | k*bsd*-gnu)
-      case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
-      ecc*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # icc used to be incompatible with GCC.
-      # ICC 10 doesn't accept -KPIC any more.
-      icc* | ifort*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      # Lahey Fortran 8.1.
-      lf95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
-	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-	# which looks to be a dead project)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
-	;;
-      *)
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)
-	  # Sun C 5.9
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
-	  ;;
-	esac
-	;;
-      esac
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *nto* | *qnx*)
-      # QNX uses GNU C++, but need to define -shared option too, otherwise
-      # it will coredump.
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
-	[Additional compiler flags for building library objects])
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
-	[Compiler flag to prevent dynamic linking])
-])# _LT_COMPILER_PIC
-
-
-# _LT_LINKER_SHLIBS([TAGNAME])
-# ----------------------------
-# See if the linker supports building shared libraries.
-m4_defun([_LT_LINKER_SHLIBS],
-[AC_REQUIRE([LT_PATH_LD])dnl
-AC_REQUIRE([LT_PATH_NM])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-m4_require([_LT_DECL_SED])dnl
-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
-m4_require([_LT_TAG_COMPILER])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-m4_if([$1], [CXX], [
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix[[4-9]]*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-  ;;
-  *)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-], [
-  runpath_var=
-  _LT_TAGVAR(allow_undefined_flag, $1)=
-  _LT_TAGVAR(always_export_symbols, $1)=no
-  _LT_TAGVAR(archive_cmds, $1)=
-  _LT_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_TAGVAR(compiler_needs_object, $1)=no
-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  _LT_TAGVAR(hardcode_automatic, $1)=no
-  _LT_TAGVAR(hardcode_direct, $1)=no
-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(inherit_rpath, $1)=no
-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_TAGVAR(module_cmds, $1)=
-  _LT_TAGVAR(module_expsym_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  # Exclude shared library initialization/finalization symbols.
-dnl Note also adjust exclude_expsyms for C++ above.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  linux* | k*bsd*-gnu)
-    _LT_TAGVAR(link_all_deplibs, $1)=no
-    ;;
-  esac
-
-  _LT_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # Set some defaults for GNU ld with shared library support. These
-    # are reset later if shared libraries are not supported. Putting them
-    # here allows them to be overridden if necessary.
-    runpath_var=LD_RUN_PATH
-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>&1` in
-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-      *\ 2.11.*) ;; # other 2.11 versions
-      *) supports_anon_versioning=yes ;;
-    esac
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix[[3-9]]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-_LT_EOF
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	# support --undefined.  This deserves some investigation.  FIXME
-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=no
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-	# If the export-symbols file already is a .def file (1st line
-	# is EXPORTS), use it as is; otherwise, prepend...
-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	  cp $export_symbols $output_objdir/$soname.def;
-	else
-	  echo EXPORTS > $output_objdir/$soname.def;
-	  cat $export_symbols >> $output_objdir/$soname.def;
-	fi~
-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    interix[[3-9]]*)
-      _LT_TAGVAR(hardcode_direct, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-      # Instead, shared libraries are loaded at an image base (0x10000000 by
-      # default) and relocated if they conflict, which is a slow very memory
-      # consuming and fragmenting process.  To avoid this, we pick a random,
-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      ;;
-
-    gnu* | linux* | tpf* | k*bsd*-gnu)
-      tmp_diet=no
-      if test "$host_os" = linux-dietlibc; then
-	case $cc_basename in
-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
-	esac
-      fi
-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
-	 && test "$tmp_diet" = no
-      then
-	tmp_addflag=
-	tmp_sharedflag='-shared'
-	case $cc_basename,$host_cpu in
-        pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag'
-	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  tmp_addflag=' $pic_flag -Mnomain' ;;
-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
-	  tmp_addflag=' -i_dynamic' ;;
-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
-	ifc* | ifort*)			# Intel Fortran compiler
-	  tmp_addflag=' -nofor_main' ;;
-	lf95*)				# Lahey Fortran 8.1
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
-	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
-	  tmp_sharedflag='-qmkshrobj'
-	  tmp_addflag= ;;
-	esac
-	case `$CC -V 2>&1 | sed 5q` in
-	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
-	  tmp_sharedflag='-G' ;;
-	*Sun\ F*)			# Sun Fortran 8.3
-	  tmp_sharedflag='-G' ;;
-	esac
-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-        if test "x$supports_anon_versioning" = xyes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	    echo "local: *; };" >> $output_objdir/$libname.ver~
-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-        fi
-
-	case $cc_basename in
-	xlf*)
-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
-	  if test "x$supports_anon_versioning" = xyes; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
-	  fi
-	  ;;
-	esac
-      else
-        _LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-	wlarc=
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** reliably create shared libraries on SCO systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
-	;;
-	*)
-	  # For security reasons, it is highly recommended that you always
-	  # use absolute paths for naming shared libraries, and exclude the
-	  # DT_RUNPATH tag from executables and libraries.  But doing so
-	  # requires that you compile everything twice, which is a pain.
-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-	  else
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	  fi
-	;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-	# Neither direct hardcoding nor static linking is supported with a
-	# broken collect2.
-	_LT_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
-	# On IA64, the linker does run time linking by default, so we don't
-	# have to do anything special.
-	aix_use_runtimelinking=no
-	exp_sym_flag='-Bexport'
-	no_entry_flag=""
-      else
-	# If we're using GNU nm, then we don't want the "-C" option.
-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	else
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
-	fi
-	aix_use_runtimelinking=no
-
-	# Test if we are trying to use run time linking or normal
-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
-	# need to do runtime linking.
-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	  for ld_flag in $LDFLAGS; do
-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-	    aix_use_runtimelinking=yes
-	    break
-	  fi
-	  done
-	  ;;
-	esac
-
-	exp_sym_flag='-bexport'
-	no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_TAGVAR(archive_cmds, $1)=''
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-      if test "$GCC" = yes; then
-	case $host_os in aix4.[[012]]|aix4.[[012]].*)
-	# We only want to do this on AIX 4.2 and lower, the check
-	# below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	  # We have reworked collect2
-	  :
-	  else
-	  # We have old collect2
-	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	  # It fails to find uninstalled libraries when the uninstalled
-	  # path is not listed in the libpath.  Setting hardcode_minus_L
-	  # to unsupported forces relinking
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-	  ;;
-	esac
-	shared_flag='-shared'
-	if test "$aix_use_runtimelinking" = yes; then
-	  shared_flag="$shared_flag "'${wl}-G'
-	fi
-	_LT_TAGVAR(link_all_deplibs, $1)=no
-      else
-	# not using gcc
-	if test "$host_cpu" = ia64; then
-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	# chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-	else
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag='${wl}-G'
-	  else
-	    shared_flag='${wl}-bM:SRE'
-	  fi
-	fi
-      fi
-
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-	# Warning - without using the other runtime loading flags (-brtl),
-	# -berok will link without error, but may produce a broken library.
-	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-        # Determine the default libpath from the value encoded in an
-        # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-      else
-	if test "$host_cpu" = ia64; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-	else
-	 # Determine the default libpath from the value encoded in an
-	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	  # Warning - without using the other run time loading flags,
-	  # -berok will link without error, but may produce a broken library.
-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	  # This is similar to how AIX traditionally builds its shared libraries.
-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-	fi
-      fi
-      ;;
-
-    amigaos*)
-      case $host_cpu in
-      powerpc)
-            # see comment about AmigaOS4 .so support
-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
-        ;;
-      m68k)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
-        ;;
-      esac
-      ;;
-
-    bsdi[[45]]*)
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      _LT_DARWIN_LINKER_FEATURES($1)
-      ;;
-
-    dgux*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# hardcode_minus_L: Not really in the search PATH,
-	# but as the default location of the library.
-	_LT_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      else
-	case $host_cpu in
-	hppa*64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	esac
-      fi
-      if test "$with_gnu_ld" = no; then
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	case $host_cpu in
-	hppa*64*|ia64*)
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  ;;
-	*)
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-	  # hardcode_minus_L: Not really in the search PATH,
-	  # but as the default location of the library.
-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	  ;;
-	esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	# Try to use the -exported_symbol ld option, if it does not
-	# work, assume that -exports_file does not work either and
-	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(inherit_rpath, $1)=yes
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *nto* | *qnx*)
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-	_LT_TAGVAR(hardcode_direct, $1)=yes
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	else
-	  case $host_os in
-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	     ;;
-	   *)
-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	     ;;
-	  esac
-	fi
-      else
-	_LT_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
-
-	# Both c and cxx compiler support -rpath directly
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-      else
-	case `$CC -V 2>&1` in
-	*"Compilers 5.0"*)
-	  wlarc=''
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
-	  ;;
-	*)
-	  wlarc='${wl}'
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
-	  ;;
-	esac
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *)
-	# The compiler driver will combine and reorder linker options,
-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
-	# but is careful enough not to reorder.
-	# Supported since Solaris 2.6 (maybe 2.5.1?)
-	if test "$GCC" = yes; then
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-	else
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	fi
-	;;
-      esac
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-	# Use $CC to link under sequent, because it throws in some extra .o
-	# files that make .init and .fini sections work.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_direct, $1)=yes
-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-	sni)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-	;;
-	siemens)
-	  ## LD is ld it makes a PLAMLIB
-	  ## CC just makes a GrossModule.
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-	  _LT_TAGVAR(hardcode_direct, $1)=no
-        ;;
-	motorola)
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-	;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	runpath_var=LD_RUN_PATH
-	hardcode_runpath_var=yes
-	_LT_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT use -z defs as we might desire, because we do not
-      # link with -lc, and that would cause any symbols used from libc to
-      # always be unresolved, which means just about no library would
-      # ever link correctly.  If we're not using GNU ld we use -z text
-      # though, which does catch some bad symbols but isn't as heavy-handed
-      # as -z defs.
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-
-    if test x$host_vendor = xsni; then
-      case $host in
-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
-	;;
-      esac
-    fi
-  fi
-])
-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
-
-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
-_LT_DECL([], [extract_expsyms_cmds], [2],
-    [The commands to extract the exported symbol list from a shared archive])
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
-    [Whether or not to add -lc for building shared libraries])
-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
-    [enable_shared_with_static_runtimes], [0],
-    [Whether or not to disallow shared libs when runtime libs are static])
-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
-    [Compiler flag to allow reflexive dlopens])
-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
-    [Compiler flag to generate shared objects directly from archives])
-_LT_TAGDECL([], [compiler_needs_object], [1],
-    [Whether the compiler copes with passing no objects directly])
-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
-    [Create an old-style archive from a shared archive])
-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
-    [Create a temporary old-style archive to link instead of a shared archive])
-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
-_LT_TAGDECL([], [archive_expsym_cmds], [2])
-_LT_TAGDECL([], [module_cmds], [2],
-    [Commands used to build a loadable module if different from building
-    a shared archive.])
-_LT_TAGDECL([], [module_expsym_cmds], [2])
-_LT_TAGDECL([], [with_gnu_ld], [1],
-    [Whether we are building with GNU ld or not])
-_LT_TAGDECL([], [allow_undefined_flag], [1],
-    [Flag that allows shared libraries with undefined symbols to be built])
-_LT_TAGDECL([], [no_undefined_flag], [1],
-    [Flag that enforces no undefined symbols])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
-    [Flag to hardcode $libdir into a binary during linking.
-    This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
-    [Whether we need a single "-rpath" flag with a separated argument])
-_LT_TAGDECL([], [hardcode_direct], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary])
-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
-    DIR into the resulting binary and the resulting library dependency is
-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
-    library is relocated])
-_LT_TAGDECL([], [hardcode_minus_L], [0],
-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
-    into the resulting binary])
-_LT_TAGDECL([], [hardcode_automatic], [0],
-    [Set to "yes" if building a shared library automatically hardcodes DIR
-    into the library and all subsequent libraries and executables linked
-    against it])
-_LT_TAGDECL([], [inherit_rpath], [0],
-    [Set to yes if linker adds runtime paths of dependent libraries
-    to runtime path list])
-_LT_TAGDECL([], [link_all_deplibs], [0],
-    [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
-_LT_TAGDECL([], [always_export_symbols], [0],
-    [Set to "yes" if exported symbols are required])
-_LT_TAGDECL([], [export_symbols_cmds], [2],
-    [The commands to list exported symbols])
-_LT_TAGDECL([], [exclude_expsyms], [1],
-    [Symbols that should not be listed in the preloaded symbols])
-_LT_TAGDECL([], [include_expsyms], [1],
-    [Symbols that must always be exported])
-_LT_TAGDECL([], [prelink_cmds], [2],
-    [Commands necessary for linking programs (against libraries) with templates])
-_LT_TAGDECL([], [file_list_spec], [1],
-    [Specify filename containing input files])
-dnl FIXME: Not yet implemented
-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
-dnl    [Compiler flag to generate thread safe objects])
-])# _LT_LINKER_SHLIBS
-
-
-# _LT_LANG_C_CONFIG([TAG])
-# ------------------------
-# Ensure that the configuration variables for a C compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_C_CONFIG],
-[m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-_LT_TAG_COMPILER
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_SYS_DYNAMIC_LINKER($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-  LT_SYS_DLOPEN_SELF
-  _LT_CMD_STRIPLIB
-
-  # Report which library types will actually be built
-  AC_MSG_CHECKING([if libtool supports shared libraries])
-  AC_MSG_RESULT([$can_build_shared])
-
-  AC_MSG_CHECKING([whether to build shared libraries])
-  test "$can_build_shared" = "no" && enable_shared=no
-
-  # On AIX, shared libraries and static libraries use the same namespace, and
-  # are all built from PIC.
-  case $host_os in
-  aix3*)
-    test "$enable_shared" = yes && enable_static=no
-    if test -n "$RANLIB"; then
-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
-      postinstall_cmds='$RANLIB $lib'
-    fi
-    ;;
-
-  aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
-    fi
-    ;;
-  esac
-  AC_MSG_RESULT([$enable_shared])
-
-  AC_MSG_CHECKING([whether to build static libraries])
-  # Make sure either enable_shared or enable_static is yes.
-  test "$enable_shared" = yes || enable_static=yes
-  AC_MSG_RESULT([$enable_static])
-
-  _LT_CONFIG($1)
-fi
-AC_LANG_POP
-CC="$lt_save_CC"
-])# _LT_LANG_C_CONFIG
-
-
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
-# _LT_LANG_CXX_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a C++ compiler are suitably
-# defined.  These variables are subsequently used by _LT_CONFIG to write
-# the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-m4_require([_LT_DECL_EGREP])dnl
-
-AC_LANG_PUSH(C++)
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(compiler_needs_object, $1)=no
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the CXX compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_caught_CXX_error" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="int some_variable = 0;"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC=$CC
-  lt_save_LD=$LD
-  lt_save_GCC=$GCC
-  GCC=$GXX
-  lt_save_with_gnu_ld=$with_gnu_ld
-  lt_save_path_LD=$lt_cv_path_LD
-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-  else
-    $as_unset lt_cv_prog_gnu_ld
-  fi
-  if test -n "${lt_cv_path_LDCXX+set}"; then
-    lt_cv_path_LD=$lt_cv_path_LDCXX
-  else
-    $as_unset lt_cv_path_LD
-  fi
-  test -z "${LDCXX+set}" || LD=$LDCXX
-  CC=${CXX-"c++"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    # We don't want -fno-exception when compiling C++ code, so set the
-    # no_builtin_flag separately
-    if test "$GXX" = yes; then
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-    else
-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-    fi
-
-    if test "$GXX" = yes; then
-      # Set up default GNU C++ configuration
-
-      LT_PATH_LD
-
-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
-      # archiving commands below assume that GNU ld is being used.
-      if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-        # If archive_cmds runs LD, not CC, wlarc should be empty
-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-        #     investigate it a little bit more. (MM)
-        wlarc='${wl}'
-
-        # ancient GNU ld didn't support --whole-archive et. al.
-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
-	  $GREP 'no-whole-archive' > /dev/null; then
-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-        else
-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
-        fi
-      else
-        with_gnu_ld=no
-        wlarc=
-
-        # A generic and very simple default shared library creation
-        # command for GNU C++ for the case where it uses the native
-        # linker, instead of GNU ld.  If possible, this setting should
-        # overridden to take advantage of the native linker features on
-        # the platform it is being used on.
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      fi
-
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-    else
-      GXX=no
-      with_gnu_ld=no
-      wlarc=
-    fi
-
-    # PORTME: fill in a description of your system's C++ link characteristics
-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-    _LT_TAGVAR(ld_shlibs, $1)=yes
-    case $host_os in
-      aix3*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-      aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
-          # On IA64, the linker does run time linking by default, so we don't
-          # have to do anything special.
-          aix_use_runtimelinking=no
-          exp_sym_flag='-Bexport'
-          no_entry_flag=""
-        else
-          aix_use_runtimelinking=no
-
-          # Test if we are trying to use run time linking or normal
-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-          # need to do runtime linking.
-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-	    for ld_flag in $LDFLAGS; do
-	      case $ld_flag in
-	      *-brtl*)
-	        aix_use_runtimelinking=yes
-	        break
-	        ;;
-	      esac
-	    done
-	    ;;
-          esac
-
-          exp_sym_flag='-bexport'
-          no_entry_flag='-bnoentry'
-        fi
-
-        # When large executables or shared objects are built, AIX ld can
-        # have problems creating the table of contents.  If linking a library
-        # or program results in "error TOC overflow" add -mminimal-toc to
-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-        _LT_TAGVAR(archive_cmds, $1)=''
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-        _LT_TAGVAR(link_all_deplibs, $1)=yes
-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
-
-        if test "$GXX" = yes; then
-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
-          # We only want to do this on AIX 4.2 and lower, the check
-          # below for broken collect2 doesn't work under 4.3+
-	  collect2name=`${CC} -print-prog-name=collect2`
-	  if test -f "$collect2name" &&
-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
-	  then
-	    # We have reworked collect2
-	    :
-	  else
-	    # We have old collect2
-	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
-	    # It fails to find uninstalled libraries when the uninstalled
-	    # path is not listed in the libpath.  Setting hardcode_minus_L
-	    # to unsupported forces relinking
-	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
-	  fi
-          esac
-          shared_flag='-shared'
-	  if test "$aix_use_runtimelinking" = yes; then
-	    shared_flag="$shared_flag "'${wl}-G'
-	  fi
-        else
-          # not using gcc
-          if test "$host_cpu" = ia64; then
-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-	  # chokes on -Wl,-G. The following line is correct:
-	  shared_flag='-G'
-          else
-	    if test "$aix_use_runtimelinking" = yes; then
-	      shared_flag='${wl}-G'
-	    else
-	      shared_flag='${wl}-bM:SRE'
-	    fi
-          fi
-        fi
-
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
-        # It seems that -bexpall does not export symbols beginning with
-        # underscore (_), so it is better to generate a list of symbols to
-	# export.
-        _LT_TAGVAR(always_export_symbols, $1)=yes
-        if test "$aix_use_runtimelinking" = yes; then
-          # Warning - without using the other runtime loading flags (-brtl),
-          # -berok will link without error, but may produce a broken library.
-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
-          # Determine the default libpath from the value encoded in an empty
-          # executable.
-          _LT_SYS_MODULE_PATH_AIX
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-        else
-          if test "$host_cpu" = ia64; then
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-          else
-	    # Determine the default libpath from the value encoded in an
-	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-	    # Warning - without using the other run time loading flags,
-	    # -berok will link without error, but may produce a broken library.
-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-	    # This is similar to how AIX traditionally builds its shared
-	    # libraries.
-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-          fi
-        fi
-        ;;
-
-      beos*)
-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-	  # support --undefined.  This deserves some investigation.  FIXME
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      chorus*)
-        case $cc_basename in
-          *)
-	  # FIXME: insert proper C++ library support
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	  ;;
-        esac
-        ;;
-
-      cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
-      darwin* | rhapsody*)
-        _LT_DARWIN_LINKER_FEATURES($1)
-	;;
-
-      dgux*)
-        case $cc_basename in
-          ec++*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          ghcx*)
-	    # Green Hills C++ Compiler
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      freebsd[[12]]*)
-        # C++ shared libraries reported to be fairly broken before
-	# switch to ELF
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      freebsd-elf*)
-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        ;;
-
-      freebsd* | dragonfly*)
-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-        # conventions
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-        ;;
-
-      gnu*)
-        ;;
-
-      hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        _LT_TAGVAR(hardcode_direct, $1)=yes
-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-				             # but as the default
-				             # location of the library.
-
-        case $cc_basename in
-          CC*)
-            # FIXME: insert proper C++ library support
-            _LT_TAGVAR(ld_shlibs, $1)=no
-            ;;
-          aCC*)
-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            # Commands to make compiler produce verbose output that lists
-            # what "hidden" libraries, object files and flags are used when
-            # linking a shared library.
-            #
-            # There doesn't appear to be a way to prevent this compiler from
-            # explicitly linking system object files so we need to strip them
-            # from the output so that they don't get included in the library
-            # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-            ;;
-          *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-            else
-              # FIXME: insert proper C++ library support
-              _LT_TAGVAR(ld_shlibs, $1)=no
-            fi
-            ;;
-        esac
-        ;;
-
-      hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-          case $host_cpu in
-            hppa*64*|ia64*)
-              ;;
-            *)
-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-              ;;
-          esac
-        fi
-        case $host_cpu in
-          hppa*64*|ia64*)
-            _LT_TAGVAR(hardcode_direct, $1)=no
-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-            ;;
-          *)
-            _LT_TAGVAR(hardcode_direct, $1)=yes
-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-					         # but as the default
-					         # location of the library.
-            ;;
-        esac
-
-        case $cc_basename in
-          CC*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          aCC*)
-	    case $host_cpu in
-	      hppa*64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      ia64*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	      *)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	        ;;
-	    esac
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test $with_gnu_ld = no; then
-	        case $host_cpu in
-	          hppa*64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	            ;;
-	        esac
-	      fi
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      interix[[3-9]]*)
-	_LT_TAGVAR(hardcode_direct, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-	# Instead, shared libraries are loaded at an image base (0x10000000 by
-	# default) and relocated if they conflict, which is a slow very memory
-	# consuming and fragmenting process.  To avoid this, we pick a random,
-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-	;;
-      irix5* | irix6*)
-        case $cc_basename in
-          CC*)
-	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    if test "$GXX" = yes; then
-	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
-	      fi
-	    fi
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-	    ;;
-        esac
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-        _LT_TAGVAR(inherit_rpath, $1)=yes
-        ;;
-
-      linux* | k*bsd*-gnu)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-	    ;;
-	  icpc* | ecpc* )
-	    # Intel C++
-	    with_gnu_ld=yes
-	    # version 8.0 and above of icpc choke on multiply defined symbols
-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
-	    # earlier do not add the objects themselves.
-	    case `$CC -V 2>&1` in
-	      *"Version 7."*)
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	      *)  # Version 8.0 or newer
-	        tmp_idyn=
-	        case $host_cpu in
-		  ia64*) tmp_idyn=' -i_dynamic';;
-		esac
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-		;;
-	    esac
-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-	    ;;
-          pgCC* | pgcpp*)
-            # Portland Group C++ compiler
-	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
-	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
-	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
-		$RANLIB $oldlib'
-	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
-		rm -rf $tpldir~
-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    *) # Version 6 will use weak symbols
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-	      ;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-            ;;
-	  cxx*)
-	    # Compaq C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-	    runpath_var=LD_RUN_PATH
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  xl*)
-	    # IBM XL 8.0 on PPC, with GNU ld
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	    if test "x$supports_anon_versioning" = xyes; then
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-		echo "local: *; };" >> $output_objdir/$libname.ver~
-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-	    fi
-	    ;;
-	  *)
-	    case `$CC -V 2>&1 | sed 5q` in
-	    *Sun\ C*)
-	      # Sun C++ 5.9
-	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
-	      _LT_TAGVAR(compiler_needs_object, $1)=yes
-
-	      # Not sure whether something based on
-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-	      # would be better.
-	      output_verbose_link_cmd='echo'
-
-	      # Archives containing C++ object files must be created using
-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	      # necessary to make sure instantiated templates are included
-	      # in the archive.
-	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	      ;;
-	    esac
-	    ;;
-	esac
-	;;
-
-      lynxos*)
-        # FIXME: insert proper C++ library support
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      m88k*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      mvs*)
-        case $cc_basename in
-          cxx*)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	  *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-	esac
-	;;
-
-      netbsd*)
-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-	  wlarc=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	fi
-	# Workaround some broken pre-1.5 toolchains
-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-	;;
-
-      *nto* | *qnx*)
-        _LT_TAGVAR(ld_shlibs, $1)=yes
-	;;
-
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-	_LT_TAGVAR(ld_shlibs, $1)=no
-	;;
-
-      openbsd*)
-	if test -f /usr/libexec/ld.so; then
-	  _LT_TAGVAR(hardcode_direct, $1)=yes
-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-	  fi
-	  output_verbose_link_cmd=echo
-	else
-	  _LT_TAGVAR(ld_shlibs, $1)=no
-	fi
-	;;
-
-      osf3* | osf4* | osf5*)
-        case $cc_basename in
-          KCC*)
-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-	    # KCC will only create a shared library if the output file
-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
-	    # to its proper name (with version) after linking.
-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Archives containing C++ object files must be created using
-	    # the KAI C++ compiler.
-	    case $host in
-	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
-	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
-	    esac
-	    ;;
-          RCC*)
-	    # Rational C++ 2.4.1
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          cxx*)
-	    case $host in
-	      osf3*)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-		;;
-	      *)
-	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
-	          $RM $lib.exp'
-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-		;;
-	    esac
-
-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	    # Commands to make compiler produce verbose output that lists
-	    # what "hidden" libraries, object files and flags are used when
-	    # linking a shared library.
-	    #
-	    # There doesn't appear to be a way to prevent this compiler from
-	    # explicitly linking system object files so we need to strip them
-	    # from the output so that they don't get included in the library
-	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
-	    ;;
-	  *)
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	      case $host in
-	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-		  ;;
-	      esac
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
-
-	      # Commands to make compiler produce verbose output that lists
-	      # what "hidden" libraries, object files and flags are used when
-	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-
-	    else
-	      # FIXME: insert proper C++ library support
-	      _LT_TAGVAR(ld_shlibs, $1)=no
-	    fi
-	    ;;
-        esac
-        ;;
-
-      psos*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      sunos4*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.x
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          lcc*)
-	    # Lucid
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      solaris*)
-        case $cc_basename in
-          CC*)
-	    # Sun C++ 4.2, 5.x and Centerline C++
-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
-	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	    case $host_os in
-	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-	      *)
-		# The compiler driver will combine and reorder linker options,
-		# but understands `-z linker_flag'.
-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
-		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-	        ;;
-	    esac
-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
-
-	    output_verbose_link_cmd='echo'
-
-	    # Archives containing C++ object files must be created using
-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-	    # necessary to make sure instantiated templates are included
-	    # in the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-	    ;;
-          gcx*)
-	    # Green Hills C++ Compiler
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-	    # The C++ compiler must be used to create the archive.
-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-	    ;;
-          *)
-	    # GNU C++ compiler with Solaris linker
-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      else
-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
-	        # platform.
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
-
-	        # Commands to make compiler produce verbose output that lists
-	        # what "hidden" libraries, object files and flags are used when
-	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
-	      fi
-
-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-	      case $host_os in
-		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-		*)
-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-		  ;;
-	      esac
-	    fi
-	    ;;
-        esac
-        ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      case $cc_basename in
-        CC*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	  ;;
-      esac
-      ;;
-
-      sysv5* | sco3.2v5* | sco5v6*)
-	# Note: We can NOT use -z defs as we might desire, because we do not
-	# link with -lc, and that would cause any symbols used from libc to
-	# always be unresolved, which means just about no library would
-	# ever link correctly.  If we're not using GNU ld we use -z text
-	# though, which does catch some bad symbols but isn't as heavy-handed
-	# as -z defs.
-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
-	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
-	_LT_TAGVAR(link_all_deplibs, $1)=yes
-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-	runpath_var='LD_RUN_PATH'
-
-	case $cc_basename in
-          CC*)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	  *)
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-	    ;;
-	esac
-      ;;
-
-      tandem*)
-        case $cc_basename in
-          NCC*)
-	    # NonStop-UX NCC 3.20
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-          *)
-	    # FIXME: insert proper C++ library support
-	    _LT_TAGVAR(ld_shlibs, $1)=no
-	    ;;
-        esac
-        ;;
-
-      vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-
-      *)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
-        ;;
-    esac
-
-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  CC=$lt_save_CC
-  LDCXX=$LD
-  LD=$lt_save_LD
-  GCC=$lt_save_GCC
-  with_gnu_ld=$lt_save_with_gnu_ld
-  lt_cv_path_LDCXX=$lt_cv_path_LD
-  lt_cv_path_LD=$lt_save_path_LD
-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-fi # test "$_lt_caught_CXX_error" != yes
-
-AC_LANG_POP
-])# _LT_LANG_CXX_CONFIG
-
-
-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
-# ---------------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
-# Dependencies to place before and after the object being linked:
-_LT_TAGVAR(predep_objects, $1)=
-_LT_TAGVAR(postdep_objects, $1)=
-_LT_TAGVAR(predeps, $1)=
-_LT_TAGVAR(postdeps, $1)=
-_LT_TAGVAR(compiler_lib_search_path, $1)=
-
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
-int a;
-void foo (void) { a = 0; }
-_LT_EOF
-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-_LT_EOF
-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
-      subroutine foo
-      implicit none
-      integer a
-      a=0
-      return
-      end
-_LT_EOF
-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-_LT_EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" ||
-          test $p = "-R"; then
-	 prev=$p
-	 continue
-       else
-	 prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
-	   # Internal compiler library paths should come after those
-	   # provided the user.  The postdeps already come after the
-	   # user supplied libs so there is no need to process them.
-	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-	   else
-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-	   fi
-	   ;;
-	 # The "-l" case would never come before the object being
-	 # linked, so don't bother handling this case.
-	 esac
-       else
-	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
-	 else
-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
-	 fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-	 pre_test_object_deps_done=yes
-	 continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-	   _LT_TAGVAR(predep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
-	 fi
-       else
-	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
-	   _LT_TAGVAR(postdep_objects, $1)="$p"
-	 else
-	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
-	 fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$RM -f confest.$objext
-
-# PORTME: override above test on systems where it is broken
-m4_if([$1], [CXX],
-[case $host_os in
-interix[[3-9]]*)
-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
-  # hack all around it, let's just trust "g++" to DTRT.
-  _LT_TAGVAR(predep_objects,$1)=
-  _LT_TAGVAR(postdep_objects,$1)=
-  _LT_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-
-case " $_LT_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
-    [The directories searched by this compiler when creating a shared library])
-_LT_TAGDECL([], [predep_objects], [1],
-    [Dependencies to place before and after the objects being linked to
-    create a shared library])
-_LT_TAGDECL([], [postdep_objects], [1])
-_LT_TAGDECL([], [predeps], [1])
-_LT_TAGDECL([], [postdeps], [1])
-_LT_TAGDECL([], [compiler_lib_search_path], [1],
-    [The library search path used internally by the compiler when linking
-    a shared library])
-])# _LT_SYS_HIDDEN_LIBDEPS
-
-
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
-# _LT_LANG_F77_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for a Fortran 77 compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the F77 compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_F77" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${F77-"f77"}
-  compiler=$CC
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-  GCC=$G77
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_F77" != yes
-
-AC_LANG_POP
-])# _LT_LANG_F77_CONFIG
-
-
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
-# _LT_LANG_FC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for a Fortran compiler are
-# suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
-
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_TAGVAR(allow_undefined_flag, $1)=
-_LT_TAGVAR(always_export_symbols, $1)=no
-_LT_TAGVAR(archive_expsym_cmds, $1)=
-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_TAGVAR(hardcode_direct, $1)=no
-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_TAGVAR(hardcode_minus_L, $1)=no
-_LT_TAGVAR(hardcode_automatic, $1)=no
-_LT_TAGVAR(inherit_rpath, $1)=no
-_LT_TAGVAR(module_cmds, $1)=
-_LT_TAGVAR(module_expsym_cmds, $1)=
-_LT_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_TAGVAR(no_undefined_flag, $1)=
-_LT_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for fc test sources.
-ac_ext=${ac_fc_srcext-f}
-
-# Object file extension for compiled fc test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# No sense in running all these tests if we already determined that
-# the FC compiler isn't working.  Some variables (like enable_shared)
-# are currently assumed to apply to all compilers on this platform,
-# and will be corrupted by setting them based on a non-working compiler.
-if test "$_lt_disable_FC" != yes; then
-  # Code to be used in simple compile tests
-  lt_simple_compile_test_code="\
-      subroutine t
-      return
-      end
-"
-
-  # Code to be used in simple link tests
-  lt_simple_link_test_code="\
-      program t
-      end
-"
-
-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-  _LT_TAG_COMPILER
-
-  # save warnings/boilerplate of simple test code
-  _LT_COMPILER_BOILERPLATE
-  _LT_LINKER_BOILERPLATE
-
-  # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
-  lt_save_GCC=$GCC
-  CC=${FC-"f95"}
-  compiler=$CC
-  GCC=$ac_cv_fc_compiler_gnu
-
-  _LT_TAGVAR(compiler, $1)=$CC
-  _LT_CC_BASENAME([$compiler])
-
-  if test -n "$compiler"; then
-    AC_MSG_CHECKING([if libtool supports shared libraries])
-    AC_MSG_RESULT([$can_build_shared])
-
-    AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
-
-    # On AIX, shared libraries and static libraries use the same namespace, and
-    # are all built from PIC.
-    case $host_os in
-      aix3*)
-        test "$enable_shared" = yes && enable_static=no
-        if test -n "$RANLIB"; then
-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
-          postinstall_cmds='$RANLIB $lib'
-        fi
-        ;;
-      aix[[4-9]]*)
-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-	  test "$enable_shared" = yes && enable_static=no
-	fi
-        ;;
-    esac
-    AC_MSG_RESULT([$enable_shared])
-
-    AC_MSG_CHECKING([whether to build static libraries])
-    # Make sure either enable_shared or enable_static is yes.
-    test "$enable_shared" = yes || enable_static=yes
-    AC_MSG_RESULT([$enable_static])
-
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
-
-    ## CAVEAT EMPTOR:
-    ## There is no encapsulation within the following macros, do not change
-    ## the running order or otherwise move them around unless you know exactly
-    ## what you are doing...
-    _LT_SYS_HIDDEN_LIBDEPS($1)
-    _LT_COMPILER_PIC($1)
-    _LT_COMPILER_C_O($1)
-    _LT_COMPILER_FILE_LOCKS($1)
-    _LT_LINKER_SHLIBS($1)
-    _LT_SYS_DYNAMIC_LINKER($1)
-    _LT_LINKER_HARDCODE_LIBPATH($1)
-
-    _LT_CONFIG($1)
-  fi # test -n "$compiler"
-
-  GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-fi # test "$_lt_disable_FC" != yes
-
-AC_LANG_POP
-])# _LT_LANG_FC_CONFIG
-
-
-# _LT_LANG_GCJ_CONFIG([TAG])
-# --------------------------
-# Ensure that the configuration variables for the GNU Java Compiler compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_GCJ_CONFIG],
-[AC_REQUIRE([LT_PROG_GCJ])dnl
-AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=yes
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-if test -n "$compiler"; then
-  _LT_COMPILER_NO_RTTI($1)
-  _LT_COMPILER_PIC($1)
-  _LT_COMPILER_C_O($1)
-  _LT_COMPILER_FILE_LOCKS($1)
-  _LT_LINKER_SHLIBS($1)
-  _LT_LINKER_HARDCODE_LIBPATH($1)
-
-  _LT_CONFIG($1)
-fi
-
-AC_LANG_RESTORE
-
-GCC=$lt_save_GCC
-CC="$lt_save_CC"
-])# _LT_LANG_GCJ_CONFIG
-
-
-# _LT_LANG_RC_CONFIG([TAG])
-# -------------------------
-# Ensure that the configuration variables for the Windows resource compiler
-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
-m4_defun([_LT_LANG_RC_CONFIG],
-[AC_REQUIRE([LT_PROG_RC])dnl
-AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_TAG_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-lt_save_GCC=$GCC
-GCC=
-CC=${RC-"windres"}
-compiler=$CC
-_LT_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-if test -n "$compiler"; then
-  :
-  _LT_CONFIG($1)
-fi
-
-GCC=$lt_save_GCC
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# _LT_LANG_RC_CONFIG
-
-
-# LT_PROG_GCJ
-# -----------
-AC_DEFUN([LT_PROG_GCJ],
-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
-    [AC_CHECK_TOOL(GCJ, gcj,)
-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-      AC_SUBST(GCJFLAGS)])])[]dnl
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
-
-
-# LT_PROG_RC
-# ----------
-AC_DEFUN([LT_PROG_RC],
-[AC_CHECK_TOOL(RC, windres,)
-])
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_RC], [])
-
-
-# _LT_DECL_EGREP
-# --------------
-# If we don't have a new enough Autoconf to choose the best grep
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_EGREP],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_REQUIRE([AC_PROG_FGREP])dnl
-test -z "$GREP" && GREP=grep
-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
-_LT_DECL([], [EGREP], [1], [An ERE matcher])
-_LT_DECL([], [FGREP], [1], [A literal string matcher])
-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
-AC_SUBST([GREP])
-])
-
-
-# _LT_DECL_OBJDUMP
-# --------------
-# If we don't have a new enough Autoconf to choose the best objdump
-# available, choose the one first in the user's PATH.
-m4_defun([_LT_DECL_OBJDUMP],
-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
-AC_SUBST([OBJDUMP])
-])
-
-
-# _LT_DECL_SED
-# ------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-m4_defun([_LT_DECL_SED],
-[AC_PROG_SED
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
-])# _LT_DECL_SED
-
-m4_ifndef([AC_PROG_SED], [
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-
-m4_defun([AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-IFS=$as_save_IFS
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && continue
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-])
-SED=$lt_cv_path_SED
-AC_SUBST([SED])
-AC_MSG_RESULT([$SED])
-])#AC_PROG_SED
-])#m4_ifndef
-
-# Old name:
-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([LT_AC_PROG_SED], [])
-
-
-# _LT_CHECK_SHELL_FEATURES
-# ------------------------
-# Find out whether the shell is Bourne or XSI compatible,
-# or has some other useful features.
-m4_defun([_LT_CHECK_SHELL_FEATURES],
-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
-# Try some XSI features
-xsi_shell=no
-( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
-    && eval 'test $(( 1 + 1 )) -eq 2 \
-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
-  && xsi_shell=yes
-AC_MSG_RESULT([$xsi_shell])
-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
-
-AC_MSG_CHECKING([whether the shell understands "+="])
-lt_shell_append=no
-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
-    >/dev/null 2>&1 \
-  && lt_shell_append=yes
-AC_MSG_RESULT([$lt_shell_append])
-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  lt_unset=unset
-else
-  lt_unset=false
-fi
-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-  lt_SP2NL='tr \040 \012'
-  lt_NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  lt_SP2NL='tr \100 \n'
-  lt_NL2SP='tr \r\n \100\100'
-  ;;
-esac
-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
-])# _LT_CHECK_SHELL_FEATURES
-
-
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
-    ;;
-  esac
-])
-
-# Helper functions for option handling.                    -*- Autoconf -*-
-#
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-#   Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltoptions.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
-
-
-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
-# ------------------------------------------
-m4_define([_LT_MANGLE_OPTION],
-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
-
-
-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
-# ---------------------------------------
-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
-# saved as a flag.
-m4_define([_LT_SET_OPTION],
-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
-        _LT_MANGLE_DEFUN([$1], [$2]),
-    [m4_warning([Unknown $1 option `$2'])])[]dnl
-])
-
-
-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
-# ------------------------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-m4_define([_LT_IF_OPTION],
-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
-
-
-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
-# -------------------------------------------------------
-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
-# are set.
-m4_define([_LT_UNLESS_OPTIONS],
-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
-		      [m4_define([$0_found])])])[]dnl
-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
-])[]dnl
-])
-
-
-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
-# ----------------------------------------
-# OPTION-LIST is a space-separated list of Libtool options associated
-# with MACRO-NAME.  If any OPTION has a matching handler declared with
-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
-# the unknown option and exit.
-m4_defun([_LT_SET_OPTIONS],
-[# Set options
-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
-    [_LT_SET_OPTION([$1], _LT_Option)])
-
-m4_if([$1],[LT_INIT],[
-  dnl
-  dnl Simply set some default values (i.e off) if boolean options were not
-  dnl specified:
-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
-  ])
-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
-  ])
-  dnl
-  dnl If no reference was made to various pairs of opposing options, then
-  dnl we run the default mode handler for the pair.  For example, if neither
-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
-  dnl archives by default:
-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
-  		   [_LT_ENABLE_FAST_INSTALL])
-  ])
-])# _LT_SET_OPTIONS
-
-
-
-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
-# -----------------------------------------
-m4_define([_LT_MANGLE_DEFUN],
-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
-
-
-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
-# -----------------------------------------------
-m4_define([LT_OPTION_DEFINE],
-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
-])# LT_OPTION_DEFINE
-
-
-# dlopen
-# ------
-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
-])
-
-AU_DEFUN([AC_LIBTOOL_DLOPEN],
-[_LT_SET_OPTION([LT_INIT], [dlopen])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `dlopen' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
-
-
-# win32-dll
-# ---------
-# Declare package support for building win32 dll's.
-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
-[enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-esac
-
-test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
-])# win32-dll
-
-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-_LT_SET_OPTION([LT_INIT], [win32-dll])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `win32-dll' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
-
-
-# _LT_ENABLE_SHARED([DEFAULT])
-# ----------------------------
-# implement the --enable-shared flag, and supports the `shared' and
-# `disable-shared' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_SHARED],
-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([shared],
-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_shared=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
-
-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
-	[Whether or not to build shared libraries])
-])# _LT_ENABLE_SHARED
-
-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
-])
-
-AC_DEFUN([AC_DISABLE_SHARED],
-[_LT_SET_OPTION([LT_INIT], [disable-shared])
-])
-
-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
-
-
-
-# _LT_ENABLE_STATIC([DEFAULT])
-# ----------------------------
-# implement the --enable-static flag, and support the `static' and
-# `disable-static' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_STATIC],
-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([static],
-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_static=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
-
-    _LT_DECL([build_old_libs], [enable_static], [0],
-	[Whether or not to build static libraries])
-])# _LT_ENABLE_STATIC
-
-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
-
-# Old names:
-AC_DEFUN([AC_ENABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
-])
-
-AC_DEFUN([AC_DISABLE_STATIC],
-[_LT_SET_OPTION([LT_INIT], [disable-static])
-])
-
-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
-
-
-
-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
-# ----------------------------------
-# implement the --enable-fast-install flag, and support the `fast-install'
-# and `disable-fast-install' LT_INIT options.
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-m4_define([_LT_ENABLE_FAST_INSTALL],
-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
-AC_ARG_ENABLE([fast-install],
-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-	IFS="$lt_save_ifs"
-	if test "X$pkg" = "X$p"; then
-	  enable_fast_install=yes
-	fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
-
-_LT_DECL([fast_install], [enable_fast_install], [0],
-	 [Whether or not to optimize for fast installation])dnl
-])# _LT_ENABLE_FAST_INSTALL
-
-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
-
-# Old names:
-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `fast-install' option into LT_INIT's first parameter.])
-])
-
-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
-the `disable-fast-install' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
-
-
-# _LT_WITH_PIC([MODE])
-# --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
-# LT_INIT options.
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-m4_define([_LT_WITH_PIC],
-[AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
-
-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
-])# _LT_WITH_PIC
-
-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
-
-# Old name:
-AU_DEFUN([AC_LIBTOOL_PICMODE],
-[_LT_SET_OPTION([LT_INIT], [pic-only])
-AC_DIAGNOSE([obsolete],
-[$0: Remove this warning and the call to _LT_SET_OPTION when you
-put the `pic-only' option into LT_INIT's first parameter.])
-])
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
-
-
-m4_define([_LTDL_MODE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
-		 [m4_define([_LTDL_MODE], [nonrecursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
-		 [m4_define([_LTDL_MODE], [recursive])])
-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
-		 [m4_define([_LTDL_MODE], [subproject])])
-
-m4_define([_LTDL_TYPE], [])
-LT_OPTION_DEFINE([LTDL_INIT], [installable],
-		 [m4_define([_LTDL_TYPE], [installable])])
-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
-		 [m4_define([_LTDL_TYPE], [convenience])])
-
-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
-#
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-# Written by Gary V. Vaughan, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 6 ltsugar.m4
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
-
-
-# lt_join(SEP, ARG1, [ARG2...])
-# -----------------------------
-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
-# associated separator.
-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
-# versions in m4sugar had bugs.
-m4_define([lt_join],
-[m4_if([$#], [1], [],
-       [$#], [2], [[$2]],
-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
-m4_define([_lt_join],
-[m4_if([$#$2], [2], [],
-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
-
-
-# lt_car(LIST)
-# lt_cdr(LIST)
-# ------------
-# Manipulate m4 lists.
-# These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
-m4_define([lt_car], [[$1]])
-m4_define([lt_cdr],
-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
-       [$#], 1, [],
-       [m4_dquote(m4_shift($@))])])
-m4_define([lt_unquote], $1)
-
-
-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
-# ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
-# Note that neither SEPARATOR nor STRING are expanded; they are appended
-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
-# than defined and empty).
-#
-# This macro is needed until we can rely on Autoconf 2.62, since earlier
-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
-m4_define([lt_append],
-[m4_define([$1],
-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
-
-
-
-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
-# ----------------------------------------------------------
-# Produce a SEP delimited list of all paired combinations of elements of
-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
-# has the form PREFIXmINFIXSUFFIXn.
-# Needed until we can rely on m4_combine added in Autoconf 2.62.
-m4_define([lt_combine],
-[m4_if(m4_eval([$# > 3]), [1],
-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
-[[m4_foreach([_Lt_prefix], [$2],
-	     [m4_foreach([_Lt_suffix],
-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
-
-
-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
-# -----------------------------------------------------------------------
-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
-m4_define([lt_if_append_uniq],
-[m4_ifdef([$1],
-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
-		 [lt_append([$1], [$2], [$3])$4],
-		 [$5])],
-	  [lt_append([$1], [$2], [$3])$4])])
-
-
-# lt_dict_add(DICT, KEY, VALUE)
-# -----------------------------
-m4_define([lt_dict_add],
-[m4_define([$1($2)], [$3])])
-
-
-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
-# --------------------------------------------
-m4_define([lt_dict_add_subkey],
-[m4_define([$1($2:$3)], [$4])])
-
-
-# lt_dict_fetch(DICT, KEY, [SUBKEY])
-# ----------------------------------
-m4_define([lt_dict_fetch],
-[m4_ifval([$3],
-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
-
-
-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
-# -----------------------------------------------------------------
-m4_define([lt_if_dict_fetch],
-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
-	[$5],
-    [$6])])
-
-
-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
-# --------------------------------------------------------------
-m4_define([lt_dict_filter],
-[m4_if([$5], [], [],
-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
-])
-
-# ltversion.m4 -- version numbers			-*- Autoconf -*-
-#
-#   Copyright (C) 2004 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# Generated from ltversion.in.
-
-# serial 3012 ltversion.m4
-# This file is part of GNU Libtool
-
-m4_define([LT_PACKAGE_VERSION], [2.2.6])
-m4_define([LT_PACKAGE_REVISION], [1.3012])
-
-AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6'
-macro_revision='1.3012'
-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
-_LT_DECL(, macro_revision, 0)
-])
-
-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
-#
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
-#   Written by Scott James Remnant, 2004.
-#
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# serial 4 lt~obsolete.m4
-
-# These exist entirely to fool aclocal when bootstrapping libtool.
-#
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
-# which have later been changed to m4_define as they aren't part of the
-# exported API, or moved to Autoconf or Automake where they belong.
-#
-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
-# using a macro with the same name in our local m4/libtool.m4 it'll
-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
-# and doesn't know about Autoconf macros at all.)
-#
-# So we provide this file, which has a silly filename so it's always
-# included after everything else.  This provides aclocal with the
-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
-# because those macros already exist, or will be overwritten later.
-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
-#
-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
-# Yes, that means every name once taken will need to remain here until
-# we give up compatibility with versions before 1.7, at which point
-# we need to keep only those names which we still refer to.
-
-# This is to help aclocal find these macros, as it can't see m4_define.
-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
-
-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
-
 # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
@@ -7999,7 +34,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11], [],
+m4_if([$1], [1.11.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -8015,7 +50,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11])dnl
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@@ -8831,6 +866,14 @@ python2.1 python2.0])
        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
        am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
        ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
      esac
     ])
   AC_SUBST([pythondir], [$am_cv_python_pythondir])
@@ -8861,6 +904,14 @@ python2.1 python2.0])
        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
        am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
        ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
      esac
     ])
   AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
@@ -9104,3 +1155,8 @@ AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
 m4_include([config/autotroll.m4])
+m4_include([config/libtool.m4])
+m4_include([config/ltoptions.m4])
+m4_include([config/ltsugar.m4])
+m4_include([config/ltversion.m4])
+m4_include([config/lt~obsolete.m4])
diff --git a/configure b/autom4te.cache/output.0
old mode 100755
new mode 100644
similarity index 94%
copy from configure
copy to autom4te.cache/output.0
index 4016c53..26594eb
--- a/configure
+++ b/autom4te.cache/output.0
@@ -1,15 +1,17 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64 for mathgl 1.10.
-#
-# Report bugs to <mathgl.abalakin at gmail.com>.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
-# Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
+@%:@! /bin/sh
+@%:@ Guess values for system-dependent variables and create Makefiles.
+@%:@ Generated by GNU Autoconf 2.67 for mathgl 1.10.
+@%:@
+@%:@ Report bugs to <mathgl.abalakin at gmail.com>.
+@%:@ 
+@%:@ 
+@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+@%:@ Foundation, Inc.
+@%:@ 
+@%:@ 
+@%:@ This configure script is free software; the Free Software Foundation
+@%:@ gives unlimited permission to copy, distribute and modify it.
 ## -------------------- ##
 ## M4sh Initialization. ##
 ## -------------------- ##
@@ -24,9 +26,9 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in #(
+  case `(set -o) 2>/dev/null` in @%:@(
   *posix*) :
-    set -o posix ;; #(
+    set -o posix ;; @%:@(
   *) :
      ;;
 esac
@@ -57,7 +59,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in #(
+      case $arg in @%:@(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -89,7 +91,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in #((
+case $0 in @%:@((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -142,9 +144,9 @@ if test "x$CONFIG_SHELL" = x; then
   alias -g '\${1+\"\$@\"}'='\"\$@\"'
   setopt NO_GLOB_SUBST
 else
-  case \`(set -o) 2>/dev/null\` in #(
+  case \`(set -o) 2>/dev/null\` in @%:@(
   *posix*) :
-    set -o posix ;; #(
+    set -o posix ;; @%:@(
   *) :
      ;;
 esac
@@ -162,7 +164,7 @@ as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
 as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
 as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
 if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
+  
 else
   exitcode=1; echo positional parameters were not saved.
 fi
@@ -178,7 +180,7 @@ else
   as_have_required=no
 fi
   if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
+  
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 as_found=false
@@ -187,7 +189,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   as_found=:
-  case $as_dir in #(
+  case $as_dir in @%:@(
 	 /*)
 	   for as_base in sh bash ksh sh5; do
 	     # Try only shells that exist, to save several forks.
@@ -247,36 +249,36 @@ unset CLICOLOR_FORCE GREP_OPTIONS
 ## --------------------- ##
 ## M4sh Shell Functions. ##
 ## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
+@%:@ as_fn_unset VAR
+@%:@ ---------------
+@%:@ Portably unset VAR.
 as_fn_unset ()
 {
   { eval $1=; unset $1;}
 }
 as_unset=as_fn_unset
 
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
+@%:@ as_fn_set_status STATUS
+@%:@ -----------------------
+@%:@ Set @S|@? to STATUS, without forking.
 as_fn_set_status ()
 {
   return $1
-} # as_fn_set_status
+} @%:@ as_fn_set_status
 
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+@%:@ as_fn_exit STATUS
+@%:@ -----------------
+@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
 as_fn_exit ()
 {
   set +e
   as_fn_set_status $1
   exit $1
-} # as_fn_exit
+} @%:@ as_fn_exit
 
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
+@%:@ as_fn_mkdir_p
+@%:@ -------------
+@%:@ Create "@S|@as_dir" as a directory, including parents if necessary.
 as_fn_mkdir_p ()
 {
 
@@ -317,16 +319,16 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
+} @%:@ as_fn_mkdir_p
+@%:@ as_fn_append VAR VALUE
+@%:@ ----------------------
+@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take
+@%:@ advantage of any shell optimizations that allow amortized linear growth over
+@%:@ repeated appends, instead of the typical quadratic growth present in naive
+@%:@ implementations.
 if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
   eval 'as_fn_append ()
   {
@@ -339,11 +341,11 @@ else
   }
 fi # as_fn_append
 
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
+@%:@ as_fn_arith ARG...
+@%:@ ------------------
+@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the
+@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) and expr.
 if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
   eval 'as_fn_arith ()
   {
@@ -357,21 +359,21 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD]
+@%:@ ----------------------------------------
+@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+@%:@ script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
-} # as_fn_error
+} @%:@ as_fn_error
 
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
@@ -451,7 +453,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
 }
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
+case `echo -n x` in @%:@(((((
 -n*)
   case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
@@ -510,10 +512,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in #(
+	case $1 in @%:@(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -736,10 +738,11 @@ as_awk_strverscmp='
   }
 '
 
-exec 7<&0 </dev/null 6>&1
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -749,7 +752,7 @@ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 ac_default_prefix=/usr/local
 ac_clean_files=
 ac_config_libobj_dir=.
-LIBOBJS=
+LIB@&t at OBJS=
 cross_compiling=no
 subdirs=
 MFLAGS=
@@ -803,7 +806,7 @@ ac_includes_default="\
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
-LIBOBJS
+LIB@&t at OBJS
 AM_CXXFLAGS
 USE_DOCS_FALSE
 USE_DOCS_TRUE
@@ -862,6 +865,10 @@ USE_GIF_FALSE
 USE_GIF_TRUE
 GIF_LIBS
 GIF_FLAGS
+USE_HDF4_FALSE
+USE_HDF4_TRUE
+HDF4_LIBS
+HDF4_FLAGS
 USE_HDF5_FALSE
 USE_HDF5_TRUE
 HDF5_LIBS
@@ -958,6 +965,7 @@ INSTALL_PROGRAM
 MGL_AGE
 MGL_REVISION
 MGL_CURRENT
+MGL_RELEASE
 target_alias
 host_alias
 build_alias
@@ -1014,6 +1022,7 @@ enable_gsl
 enable_glut
 enable_hdf5
 enable_hdf5_18
+enable_hdf4
 enable_gif
 enable_jpeg
 enable_fltk
@@ -1101,8 +1110,9 @@ do
   fi
 
   case $ac_option in
-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)	ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1147,7 +1157,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1173,7 +1183,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1377,7 +1387,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1393,7 +1403,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1423,8 +1433,8 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1432,7 +1442,7 @@ Try \`$0 --help' for more information."
     # Reject names that are not valid shell variable names.
     case $ac_envvar in #(
       '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1450,13 +1460,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  as_fn_error $? "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1479,7 +1489,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1493,8 +1503,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1509,9 +1519,9 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error "working directory cannot be determined"
+  as_fn_error $? "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error "pwd does not report name of working directory"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1550,11 +1560,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1594,7 +1604,7 @@ Configuration:
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
+  -q, --quiet, --silent   do not print \`checking ...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
@@ -1602,9 +1612,9 @@ Configuration:
 
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
+                          @<:@@S|@ac_default_prefix@:>@
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
+                          @<:@PREFIX@:>@
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -1628,7 +1638,7 @@ Fine tuning of the installation directories:
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/mathgl]
+  --docdir=DIR            documentation root @<:@DATAROOTDIR/doc/mathgl@:>@
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1660,10 +1670,10 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
-  --enable-shared[=PKGS]  build shared libraries [default=yes]
-  --enable-static[=PKGS]  build static libraries [default=yes]
-  --enable-fast-install[=PKGS]
-                          optimize for fast installation [default=yes]
+  --enable-shared@<:@=PKGS@:>@  build shared libraries @<:@default=yes@:>@
+  --enable-static@<:@=PKGS@:>@  build static libraries @<:@default=yes@:>@
+  --enable-fast-install@<:@=PKGS@:>@ 
+                          optimize for fast installation @<:@default=yes@:>@
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-double    Turn on double precision in MathGL library
   --enable-all    Turn on all features
@@ -1673,6 +1683,7 @@ Optional Features:
   --enable-glut    Turn on glut
   --enable-hdf5    Turn on hdf5
   --enable-hdf5_18    Turn on hdf5 version 1.8
+  --enable-hdf4    Turn on hdf4
   --enable-gif    Turn on gif
   --enable-jpeg    Turn on jpeg
   --enable-fltk    Turn on fltk
@@ -1686,10 +1697,10 @@ Optional Features:
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
-                          both]
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-qt               Path to Qt [Look in PATH and /usr/local/Trolltech]
+  --with-pic              try to use only PIC/non-PIC objects @<:@default=use
+                          both@:>@
+  --with-gnu-ld           assume the C compiler uses GNU ld @<:@default=no@:>@
+  --with-qt               Path to Qt @<:@Look in PATH and /usr/local/Trolltech@:>@
 
 Some influential environment variables:
   CC          C compiler command
@@ -1697,13 +1708,13 @@ Some influential environment variables:
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
   CPP         C preprocessor
   CXXCPP      C++ preprocessor
-  TMPDIR      A temporary directory with write access [/tmp]
+  TMPDIR      A temporary directory with write access @<:@/tmp@:>@
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1772,9 +1783,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 mathgl configure 1.10
-generated by GNU Autoconf 2.64
+generated by GNU Autoconf 2.67
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1785,9 +1796,9 @@ fi
 ## Autoconf initialization. ##
 ## ------------------------ ##
 
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_c_try_compile LINENO
+@%:@ --------------------------
+@%:@ Try to compile conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_c_try_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1819,13 +1830,13 @@ sed 's/^/| /' conftest.$ac_ext >&5
 	ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_compile
+} @%:@ ac_fn_c_try_compile
 
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_cxx_try_compile LINENO
+@%:@ ----------------------------
+@%:@ Try to compile conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_cxx_try_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1857,13 +1868,13 @@ sed 's/^/| /' conftest.$ac_ext >&5
 	ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_cxx_try_compile
+} @%:@ ac_fn_cxx_try_compile
 
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_c_try_link LINENO
+@%:@ -----------------------
+@%:@ Try to link conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_c_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1903,26 +1914,26 @@ fi
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_link
+} @%:@ ac_fn_c_try_link
 
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
+@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+@%:@ -------------------------------------------------------
+@%:@ Tests whether HEADER exists and can be compiled using the include files in
+@%:@ INCLUDES, setting the cache variable VAR accordingly.
 ac_fn_c_check_header_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
-#include <$2>
+@%:@include <$2>
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   eval "$3=yes"
@@ -1936,11 +1947,11 @@ eval ac_res=\$$3
 $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
 
-} # ac_fn_c_check_header_compile
+} @%:@ ac_fn_c_check_header_compile
 
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_c_try_cpp LINENO
+@%:@ ----------------------
+@%:@ Try to preprocess conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_c_try_cpp ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1959,7 +1970,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -1971,14 +1982,14 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_cpp
+} @%:@ ac_fn_c_try_cpp
 
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
+@%:@ ac_fn_c_try_run LINENO
+@%:@ ----------------------
+@%:@ Try to link conftest. at S|@ac_ext, and return whether this succeeded. Assumes
+@%:@ that executables *can* be run.
 ac_fn_c_try_run ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -2013,19 +2024,19 @@ sed 's/^/| /' conftest.$ac_ext >&5
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_run
+} @%:@ ac_fn_c_try_run
 
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
+@%:@ ac_fn_c_check_func LINENO FUNC VAR
+@%:@ ----------------------------------
+@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly
 ac_fn_c_check_func ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2082,11 +2093,11 @@ eval ac_res=\$$3
 $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
 
-} # ac_fn_c_check_func
+} @%:@ ac_fn_c_check_func
 
-# ac_fn_cxx_try_cpp LINENO
-# ------------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_cxx_try_cpp LINENO
+@%:@ ------------------------
+@%:@ Try to preprocess conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_cxx_try_cpp ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -2105,7 +2116,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -2117,13 +2128,13 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_cxx_try_cpp
+} @%:@ ac_fn_cxx_try_cpp
 
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_cxx_try_link LINENO
+@%:@ -------------------------
+@%:@ Try to link conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_cxx_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -2163,22 +2174,22 @@ fi
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_cxx_try_link
+} @%:@ ac_fn_cxx_try_link
 
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
+@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+@%:@ -------------------------------------------------------
+@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using
+@%:@ the include files in INCLUDES and setting the cache variable VAR
+@%:@ accordingly.
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  if eval "test \"\${$3+set}\"" = set; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2191,7 +2202,7 @@ $as_echo_n "checking $2 usability... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
-#include <$2>
+@%:@include <$2>
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   ac_header_compiler=yes
@@ -2207,14 +2218,14 @@ $as_echo "$ac_header_compiler" >&6; }
 $as_echo_n "checking $2 presence... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <$2>
+@%:@include <$2>
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   ac_header_preproc=yes
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
 $as_echo "$ac_header_preproc" >&6; }
 
@@ -2237,17 +2248,15 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( cat <<\_ASBOX
-## ---------------------------------------- ##
+( $as_echo "## ---------------------------------------- ##
 ## Report this to mathgl.abalakin at gmail.com ##
-## ---------------------------------------- ##
-_ASBOX
+## ---------------------------------------- ##"
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2258,13 +2267,13 @@ $as_echo "$ac_res" >&6; }
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
 
-} # ac_fn_c_check_header_mongrel
+} @%:@ ac_fn_c_check_header_mongrel
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mathgl $as_me 1.10, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.67.  Invocation command line was
 
   $ $0 $@
 
@@ -2374,11 +2383,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2412,11 +2419,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2429,11 +2434,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2447,11 +2450,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2477,27 +2478,27 @@ $as_echo "/* confdefs.h */" > confdefs.h
 # Predefined preprocessor variables.
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
+@%:@define PACKAGE_NAME "$PACKAGE_NAME"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
+@%:@define PACKAGE_VERSION "$PACKAGE_VERSION"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
+@%:@define PACKAGE_STRING "$PACKAGE_STRING"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
+@%:@define PACKAGE_URL "$PACKAGE_URL"
 _ACEOF
 
 
@@ -2506,7 +2507,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in @%:@((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -2517,18 +2523,22 @@ fi
 for ac_site_file in "$ac_site_file1" "$ac_site_file2"
 do
   test "x$ac_site_file" = xNONE && continue
-  if test -r "$ac_site_file"; then
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
   fi
 done
 
 if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
 $as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
@@ -2597,7 +2607,7 @@ if $ac_cache_corrupted; then
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2611,19 +2621,28 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+MGL_RELEASE=1.10
+
+
 
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2681,7 +2700,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
+case $as_dir/ in @%:@((
   ./ | .// | /[cC]/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
   ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
@@ -2759,11 +2778,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2785,8 +2804,8 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5 
    fi
 
    test "$2" = conftest.file
@@ -2795,8 +2814,8 @@ then
    # Ok.
    :
 else
-   as_fn_error "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -2967,6 +2986,7 @@ IFS=$as_save_IFS
 
 fi
 
+  test -d ./--version && rmdir ./--version
   if test "${ac_cv_path_mkdir+set}" = set; then
     MKDIR_P="$ac_cv_path_mkdir -p"
   else
@@ -2974,7 +2994,6 @@ fi
     # value for MKDIR_P within a source directory, because that will
     # break other packages using the cache if that directory is
     # removed, or if the value is a relative name.
-    test -d ./--version && rmdir ./--version
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
@@ -3033,7 +3052,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -3041,7 +3060,7 @@ SHELL = /bin/sh
 all:
 	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -3075,7 +3094,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 
   fi
 fi
 
@@ -3095,12 +3114,12 @@ fi
 
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
+@%:@define PACKAGE "$PACKAGE"
 _ACEOF
 
-
+ 
 cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
+@%:@define VERSION "$VERSION"
 _ACEOF
 
 # Some tools Automake needs.
@@ -3305,7 +3324,7 @@ if test $ac_prog_rejected = yes; then
   # We found a bogon in the path, so make sure we never use it.
   set dummy $ac_cv_prog_CC
   shift
-  if test $# != 0; then
+  if test $@%:@ != 0; then
     # We chose a different compiler from the bogus one.
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
@@ -3432,8 +3451,8 @@ fi
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3454,32 +3473,30 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
 
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdio.h>
+
 int
 main ()
 {
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
 
   ;
   return 0;
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
@@ -3541,62 +3558,28 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
 if test -z "$ac_file"; then :
-  $as_echo "$as_me: failed program was:" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
 
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
 $as_echo_n "checking for suffix of executables... " >&6; }
 if { { ac_try="$ac_link"
@@ -3626,16 +3609,75 @@ done
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
-rm -f conftest$ac_cv_exeext
+rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
 $as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+@%:@include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
 if test "${ac_cv_objext+set}" = set; then :
@@ -3678,8 +3720,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -3760,7 +3802,7 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-
+  
 else
   ac_c_werror_flag=$ac_save_c_werror_flag
 	 CFLAGS="-g"
@@ -3890,7 +3932,7 @@ $as_echo "unsupported" >&6; } ;;
 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
 if test "x$ac_cv_prog_cc_c89" != xno; then :
-
+  
 fi
 
 ac_ext=c
@@ -3942,9 +3984,9 @@ fi
 $as_echo "$_am_result" >&6; }
 rm -f confinc confmf
 
-# Check whether --enable-dependency-tracking was given.
+@%:@ Check whether --enable-dependency-tracking was given.
 if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
+  enableval=$enable_dependency_tracking; 
 fi
 
 if test "x$enable_dependency_tracking" != xno; then
@@ -4077,7 +4119,7 @@ fi
 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
- if
+ if 
   test "x$enable_dependency_tracking" != xno \
   && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
   am__fastdepCC_TRUE=
@@ -4218,8 +4260,8 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
@@ -4297,7 +4339,7 @@ main ()
 }
 _ACEOF
 if ac_fn_cxx_try_compile "$LINENO"; then :
-
+  
 else
   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 	 CXXFLAGS="-g"
@@ -4461,7 +4503,7 @@ fi
 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
 
- if
+ if 
   test "x$enable_dependency_tracking" != xno \
   && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
   am__fastdepCXX_TRUE=
@@ -4476,7 +4518,7 @@ fi
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
@@ -4487,16 +4529,16 @@ else
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -4521,7 +4563,7 @@ else
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 
 fi
 
 fi
@@ -4529,7 +4571,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -4830,21 +4872,21 @@ esac
 
 test -z "$AS" && AS=as
 
-
-
-
+    
+    
+    
 
 test -z "$DLLTOOL" && DLLTOOL=dlltool
 
-
-
-
+    
+    
+    
 
 test -z "$OBJDUMP" && OBJDUMP=objdump
 
-
-
-
+    
+    
+    
 
 
 
@@ -4860,17 +4902,17 @@ esac
 
 
 
-macro_version='2.2.6'
-macro_revision='1.3012'
-
-
-
-
-
-
+macro_version='2.2.6b'
+macro_revision='1.3017'
 
+    
+    
+    
 
 
+    
+    
+    
 
 
 
@@ -4934,7 +4976,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 
   fi
 else
   ac_cv_path_SED=$SED
@@ -4949,14 +4991,14 @@ $as_echo "$ac_cv_path_SED" >&6; }
 test -z "$SED" && SED=sed
 Xsed="$SED -e 1s/^X//"
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
@@ -5010,7 +5052,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 
   fi
 else
   ac_cv_path_GREP=$GREP
@@ -5020,7 +5062,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
 $as_echo "$ac_cv_path_GREP" >&6; }
  GREP="$ac_cv_path_GREP"
-
+ 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
@@ -5076,7 +5118,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -5087,7 +5129,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
 $as_echo "$ac_cv_path_EGREP" >&6; }
  EGREP="$ac_cv_path_EGREP"
-
+ 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
@@ -5143,7 +5185,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -5154,29 +5196,29 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
 $as_echo "$ac_cv_path_FGREP" >&6; }
  FGREP="$ac_cv_path_FGREP"
-
+ 
 
 test -z "$GREP" && GREP=grep
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
+@%:@ Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
 else
@@ -5259,7 +5301,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -5282,9 +5324,9 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 
-
-
-
+    
+    
+    
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
@@ -5442,7 +5484,7 @@ esac
   fi
 fi
 
-
+  
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
   fi
@@ -5450,9 +5492,9 @@ fi
 test -z "$NM" && NM=nm
 
 
-
-
-
+    
+    
+    
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
@@ -5461,13 +5503,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5464: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5467: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5470: output\"" >&5)
+  (eval echo "\"\$as_me:__oline__: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -5617,9 +5659,9 @@ $as_echo "none" >&6; }
 fi
 max_cmd_len=$lt_cv_sys_max_cmd_len
 
-
-
-
+    
+    
+    
 
 
 : ${CP="cp -f"}
@@ -5656,9 +5698,9 @@ else
   lt_unset=false
 fi
 
-
-
-
+    
+    
+    
 
 # test EBCDIC or ASCII
 case `echo X|tr X '\101'` in
@@ -5673,13 +5715,13 @@ case `echo X|tr X '\101'` in
   ;;
 esac
 
+    
+    
+    
 
-
-
-
-
-
-
+    
+    
+    
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
 $as_echo_n "checking for $LD option to reload object files... " >&6; }
@@ -5706,13 +5748,13 @@ case $host_os in
     ;;
 esac
 
+    
+    
+    
 
-
-
-
-
-
-
+    
+    
+    
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
@@ -5930,7 +5972,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -6016,14 +6058,14 @@ deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 if test -n "$ac_tool_prefix"; then
@@ -6121,14 +6163,14 @@ fi
 test -z "$AR" && AR=ar
 test -z "$AR_FLAGS" && AR_FLAGS=cru
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 if test -n "$ac_tool_prefix"; then
@@ -6225,9 +6267,9 @@ fi
 
 test -z "$STRIP" && STRIP=:
 
-
-
-
+    
+    
+    
 
 
 if test -n "$ac_tool_prefix"; then
@@ -6324,9 +6366,9 @@ fi
 
 test -z "$RANLIB" && RANLIB=:
 
-
-
-
+    
+    
+    
 
 
 # Determine commands to create old-style static archives.
@@ -6346,38 +6388,38 @@ if test -n "$RANLIB"; then
   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 fi
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
 
 
+    
+    
+    
 
+    
+    
+    
 
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 # If no C compiler was specified, use CC.
 LTCC=${LTCC-"$CC"}
@@ -6395,7 +6437,7 @@ $as_echo_n "checking command to parse $NM output from $compiler object... " >&6;
 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-
+  
 # These are sane defaults that work on at least a few old systems.
 # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
 
@@ -6618,30 +6660,30 @@ $as_echo "ok" >&6; }
 fi
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --enable-libtool-lock was given.
+@%:@ Check whether --enable-libtool-lock was given.
 if test "${enable_libtool_lock+set}" = set; then :
-  enableval=$enable_libtool_lock;
+  enableval=$enable_libtool_lock; 
 fi
 
 test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
@@ -6670,7 +6712,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6673 "configure"' > conftest.$ac_ext
+  echo '#line __oline__ "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7295,30 +7337,30 @@ else
   OTOOL64="$ac_cv_prog_OTOOL64"
 fi
 
+    
+    
+    
+    
 
+    
+    
+    
+    
 
+    
+    
+    
+    
 
+    
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
+    
 
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
@@ -7378,7 +7420,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 	LDFLAGS="$save_LDFLAGS"
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
@@ -7446,26 +7488,26 @@ do
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
 		     Syntax error
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
-
+  
 else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+@%:@include <ac_nonexistent.h>
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
@@ -7475,18 +7517,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
 
     done
     ac_cv_prog_CPP=$CPP
-
+  
 fi
   CPP=$ac_cv_prog_CPP
 else
@@ -7505,26 +7547,26 @@ do
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
 		     Syntax error
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
-
+  
 else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+@%:@include <ac_nonexistent.h>
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
@@ -7534,18 +7576,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
-
+  
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
 
 ac_ext=c
@@ -7591,7 +7633,7 @@ if test $ac_cv_header_stdc = yes; then
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   $EGREP "memchr" >/dev/null 2>&1; then :
-
+  
 else
   ac_cv_header_stdc=no
 fi
@@ -7608,7 +7650,7 @@ if test $ac_cv_header_stdc = yes; then
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   $EGREP "free" >/dev/null 2>&1; then :
-
+  
 else
   ac_cv_header_stdc=no
 fi
@@ -7649,7 +7691,7 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
-
+  
 else
   ac_cv_header_stdc=no
 fi
@@ -7662,8 +7704,8 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
 $as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+  
+$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h
 
 fi
 
@@ -7674,12 +7716,11 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
-
+ 
 fi
 
 done
@@ -7691,9 +7732,9 @@ do :
 "
 if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
+@%:@define HAVE_DLFCN_H 1
 _ACEOF
-
+ 
 fi
 
 done
@@ -7830,8 +7871,8 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
@@ -7909,7 +7950,7 @@ main ()
 }
 _ACEOF
 if ac_fn_cxx_try_compile "$LINENO"; then :
-
+  
 else
   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 	 CXXFLAGS="-g"
@@ -8073,7 +8114,7 @@ fi
 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
 
- if
+ if 
   test "x$enable_dependency_tracking" != xno \
   && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
   am__fastdepCXX_TRUE=
@@ -8112,26 +8153,26 @@ do
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
 		     Syntax error
 _ACEOF
 if ac_fn_cxx_try_cpp "$LINENO"; then :
-
+  
 else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+@%:@include <ac_nonexistent.h>
 _ACEOF
 if ac_fn_cxx_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
@@ -8141,18 +8182,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
 
     done
     ac_cv_prog_CXXCPP=$CXXCPP
-
+  
 fi
   CXXCPP=$ac_cv_prog_CXXCPP
 else
@@ -8171,26 +8212,26 @@ do
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
 		     Syntax error
 _ACEOF
 if ac_fn_cxx_try_cpp "$LINENO"; then :
-
+  
 else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+@%:@include <ac_nonexistent.h>
 _ACEOF
 if ac_fn_cxx_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
@@ -8200,13 +8241,13 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
-
+  
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -8231,9 +8272,9 @@ fi
 
 
 
-
-
-            # Check whether --enable-shared was given.
+        
+  
+            @%:@ Check whether --enable-shared was given.
 if test "${enable_shared+set}" = set; then :
   enableval=$enable_shared; p=${PACKAGE-default}
     case $enableval in
@@ -8257,14 +8298,14 @@ else
 fi
 
 
+    
+    
+    
+    
 
 
 
-
-
-
-
-  # Check whether --enable-static was given.
+  @%:@ Check whether --enable-static was given.
 if test "${enable_static+set}" = set; then :
   enableval=$enable_static; p=${PACKAGE-default}
     case $enableval in
@@ -8288,15 +8329,15 @@ else
 fi
 
 
+    
+    
+    
+    
 
 
 
-
-
-
-
-
-# Check whether --with-pic was given.
+  
+@%:@ Check whether --with-pic was given.
 if test "${with_pic+set}" = set; then :
   withval=$with_pic; pic_mode="$withval"
 else
@@ -8307,12 +8348,12 @@ fi
 test -z "$pic_mode" && pic_mode=default
 
 
+    
+    
+    
 
 
-
-
-
-  # Check whether --enable-fast-install was given.
+  @%:@ Check whether --enable-fast-install was given.
 if test "${enable_fast_install+set}" = set; then :
   enableval=$enable_fast_install; p=${PACKAGE-default}
     case $enableval in
@@ -8337,12 +8378,12 @@ fi
 
 
 
+    
+    
+    
 
 
-
-
-
-
+  
 
 
 # This can be used to rebuild libtool when needed
@@ -8352,42 +8393,42 @@ LIBTOOL_DEPS="$ltmain"
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
+    
+    
+    
 
+    
+    
+    
 
+    
+    
+    
 
+    
+    
+    
 
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 test -z "$LN_S" && LN_S="ln -s"
 
+    
+    
+    
 
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
 if test -n "${ZSH_VERSION+set}" ; then
@@ -8413,12 +8454,12 @@ fi
 $as_echo "$lt_cv_objdir" >&6; }
 objdir=$lt_cv_objdir
 
-
-
-
+    
+    
+    
 
 cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
+@%:@define LT_OBJDIR "$lt_cv_objdir/"
 _ACEOF
 
 
@@ -8426,14 +8467,14 @@ _ACEOF
 
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 
@@ -8562,9 +8603,9 @@ else
 $as_echo "no" >&6; }
 fi
 
-
-
-
+    
+    
+    
 
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
@@ -8694,8 +8735,12 @@ _lt_linker_boilerplate=`cat conftest.err`
 $RM -r conftest*
 
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
-
+  
 lt_prog_compiler_no_builtin_flag=
 
 if test "$GCC" = yes; then
@@ -8719,11 +8764,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8722: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8726: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8747,9 +8792,9 @@ fi
 
 fi
 
-
-
-
+    
+    
+    
 
 
   lt_prog_compiler_wl=
@@ -8888,7 +8933,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -9025,15 +9070,15 @@ case $host_os in
     lt_prog_compiler_pic=
     ;;
   *)
-    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC"
     ;;
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
 $as_echo "$lt_prog_compiler_pic" >&6; }
 
-
-
-
+    
+    
+    
 
 
 #
@@ -9048,7 +9093,7 @@ else
   lt_cv_prog_compiler_pic_works=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC"
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -9058,11 +9103,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9061: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9065: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -9090,9 +9135,9 @@ fi
 
 fi
 
-
-
-
+    
+    
+    
 
 
 #
@@ -9137,9 +9182,9 @@ else
 fi
 
 
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
@@ -9163,11 +9208,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9166: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9170: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9192,9 +9237,9 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
 $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
@@ -9218,11 +9263,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9221: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9225: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9272,9 +9317,9 @@ else
   need_locks=no
 fi
 
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
@@ -9361,6 +9406,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -9452,7 +9498,7 @@ _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -9735,7 +9781,7 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-
+  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
 	/^0/ {
@@ -9775,7 +9821,7 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-
+  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
 	/^0/ {
@@ -9848,8 +9894,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     darwin* | rhapsody*)
-
-
+      
+  
   archive_cmds_need_lc=no
   hardcode_direct=no
   hardcode_automatic=yes
@@ -9867,7 +9913,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
     module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
+    
   else
   ld_shlibs=no
   fi
@@ -10008,7 +10054,7 @@ int foo(void) {}
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+        
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
@@ -10274,17 +10320,17 @@ test "$ld_shlibs" = no && can_build_shared=no
 with_gnu_ld=$with_gnu_ld
 
 
+    
+    
+    
 
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
 #
@@ -10351,159 +10397,159 @@ $as_echo "$archive_cmds_need_lc" >&6; }
 esac
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
@@ -10914,7 +10960,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -11186,89 +11232,89 @@ if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
 fi
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
@@ -11309,9 +11355,9 @@ elif test "$shlibpath_overrides_runpath" = yes ||
   enable_fast_install=needless
 fi
 
-
-
-
+    
+    
+    
 
 
   if test "x$enable_dlopen" != xyes; then
@@ -11380,11 +11426,11 @@ $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
 if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
-
+  
     lt_cv_dlopen="dyld"
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
-
+    
 fi
 
     ;;
@@ -11555,19 +11601,19 @@ if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
-
+	      
 fi
 
-
+	    
 fi
 
-
+	  
 fi
 
-
+	
 fi
 
-
+      
 fi
 
     ;;
@@ -11601,7 +11647,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11604 "configure"
+#line __oline__ "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11679,7 +11725,7 @@ _LT_EOF
 fi
 rm -fr conftest*
 
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
 $as_echo "$lt_cv_dlopen_self" >&6; }
@@ -11697,7 +11743,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11700 "configure"
+#line __oline__ "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11775,7 +11821,7 @@ _LT_EOF
 fi
 rm -fr conftest*
 
-
+      
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
 $as_echo "$lt_cv_dlopen_self_static" >&6; }
@@ -11798,22 +11844,22 @@ $as_echo "$lt_cv_dlopen_self_static" >&6; }
   esac
 fi
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
-
-
-
-
+  
 striplib=
 old_striplib=
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
@@ -11844,14 +11890,14 @@ $as_echo "no" >&6; }
   esac
 fi
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 
@@ -11892,7 +11938,7 @@ $as_echo_n "checking whether to build static libraries... " >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
 $as_echo "$enable_static" >&6; }
 
-
+  
 
 
 fi
@@ -11904,7 +11950,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 CC="$lt_save_CC"
 
-
+      
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -11953,7 +11999,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
 
   # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
+  
 
 
 
@@ -12027,9 +12073,9 @@ cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
     if test "$GXX" = yes; then
       # Set up default GNU C++ configuration
 
+      
 
-
-# Check whether --with-gnu-ld was given.
+@%:@ Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
 else
@@ -12112,7 +12158,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -12296,7 +12342,7 @@ main ()
 }
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
-
+  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
 	/^0/ {
@@ -12337,7 +12383,7 @@ main ()
 }
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
-
+  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
 	/^0/ {
@@ -12414,8 +12460,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         fi
         ;;
       darwin* | rhapsody*)
-
-
+        
+  
   archive_cmds_need_lc_CXX=no
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
@@ -12637,7 +12683,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         inherit_rpath_CXX=yes
         ;;
 
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -13275,34 +13321,34 @@ if test -n "${compiler_lib_search_path_CXX}"; then
  compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
 fi
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
     lt_prog_compiler_wl_CXX=
@@ -13465,7 +13511,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -13623,7 +13669,7 @@ case $host_os in
     lt_prog_compiler_pic_CXX=
     ;;
   *)
-    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC"
     ;;
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
@@ -13643,7 +13689,7 @@ else
   lt_cv_prog_compiler_pic_works_CXX=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC"
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -13653,11 +13699,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13656: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13660: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13752,11 +13798,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13755: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13759: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -13804,11 +13850,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13807: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13811: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -14382,7 +14428,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -14729,7 +14775,7 @@ fi
 
 
 
-
+    
 
 
   fi # test -n "$compiler"
@@ -14758,8 +14804,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-
-
+       
+       
 
 
 
@@ -14772,12 +14818,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-# Check whether --enable-double was given.
+@%:@ Check whether --enable-double was given.
 if test "${enable_double+set}" = set; then :
   enableval=$enable_double; case "${enableval}" in
   yes) double=true ;;
   no)  double=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-double" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-double" "$LINENO" 5  ;;
 esac
 else
   double=false
@@ -14785,45 +14831,45 @@ fi
 
 
 if (test x$double = xtrue) ;then
-
-$as_echo "#define MGL_USE_DOUBLE 1" >>confdefs.h
+    
+$as_echo "@%:@define MGL_USE_DOUBLE 1" >>confdefs.h
 
 else
-
-$as_echo "#define MGL_USE_DOUBLE 0" >>confdefs.h
+    
+$as_echo "@%:@define MGL_USE_DOUBLE 0" >>confdefs.h
 
 fi
 
-# Check whether --enable-all was given.
+@%:@ Check whether --enable-all was given.
 if test "${enable_all+set}" = set; then :
   enableval=$enable_all; case "${enableval}" in
   yes) all=true ;;
   no)  all=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-all" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-all" "$LINENO" 5  ;;
 esac
 else
   all=false
 fi
 
 
-# Check whether --enable-langall was given.
+@%:@ Check whether --enable-langall was given.
 if test "${enable_langall+set}" = set; then :
   enableval=$enable_langall; case "${enableval}" in
   yes) langall=true ;;
   no)  langall=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-langall" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-langall" "$LINENO" 5  ;;
 esac
 else
   langall=false
 fi
 
 
-# Check whether --enable-pthread was given.
+@%:@ Check whether --enable-pthread was given.
 if test "${enable_pthread+set}" = set; then :
   enableval=$enable_pthread; case "${enableval}" in
   yes) pthread=true ;;
   no)  pthread=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-pthread" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-pthread" "$LINENO" 5  ;;
 esac
 else
   pthread=true
@@ -14831,7 +14877,7 @@ fi
 
 ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
 if test "x$ac_cv_header_pthread_h" = x""yes; then :
-  (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_FLAGS=-DHAVE_PTHREAD
+  (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_FLAGS=-DHAVE_PTHREAD 
 else
   (test x$all = xtrue || test x$pthread = xtrue) && echo "Please install posix threads headers" && exit
 fi
@@ -14869,7 +14915,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_main" >&5
 $as_echo "$ac_cv_lib_pthread_main" >&6; }
 if test "x$ac_cv_lib_pthread_main" = x""yes; then :
-  (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_LIBS=-lpthread
+  (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_LIBS=-lpthread 
 else
   (test x$all = xtrue || test x$pthread = xtrue) && echo "Please install posix threads library" && exit
 fi
@@ -14883,12 +14929,12 @@ else
 fi
 
 
-# Check whether --enable-gsl was given.
+@%:@ Check whether --enable-gsl was given.
 if test "${enable_gsl+set}" = set; then :
   enableval=$enable_gsl; case "${enableval}" in
   yes) gsl=true ;;
   no)  gsl=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-gsl" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-gsl" "$LINENO" 5  ;;
 esac
 else
   gsl=true
@@ -14980,7 +15026,7 @@ fi
     fi
 else
     GSL_FLAGS=-DNO_GSL
-
+    
 fi
  if test x$test_gsl = xtrue; then
   USE_GSL_TRUE=
@@ -14991,12 +15037,12 @@ else
 fi
 
 
-# Check whether --enable-glut was given.
+@%:@ Check whether --enable-glut was given.
 if test "${enable_glut+set}" = set; then :
   enableval=$enable_glut; case "${enableval}" in
   yes) glut=true ;;
   no)  glut=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-glut" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-glut" "$LINENO" 5  ;;
 esac
 else
   glut=false
@@ -15006,10 +15052,10 @@ fi
 case "${host}" in
   *darwin*)
 	GL_LIBS="-framework OpenGL"
-
+	
 	if (test x$all = xtrue || test x$glut = xtrue) ;then
 	    GLUT_LIBS="-framework GLUT -framework OpenGL"
-
+	    
 	fi
        ;;
 
@@ -15017,7 +15063,7 @@ case "${host}" in
 	GL_LIBS=opengl32
 	ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
 if test "x$ac_cv_header_GL_gl_h" = x""yes; then :
-
+  
 else
   echo "Please install OpenGL headers (GL/gl.h)"; exit
 fi
@@ -15026,7 +15072,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5
 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15055,9 +15101,8 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
-  GL_LIBS=-l${GL_LIBS}
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  GL_LIBS=-l${GL_LIBS} 
 else
   echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit
 fi
@@ -15065,7 +15110,7 @@ fi
 	GLUT_LIBS=glut32
 	ac_fn_c_check_header_mongrel "$LINENO" "GL/glut.h" "ac_cv_header_GL_glut_h" "$ac_includes_default"
 if test "x$ac_cv_header_GL_glut_h" = x""yes; then :
-  (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT
+  (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT 
 else
   (test x$all = xtrue || test x$glut = xtrue) && (echo "Please install FreeGLUT headers (GL/glut.h)" && exit)
 fi
@@ -15074,7 +15119,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5
 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15103,9 +15148,8 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
-  (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS}
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} 
 else
   (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit
 fi
@@ -15116,7 +15160,7 @@ fi
 	GL_LIBS=GL
 	ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
 if test "x$ac_cv_header_GL_gl_h" = x""yes; then :
-
+  
 else
   echo "Please install OpenGL headers (GL/gl.h)"; exit
 fi
@@ -15125,7 +15169,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5
 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15154,9 +15198,8 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
-  GL_LIBS=-l${GL_LIBS}
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  GL_LIBS=-l${GL_LIBS} 
 else
   echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit
 fi
@@ -15164,7 +15207,7 @@ fi
 	GLUT_LIBS=glut
 	ac_fn_c_check_header_mongrel "$LINENO" "GL/glut.h" "ac_cv_header_GL_glut_h" "$ac_includes_default"
 if test "x$ac_cv_header_GL_glut_h" = x""yes; then :
-  (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT
+  (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT 
 else
   (test x$all = xtrue || test x$glut = xtrue) && (echo "Please install FreeGLUT headers (GL/glut.h)" && exit)
 fi
@@ -15173,7 +15216,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5
 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15202,9 +15245,8 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
-  (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS}
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} 
 else
   (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit
 fi
@@ -15230,23 +15272,23 @@ case "${host}" in
        ;;
 esac
 
-# Check whether --enable-hdf5 was given.
+@%:@ Check whether --enable-hdf5 was given.
 if test "${enable_hdf5+set}" = set; then :
   enableval=$enable_hdf5; case "${enableval}" in
   yes) hdf5=true ;;
   no)  hdf5=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-hdf5" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf5" "$LINENO" 5  ;;
 esac
 else
   hdf5=false
 fi
 
-# Check whether --enable-hdf5_18 was given.
+@%:@ Check whether --enable-hdf5_18 was given.
 if test "${enable_hdf5_18+set}" = set; then :
   enableval=$enable_hdf5_18; case "${enableval}" in
   yes) hdf5_18=true ;;
   no)  hdf5_18=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5  ;;
 esac
 else
   hdf5_18=false
@@ -15255,7 +15297,7 @@ fi
 #AC_CHECK_HEADER(hdf5.h,[(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5 AC_SUBST(HDF5_FLAGS)],
 ac_fn_c_check_header_mongrel "$LINENO" "hdf5.h" "ac_cv_header_hdf5_h" "$ac_includes_default"
 if test "x$ac_cv_header_hdf5_h" = x""yes; then :
-  (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5
+  (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5 
 else
   (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 headers" && exit
 fi
@@ -15263,7 +15305,7 @@ fi
 
 if ((test x$all = xtrue || test x$hdf5 = xtrue) && test x$hdf5_18 = xfalse) ;then
     HDF5_FLAGS="$HDF5_FLAGS -DH5_USE_16_API"
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lhdf5" >&5
 $as_echo_n "checking for main in -lhdf5... " >&6; }
@@ -15296,7 +15338,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hdf5_main" >&5
 $as_echo "$ac_cv_lib_hdf5_main" >&6; }
 if test "x$ac_cv_lib_hdf5_main" = x""yes; then :
-  (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_LIBS=-lhdf5
+  (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_LIBS=-lhdf5 
 else
   (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 library" && exit
 fi
@@ -15310,12 +15352,78 @@ else
 fi
 
 
-# Check whether --enable-gif was given.
+
+@%:@ Check whether --enable-hdf4 was given.
+if test "${enable_hdf4+set}" = set; then :
+  enableval=$enable_hdf4; case "${enableval}" in
+  yes) hdf4=true ;;
+  no)  hdf4=false ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf4" "$LINENO" 5  ;;
+esac
+else
+  hdf4=false
+fi
+
+ac_fn_c_check_header_mongrel "$LINENO" "hdf/mfhdf.h" "ac_cv_header_hdf_mfhdf_h" "$ac_includes_default"
+if test "x$ac_cv_header_hdf_mfhdf_h" = x""yes; then :
+  (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4 
+else
+  (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit
+fi
+
+
+    
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldf" >&5
+$as_echo_n "checking for main in -ldf... " >&6; }
+if test "${ac_cv_lib_df_main+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldf  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_df_main=yes
+else
+  ac_cv_lib_df_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_df_main" >&5
+$as_echo "$ac_cv_lib_df_main" >&6; }
+if test "x$ac_cv_lib_df_main" = x""yes; then :
+  (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf" 
+else
+  (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit
+fi
+
+ if (test x$all = xtrue || test x$hdf4 = xtrue); then
+  USE_HDF4_TRUE=
+  USE_HDF4_FALSE='#'
+else
+  USE_HDF4_TRUE='#'
+  USE_HDF4_FALSE=
+fi
+
+
+@%:@ Check whether --enable-gif was given.
 if test "${enable_gif+set}" = set; then :
   enableval=$enable_gif; case "${enableval}" in
   yes) gif=true ;;
   no)  gif=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-gif" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-gif" "$LINENO" 5  ;;
 esac
 else
   gif=false
@@ -15323,7 +15431,7 @@ fi
 
 ac_fn_c_check_header_mongrel "$LINENO" "gif_lib.h" "ac_cv_header_gif_lib_h" "$ac_includes_default"
 if test "x$ac_cv_header_gif_lib_h" = x""yes; then :
-  (test x$all = xtrue || test x$gif = xtrue) && GIF_FLAGS=-DHAVE_GIF
+  (test x$all = xtrue || test x$gif = xtrue) && GIF_FLAGS=-DHAVE_GIF 
 else
   (test x$all = xtrue || test x$gif = xtrue) && echo "Please install gif headers" && exit
 fi
@@ -15361,7 +15469,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5
 $as_echo "$ac_cv_lib_gif_main" >&6; }
 if test "x$ac_cv_lib_gif_main" = x""yes; then :
-  (test x$all = xtrue || test x$gif = xtrue) && GIF_LIBS=-lgif
+  (test x$all = xtrue || test x$gif = xtrue) && GIF_LIBS=-lgif 
 else
   (test x$all = xtrue || test x$gif = xtrue) && echo "Please install gif library" && exit
 fi
@@ -15377,7 +15485,7 @@ fi
 
 ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default"
 if test "x$ac_cv_header_png_h" = x""yes; then :
-
+  
 else
   echo "Please install png headers" && exit
 fi
@@ -15415,18 +15523,18 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_main" >&5
 $as_echo "$ac_cv_lib_png_main" >&6; }
 if test "x$ac_cv_lib_png_main" = x""yes; then :
-  PNG_LIBS=-lpng
+  PNG_LIBS=-lpng 
 else
   echo "Please install png library" && exit
 fi
 
 
-# Check whether --enable-jpeg was given.
+@%:@ Check whether --enable-jpeg was given.
 if test "${enable_jpeg+set}" = set; then :
   enableval=$enable_jpeg; case "${enableval}" in
   yes) jpeg=true ;;
   no)  jpeg=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-jpeg" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-jpeg" "$LINENO" 5  ;;
 esac
 else
   jpeg=false
@@ -15434,7 +15542,7 @@ fi
 
 ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default"
 if test "x$ac_cv_header_jpeglib_h" = x""yes; then :
-  (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_FLAGS=-DHAVE_JPEG
+  (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_FLAGS=-DHAVE_JPEG 
 else
   (test x$all = xtrue || test x$jpeg = xtrue) && echo "Please install jpeg headers" && exit
 fi
@@ -15472,7 +15580,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5
 $as_echo "$ac_cv_lib_jpeg_main" >&6; }
 if test "x$ac_cv_lib_jpeg_main" = x""yes; then :
-  (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_LIBS=-ljpeg
+  (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_LIBS=-ljpeg 
 else
   (test x$all = xtrue || test x$jpeg = xtrue) && echo "Please install jpeg library" && exit
 fi
@@ -15486,12 +15594,12 @@ else
 fi
 
 
-# Check whether --enable-fltk was given.
+@%:@ Check whether --enable-fltk was given.
 if test "${enable_fltk+set}" = set; then :
   enableval=$enable_fltk; case "${enableval}" in
   yes) fltk=true ;;
   no)  fltk=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-fltk" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-fltk" "$LINENO" 5  ;;
 esac
 else
   fltk=false
@@ -15579,7 +15687,7 @@ fi
 	echo "Please install FLTK headers and libraries and make sure that \
 	            path to $FLTK_PROG exist in your PATH"
 	exit
-    fi
+    fi 
 fi
  if test x$test_fltk = xtrue; then
   USE_FLTK_TRUE=
@@ -15590,12 +15698,12 @@ else
 fi
 
 
-# Check whether --enable-wx was given.
+@%:@ Check whether --enable-wx was given.
 if test "${enable_wx+set}" = set; then :
   enableval=$enable_wx; case "${enableval}" in
   yes) wx=true ;;
   no)  wx=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-wx" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-wx" "$LINENO" 5  ;;
 esac
 else
   wx=false
@@ -15684,7 +15792,7 @@ fi
 	echo "Please install wxwidget headers and libraries and make sure that \
 	            path to $WX_PROG exist in your PATH"
 	exit
-    fi
+    fi 
 fi
  if test x$test_wx = xtrue; then
   USE_WX_TRUE=
@@ -15695,26 +15803,26 @@ else
 fi
 
 
-# Check whether --enable-qt was given.
+@%:@ Check whether --enable-qt was given.
 if test "${enable_qt+set}" = set; then :
   enableval=$enable_qt; case "${enableval}" in
   yes) qt=true ;;
   no)  qt=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-qt" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-qt" "$LINENO" 5  ;;
 esac
 else
   qt=false
 fi
 
 if (test x$all = xtrue || test x$qt = xtrue) ;then
-
-
-
+     
+  
+  
 
   test x"$TROLL" != x && echo 'ViM rox emacs.'
 
-
-# Check whether --with-qt was given.
+  
+@%:@ Check whether --with-qt was given.
 if test "${with_qt+set}" = set; then :
   withval=$with_qt; QT_PATH=$withval
 else
@@ -15826,7 +15934,7 @@ done
 test -n "$QMAKE" || QMAKE="missing"
 
     if test x"$QMAKE" = xmissing; then
-      as_fn_error "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5 
     fi
   fi
 
@@ -15927,7 +16035,7 @@ done
 test -n "$MOC" || MOC="missing"
 
     if test x"$MOC" = xmissing; then
-      as_fn_error "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 
     fi
   fi
 
@@ -16028,7 +16136,7 @@ done
 test -n "$UIC" || UIC="missing"
 
     if test x"$UIC" = xmissing; then
-      as_fn_error "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 
     fi
   fi
 
@@ -16139,14 +16247,14 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.
     QT_PATH=`dirname "$QMAKE"`
   fi
   if test x"$QT_PATH" = x; then
-    as_fn_error "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5
+    as_fn_error $? "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5 
   fi
-
+  
 
   # Get ready to build a test-app with Qt.
 
   # Look for a writable temporary directory.
-
+  
   if test x"$TMPDIR" = x || test ! -d "$TMPDIR" || test ! -w "$TMPDIR"; then
     echo "$as_me:$LINENO: no TMPDIR or bad TMPDIR ($TMPDIR)" \
       >&5
@@ -16173,7 +16281,7 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.
   then
     :
   else
-    as_fn_error "Cannot cd to or write in $my_tmpdir" "$LINENO" 5
+    as_fn_error $? "Cannot cd to or write in $my_tmpdir" "$LINENO" 5 
   fi
   cat >conftest.h <<_ASEOF
 #include <QObject>
@@ -16212,14 +16320,14 @@ int main()
 }
 _ASEOF
   if $QMAKE -project; then :; else
-    as_fn_error "Calling $QMAKE -project failed." "$LINENO" 5
+    as_fn_error $? "Calling $QMAKE -project failed." "$LINENO" 5 
   fi
 
   # Find the .pro file generated by qmake.
   pro_file='conftest.dir.pro'
   test -f $pro_file || pro_file=`echo *.pro`
   if test -f "$pro_file"; then :; else
-    as_fn_error "Can't find the .pro file generated by Qmake." "$LINENO" 5
+    as_fn_error $? "Can't find the .pro file generated by Qmake." "$LINENO" 5 
   fi
 
 
@@ -16232,7 +16340,7 @@ _ASEOF
   sed 's/^/| /' "$pro_file" >&5
 
   if $QMAKE; then :; else
-    as_fn_error "Calling $QMAKE failed." "$LINENO" 5
+    as_fn_error $? "Calling $QMAKE failed." "$LINENO" 5 
   fi
   # Try to compile a simple Qt app.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt app" >&5
@@ -16293,15 +16401,15 @@ instead" >&5
       fi # if make with Qt4-style #include and release mode forced.
     fi # if make with Qt3-style #include.
   fi # if make with Qt4-style #include.
-
+  
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5
 $as_echo "$at_cv_qt_build" >&6; }
   if test x"$at_cv_qt_build" = xko; then
-    as_fn_error "Cannot build a test Qt program" "$LINENO" 5
+    as_fn_error $? "Cannot build a test Qt program" "$LINENO" 5 
   fi
   QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^^0-9*//'`
-
+  
 
   # This sed filter is applied after an expression of the form: /^FOO.*=/!d;
   # It starts by removing the beginning of the line, removing references to
@@ -16310,7 +16418,7 @@ $as_echo "$at_cv_qt_build" >&6; }
   qt_sed_filter='s///;
                  s/$(SUBLIBS)//g;
                  s/^ *//;
-                 s/\$(\([A-Z_][A-Z_]*\))/$(QT_\1)/g'
+                 s/\$(\(@<:@A-Z_@:>@@<:@A-Z_@:>@*\))/$(QT_\1)/g'
 
   # Find the Makefile (qmake happens to generate a fake Makefile which invokes
   # a Makefile.Debug or Makefile.Release). We we have both, we'll pick the
@@ -16324,7 +16432,7 @@ $as_echo "$at_cv_qt_build" >&6; }
   fi
   if test -f $at_mfile; then :; else
     cd "$my_configure_pwd"
-    as_fn_error "Cannot find the Makefile generated by qmake." "$LINENO" 5
+    as_fn_error $? "Cannot find the Makefile generated by qmake." "$LINENO" 5 
   fi
 
   # Find the DEFINES of Qt (should have been named CPPFLAGS).
@@ -16333,7 +16441,7 @@ $as_echo_n "checking for the DEFINES to use with Qt... " >&6; }
 if test "${at_cv_env_QT_DEFINES+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_DEFINES=`sed "/^DEFINES[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_DEFINES=`sed "/^DEFINES@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_DEFINES" >&5
 $as_echo "$at_cv_env_QT_DEFINES" >&6; }
@@ -16346,7 +16454,7 @@ $as_echo_n "checking for the CFLAGS to use with Qt... " >&6; }
 if test "${at_cv_env_QT_CFLAGS+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_CFLAGS=`sed "/^CFLAGS[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_CFLAGS=`sed "/^CFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CFLAGS" >&5
 $as_echo "$at_cv_env_QT_CFLAGS" >&6; }
@@ -16359,7 +16467,7 @@ $as_echo_n "checking for the CXXFLAGS to use with Qt... " >&6; }
 if test "${at_cv_env_QT_CXXFLAGS+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CXXFLAGS" >&5
 $as_echo "$at_cv_env_QT_CXXFLAGS" >&6; }
@@ -16372,7 +16480,7 @@ $as_echo_n "checking for the INCPATH to use with Qt... " >&6; }
 if test "${at_cv_env_QT_INCPATH+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_INCPATH=`sed "/^INCPATH[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_INCPATH=`sed "/^INCPATH@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_INCPATH" >&5
 $as_echo "$at_cv_env_QT_INCPATH" >&6; }
@@ -16388,7 +16496,7 @@ $as_echo_n "checking for the LDFLAGS to use with Qt... " >&6; }
 if test "${at_cv_env_QT_LDFLAGS+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_LDFLAGS=`sed "/^LDFLAGS[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_LDFLAGS=`sed "/^LDFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LDFLAGS" >&5
 $as_echo "$at_cv_env_QT_LDFLAGS" >&6; }
@@ -16414,7 +16522,7 @@ $as_echo_n "checking for the LIBS to use with Qt... " >&6; }
 if test "${at_cv_env_QT_LIBS+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_LIBS=`sed "/^LIBS[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_LIBS=`sed "/^LIBS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
    if test x$at_darwin = xyes; then
      # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) doesn't handle
      # -F properly. The "bug" has been fixed on 22 October 2006
@@ -16422,7 +16530,7 @@ else
      at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \
                              | sed 's/^-F/-Wl,-F/;s/ -F/ -Wl,-F/g'`
    fi
-
+  
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LIBS" >&5
 $as_echo "$at_cv_env_QT_LIBS" >&6; }
@@ -16432,10 +16540,10 @@ $as_echo "$at_cv_env_QT_LIBS" >&6; }
   cd "$my_configure_pwd" || echo 'WTF!'
   rm -rf "$my_tmpdir"
 
-
+     
   if test x"$QMAKE" = x; then
-    as_fn_error "\$QMAKE is empty. \
-Did you invoke AT_WITH_QT before AT_REQUIRE_QT_VERSION?" "$LINENO" 5
+    as_fn_error $? "\$QMAKE is empty. \
+Did you invoke AT@&t at _WITH_QT before AT@&t at _REQUIRE_QT_VERSION?" "$LINENO" 5 
   fi
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt's version" >&5
 $as_echo_n "checking for Qt's version... " >&6; }
@@ -16450,20 +16558,20 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_QT_VERSION" >&5
 $as_echo "$at_cv_QT_VERSION" >&6; }
   if test x"$at_cv_QT_VERSION" = x; then
-    as_fn_error "Cannot detect Qt's version." "$LINENO" 5
+    as_fn_error $? "Cannot detect Qt's version." "$LINENO" 5 
   fi
   QT_VERSION=$at_cv_QT_VERSION
 
   as_arg_v1=$QT_VERSION
 as_arg_v2=4.3
 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null
-case $? in #(
+case $? in @%:@(
   1) :
-    as_fn_error "This package requires Qt 4.3 or above." "$LINENO" 5 ;; #(
+    as_fn_error $? "This package requires Qt 4.3 or above." "$LINENO" 5  ;; @%:@(
   0) :
-     ;; #(
+     ;; @%:@(
   2) :
-     ;; #(
+     ;; @%:@(
   *) :
      ;;
 esac
@@ -16479,12 +16587,12 @@ else
 fi
 
 
-# Check whether --enable-python was given.
+@%:@ Check whether --enable-python was given.
 if test "${enable_python+set}" = set; then :
   enableval=$enable_python; case "${enableval}" in
   yes) python=true ;;
   no)  python=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-python" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5  ;;
 esac
 else
   python=false
@@ -16567,10 +16675,10 @@ fi
 
     if (test "$PYTHON_HEADERS" && test "$HAVE_SWIG") ;then
 	test_python=true
+	
+      
 
-
-
-
+  
         # Find any Python interpreter.
     if test -z "$PYTHON"; then
       for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0
@@ -16621,13 +16729,13 @@ test -n "$PYTHON" || PYTHON=":"
 
     fi
     am_display_PYTHON=python
-
+  
 
   if test "$PYTHON" = :; then
-      as_fn_error "no suitable Python interpreter found" "$LINENO" 5
+      as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 
   else
 
-
+      
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5
 $as_echo_n "checking for $am_display_PYTHON version... " >&6; }
 if test "${am_cv_python_version+set}" = set; then :
@@ -16640,13 +16748,13 @@ $as_echo "$am_cv_python_version" >&6; }
   PYTHON_VERSION=$am_cv_python_version
 
 
-
+        
   PYTHON_PREFIX='${prefix}'
 
   PYTHON_EXEC_PREFIX='${exec_prefix}'
 
 
-
+    
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5
 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; }
 if test "${am_cv_python_platform+set}" = set; then :
@@ -16660,7 +16768,7 @@ $as_echo "$am_cv_python_platform" >&6; }
 
 
 
-
+  
                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; }
 if test "${am_cv_python_pythondir+set}" = set; then :
@@ -16679,15 +16787,23 @@ else
        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
        am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
        ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
      esac
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5
 $as_echo "$am_cv_python_pythondir" >&6; }
   pythondir=$am_cv_python_pythondir
 
 
-
+      
   pkgpythondir=\${pythondir}/$PACKAGE
 
 
@@ -16709,26 +16825,34 @@ else
        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
        am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
        ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
      esac
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5
 $as_echo "$am_cv_python_pyexecdir" >&6; }
   pyexecdir=$am_cv_python_pyexecdir
 
 
-
+  
   pkgpyexecdir=\${pyexecdir}/$PACKAGE
 
 
-
+    
   fi
 
 
     else
 	echo Please install python-dev and swig packages
 	exit
-    fi
+    fi 
 fi
  if test x$test_python = xtrue ; then
   USE_PYTHON_TRUE=
@@ -16739,12 +16863,12 @@ else
 fi
 
 
-# Check whether --enable-octave was given.
+@%:@ Check whether --enable-octave was given.
 if test "${enable_octave+set}" = set; then :
   enableval=$enable_octave; case "${enableval}" in
   yes) octave=true ;;
   no)  octave=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-octave" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-octave" "$LINENO" 5  ;;
 esac
 else
   octave=false
@@ -16810,12 +16934,12 @@ else
 fi
 
 
-# Check whether --enable-testio was given.
+@%:@ Check whether --enable-testio was given.
 if test "${enable_testio+set}" = set; then :
   enableval=$enable_testio; case "${enableval}" in
   yes) testio=true ;;
   no)  testio=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-testio" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-testio" "$LINENO" 5  ;;
 esac
 else
   testio=false
@@ -16830,12 +16954,12 @@ else
 fi
 
 
-# Check whether --enable-docs was given.
+@%:@ Check whether --enable-docs was given.
 if test "${enable_docs+set}" = set; then :
   enableval=$enable_docs; case "${enableval}" in
   yes) docs=true ;;
   no)  docs=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-docs" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-docs" "$LINENO" 5  ;;
 esac
 else
   docs=false
@@ -16942,7 +17066,8 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+U=
+for ac_i in : $LIB@&t at OBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
   ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
@@ -16951,7 +17076,7 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
   as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
 done
-LIBOBJS=$ac_libobjs
+LIB@&t at OBJS=$ac_libobjs
 
 LTLIBOBJS=$ac_ltlibobjs
 
@@ -16965,72 +17090,76 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_PTHREAD_TRUE}" && test -z "${USE_PTHREAD_FALSE}"; then
-  as_fn_error "conditional \"USE_PTHREAD\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_PTHREAD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_GSL_TRUE}" && test -z "${USE_GSL_FALSE}"; then
-  as_fn_error "conditional \"USE_GSL\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_GSL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_GLUT_TRUE}" && test -z "${USE_GLUT_FALSE}"; then
-  as_fn_error "conditional \"USE_GLUT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_GLUT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_HDF5_TRUE}" && test -z "${USE_HDF5_FALSE}"; then
-  as_fn_error "conditional \"USE_HDF5\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_HDF5\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
+fi
+if test -z "${USE_HDF4_TRUE}" && test -z "${USE_HDF4_FALSE}"; then
+  as_fn_error $? "conditional \"USE_HDF4\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_GIF_TRUE}" && test -z "${USE_GIF_FALSE}"; then
-  as_fn_error "conditional \"USE_GIF\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_GIF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_JPEG_TRUE}" && test -z "${USE_JPEG_FALSE}"; then
-  as_fn_error "conditional \"USE_JPEG\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_JPEG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_FLTK_TRUE}" && test -z "${USE_FLTK_FALSE}"; then
-  as_fn_error "conditional \"USE_FLTK\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_FLTK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_WX_TRUE}" && test -z "${USE_WX_FALSE}"; then
-  as_fn_error "conditional \"USE_WX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_WX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_QT_TRUE}" && test -z "${USE_QT_FALSE}"; then
-  as_fn_error "conditional \"USE_QT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_QT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then
-  as_fn_error "conditional \"USE_PYTHON\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_PYTHON\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_OCTAVE_TRUE}" && test -z "${USE_OCTAVE_FALSE}"; then
-  as_fn_error "conditional \"USE_OCTAVE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_OCTAVE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_TESTIO_TRUE}" && test -z "${USE_TESTIO_FALSE}"; then
-  as_fn_error "conditional \"USE_TESTIO\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_TESTIO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_DOCS_TRUE}" && test -z "${USE_DOCS_FALSE}"; then
-  as_fn_error "conditional \"USE_DOCS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_DOCS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 
 : ${CONFIG_STATUS=./config.status}
@@ -17069,9 +17198,9 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in #(
+  case `(set -o) 2>/dev/null` in @%:@(
   *posix*) :
-    set -o posix ;; #(
+    set -o posix ;; @%:@(
   *) :
      ;;
 esac
@@ -17102,7 +17231,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in #(
+      case $arg in @%:@(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -17134,7 +17263,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in #((
+case $0 in @%:@((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -17179,55 +17308,55 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD]
+@%:@ ----------------------------------------
+@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+@%:@ script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
-} # as_fn_error
+} @%:@ as_fn_error
 
 
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
+@%:@ as_fn_set_status STATUS
+@%:@ -----------------------
+@%:@ Set @S|@? to STATUS, without forking.
 as_fn_set_status ()
 {
   return $1
-} # as_fn_set_status
+} @%:@ as_fn_set_status
 
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+@%:@ as_fn_exit STATUS
+@%:@ -----------------
+@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
 as_fn_exit ()
 {
   set +e
   as_fn_set_status $1
   exit $1
-} # as_fn_exit
+} @%:@ as_fn_exit
 
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
+@%:@ as_fn_unset VAR
+@%:@ ---------------
+@%:@ Portably unset VAR.
 as_fn_unset ()
 {
   { eval $1=; unset $1;}
 }
 as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
+@%:@ as_fn_append VAR VALUE
+@%:@ ----------------------
+@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take
+@%:@ advantage of any shell optimizations that allow amortized linear growth over
+@%:@ repeated appends, instead of the typical quadratic growth present in naive
+@%:@ implementations.
 if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
   eval 'as_fn_append ()
   {
@@ -17240,11 +17369,11 @@ else
   }
 fi # as_fn_append
 
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
+@%:@ as_fn_arith ARG...
+@%:@ ------------------
+@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the
+@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) and expr.
 if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
   eval 'as_fn_arith ()
   {
@@ -17304,7 +17433,7 @@ as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
+case `echo -n x` in @%:@(((((
 -n*)
   case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
@@ -17344,9 +17473,9 @@ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
 
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
+@%:@ as_fn_mkdir_p
+@%:@ -------------
+@%:@ Create "@S|@as_dir" as a directory, including parents if necessary.
 as_fn_mkdir_p ()
 {
 
@@ -17387,10 +17516,10 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
-} # as_fn_mkdir_p
+} @%:@ as_fn_mkdir_p
 if mkdir -p . 2>/dev/null; then
   as_mkdir_p='mkdir -p "$as_dir"'
 else
@@ -17411,10 +17540,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in #(
+	case $1 in @%:@(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -17441,7 +17570,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by mathgl $as_me 1.10, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.67.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -17481,13 +17610,14 @@ Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
   -q, --quiet, --silent
                    do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
+      --file=FILE[:TEMPLATE] 
                    instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
+      --header=FILE[:TEMPLATE] 
                    instantiate the configuration header FILE
 
 Configuration files:
@@ -17503,12 +17633,13 @@ Report bugs to <mathgl.abalakin at gmail.com>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mathgl config.status 1.10
-configured by $0, generated by GNU Autoconf 2.64,
-  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+configured by $0, generated by GNU Autoconf 2.67,
+  with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -17526,11 +17657,16 @@ ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
-  --*=*)
+  --*=?*)
     ac_option=`expr "X$1" : 'X\([^=]*\)='`
     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
   *)
     ac_option=$1
     ac_optarg=$2
@@ -17544,12 +17680,15 @@ do
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
     $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -17562,7 +17701,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -17571,7 +17710,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -17604,8 +17743,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 exec 5>>config.log
 {
   echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
+  sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX
+@%:@@%:@ Running $as_me. @%:@@%:@
 _ASBOX
   $as_echo "$ac_log"
 } >&5
@@ -17990,7 +18129,7 @@ do
     "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;;
     "widgets/Makefile") CONFIG_FILES="$CONFIG_FILES widgets/Makefile" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
   esac
 done
 
@@ -18028,7 +18167,7 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -18045,7 +18184,7 @@ if test "x$ac_cr" = x; then
 fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
@@ -18059,18 +18198,18 @@ _ACEOF
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   . ./conf$$subs.sh ||
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 
 
   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
   if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -18092,7 +18231,7 @@ s/'"$ac_delim"'$//
 t delim
 :nl
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more1
 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
 p
@@ -18106,7 +18245,7 @@ s/.\{148\}//
 t nl
 :delim
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more2
 s/["\\]/\\&/g; s/^/"/; s/$/"/
 p
@@ -18159,20 +18298,28 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
 else
   cat
 fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 
 _ACEOF
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[	 ]*\):*/\1/
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
 s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
 s/^[^=]*=[	 ]*$//
 }'
 fi
@@ -18200,7 +18347,7 @@ for ac_last_try in false false :; do
   if test -z "$ac_t"; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -18285,7 +18432,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -18298,7 +18445,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -18326,7 +18473,7 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -18353,7 +18500,7 @@ $as_echo "$as_me: creating $ac_file" >&6;}
 
     case $ac_tag in
     *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
     esac
     ;;
   esac
@@ -18490,22 +18637,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5 
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
+which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&2;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
   -) cat "$tmp/out" && rm -f "$tmp/out";;
   *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
   esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5 
  ;;
   :H)
   #
@@ -18516,19 +18663,19 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
       $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
     } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 
     if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
       mv "$tmp/config.h" "$ac_file" \
-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5 
     fi
   else
     $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      || as_fn_error $? "could not create -" "$LINENO" 5 
   fi
 # Compute "$ac_file"'s index in $config_headers.
 _am_arg="$ac_file"
@@ -18565,7 +18712,7 @@ $as_echo X"$_am_arg" |
 	  }
 	  s/.*/./; q'`/stamp-h$_am_stamp_count
  ;;
-
+  
   :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
 $as_echo "$as_me: executing $ac_file commands" >&6;}
  ;;
@@ -18668,8 +18815,8 @@ $as_echo X"$file" |
   done
 }
  ;;
-    "libtool":C)
-
+    "libtool":C) 
+    
     # See if we are running on zsh, and set the options which allow our
     # commands through without removal of \ escapes.
     if test -n "${ZSH_VERSION+set}" ; then
@@ -19105,7 +19252,7 @@ _LT_EOF
     ;;
   esac
 
-
+  
 ltmain="$ac_aux_dir/ltmain.sh"
 
 
@@ -19486,7 +19633,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -19507,7 +19654,7 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit $?
+  $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
diff --git a/configure b/autom4te.cache/output.1
old mode 100755
new mode 100644
similarity index 94%
copy from configure
copy to autom4te.cache/output.1
index 4016c53..26594eb
--- a/configure
+++ b/autom4te.cache/output.1
@@ -1,15 +1,17 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64 for mathgl 1.10.
-#
-# Report bugs to <mathgl.abalakin at gmail.com>.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
-# Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
+@%:@! /bin/sh
+@%:@ Guess values for system-dependent variables and create Makefiles.
+@%:@ Generated by GNU Autoconf 2.67 for mathgl 1.10.
+@%:@
+@%:@ Report bugs to <mathgl.abalakin at gmail.com>.
+@%:@ 
+@%:@ 
+@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+@%:@ Foundation, Inc.
+@%:@ 
+@%:@ 
+@%:@ This configure script is free software; the Free Software Foundation
+@%:@ gives unlimited permission to copy, distribute and modify it.
 ## -------------------- ##
 ## M4sh Initialization. ##
 ## -------------------- ##
@@ -24,9 +26,9 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in #(
+  case `(set -o) 2>/dev/null` in @%:@(
   *posix*) :
-    set -o posix ;; #(
+    set -o posix ;; @%:@(
   *) :
      ;;
 esac
@@ -57,7 +59,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in #(
+      case $arg in @%:@(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -89,7 +91,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in #((
+case $0 in @%:@((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -142,9 +144,9 @@ if test "x$CONFIG_SHELL" = x; then
   alias -g '\${1+\"\$@\"}'='\"\$@\"'
   setopt NO_GLOB_SUBST
 else
-  case \`(set -o) 2>/dev/null\` in #(
+  case \`(set -o) 2>/dev/null\` in @%:@(
   *posix*) :
-    set -o posix ;; #(
+    set -o posix ;; @%:@(
   *) :
      ;;
 esac
@@ -162,7 +164,7 @@ as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
 as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
 as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
 if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
+  
 else
   exitcode=1; echo positional parameters were not saved.
 fi
@@ -178,7 +180,7 @@ else
   as_have_required=no
 fi
   if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
+  
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 as_found=false
@@ -187,7 +189,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   as_found=:
-  case $as_dir in #(
+  case $as_dir in @%:@(
 	 /*)
 	   for as_base in sh bash ksh sh5; do
 	     # Try only shells that exist, to save several forks.
@@ -247,36 +249,36 @@ unset CLICOLOR_FORCE GREP_OPTIONS
 ## --------------------- ##
 ## M4sh Shell Functions. ##
 ## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
+@%:@ as_fn_unset VAR
+@%:@ ---------------
+@%:@ Portably unset VAR.
 as_fn_unset ()
 {
   { eval $1=; unset $1;}
 }
 as_unset=as_fn_unset
 
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
+@%:@ as_fn_set_status STATUS
+@%:@ -----------------------
+@%:@ Set @S|@? to STATUS, without forking.
 as_fn_set_status ()
 {
   return $1
-} # as_fn_set_status
+} @%:@ as_fn_set_status
 
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+@%:@ as_fn_exit STATUS
+@%:@ -----------------
+@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
 as_fn_exit ()
 {
   set +e
   as_fn_set_status $1
   exit $1
-} # as_fn_exit
+} @%:@ as_fn_exit
 
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
+@%:@ as_fn_mkdir_p
+@%:@ -------------
+@%:@ Create "@S|@as_dir" as a directory, including parents if necessary.
 as_fn_mkdir_p ()
 {
 
@@ -317,16 +319,16 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
+} @%:@ as_fn_mkdir_p
+@%:@ as_fn_append VAR VALUE
+@%:@ ----------------------
+@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take
+@%:@ advantage of any shell optimizations that allow amortized linear growth over
+@%:@ repeated appends, instead of the typical quadratic growth present in naive
+@%:@ implementations.
 if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
   eval 'as_fn_append ()
   {
@@ -339,11 +341,11 @@ else
   }
 fi # as_fn_append
 
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
+@%:@ as_fn_arith ARG...
+@%:@ ------------------
+@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the
+@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) and expr.
 if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
   eval 'as_fn_arith ()
   {
@@ -357,21 +359,21 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD]
+@%:@ ----------------------------------------
+@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+@%:@ script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
-} # as_fn_error
+} @%:@ as_fn_error
 
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
@@ -451,7 +453,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
 }
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
+case `echo -n x` in @%:@(((((
 -n*)
   case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
@@ -510,10 +512,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in #(
+	case $1 in @%:@(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -736,10 +738,11 @@ as_awk_strverscmp='
   }
 '
 
-exec 7<&0 </dev/null 6>&1
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -749,7 +752,7 @@ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 ac_default_prefix=/usr/local
 ac_clean_files=
 ac_config_libobj_dir=.
-LIBOBJS=
+LIB@&t at OBJS=
 cross_compiling=no
 subdirs=
 MFLAGS=
@@ -803,7 +806,7 @@ ac_includes_default="\
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
-LIBOBJS
+LIB@&t at OBJS
 AM_CXXFLAGS
 USE_DOCS_FALSE
 USE_DOCS_TRUE
@@ -862,6 +865,10 @@ USE_GIF_FALSE
 USE_GIF_TRUE
 GIF_LIBS
 GIF_FLAGS
+USE_HDF4_FALSE
+USE_HDF4_TRUE
+HDF4_LIBS
+HDF4_FLAGS
 USE_HDF5_FALSE
 USE_HDF5_TRUE
 HDF5_LIBS
@@ -958,6 +965,7 @@ INSTALL_PROGRAM
 MGL_AGE
 MGL_REVISION
 MGL_CURRENT
+MGL_RELEASE
 target_alias
 host_alias
 build_alias
@@ -1014,6 +1022,7 @@ enable_gsl
 enable_glut
 enable_hdf5
 enable_hdf5_18
+enable_hdf4
 enable_gif
 enable_jpeg
 enable_fltk
@@ -1101,8 +1110,9 @@ do
   fi
 
   case $ac_option in
-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)	ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1147,7 +1157,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1173,7 +1183,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1377,7 +1387,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1393,7 +1403,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1423,8 +1433,8 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1432,7 +1442,7 @@ Try \`$0 --help' for more information."
     # Reject names that are not valid shell variable names.
     case $ac_envvar in #(
       '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1450,13 +1460,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  as_fn_error $? "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1479,7 +1489,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1493,8 +1503,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1509,9 +1519,9 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error "working directory cannot be determined"
+  as_fn_error $? "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error "pwd does not report name of working directory"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1550,11 +1560,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1594,7 +1604,7 @@ Configuration:
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
+  -q, --quiet, --silent   do not print \`checking ...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
@@ -1602,9 +1612,9 @@ Configuration:
 
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
+                          @<:@@S|@ac_default_prefix@:>@
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
+                          @<:@PREFIX@:>@
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -1628,7 +1638,7 @@ Fine tuning of the installation directories:
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/mathgl]
+  --docdir=DIR            documentation root @<:@DATAROOTDIR/doc/mathgl@:>@
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1660,10 +1670,10 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
-  --enable-shared[=PKGS]  build shared libraries [default=yes]
-  --enable-static[=PKGS]  build static libraries [default=yes]
-  --enable-fast-install[=PKGS]
-                          optimize for fast installation [default=yes]
+  --enable-shared@<:@=PKGS@:>@  build shared libraries @<:@default=yes@:>@
+  --enable-static@<:@=PKGS@:>@  build static libraries @<:@default=yes@:>@
+  --enable-fast-install@<:@=PKGS@:>@ 
+                          optimize for fast installation @<:@default=yes@:>@
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-double    Turn on double precision in MathGL library
   --enable-all    Turn on all features
@@ -1673,6 +1683,7 @@ Optional Features:
   --enable-glut    Turn on glut
   --enable-hdf5    Turn on hdf5
   --enable-hdf5_18    Turn on hdf5 version 1.8
+  --enable-hdf4    Turn on hdf4
   --enable-gif    Turn on gif
   --enable-jpeg    Turn on jpeg
   --enable-fltk    Turn on fltk
@@ -1686,10 +1697,10 @@ Optional Features:
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
-                          both]
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-qt               Path to Qt [Look in PATH and /usr/local/Trolltech]
+  --with-pic              try to use only PIC/non-PIC objects @<:@default=use
+                          both@:>@
+  --with-gnu-ld           assume the C compiler uses GNU ld @<:@default=no@:>@
+  --with-qt               Path to Qt @<:@Look in PATH and /usr/local/Trolltech@:>@
 
 Some influential environment variables:
   CC          C compiler command
@@ -1697,13 +1708,13 @@ Some influential environment variables:
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
   CPP         C preprocessor
   CXXCPP      C++ preprocessor
-  TMPDIR      A temporary directory with write access [/tmp]
+  TMPDIR      A temporary directory with write access @<:@/tmp@:>@
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1772,9 +1783,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 mathgl configure 1.10
-generated by GNU Autoconf 2.64
+generated by GNU Autoconf 2.67
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1785,9 +1796,9 @@ fi
 ## Autoconf initialization. ##
 ## ------------------------ ##
 
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_c_try_compile LINENO
+@%:@ --------------------------
+@%:@ Try to compile conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_c_try_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1819,13 +1830,13 @@ sed 's/^/| /' conftest.$ac_ext >&5
 	ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_compile
+} @%:@ ac_fn_c_try_compile
 
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_cxx_try_compile LINENO
+@%:@ ----------------------------
+@%:@ Try to compile conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_cxx_try_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1857,13 +1868,13 @@ sed 's/^/| /' conftest.$ac_ext >&5
 	ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_cxx_try_compile
+} @%:@ ac_fn_cxx_try_compile
 
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_c_try_link LINENO
+@%:@ -----------------------
+@%:@ Try to link conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_c_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1903,26 +1914,26 @@ fi
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_link
+} @%:@ ac_fn_c_try_link
 
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
+@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+@%:@ -------------------------------------------------------
+@%:@ Tests whether HEADER exists and can be compiled using the include files in
+@%:@ INCLUDES, setting the cache variable VAR accordingly.
 ac_fn_c_check_header_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
-#include <$2>
+@%:@include <$2>
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   eval "$3=yes"
@@ -1936,11 +1947,11 @@ eval ac_res=\$$3
 $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
 
-} # ac_fn_c_check_header_compile
+} @%:@ ac_fn_c_check_header_compile
 
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_c_try_cpp LINENO
+@%:@ ----------------------
+@%:@ Try to preprocess conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_c_try_cpp ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -1959,7 +1970,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -1971,14 +1982,14 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_cpp
+} @%:@ ac_fn_c_try_cpp
 
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
+@%:@ ac_fn_c_try_run LINENO
+@%:@ ----------------------
+@%:@ Try to link conftest. at S|@ac_ext, and return whether this succeeded. Assumes
+@%:@ that executables *can* be run.
 ac_fn_c_try_run ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -2013,19 +2024,19 @@ sed 's/^/| /' conftest.$ac_ext >&5
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_run
+} @%:@ ac_fn_c_try_run
 
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
+@%:@ ac_fn_c_check_func LINENO FUNC VAR
+@%:@ ----------------------------------
+@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly
 ac_fn_c_check_func ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2082,11 +2093,11 @@ eval ac_res=\$$3
 $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
 
-} # ac_fn_c_check_func
+} @%:@ ac_fn_c_check_func
 
-# ac_fn_cxx_try_cpp LINENO
-# ------------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_cxx_try_cpp LINENO
+@%:@ ------------------------
+@%:@ Try to preprocess conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_cxx_try_cpp ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -2105,7 +2116,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -2117,13 +2128,13 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_cxx_try_cpp
+} @%:@ ac_fn_cxx_try_cpp
 
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
+@%:@ ac_fn_cxx_try_link LINENO
+@%:@ -------------------------
+@%:@ Try to link conftest. at S|@ac_ext, and return whether this succeeded.
 ac_fn_cxx_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
@@ -2163,22 +2174,22 @@ fi
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
-} # ac_fn_cxx_try_link
+} @%:@ ac_fn_cxx_try_link
 
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
+@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+@%:@ -------------------------------------------------------
+@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using
+@%:@ the include files in INCLUDES and setting the cache variable VAR
+@%:@ accordingly.
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  if eval "test \"\${$3+set}\"" = set; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2191,7 +2202,7 @@ $as_echo_n "checking $2 usability... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
-#include <$2>
+@%:@include <$2>
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   ac_header_compiler=yes
@@ -2207,14 +2218,14 @@ $as_echo "$ac_header_compiler" >&6; }
 $as_echo_n "checking $2 presence... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <$2>
+@%:@include <$2>
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   ac_header_preproc=yes
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
 $as_echo "$ac_header_preproc" >&6; }
 
@@ -2237,17 +2248,15 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( cat <<\_ASBOX
-## ---------------------------------------- ##
+( $as_echo "## ---------------------------------------- ##
 ## Report this to mathgl.abalakin at gmail.com ##
-## ---------------------------------------- ##
-_ASBOX
+## ---------------------------------------- ##"
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2258,13 +2267,13 @@ $as_echo "$ac_res" >&6; }
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
 
-} # ac_fn_c_check_header_mongrel
+} @%:@ ac_fn_c_check_header_mongrel
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mathgl $as_me 1.10, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.67.  Invocation command line was
 
   $ $0 $@
 
@@ -2374,11 +2383,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2412,11 +2419,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2429,11 +2434,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2447,11 +2450,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2477,27 +2478,27 @@ $as_echo "/* confdefs.h */" > confdefs.h
 # Predefined preprocessor variables.
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
+@%:@define PACKAGE_NAME "$PACKAGE_NAME"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
+@%:@define PACKAGE_VERSION "$PACKAGE_VERSION"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
+@%:@define PACKAGE_STRING "$PACKAGE_STRING"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
+@%:@define PACKAGE_URL "$PACKAGE_URL"
 _ACEOF
 
 
@@ -2506,7 +2507,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in @%:@((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -2517,18 +2523,22 @@ fi
 for ac_site_file in "$ac_site_file1" "$ac_site_file2"
 do
   test "x$ac_site_file" = xNONE && continue
-  if test -r "$ac_site_file"; then
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
   fi
 done
 
 if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
 $as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
@@ -2597,7 +2607,7 @@ if $ac_cache_corrupted; then
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2611,19 +2621,28 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+MGL_RELEASE=1.10
+
+
 
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2681,7 +2700,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
+case $as_dir/ in @%:@((
   ./ | .// | /[cC]/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
   ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
@@ -2759,11 +2778,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2785,8 +2804,8 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5 
    fi
 
    test "$2" = conftest.file
@@ -2795,8 +2814,8 @@ then
    # Ok.
    :
 else
-   as_fn_error "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -2967,6 +2986,7 @@ IFS=$as_save_IFS
 
 fi
 
+  test -d ./--version && rmdir ./--version
   if test "${ac_cv_path_mkdir+set}" = set; then
     MKDIR_P="$ac_cv_path_mkdir -p"
   else
@@ -2974,7 +2994,6 @@ fi
     # value for MKDIR_P within a source directory, because that will
     # break other packages using the cache if that directory is
     # removed, or if the value is a relative name.
-    test -d ./--version && rmdir ./--version
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
@@ -3033,7 +3052,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -3041,7 +3060,7 @@ SHELL = /bin/sh
 all:
 	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -3075,7 +3094,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 
   fi
 fi
 
@@ -3095,12 +3114,12 @@ fi
 
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
+@%:@define PACKAGE "$PACKAGE"
 _ACEOF
 
-
+ 
 cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
+@%:@define VERSION "$VERSION"
 _ACEOF
 
 # Some tools Automake needs.
@@ -3305,7 +3324,7 @@ if test $ac_prog_rejected = yes; then
   # We found a bogon in the path, so make sure we never use it.
   set dummy $ac_cv_prog_CC
   shift
-  if test $# != 0; then
+  if test $@%:@ != 0; then
     # We chose a different compiler from the bogus one.
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
@@ -3432,8 +3451,8 @@ fi
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3454,32 +3473,30 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
 
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdio.h>
+
 int
 main ()
 {
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
 
   ;
   return 0;
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
@@ -3541,62 +3558,28 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
 if test -z "$ac_file"; then :
-  $as_echo "$as_me: failed program was:" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
 
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
 $as_echo_n "checking for suffix of executables... " >&6; }
 if { { ac_try="$ac_link"
@@ -3626,16 +3609,75 @@ done
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
-rm -f conftest$ac_cv_exeext
+rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
 $as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+@%:@include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
 if test "${ac_cv_objext+set}" = set; then :
@@ -3678,8 +3720,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -3760,7 +3802,7 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-
+  
 else
   ac_c_werror_flag=$ac_save_c_werror_flag
 	 CFLAGS="-g"
@@ -3890,7 +3932,7 @@ $as_echo "unsupported" >&6; } ;;
 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
 if test "x$ac_cv_prog_cc_c89" != xno; then :
-
+  
 fi
 
 ac_ext=c
@@ -3942,9 +3984,9 @@ fi
 $as_echo "$_am_result" >&6; }
 rm -f confinc confmf
 
-# Check whether --enable-dependency-tracking was given.
+@%:@ Check whether --enable-dependency-tracking was given.
 if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
+  enableval=$enable_dependency_tracking; 
 fi
 
 if test "x$enable_dependency_tracking" != xno; then
@@ -4077,7 +4119,7 @@ fi
 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
- if
+ if 
   test "x$enable_dependency_tracking" != xno \
   && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
   am__fastdepCC_TRUE=
@@ -4218,8 +4260,8 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
@@ -4297,7 +4339,7 @@ main ()
 }
 _ACEOF
 if ac_fn_cxx_try_compile "$LINENO"; then :
-
+  
 else
   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 	 CXXFLAGS="-g"
@@ -4461,7 +4503,7 @@ fi
 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
 
- if
+ if 
   test "x$enable_dependency_tracking" != xno \
   && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
   am__fastdepCXX_TRUE=
@@ -4476,7 +4518,7 @@ fi
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
@@ -4487,16 +4529,16 @@ else
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -4521,7 +4563,7 @@ else
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 
 fi
 
 fi
@@ -4529,7 +4571,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -4830,21 +4872,21 @@ esac
 
 test -z "$AS" && AS=as
 
-
-
-
+    
+    
+    
 
 test -z "$DLLTOOL" && DLLTOOL=dlltool
 
-
-
-
+    
+    
+    
 
 test -z "$OBJDUMP" && OBJDUMP=objdump
 
-
-
-
+    
+    
+    
 
 
 
@@ -4860,17 +4902,17 @@ esac
 
 
 
-macro_version='2.2.6'
-macro_revision='1.3012'
-
-
-
-
-
-
+macro_version='2.2.6b'
+macro_revision='1.3017'
 
+    
+    
+    
 
 
+    
+    
+    
 
 
 
@@ -4934,7 +4976,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 
   fi
 else
   ac_cv_path_SED=$SED
@@ -4949,14 +4991,14 @@ $as_echo "$ac_cv_path_SED" >&6; }
 test -z "$SED" && SED=sed
 Xsed="$SED -e 1s/^X//"
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
@@ -5010,7 +5052,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 
   fi
 else
   ac_cv_path_GREP=$GREP
@@ -5020,7 +5062,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
 $as_echo "$ac_cv_path_GREP" >&6; }
  GREP="$ac_cv_path_GREP"
-
+ 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
@@ -5076,7 +5118,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -5087,7 +5129,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
 $as_echo "$ac_cv_path_EGREP" >&6; }
  EGREP="$ac_cv_path_EGREP"
-
+ 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
@@ -5143,7 +5185,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -5154,29 +5196,29 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
 $as_echo "$ac_cv_path_FGREP" >&6; }
  FGREP="$ac_cv_path_FGREP"
-
+ 
 
 test -z "$GREP" && GREP=grep
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
 
 
 
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
+@%:@ Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
 else
@@ -5259,7 +5301,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -5282,9 +5324,9 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 
-
-
-
+    
+    
+    
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
@@ -5442,7 +5484,7 @@ esac
   fi
 fi
 
-
+  
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
   fi
@@ -5450,9 +5492,9 @@ fi
 test -z "$NM" && NM=nm
 
 
-
-
-
+    
+    
+    
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
@@ -5461,13 +5503,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5464: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5467: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5470: output\"" >&5)
+  (eval echo "\"\$as_me:__oline__: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -5617,9 +5659,9 @@ $as_echo "none" >&6; }
 fi
 max_cmd_len=$lt_cv_sys_max_cmd_len
 
-
-
-
+    
+    
+    
 
 
 : ${CP="cp -f"}
@@ -5656,9 +5698,9 @@ else
   lt_unset=false
 fi
 
-
-
-
+    
+    
+    
 
 # test EBCDIC or ASCII
 case `echo X|tr X '\101'` in
@@ -5673,13 +5715,13 @@ case `echo X|tr X '\101'` in
   ;;
 esac
 
+    
+    
+    
 
-
-
-
-
-
-
+    
+    
+    
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
 $as_echo_n "checking for $LD option to reload object files... " >&6; }
@@ -5706,13 +5748,13 @@ case $host_os in
     ;;
 esac
 
+    
+    
+    
 
-
-
-
-
-
-
+    
+    
+    
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
@@ -5930,7 +5972,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -6016,14 +6058,14 @@ deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 if test -n "$ac_tool_prefix"; then
@@ -6121,14 +6163,14 @@ fi
 test -z "$AR" && AR=ar
 test -z "$AR_FLAGS" && AR_FLAGS=cru
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 if test -n "$ac_tool_prefix"; then
@@ -6225,9 +6267,9 @@ fi
 
 test -z "$STRIP" && STRIP=:
 
-
-
-
+    
+    
+    
 
 
 if test -n "$ac_tool_prefix"; then
@@ -6324,9 +6366,9 @@ fi
 
 test -z "$RANLIB" && RANLIB=:
 
-
-
-
+    
+    
+    
 
 
 # Determine commands to create old-style static archives.
@@ -6346,38 +6388,38 @@ if test -n "$RANLIB"; then
   old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 fi
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
 
 
+    
+    
+    
 
+    
+    
+    
 
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 # If no C compiler was specified, use CC.
 LTCC=${LTCC-"$CC"}
@@ -6395,7 +6437,7 @@ $as_echo_n "checking command to parse $NM output from $compiler object... " >&6;
 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-
+  
 # These are sane defaults that work on at least a few old systems.
 # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
 
@@ -6618,30 +6660,30 @@ $as_echo "ok" >&6; }
 fi
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --enable-libtool-lock was given.
+@%:@ Check whether --enable-libtool-lock was given.
 if test "${enable_libtool_lock+set}" = set; then :
-  enableval=$enable_libtool_lock;
+  enableval=$enable_libtool_lock; 
 fi
 
 test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
@@ -6670,7 +6712,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6673 "configure"' > conftest.$ac_ext
+  echo '#line __oline__ "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7295,30 +7337,30 @@ else
   OTOOL64="$ac_cv_prog_OTOOL64"
 fi
 
+    
+    
+    
+    
 
+    
+    
+    
+    
 
+    
+    
+    
+    
 
+    
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
+    
 
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
@@ -7378,7 +7420,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 	LDFLAGS="$save_LDFLAGS"
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
@@ -7446,26 +7488,26 @@ do
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
 		     Syntax error
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
-
+  
 else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+@%:@include <ac_nonexistent.h>
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
@@ -7475,18 +7517,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
 
     done
     ac_cv_prog_CPP=$CPP
-
+  
 fi
   CPP=$ac_cv_prog_CPP
 else
@@ -7505,26 +7547,26 @@ do
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
 		     Syntax error
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
-
+  
 else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+@%:@include <ac_nonexistent.h>
 _ACEOF
 if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
@@ -7534,18 +7576,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
-
+  
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
 
 ac_ext=c
@@ -7591,7 +7633,7 @@ if test $ac_cv_header_stdc = yes; then
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   $EGREP "memchr" >/dev/null 2>&1; then :
-
+  
 else
   ac_cv_header_stdc=no
 fi
@@ -7608,7 +7650,7 @@ if test $ac_cv_header_stdc = yes; then
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
   $EGREP "free" >/dev/null 2>&1; then :
-
+  
 else
   ac_cv_header_stdc=no
 fi
@@ -7649,7 +7691,7 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
-
+  
 else
   ac_cv_header_stdc=no
 fi
@@ -7662,8 +7704,8 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
 $as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+  
+$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h
 
 fi
 
@@ -7674,12 +7716,11 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
-
+ 
 fi
 
 done
@@ -7691,9 +7732,9 @@ do :
 "
 if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
+@%:@define HAVE_DLFCN_H 1
 _ACEOF
-
+ 
 fi
 
 done
@@ -7830,8 +7871,8 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
@@ -7909,7 +7950,7 @@ main ()
 }
 _ACEOF
 if ac_fn_cxx_try_compile "$LINENO"; then :
-
+  
 else
   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 	 CXXFLAGS="-g"
@@ -8073,7 +8114,7 @@ fi
 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
 
- if
+ if 
   test "x$enable_dependency_tracking" != xno \
   && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
   am__fastdepCXX_TRUE=
@@ -8112,26 +8153,26 @@ do
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
 		     Syntax error
 _ACEOF
 if ac_fn_cxx_try_cpp "$LINENO"; then :
-
+  
 else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+@%:@include <ac_nonexistent.h>
 _ACEOF
 if ac_fn_cxx_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
@@ -8141,18 +8182,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
 
     done
     ac_cv_prog_CXXCPP=$CXXCPP
-
+  
 fi
   CXXCPP=$ac_cv_prog_CXXCPP
 else
@@ -8171,26 +8212,26 @@ do
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
 		     Syntax error
 _ACEOF
 if ac_fn_cxx_try_cpp "$LINENO"; then :
-
+  
 else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+@%:@include <ac_nonexistent.h>
 _ACEOF
 if ac_fn_cxx_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
@@ -8200,13 +8241,13 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
-
+  
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -8231,9 +8272,9 @@ fi
 
 
 
-
-
-            # Check whether --enable-shared was given.
+        
+  
+            @%:@ Check whether --enable-shared was given.
 if test "${enable_shared+set}" = set; then :
   enableval=$enable_shared; p=${PACKAGE-default}
     case $enableval in
@@ -8257,14 +8298,14 @@ else
 fi
 
 
+    
+    
+    
+    
 
 
 
-
-
-
-
-  # Check whether --enable-static was given.
+  @%:@ Check whether --enable-static was given.
 if test "${enable_static+set}" = set; then :
   enableval=$enable_static; p=${PACKAGE-default}
     case $enableval in
@@ -8288,15 +8329,15 @@ else
 fi
 
 
+    
+    
+    
+    
 
 
 
-
-
-
-
-
-# Check whether --with-pic was given.
+  
+@%:@ Check whether --with-pic was given.
 if test "${with_pic+set}" = set; then :
   withval=$with_pic; pic_mode="$withval"
 else
@@ -8307,12 +8348,12 @@ fi
 test -z "$pic_mode" && pic_mode=default
 
 
+    
+    
+    
 
 
-
-
-
-  # Check whether --enable-fast-install was given.
+  @%:@ Check whether --enable-fast-install was given.
 if test "${enable_fast_install+set}" = set; then :
   enableval=$enable_fast_install; p=${PACKAGE-default}
     case $enableval in
@@ -8337,12 +8378,12 @@ fi
 
 
 
+    
+    
+    
 
 
-
-
-
-
+  
 
 
 # This can be used to rebuild libtool when needed
@@ -8352,42 +8393,42 @@ LIBTOOL_DEPS="$ltmain"
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
+    
+    
+    
 
+    
+    
+    
 
+    
+    
+    
 
+    
+    
+    
 
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 test -z "$LN_S" && LN_S="ln -s"
 
+    
+    
+    
 
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
 if test -n "${ZSH_VERSION+set}" ; then
@@ -8413,12 +8454,12 @@ fi
 $as_echo "$lt_cv_objdir" >&6; }
 objdir=$lt_cv_objdir
 
-
-
-
+    
+    
+    
 
 cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
+@%:@define LT_OBJDIR "$lt_cv_objdir/"
 _ACEOF
 
 
@@ -8426,14 +8467,14 @@ _ACEOF
 
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 
@@ -8562,9 +8603,9 @@ else
 $as_echo "no" >&6; }
 fi
 
-
-
-
+    
+    
+    
 
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
@@ -8694,8 +8735,12 @@ _lt_linker_boilerplate=`cat conftest.err`
 $RM -r conftest*
 
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
-
+  
 lt_prog_compiler_no_builtin_flag=
 
 if test "$GCC" = yes; then
@@ -8719,11 +8764,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8722: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8726: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8747,9 +8792,9 @@ fi
 
 fi
 
-
-
-
+    
+    
+    
 
 
   lt_prog_compiler_wl=
@@ -8888,7 +8933,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -9025,15 +9070,15 @@ case $host_os in
     lt_prog_compiler_pic=
     ;;
   *)
-    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC"
     ;;
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
 $as_echo "$lt_prog_compiler_pic" >&6; }
 
-
-
-
+    
+    
+    
 
 
 #
@@ -9048,7 +9093,7 @@ else
   lt_cv_prog_compiler_pic_works=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC"
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -9058,11 +9103,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9061: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9065: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -9090,9 +9135,9 @@ fi
 
 fi
 
-
-
-
+    
+    
+    
 
 
 #
@@ -9137,9 +9182,9 @@ else
 fi
 
 
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
@@ -9163,11 +9208,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9166: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9170: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9192,9 +9237,9 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
 $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
@@ -9218,11 +9263,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9221: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9225: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9272,9 +9317,9 @@ else
   need_locks=no
 fi
 
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
@@ -9361,6 +9406,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -9452,7 +9498,7 @@ _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -9735,7 +9781,7 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-
+  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
 	/^0/ {
@@ -9775,7 +9821,7 @@ main ()
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-
+  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
 	/^0/ {
@@ -9848,8 +9894,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     darwin* | rhapsody*)
-
-
+      
+  
   archive_cmds_need_lc=no
   hardcode_direct=no
   hardcode_automatic=yes
@@ -9867,7 +9913,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
     module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
-
+    
   else
   ld_shlibs=no
   fi
@@ -10008,7 +10054,7 @@ int foo(void) {}
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+        
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
@@ -10274,17 +10320,17 @@ test "$ld_shlibs" = no && can_build_shared=no
 with_gnu_ld=$with_gnu_ld
 
 
+    
+    
+    
 
+    
+    
+    
 
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
 #
@@ -10351,159 +10397,159 @@ $as_echo "$archive_cmds_need_lc" >&6; }
 esac
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
@@ -10914,7 +10960,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -11186,89 +11232,89 @@ if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
 fi
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
@@ -11309,9 +11355,9 @@ elif test "$shlibpath_overrides_runpath" = yes ||
   enable_fast_install=needless
 fi
 
-
-
-
+    
+    
+    
 
 
   if test "x$enable_dlopen" != xyes; then
@@ -11380,11 +11426,11 @@ $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
 if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
-
+  
     lt_cv_dlopen="dyld"
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
-
+    
 fi
 
     ;;
@@ -11555,19 +11601,19 @@ if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
-
+	      
 fi
 
-
+	    
 fi
 
-
+	  
 fi
 
-
+	
 fi
 
-
+      
 fi
 
     ;;
@@ -11601,7 +11647,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11604 "configure"
+#line __oline__ "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11679,7 +11725,7 @@ _LT_EOF
 fi
 rm -fr conftest*
 
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
 $as_echo "$lt_cv_dlopen_self" >&6; }
@@ -11697,7 +11743,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11700 "configure"
+#line __oline__ "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11775,7 +11821,7 @@ _LT_EOF
 fi
 rm -fr conftest*
 
-
+      
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
 $as_echo "$lt_cv_dlopen_self_static" >&6; }
@@ -11798,22 +11844,22 @@ $as_echo "$lt_cv_dlopen_self_static" >&6; }
   esac
 fi
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
-
-
-
-
+  
 striplib=
 old_striplib=
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
@@ -11844,14 +11890,14 @@ $as_echo "no" >&6; }
   esac
 fi
 
+    
+    
+    
 
 
-
-
-
-
-
-
+    
+    
+    
 
 
 
@@ -11892,7 +11938,7 @@ $as_echo_n "checking whether to build static libraries... " >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
 $as_echo "$enable_static" >&6; }
 
-
+  
 
 
 fi
@@ -11904,7 +11950,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 CC="$lt_save_CC"
 
-
+      
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -11953,7 +11999,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
 
   # ltmain only uses $CC for tagged configurations so make sure $CC is set.
-
+  
 
 
 
@@ -12027,9 +12073,9 @@ cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
     if test "$GXX" = yes; then
       # Set up default GNU C++ configuration
 
+      
 
-
-# Check whether --with-gnu-ld was given.
+@%:@ Check whether --with-gnu-ld was given.
 if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
 else
@@ -12112,7 +12158,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -12296,7 +12342,7 @@ main ()
 }
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
-
+  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
 	/^0/ {
@@ -12337,7 +12383,7 @@ main ()
 }
 _ACEOF
 if ac_fn_cxx_try_link "$LINENO"; then :
-
+  
 lt_aix_libpath_sed='
     /Import File Strings/,/^$/ {
 	/^0/ {
@@ -12414,8 +12460,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         fi
         ;;
       darwin* | rhapsody*)
-
-
+        
+  
   archive_cmds_need_lc_CXX=no
   hardcode_direct_CXX=no
   hardcode_automatic_CXX=yes
@@ -12637,7 +12683,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         inherit_rpath_CXX=yes
         ;;
 
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -13275,34 +13321,34 @@ if test -n "${compiler_lib_search_path_CXX}"; then
  compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
 fi
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
+    
+    
+    
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    
+    
+    
 
 
     lt_prog_compiler_wl_CXX=
@@ -13465,7 +13511,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -13623,7 +13669,7 @@ case $host_os in
     lt_prog_compiler_pic_CXX=
     ;;
   *)
-    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC"
     ;;
 esac
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
@@ -13643,7 +13689,7 @@ else
   lt_cv_prog_compiler_pic_works_CXX=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC"
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
@@ -13653,11 +13699,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13656: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13660: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13752,11 +13798,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13755: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13759: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -13804,11 +13850,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13807: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13811: \$? = $ac_status" >&5
+   echo "$as_me:__oline__: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -14382,7 +14428,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -14729,7 +14775,7 @@ fi
 
 
 
-
+    
 
 
   fi # test -n "$compiler"
@@ -14758,8 +14804,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-
-
+       
+       
 
 
 
@@ -14772,12 +14818,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-# Check whether --enable-double was given.
+@%:@ Check whether --enable-double was given.
 if test "${enable_double+set}" = set; then :
   enableval=$enable_double; case "${enableval}" in
   yes) double=true ;;
   no)  double=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-double" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-double" "$LINENO" 5  ;;
 esac
 else
   double=false
@@ -14785,45 +14831,45 @@ fi
 
 
 if (test x$double = xtrue) ;then
-
-$as_echo "#define MGL_USE_DOUBLE 1" >>confdefs.h
+    
+$as_echo "@%:@define MGL_USE_DOUBLE 1" >>confdefs.h
 
 else
-
-$as_echo "#define MGL_USE_DOUBLE 0" >>confdefs.h
+    
+$as_echo "@%:@define MGL_USE_DOUBLE 0" >>confdefs.h
 
 fi
 
-# Check whether --enable-all was given.
+@%:@ Check whether --enable-all was given.
 if test "${enable_all+set}" = set; then :
   enableval=$enable_all; case "${enableval}" in
   yes) all=true ;;
   no)  all=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-all" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-all" "$LINENO" 5  ;;
 esac
 else
   all=false
 fi
 
 
-# Check whether --enable-langall was given.
+@%:@ Check whether --enable-langall was given.
 if test "${enable_langall+set}" = set; then :
   enableval=$enable_langall; case "${enableval}" in
   yes) langall=true ;;
   no)  langall=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-langall" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-langall" "$LINENO" 5  ;;
 esac
 else
   langall=false
 fi
 
 
-# Check whether --enable-pthread was given.
+@%:@ Check whether --enable-pthread was given.
 if test "${enable_pthread+set}" = set; then :
   enableval=$enable_pthread; case "${enableval}" in
   yes) pthread=true ;;
   no)  pthread=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-pthread" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-pthread" "$LINENO" 5  ;;
 esac
 else
   pthread=true
@@ -14831,7 +14877,7 @@ fi
 
 ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
 if test "x$ac_cv_header_pthread_h" = x""yes; then :
-  (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_FLAGS=-DHAVE_PTHREAD
+  (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_FLAGS=-DHAVE_PTHREAD 
 else
   (test x$all = xtrue || test x$pthread = xtrue) && echo "Please install posix threads headers" && exit
 fi
@@ -14869,7 +14915,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_main" >&5
 $as_echo "$ac_cv_lib_pthread_main" >&6; }
 if test "x$ac_cv_lib_pthread_main" = x""yes; then :
-  (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_LIBS=-lpthread
+  (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_LIBS=-lpthread 
 else
   (test x$all = xtrue || test x$pthread = xtrue) && echo "Please install posix threads library" && exit
 fi
@@ -14883,12 +14929,12 @@ else
 fi
 
 
-# Check whether --enable-gsl was given.
+@%:@ Check whether --enable-gsl was given.
 if test "${enable_gsl+set}" = set; then :
   enableval=$enable_gsl; case "${enableval}" in
   yes) gsl=true ;;
   no)  gsl=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-gsl" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-gsl" "$LINENO" 5  ;;
 esac
 else
   gsl=true
@@ -14980,7 +15026,7 @@ fi
     fi
 else
     GSL_FLAGS=-DNO_GSL
-
+    
 fi
  if test x$test_gsl = xtrue; then
   USE_GSL_TRUE=
@@ -14991,12 +15037,12 @@ else
 fi
 
 
-# Check whether --enable-glut was given.
+@%:@ Check whether --enable-glut was given.
 if test "${enable_glut+set}" = set; then :
   enableval=$enable_glut; case "${enableval}" in
   yes) glut=true ;;
   no)  glut=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-glut" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-glut" "$LINENO" 5  ;;
 esac
 else
   glut=false
@@ -15006,10 +15052,10 @@ fi
 case "${host}" in
   *darwin*)
 	GL_LIBS="-framework OpenGL"
-
+	
 	if (test x$all = xtrue || test x$glut = xtrue) ;then
 	    GLUT_LIBS="-framework GLUT -framework OpenGL"
-
+	    
 	fi
        ;;
 
@@ -15017,7 +15063,7 @@ case "${host}" in
 	GL_LIBS=opengl32
 	ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
 if test "x$ac_cv_header_GL_gl_h" = x""yes; then :
-
+  
 else
   echo "Please install OpenGL headers (GL/gl.h)"; exit
 fi
@@ -15026,7 +15072,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5
 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15055,9 +15101,8 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
-  GL_LIBS=-l${GL_LIBS}
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  GL_LIBS=-l${GL_LIBS} 
 else
   echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit
 fi
@@ -15065,7 +15110,7 @@ fi
 	GLUT_LIBS=glut32
 	ac_fn_c_check_header_mongrel "$LINENO" "GL/glut.h" "ac_cv_header_GL_glut_h" "$ac_includes_default"
 if test "x$ac_cv_header_GL_glut_h" = x""yes; then :
-  (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT
+  (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT 
 else
   (test x$all = xtrue || test x$glut = xtrue) && (echo "Please install FreeGLUT headers (GL/glut.h)" && exit)
 fi
@@ -15074,7 +15119,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5
 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15103,9 +15148,8 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
-  (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS}
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} 
 else
   (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit
 fi
@@ -15116,7 +15160,7 @@ fi
 	GL_LIBS=GL
 	ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
 if test "x$ac_cv_header_GL_gl_h" = x""yes; then :
-
+  
 else
   echo "Please install OpenGL headers (GL/gl.h)"; exit
 fi
@@ -15125,7 +15169,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5
 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15154,9 +15198,8 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
-  GL_LIBS=-l${GL_LIBS}
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  GL_LIBS=-l${GL_LIBS} 
 else
   echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit
 fi
@@ -15164,7 +15207,7 @@ fi
 	GLUT_LIBS=glut
 	ac_fn_c_check_header_mongrel "$LINENO" "GL/glut.h" "ac_cv_header_GL_glut_h" "$ac_includes_default"
 if test "x$ac_cv_header_GL_glut_h" = x""yes; then :
-  (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT
+  (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT 
 else
   (test x$all = xtrue || test x$glut = xtrue) && (echo "Please install FreeGLUT headers (GL/glut.h)" && exit)
 fi
@@ -15173,7 +15216,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5
 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15202,9 +15245,8 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
-  (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS}
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+  (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} 
 else
   (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit
 fi
@@ -15230,23 +15272,23 @@ case "${host}" in
        ;;
 esac
 
-# Check whether --enable-hdf5 was given.
+@%:@ Check whether --enable-hdf5 was given.
 if test "${enable_hdf5+set}" = set; then :
   enableval=$enable_hdf5; case "${enableval}" in
   yes) hdf5=true ;;
   no)  hdf5=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-hdf5" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf5" "$LINENO" 5  ;;
 esac
 else
   hdf5=false
 fi
 
-# Check whether --enable-hdf5_18 was given.
+@%:@ Check whether --enable-hdf5_18 was given.
 if test "${enable_hdf5_18+set}" = set; then :
   enableval=$enable_hdf5_18; case "${enableval}" in
   yes) hdf5_18=true ;;
   no)  hdf5_18=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5  ;;
 esac
 else
   hdf5_18=false
@@ -15255,7 +15297,7 @@ fi
 #AC_CHECK_HEADER(hdf5.h,[(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5 AC_SUBST(HDF5_FLAGS)],
 ac_fn_c_check_header_mongrel "$LINENO" "hdf5.h" "ac_cv_header_hdf5_h" "$ac_includes_default"
 if test "x$ac_cv_header_hdf5_h" = x""yes; then :
-  (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5
+  (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5 
 else
   (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 headers" && exit
 fi
@@ -15263,7 +15305,7 @@ fi
 
 if ((test x$all = xtrue || test x$hdf5 = xtrue) && test x$hdf5_18 = xfalse) ;then
     HDF5_FLAGS="$HDF5_FLAGS -DH5_USE_16_API"
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lhdf5" >&5
 $as_echo_n "checking for main in -lhdf5... " >&6; }
@@ -15296,7 +15338,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hdf5_main" >&5
 $as_echo "$ac_cv_lib_hdf5_main" >&6; }
 if test "x$ac_cv_lib_hdf5_main" = x""yes; then :
-  (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_LIBS=-lhdf5
+  (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_LIBS=-lhdf5 
 else
   (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 library" && exit
 fi
@@ -15310,12 +15352,78 @@ else
 fi
 
 
-# Check whether --enable-gif was given.
+
+@%:@ Check whether --enable-hdf4 was given.
+if test "${enable_hdf4+set}" = set; then :
+  enableval=$enable_hdf4; case "${enableval}" in
+  yes) hdf4=true ;;
+  no)  hdf4=false ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf4" "$LINENO" 5  ;;
+esac
+else
+  hdf4=false
+fi
+
+ac_fn_c_check_header_mongrel "$LINENO" "hdf/mfhdf.h" "ac_cv_header_hdf_mfhdf_h" "$ac_includes_default"
+if test "x$ac_cv_header_hdf_mfhdf_h" = x""yes; then :
+  (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4 
+else
+  (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit
+fi
+
+
+    
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldf" >&5
+$as_echo_n "checking for main in -ldf... " >&6; }
+if test "${ac_cv_lib_df_main+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldf  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_df_main=yes
+else
+  ac_cv_lib_df_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_df_main" >&5
+$as_echo "$ac_cv_lib_df_main" >&6; }
+if test "x$ac_cv_lib_df_main" = x""yes; then :
+  (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf" 
+else
+  (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit
+fi
+
+ if (test x$all = xtrue || test x$hdf4 = xtrue); then
+  USE_HDF4_TRUE=
+  USE_HDF4_FALSE='#'
+else
+  USE_HDF4_TRUE='#'
+  USE_HDF4_FALSE=
+fi
+
+
+@%:@ Check whether --enable-gif was given.
 if test "${enable_gif+set}" = set; then :
   enableval=$enable_gif; case "${enableval}" in
   yes) gif=true ;;
   no)  gif=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-gif" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-gif" "$LINENO" 5  ;;
 esac
 else
   gif=false
@@ -15323,7 +15431,7 @@ fi
 
 ac_fn_c_check_header_mongrel "$LINENO" "gif_lib.h" "ac_cv_header_gif_lib_h" "$ac_includes_default"
 if test "x$ac_cv_header_gif_lib_h" = x""yes; then :
-  (test x$all = xtrue || test x$gif = xtrue) && GIF_FLAGS=-DHAVE_GIF
+  (test x$all = xtrue || test x$gif = xtrue) && GIF_FLAGS=-DHAVE_GIF 
 else
   (test x$all = xtrue || test x$gif = xtrue) && echo "Please install gif headers" && exit
 fi
@@ -15361,7 +15469,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5
 $as_echo "$ac_cv_lib_gif_main" >&6; }
 if test "x$ac_cv_lib_gif_main" = x""yes; then :
-  (test x$all = xtrue || test x$gif = xtrue) && GIF_LIBS=-lgif
+  (test x$all = xtrue || test x$gif = xtrue) && GIF_LIBS=-lgif 
 else
   (test x$all = xtrue || test x$gif = xtrue) && echo "Please install gif library" && exit
 fi
@@ -15377,7 +15485,7 @@ fi
 
 ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default"
 if test "x$ac_cv_header_png_h" = x""yes; then :
-
+  
 else
   echo "Please install png headers" && exit
 fi
@@ -15415,18 +15523,18 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_main" >&5
 $as_echo "$ac_cv_lib_png_main" >&6; }
 if test "x$ac_cv_lib_png_main" = x""yes; then :
-  PNG_LIBS=-lpng
+  PNG_LIBS=-lpng 
 else
   echo "Please install png library" && exit
 fi
 
 
-# Check whether --enable-jpeg was given.
+@%:@ Check whether --enable-jpeg was given.
 if test "${enable_jpeg+set}" = set; then :
   enableval=$enable_jpeg; case "${enableval}" in
   yes) jpeg=true ;;
   no)  jpeg=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-jpeg" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-jpeg" "$LINENO" 5  ;;
 esac
 else
   jpeg=false
@@ -15434,7 +15542,7 @@ fi
 
 ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default"
 if test "x$ac_cv_header_jpeglib_h" = x""yes; then :
-  (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_FLAGS=-DHAVE_JPEG
+  (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_FLAGS=-DHAVE_JPEG 
 else
   (test x$all = xtrue || test x$jpeg = xtrue) && echo "Please install jpeg headers" && exit
 fi
@@ -15472,7 +15580,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5
 $as_echo "$ac_cv_lib_jpeg_main" >&6; }
 if test "x$ac_cv_lib_jpeg_main" = x""yes; then :
-  (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_LIBS=-ljpeg
+  (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_LIBS=-ljpeg 
 else
   (test x$all = xtrue || test x$jpeg = xtrue) && echo "Please install jpeg library" && exit
 fi
@@ -15486,12 +15594,12 @@ else
 fi
 
 
-# Check whether --enable-fltk was given.
+@%:@ Check whether --enable-fltk was given.
 if test "${enable_fltk+set}" = set; then :
   enableval=$enable_fltk; case "${enableval}" in
   yes) fltk=true ;;
   no)  fltk=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-fltk" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-fltk" "$LINENO" 5  ;;
 esac
 else
   fltk=false
@@ -15579,7 +15687,7 @@ fi
 	echo "Please install FLTK headers and libraries and make sure that \
 	            path to $FLTK_PROG exist in your PATH"
 	exit
-    fi
+    fi 
 fi
  if test x$test_fltk = xtrue; then
   USE_FLTK_TRUE=
@@ -15590,12 +15698,12 @@ else
 fi
 
 
-# Check whether --enable-wx was given.
+@%:@ Check whether --enable-wx was given.
 if test "${enable_wx+set}" = set; then :
   enableval=$enable_wx; case "${enableval}" in
   yes) wx=true ;;
   no)  wx=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-wx" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-wx" "$LINENO" 5  ;;
 esac
 else
   wx=false
@@ -15684,7 +15792,7 @@ fi
 	echo "Please install wxwidget headers and libraries and make sure that \
 	            path to $WX_PROG exist in your PATH"
 	exit
-    fi
+    fi 
 fi
  if test x$test_wx = xtrue; then
   USE_WX_TRUE=
@@ -15695,26 +15803,26 @@ else
 fi
 
 
-# Check whether --enable-qt was given.
+@%:@ Check whether --enable-qt was given.
 if test "${enable_qt+set}" = set; then :
   enableval=$enable_qt; case "${enableval}" in
   yes) qt=true ;;
   no)  qt=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-qt" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-qt" "$LINENO" 5  ;;
 esac
 else
   qt=false
 fi
 
 if (test x$all = xtrue || test x$qt = xtrue) ;then
-
-
-
+     
+  
+  
 
   test x"$TROLL" != x && echo 'ViM rox emacs.'
 
-
-# Check whether --with-qt was given.
+  
+@%:@ Check whether --with-qt was given.
 if test "${with_qt+set}" = set; then :
   withval=$with_qt; QT_PATH=$withval
 else
@@ -15826,7 +15934,7 @@ done
 test -n "$QMAKE" || QMAKE="missing"
 
     if test x"$QMAKE" = xmissing; then
-      as_fn_error "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5 
     fi
   fi
 
@@ -15927,7 +16035,7 @@ done
 test -n "$MOC" || MOC="missing"
 
     if test x"$MOC" = xmissing; then
-      as_fn_error "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 
     fi
   fi
 
@@ -16028,7 +16136,7 @@ done
 test -n "$UIC" || UIC="missing"
 
     if test x"$UIC" = xmissing; then
-      as_fn_error "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 
     fi
   fi
 
@@ -16139,14 +16247,14 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.
     QT_PATH=`dirname "$QMAKE"`
   fi
   if test x"$QT_PATH" = x; then
-    as_fn_error "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5
+    as_fn_error $? "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5 
   fi
-
+  
 
   # Get ready to build a test-app with Qt.
 
   # Look for a writable temporary directory.
-
+  
   if test x"$TMPDIR" = x || test ! -d "$TMPDIR" || test ! -w "$TMPDIR"; then
     echo "$as_me:$LINENO: no TMPDIR or bad TMPDIR ($TMPDIR)" \
       >&5
@@ -16173,7 +16281,7 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.
   then
     :
   else
-    as_fn_error "Cannot cd to or write in $my_tmpdir" "$LINENO" 5
+    as_fn_error $? "Cannot cd to or write in $my_tmpdir" "$LINENO" 5 
   fi
   cat >conftest.h <<_ASEOF
 #include <QObject>
@@ -16212,14 +16320,14 @@ int main()
 }
 _ASEOF
   if $QMAKE -project; then :; else
-    as_fn_error "Calling $QMAKE -project failed." "$LINENO" 5
+    as_fn_error $? "Calling $QMAKE -project failed." "$LINENO" 5 
   fi
 
   # Find the .pro file generated by qmake.
   pro_file='conftest.dir.pro'
   test -f $pro_file || pro_file=`echo *.pro`
   if test -f "$pro_file"; then :; else
-    as_fn_error "Can't find the .pro file generated by Qmake." "$LINENO" 5
+    as_fn_error $? "Can't find the .pro file generated by Qmake." "$LINENO" 5 
   fi
 
 
@@ -16232,7 +16340,7 @@ _ASEOF
   sed 's/^/| /' "$pro_file" >&5
 
   if $QMAKE; then :; else
-    as_fn_error "Calling $QMAKE failed." "$LINENO" 5
+    as_fn_error $? "Calling $QMAKE failed." "$LINENO" 5 
   fi
   # Try to compile a simple Qt app.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt app" >&5
@@ -16293,15 +16401,15 @@ instead" >&5
       fi # if make with Qt4-style #include and release mode forced.
     fi # if make with Qt3-style #include.
   fi # if make with Qt4-style #include.
-
+  
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5
 $as_echo "$at_cv_qt_build" >&6; }
   if test x"$at_cv_qt_build" = xko; then
-    as_fn_error "Cannot build a test Qt program" "$LINENO" 5
+    as_fn_error $? "Cannot build a test Qt program" "$LINENO" 5 
   fi
   QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^^0-9*//'`
-
+  
 
   # This sed filter is applied after an expression of the form: /^FOO.*=/!d;
   # It starts by removing the beginning of the line, removing references to
@@ -16310,7 +16418,7 @@ $as_echo "$at_cv_qt_build" >&6; }
   qt_sed_filter='s///;
                  s/$(SUBLIBS)//g;
                  s/^ *//;
-                 s/\$(\([A-Z_][A-Z_]*\))/$(QT_\1)/g'
+                 s/\$(\(@<:@A-Z_@:>@@<:@A-Z_@:>@*\))/$(QT_\1)/g'
 
   # Find the Makefile (qmake happens to generate a fake Makefile which invokes
   # a Makefile.Debug or Makefile.Release). We we have both, we'll pick the
@@ -16324,7 +16432,7 @@ $as_echo "$at_cv_qt_build" >&6; }
   fi
   if test -f $at_mfile; then :; else
     cd "$my_configure_pwd"
-    as_fn_error "Cannot find the Makefile generated by qmake." "$LINENO" 5
+    as_fn_error $? "Cannot find the Makefile generated by qmake." "$LINENO" 5 
   fi
 
   # Find the DEFINES of Qt (should have been named CPPFLAGS).
@@ -16333,7 +16441,7 @@ $as_echo_n "checking for the DEFINES to use with Qt... " >&6; }
 if test "${at_cv_env_QT_DEFINES+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_DEFINES=`sed "/^DEFINES[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_DEFINES=`sed "/^DEFINES@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_DEFINES" >&5
 $as_echo "$at_cv_env_QT_DEFINES" >&6; }
@@ -16346,7 +16454,7 @@ $as_echo_n "checking for the CFLAGS to use with Qt... " >&6; }
 if test "${at_cv_env_QT_CFLAGS+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_CFLAGS=`sed "/^CFLAGS[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_CFLAGS=`sed "/^CFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CFLAGS" >&5
 $as_echo "$at_cv_env_QT_CFLAGS" >&6; }
@@ -16359,7 +16467,7 @@ $as_echo_n "checking for the CXXFLAGS to use with Qt... " >&6; }
 if test "${at_cv_env_QT_CXXFLAGS+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CXXFLAGS" >&5
 $as_echo "$at_cv_env_QT_CXXFLAGS" >&6; }
@@ -16372,7 +16480,7 @@ $as_echo_n "checking for the INCPATH to use with Qt... " >&6; }
 if test "${at_cv_env_QT_INCPATH+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_INCPATH=`sed "/^INCPATH[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_INCPATH=`sed "/^INCPATH@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_INCPATH" >&5
 $as_echo "$at_cv_env_QT_INCPATH" >&6; }
@@ -16388,7 +16496,7 @@ $as_echo_n "checking for the LDFLAGS to use with Qt... " >&6; }
 if test "${at_cv_env_QT_LDFLAGS+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_LDFLAGS=`sed "/^LDFLAGS[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_LDFLAGS=`sed "/^LDFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LDFLAGS" >&5
 $as_echo "$at_cv_env_QT_LDFLAGS" >&6; }
@@ -16414,7 +16522,7 @@ $as_echo_n "checking for the LIBS to use with Qt... " >&6; }
 if test "${at_cv_env_QT_LIBS+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  at_cv_env_QT_LIBS=`sed "/^LIBS[ ]*=/!d;$qt_sed_filter" $at_mfile`
+  at_cv_env_QT_LIBS=`sed "/^LIBS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
    if test x$at_darwin = xyes; then
      # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) doesn't handle
      # -F properly. The "bug" has been fixed on 22 October 2006
@@ -16422,7 +16530,7 @@ else
      at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \
                              | sed 's/^-F/-Wl,-F/;s/ -F/ -Wl,-F/g'`
    fi
-
+  
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LIBS" >&5
 $as_echo "$at_cv_env_QT_LIBS" >&6; }
@@ -16432,10 +16540,10 @@ $as_echo "$at_cv_env_QT_LIBS" >&6; }
   cd "$my_configure_pwd" || echo 'WTF!'
   rm -rf "$my_tmpdir"
 
-
+     
   if test x"$QMAKE" = x; then
-    as_fn_error "\$QMAKE is empty. \
-Did you invoke AT_WITH_QT before AT_REQUIRE_QT_VERSION?" "$LINENO" 5
+    as_fn_error $? "\$QMAKE is empty. \
+Did you invoke AT@&t at _WITH_QT before AT@&t at _REQUIRE_QT_VERSION?" "$LINENO" 5 
   fi
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt's version" >&5
 $as_echo_n "checking for Qt's version... " >&6; }
@@ -16450,20 +16558,20 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_QT_VERSION" >&5
 $as_echo "$at_cv_QT_VERSION" >&6; }
   if test x"$at_cv_QT_VERSION" = x; then
-    as_fn_error "Cannot detect Qt's version." "$LINENO" 5
+    as_fn_error $? "Cannot detect Qt's version." "$LINENO" 5 
   fi
   QT_VERSION=$at_cv_QT_VERSION
 
   as_arg_v1=$QT_VERSION
 as_arg_v2=4.3
 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null
-case $? in #(
+case $? in @%:@(
   1) :
-    as_fn_error "This package requires Qt 4.3 or above." "$LINENO" 5 ;; #(
+    as_fn_error $? "This package requires Qt 4.3 or above." "$LINENO" 5  ;; @%:@(
   0) :
-     ;; #(
+     ;; @%:@(
   2) :
-     ;; #(
+     ;; @%:@(
   *) :
      ;;
 esac
@@ -16479,12 +16587,12 @@ else
 fi
 
 
-# Check whether --enable-python was given.
+@%:@ Check whether --enable-python was given.
 if test "${enable_python+set}" = set; then :
   enableval=$enable_python; case "${enableval}" in
   yes) python=true ;;
   no)  python=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-python" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5  ;;
 esac
 else
   python=false
@@ -16567,10 +16675,10 @@ fi
 
     if (test "$PYTHON_HEADERS" && test "$HAVE_SWIG") ;then
 	test_python=true
+	
+      
 
-
-
-
+  
         # Find any Python interpreter.
     if test -z "$PYTHON"; then
       for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0
@@ -16621,13 +16729,13 @@ test -n "$PYTHON" || PYTHON=":"
 
     fi
     am_display_PYTHON=python
-
+  
 
   if test "$PYTHON" = :; then
-      as_fn_error "no suitable Python interpreter found" "$LINENO" 5
+      as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 
   else
 
-
+      
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5
 $as_echo_n "checking for $am_display_PYTHON version... " >&6; }
 if test "${am_cv_python_version+set}" = set; then :
@@ -16640,13 +16748,13 @@ $as_echo "$am_cv_python_version" >&6; }
   PYTHON_VERSION=$am_cv_python_version
 
 
-
+        
   PYTHON_PREFIX='${prefix}'
 
   PYTHON_EXEC_PREFIX='${exec_prefix}'
 
 
-
+    
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5
 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; }
 if test "${am_cv_python_platform+set}" = set; then :
@@ -16660,7 +16768,7 @@ $as_echo "$am_cv_python_platform" >&6; }
 
 
 
-
+  
                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; }
 if test "${am_cv_python_pythondir+set}" = set; then :
@@ -16679,15 +16787,23 @@ else
        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
        am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
        ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
      esac
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5
 $as_echo "$am_cv_python_pythondir" >&6; }
   pythondir=$am_cv_python_pythondir
 
 
-
+      
   pkgpythondir=\${pythondir}/$PACKAGE
 
 
@@ -16709,26 +16825,34 @@ else
        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
        am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
        ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
      esac
-
+    
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5
 $as_echo "$am_cv_python_pyexecdir" >&6; }
   pyexecdir=$am_cv_python_pyexecdir
 
 
-
+  
   pkgpyexecdir=\${pyexecdir}/$PACKAGE
 
 
-
+    
   fi
 
 
     else
 	echo Please install python-dev and swig packages
 	exit
-    fi
+    fi 
 fi
  if test x$test_python = xtrue ; then
   USE_PYTHON_TRUE=
@@ -16739,12 +16863,12 @@ else
 fi
 
 
-# Check whether --enable-octave was given.
+@%:@ Check whether --enable-octave was given.
 if test "${enable_octave+set}" = set; then :
   enableval=$enable_octave; case "${enableval}" in
   yes) octave=true ;;
   no)  octave=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-octave" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-octave" "$LINENO" 5  ;;
 esac
 else
   octave=false
@@ -16810,12 +16934,12 @@ else
 fi
 
 
-# Check whether --enable-testio was given.
+@%:@ Check whether --enable-testio was given.
 if test "${enable_testio+set}" = set; then :
   enableval=$enable_testio; case "${enableval}" in
   yes) testio=true ;;
   no)  testio=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-testio" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-testio" "$LINENO" 5  ;;
 esac
 else
   testio=false
@@ -16830,12 +16954,12 @@ else
 fi
 
 
-# Check whether --enable-docs was given.
+@%:@ Check whether --enable-docs was given.
 if test "${enable_docs+set}" = set; then :
   enableval=$enable_docs; case "${enableval}" in
   yes) docs=true ;;
   no)  docs=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-docs" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-docs" "$LINENO" 5  ;;
 esac
 else
   docs=false
@@ -16942,7 +17066,8 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+U=
+for ac_i in : $LIB@&t at OBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
   ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
@@ -16951,7 +17076,7 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
   as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
 done
-LIBOBJS=$ac_libobjs
+LIB@&t at OBJS=$ac_libobjs
 
 LTLIBOBJS=$ac_ltlibobjs
 
@@ -16965,72 +17090,76 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_PTHREAD_TRUE}" && test -z "${USE_PTHREAD_FALSE}"; then
-  as_fn_error "conditional \"USE_PTHREAD\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_PTHREAD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_GSL_TRUE}" && test -z "${USE_GSL_FALSE}"; then
-  as_fn_error "conditional \"USE_GSL\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_GSL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_GLUT_TRUE}" && test -z "${USE_GLUT_FALSE}"; then
-  as_fn_error "conditional \"USE_GLUT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_GLUT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_HDF5_TRUE}" && test -z "${USE_HDF5_FALSE}"; then
-  as_fn_error "conditional \"USE_HDF5\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_HDF5\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
+fi
+if test -z "${USE_HDF4_TRUE}" && test -z "${USE_HDF4_FALSE}"; then
+  as_fn_error $? "conditional \"USE_HDF4\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_GIF_TRUE}" && test -z "${USE_GIF_FALSE}"; then
-  as_fn_error "conditional \"USE_GIF\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_GIF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_JPEG_TRUE}" && test -z "${USE_JPEG_FALSE}"; then
-  as_fn_error "conditional \"USE_JPEG\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_JPEG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_FLTK_TRUE}" && test -z "${USE_FLTK_FALSE}"; then
-  as_fn_error "conditional \"USE_FLTK\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_FLTK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_WX_TRUE}" && test -z "${USE_WX_FALSE}"; then
-  as_fn_error "conditional \"USE_WX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_WX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_QT_TRUE}" && test -z "${USE_QT_FALSE}"; then
-  as_fn_error "conditional \"USE_QT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_QT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then
-  as_fn_error "conditional \"USE_PYTHON\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_PYTHON\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_OCTAVE_TRUE}" && test -z "${USE_OCTAVE_FALSE}"; then
-  as_fn_error "conditional \"USE_OCTAVE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_OCTAVE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_TESTIO_TRUE}" && test -z "${USE_TESTIO_FALSE}"; then
-  as_fn_error "conditional \"USE_TESTIO\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_TESTIO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 if test -z "${USE_DOCS_TRUE}" && test -z "${USE_DOCS_FALSE}"; then
-  as_fn_error "conditional \"USE_DOCS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
+  as_fn_error $? "conditional \"USE_DOCS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5 
 fi
 
 : ${CONFIG_STATUS=./config.status}
@@ -17069,9 +17198,9 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in #(
+  case `(set -o) 2>/dev/null` in @%:@(
   *posix*) :
-    set -o posix ;; #(
+    set -o posix ;; @%:@(
   *) :
      ;;
 esac
@@ -17102,7 +17231,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in #(
+      case $arg in @%:@(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -17134,7 +17263,7 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in #((
+case $0 in @%:@((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -17179,55 +17308,55 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD]
+@%:@ ----------------------------------------
+@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+@%:@ script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
-} # as_fn_error
+} @%:@ as_fn_error
 
 
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
+@%:@ as_fn_set_status STATUS
+@%:@ -----------------------
+@%:@ Set @S|@? to STATUS, without forking.
 as_fn_set_status ()
 {
   return $1
-} # as_fn_set_status
+} @%:@ as_fn_set_status
 
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+@%:@ as_fn_exit STATUS
+@%:@ -----------------
+@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
 as_fn_exit ()
 {
   set +e
   as_fn_set_status $1
   exit $1
-} # as_fn_exit
+} @%:@ as_fn_exit
 
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
+@%:@ as_fn_unset VAR
+@%:@ ---------------
+@%:@ Portably unset VAR.
 as_fn_unset ()
 {
   { eval $1=; unset $1;}
 }
 as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
+@%:@ as_fn_append VAR VALUE
+@%:@ ----------------------
+@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take
+@%:@ advantage of any shell optimizations that allow amortized linear growth over
+@%:@ repeated appends, instead of the typical quadratic growth present in naive
+@%:@ implementations.
 if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
   eval 'as_fn_append ()
   {
@@ -17240,11 +17369,11 @@ else
   }
 fi # as_fn_append
 
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
+@%:@ as_fn_arith ARG...
+@%:@ ------------------
+@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the
+@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) and expr.
 if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
   eval 'as_fn_arith ()
   {
@@ -17304,7 +17433,7 @@ as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
+case `echo -n x` in @%:@(((((
 -n*)
   case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
@@ -17344,9 +17473,9 @@ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
 
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
+@%:@ as_fn_mkdir_p
+@%:@ -------------
+@%:@ Create "@S|@as_dir" as a directory, including parents if necessary.
 as_fn_mkdir_p ()
 {
 
@@ -17387,10 +17516,10 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
-} # as_fn_mkdir_p
+} @%:@ as_fn_mkdir_p
 if mkdir -p . 2>/dev/null; then
   as_mkdir_p='mkdir -p "$as_dir"'
 else
@@ -17411,10 +17540,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in #(
+	case $1 in @%:@(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -17441,7 +17570,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by mathgl $as_me 1.10, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.67.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -17481,13 +17610,14 @@ Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
   -q, --quiet, --silent
                    do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
+      --file=FILE[:TEMPLATE] 
                    instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
+      --header=FILE[:TEMPLATE] 
                    instantiate the configuration header FILE
 
 Configuration files:
@@ -17503,12 +17633,13 @@ Report bugs to <mathgl.abalakin at gmail.com>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mathgl config.status 1.10
-configured by $0, generated by GNU Autoconf 2.64,
-  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+configured by $0, generated by GNU Autoconf 2.67,
+  with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -17526,11 +17657,16 @@ ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
-  --*=*)
+  --*=?*)
     ac_option=`expr "X$1" : 'X\([^=]*\)='`
     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
   *)
     ac_option=$1
     ac_optarg=$2
@@ -17544,12 +17680,15 @@ do
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
     $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -17562,7 +17701,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -17571,7 +17710,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -17604,8 +17743,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 exec 5>>config.log
 {
   echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
+  sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX
+@%:@@%:@ Running $as_me. @%:@@%:@
 _ASBOX
   $as_echo "$ac_log"
 } >&5
@@ -17990,7 +18129,7 @@ do
     "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;;
     "widgets/Makefile") CONFIG_FILES="$CONFIG_FILES widgets/Makefile" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
   esac
 done
 
@@ -18028,7 +18167,7 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -18045,7 +18184,7 @@ if test "x$ac_cr" = x; then
 fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
@@ -18059,18 +18198,18 @@ _ACEOF
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   . ./conf$$subs.sh ||
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 
 
   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
   if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -18092,7 +18231,7 @@ s/'"$ac_delim"'$//
 t delim
 :nl
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more1
 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
 p
@@ -18106,7 +18245,7 @@ s/.\{148\}//
 t nl
 :delim
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more2
 s/["\\]/\\&/g; s/^/"/; s/$/"/
 p
@@ -18159,20 +18298,28 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
 else
   cat
 fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 
 _ACEOF
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[	 ]*\):*/\1/
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
 s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
 s/^[^=]*=[	 ]*$//
 }'
 fi
@@ -18200,7 +18347,7 @@ for ac_last_try in false false :; do
   if test -z "$ac_t"; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -18285,7 +18432,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -18298,7 +18445,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -18326,7 +18473,7 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -18353,7 +18500,7 @@ $as_echo "$as_me: creating $ac_file" >&6;}
 
     case $ac_tag in
     *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
     esac
     ;;
   esac
@@ -18490,22 +18637,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5 
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
+which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&2;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
   -) cat "$tmp/out" && rm -f "$tmp/out";;
   *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
   esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5 
  ;;
   :H)
   #
@@ -18516,19 +18663,19 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
       $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
     } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 
     if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
       mv "$tmp/config.h" "$ac_file" \
-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5 
     fi
   else
     $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      || as_fn_error $? "could not create -" "$LINENO" 5 
   fi
 # Compute "$ac_file"'s index in $config_headers.
 _am_arg="$ac_file"
@@ -18565,7 +18712,7 @@ $as_echo X"$_am_arg" |
 	  }
 	  s/.*/./; q'`/stamp-h$_am_stamp_count
  ;;
-
+  
   :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
 $as_echo "$as_me: executing $ac_file commands" >&6;}
  ;;
@@ -18668,8 +18815,8 @@ $as_echo X"$file" |
   done
 }
  ;;
-    "libtool":C)
-
+    "libtool":C) 
+    
     # See if we are running on zsh, and set the options which allow our
     # commands through without removal of \ escapes.
     if test -n "${ZSH_VERSION+set}" ; then
@@ -19105,7 +19252,7 @@ _LT_EOF
     ;;
   esac
 
-
+  
 ltmain="$ac_aux_dir/ltmain.sh"
 
 
@@ -19486,7 +19633,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -19507,7 +19654,7 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit $?
+  $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
diff --git a/autom4te.cache/requests b/autom4te.cache/requests
new file mode 100644
index 0000000..b8df06f
--- /dev/null
+++ b/autom4te.cache/requests
@@ -0,0 +1,279 @@
+# This file was generated by Autom4te Tue Aug  3 21:06:07 PDT 2010.
+# It contains the lists of macros which have been traced.
+# It can be safely removed.
+
+ at request = (
+             bless( [
+                      '0',
+                      1,
+                      [
+                        '/usr/share/autoconf'
+                      ],
+                      [
+                        '/usr/share/autoconf/autoconf/autoconf.m4f',
+                        '/usr/share/aclocal/argz.m4',
+                        '/usr/share/aclocal/ltdl.m4',
+                        '/usr/share/aclocal-1.11/amversion.m4',
+                        '/usr/share/aclocal-1.11/auxdir.m4',
+                        '/usr/share/aclocal-1.11/cond.m4',
+                        '/usr/share/aclocal-1.11/depend.m4',
+                        '/usr/share/aclocal-1.11/depout.m4',
+                        '/usr/share/aclocal-1.11/init.m4',
+                        '/usr/share/aclocal-1.11/install-sh.m4',
+                        '/usr/share/aclocal-1.11/lead-dot.m4',
+                        '/usr/share/aclocal-1.11/make.m4',
+                        '/usr/share/aclocal-1.11/missing.m4',
+                        '/usr/share/aclocal-1.11/mkdirp.m4',
+                        '/usr/share/aclocal-1.11/options.m4',
+                        '/usr/share/aclocal-1.11/python.m4',
+                        '/usr/share/aclocal-1.11/runlog.m4',
+                        '/usr/share/aclocal-1.11/sanity.m4',
+                        '/usr/share/aclocal-1.11/silent.m4',
+                        '/usr/share/aclocal-1.11/strip.m4',
+                        '/usr/share/aclocal-1.11/substnot.m4',
+                        '/usr/share/aclocal-1.11/tar.m4',
+                        'config/autotroll.m4',
+                        'config/libtool.m4',
+                        'config/ltoptions.m4',
+                        'config/ltsugar.m4',
+                        'config/ltversion.m4',
+                        'config/lt~obsolete.m4',
+                        'configure.ac'
+                      ],
+                      {
+                        'AM_ENABLE_STATIC' => 1,
+                        'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
+                        '_LT_AC_SHELL_INIT' => 1,
+                        'AC_DEFUN' => 1,
+                        '_LT_AC_LANG_CXX_CONFIG' => 1,
+                        'AC_PROG_LIBTOOL' => 1,
+                        'AM_PROG_MKDIR_P' => 1,
+                        'AM_PYTHON_CHECK_VERSION' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AM_SUBST_NOTMAKE' => 1,
+                        'AM_MISSING_PROG' => 1,
+                        'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
+                        '_LT_AC_LANG_C_CONFIG' => 1,
+                        'AM_PROG_INSTALL_STRIP' => 1,
+                        '_m4_warn' => 1,
+                        'AC_LIBTOOL_OBJDIR' => 1,
+                        'gl_FUNC_ARGZ' => 1,
+                        'LTOBSOLETE_VERSION' => 1,
+                        'AM_SANITY_CHECK' => 1,
+                        'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
+                        'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
+                        'LT_LIB_M' => 1,
+                        '_LT_AC_CHECK_DLFCN' => 1,
+                        'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
+                        'LTSUGAR_VERSION' => 1,
+                        '_LT_PROG_LTMAIN' => 1,
+                        'LT_SYS_SYMBOL_USCORE' => 1,
+                        '_AM_PROG_TAR' => 1,
+                        'AC_LIBTOOL_GCJ' => 1,
+                        'LT_SYS_DLOPEN_DEPLIBS' => 1,
+                        'LT_FUNC_DLSYM_USCORE' => 1,
+                        '_LT_AC_LANG_F77' => 1,
+                        'AC_LIBTOOL_CONFIG' => 1,
+                        'AC_LTDL_DLLIB' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        '_AM_AUTOCONF_VERSION' => 1,
+                        'AM_DISABLE_SHARED' => 1,
+                        '_LTDL_SETUP' => 1,
+                        'AM_PROG_LIBTOOL' => 1,
+                        '_LT_AC_LANG_CXX' => 1,
+                        'AM_PROG_LD' => 1,
+                        '_LT_AC_FILE_LTDLL_C' => 1,
+                        'AC_LIB_LTDL' => 1,
+                        'AU_DEFUN' => 1,
+                        'AC_PROG_NM' => 1,
+                        'AC_LIBTOOL_DLOPEN' => 1,
+                        'AC_PROG_LD' => 1,
+                        'AC_ENABLE_FAST_INSTALL' => 1,
+                        'AC_PROG_LD_GNU' => 1,
+                        'AC_LIBTOOL_FC' => 1,
+                        'LTDL_CONVENIENCE' => 1,
+                        '_AM_SET_OPTION' => 1,
+                        'AC_LTDL_PREOPEN' => 1,
+                        '_LT_LINKER_BOILERPLATE' => 1,
+                        'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
+                        'AC_LIBTOOL_PROG_CC_C_O' => 1,
+                        'gl_PREREQ_ARGZ' => 1,
+                        'LT_SUPPORTED_TAG' => 1,
+                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        'LT_PROG_RC' => 1,
+                        'LT_SYS_MODULE_EXT' => 1,
+                        'AC_DEFUN_ONCE' => 1,
+                        'AT_WITH_QT' => 1,
+                        '_LT_AC_LANG_GCJ' => 1,
+                        'AC_LTDL_OBJDIR' => 1,
+                        '_LT_PATH_TOOL_PREFIX' => 1,
+                        'AC_LIBTOOL_RC' => 1,
+                        'AC_DISABLE_FAST_INSTALL' => 1,
+                        '_LT_AC_PROG_ECHO_BACKSLASH' => 1,
+                        'AM_SILENT_RULES' => 1,
+                        'AT_REQUIRE_QT_VERSION' => 1,
+                        'include' => 1,
+                        '_LT_AC_TRY_DLOPEN_SELF' => 1,
+                        '_LT_AC_SYS_LIBPATH_AIX' => 1,
+                        'LT_AC_PROG_SED' => 1,
+                        'AM_ENABLE_SHARED' => 1,
+                        'LTDL_INSTALLABLE' => 1,
+                        '_LT_AC_LANG_GCJ_CONFIG' => 1,
+                        'AC_ENABLE_SHARED' => 1,
+                        'AC_ENABLE_STATIC' => 1,
+                        'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
+                        '_LT_AC_TAGVAR' => 1,
+                        'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
+                        'AM_CONDITIONAL' => 1,
+                        '_AT_TWEAK_PRO_FILE' => 1,
+                        'LT_LIB_DLLOAD' => 1,
+                        'LTDL_INIT' => 1,
+                        'LTVERSION_VERSION' => 1,
+                        'm4_include' => 1,
+                        'AM_PROG_INSTALL_SH' => 1,
+                        'AC_PROG_EGREP' => 1,
+                        'AM_PATH_PYTHON' => 1,
+                        'AC_PATH_MAGIC' => 1,
+                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+                        'AC_LTDL_SYSSEARCHPATH' => 1,
+                        'AM_MAKE_INCLUDE' => 1,
+                        '_LT_AC_TAGCONFIG' => 1,
+                        'LT_CMD_MAX_LEN' => 1,
+                        'm4_pattern_forbid' => 1,
+                        '_LT_LINKER_OPTION' => 1,
+                        'AC_LIBTOOL_COMPILER_OPTION' => 1,
+                        'AC_DISABLE_SHARED' => 1,
+                        '_LT_COMPILER_BOILERPLATE' => 1,
+                        'AC_LIBTOOL_WIN32_DLL' => 1,
+                        'AC_LIBTOOL_SETUP' => 1,
+                        'AC_PROG_LD_RELOAD_FLAG' => 1,
+                        'AC_LTDL_DLSYM_USCORE' => 1,
+                        'AM_MISSING_HAS_RUN' => 1,
+                        'LT_LANG' => 1,
+                        'LT_SYS_DLSEARCH_PATH' => 1,
+                        'LT_CONFIG_LTDL_DIR' => 1,
+                        'AC_LIBTOOL_DLOPEN_SELF' => 1,
+                        'LT_OUTPUT' => 1,
+                        'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
+                        'AC_WITH_LTDL' => 1,
+                        'AC_LIBTOOL_LINKER_OPTION' => 1,
+                        'LT_AC_PROG_RC' => 1,
+                        'AC_LIBTOOL_CXX' => 1,
+                        'LT_INIT' => 1,
+                        'LT_AC_PROG_GCJ' => 1,
+                        'LT_SYS_DLOPEN_SELF' => 1,
+                        'AM_DISABLE_STATIC' => 1,
+                        'AM_DEP_TRACK' => 1,
+                        '_AC_PROG_LIBTOOL' => 1,
+                        '_AM_IF_OPTION' => 1,
+                        'AC_PATH_TOOL_PREFIX' => 1,
+                        'm4_pattern_allow' => 1,
+                        'AC_LIBTOOL_F77' => 1,
+                        'AM_SET_LEADING_DOT' => 1,
+                        'LT_AC_PROG_EGREP' => 1,
+                        '_AM_DEPENDENCIES' => 1,
+                        'AC_LIBTOOL_LANG_C_CONFIG' => 1,
+                        'LTOPTIONS_VERSION' => 1,
+                        '_LT_AC_SYS_COMPILER' => 1,
+                        'AM_PROG_NM' => 1,
+                        'AC_LIBLTDL_CONVENIENCE' => 1,
+                        'AC_DEPLIBS_CHECK_METHOD' => 1,
+                        'AC_LIBLTDL_INSTALLABLE' => 1,
+                        'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
+                        'AC_LTDL_ENABLE_INSTALL' => 1,
+                        'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
+                        'LT_PROG_GCJ' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'AC_DISABLE_STATIC' => 1,
+                        'LT_PATH_NM' => 1,
+                        'AC_LTDL_SHLIBEXT' => 1,
+                        '_LT_AC_LOCK' => 1,
+                        '_LT_AC_LANG_RC_CONFIG' => 1,
+                        'LT_SYS_MODULE_PATH' => 1,
+                        'LT_WITH_LTDL' => 1,
+                        'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
+                        'AC_LTDL_SHLIBPATH' => 1,
+                        'AM_AUX_DIR_EXPAND' => 1,
+                        'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
+                        '_LT_AC_LANG_F77_CONFIG' => 1,
+                        '_LT_COMPILER_OPTION' => 1,
+                        '_AM_SET_OPTIONS' => 1,
+                        'AM_RUN_LOG' => 1,
+                        '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        'AC_LIBTOOL_PICMODE' => 1,
+                        'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
+                        'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
+                        'AC_CHECK_LIBM' => 1,
+                        'LT_PATH_LD' => 1,
+                        'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
+                        '_AM_MANGLE_OPTION' => 1,
+                        'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
+                        'AC_LTDL_SYMBOL_USCORE' => 1,
+                        'AM_SET_DEPDIR' => 1,
+                        '_LT_CC_BASENAME' => 1,
+                        '_LT_LIBOBJ' => 1
+                      }
+                    ], 'Autom4te::Request' ),
+             bless( [
+                      '1',
+                      1,
+                      [
+                        '/usr/share/autoconf'
+                      ],
+                      [
+                        '/usr/share/autoconf/autoconf/autoconf.m4f',
+                        'aclocal.m4',
+                        'configure.ac'
+                      ],
+                      {
+                        'AM_PROG_F77_C_O' => 1,
+                        '_LT_AC_TAGCONFIG' => 1,
+                        'AC_INIT' => 1,
+                        'm4_pattern_forbid' => 1,
+                        'AC_CANONICAL_TARGET' => 1,
+                        '_AM_COND_IF' => 1,
+                        'AC_CONFIG_LIBOBJ_DIR' => 1,
+                        'AC_SUBST' => 1,
+                        'AC_CANONICAL_HOST' => 1,
+                        'AC_FC_SRCEXT' => 1,
+                        'AC_PROG_LIBTOOL' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'AC_CONFIG_SUBDIRS' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'LT_CONFIG_LTDL_DIR' => 1,
+                        'AC_CONFIG_LINKS' => 1,
+                        'AC_REQUIRE_AUX_FILE' => 1,
+                        'LT_SUPPORTED_TAG' => 1,
+                        'm4_sinclude' => 1,
+                        'AM_MAINTAINER_MODE' => 1,
+                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
+                        '_m4_warn' => 1,
+                        'AM_PROG_CXX_C_O' => 1,
+                        '_AM_COND_ENDIF' => 1,
+                        'AM_ENABLE_MULTILIB' => 1,
+                        'AM_SILENT_RULES' => 1,
+                        'AC_CONFIG_FILES' => 1,
+                        'LT_INIT' => 1,
+                        'include' => 1,
+                        'AM_GNU_GETTEXT' => 1,
+                        'AC_LIBSOURCE' => 1,
+                        'AC_CANONICAL_BUILD' => 1,
+                        'AM_PROG_FC_C_O' => 1,
+                        'AC_FC_FREEFORM' => 1,
+                        'AH_OUTPUT' => 1,
+                        'AC_CONFIG_AUX_DIR' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        'AM_PROG_CC_C_O' => 1,
+                        'm4_pattern_allow' => 1,
+                        'sinclude' => 1,
+                        'AM_CONDITIONAL' => 1,
+                        'AC_CANONICAL_SYSTEM' => 1,
+                        'AC_CONFIG_HEADERS' => 1,
+                        'AC_DEFINE_TRACE_LITERAL' => 1,
+                        'm4_include' => 1,
+                        '_AM_COND_ELSE' => 1,
+                        'AC_SUBST_TRACE' => 1
+                      }
+                    ], 'Autom4te::Request' )
+           );
+
diff --git a/autom4te.cache/traces.0 b/autom4te.cache/traces.0
new file mode 100644
index 0000000..ce4ad95
--- /dev/null
+++ b/autom4te.cache/traces.0
@@ -0,0 +1,3006 @@
+m4trace:/usr/share/aclocal/argz.m4:12: -1- AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ
+
+AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_TYPES([error_t],
+  [],
+  [AC_DEFINE([error_t], [int],
+   [Define to a type to use for `error_t' if it is not otherwise available.])
+   AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h
+    does not typedef error_t.])],
+  [#if defined(HAVE_ARGZ_H)
+#  include <argz.h>
+#endif])
+
+ARGZ_H=
+AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \
+	argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])])
+
+dnl if have system argz functions, allow forced use of
+dnl libltdl-supplied implementation (and default to do so
+dnl on "known bad" systems). Could use a runtime check, but
+dnl (a) detecting malloc issues is notoriously unreliable
+dnl (b) only known system that declares argz functions,
+dnl     provides them, yet they are broken, is cygwin
+dnl     releases prior to 16-Mar-2007 (1.5.24 and earlier)
+dnl So, it's more straightforward simply to special case
+dnl this for known bad systems.
+AS_IF([test -z "$ARGZ_H"],
+    [AC_CACHE_CHECK(
+        [if argz actually works],
+        [lt_cv_sys_argz_works],
+        [[case $host_os in #(
+	 *cygwin*)
+	   lt_cv_sys_argz_works=no
+	   if test "$cross_compiling" != no; then
+	     lt_cv_sys_argz_works="guessing no"
+	   else
+	     lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/'
+	     save_IFS=$IFS
+	     IFS=-.
+	     set x `uname -r | sed -e "$lt_sed_extract_leading_digits"`
+	     IFS=$save_IFS
+	     lt_os_major=${2-0}
+	     lt_os_minor=${3-0}
+	     lt_os_micro=${4-0}
+	     if test "$lt_os_major" -gt 1 \
+		|| { test "$lt_os_major" -eq 1 \
+		  && { test "$lt_os_minor" -gt 5 \
+		    || { test "$lt_os_minor" -eq 5 \
+		      && test "$lt_os_micro" -gt 24; }; }; }; then
+	       lt_cv_sys_argz_works=yes
+	     fi
+	   fi
+	   ;; #(
+	 *) lt_cv_sys_argz_works=yes ;;
+	 esac]])
+     AS_IF([test $lt_cv_sys_argz_works = yes],
+        [AC_DEFINE([HAVE_WORKING_ARGZ], 1,
+                   [This value is set to 1 to indicate that the system argz facility works])],
+        [ARGZ_H=argz.h
+        AC_LIBOBJ([argz])])])
+
+AC_SUBST([ARGZ_H])
+])
+m4trace:/usr/share/aclocal/argz.m4:79: -1- AC_DEFUN([gl_PREREQ_ARGZ], [:])
+m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT])
+_$0($*)
+])
+m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl
+dnl Although the argument is deprecated and no longer documented,
+dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one
+dnl here make sure it is the same as any other declaration of libltdl's
+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+_$0()
+])
+m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_CONVENIENCE])
+m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete.
+You should run autoupdate.])dnl
+_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_CONVENIENCE])
+m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl
+dnl Although the argument is deprecated and no longer documented,
+dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one
+dnl here make sure it is the same as any other declaration of libltdl's
+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+_$0()
+])
+m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_INSTALLABLE])
+m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete.
+You should run autoupdate.])dnl
+_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_INSTALLABLE])
+m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [
+  m4_pattern_allow([^_LT_LIBOBJS$])
+  _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext"
+])
+m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+dnl We need to keep our own list of libobjs separate from our parent project,
+dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while
+dnl we look for our own LIBOBJs.
+m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ]))
+m4_pushdef([AC_LIBSOURCES])
+
+dnl If not otherwise defined, default to the 1.5.x compatible subproject mode:
+m4_if(_LTDL_MODE, [],
+        [m4_define([_LTDL_MODE], m4_default([$2], [subproject]))
+        m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])],
+                [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])
+
+AC_ARG_WITH([included_ltdl],
+    [AS_HELP_STRING([--with-included-ltdl],
+                    [use the GNU ltdl sources included here])])
+
+if test "x$with_included_ltdl" != xyes; then
+  # We are not being forced to use the included libltdl sources, so
+  # decide whether there is a useful installed version we can use.
+  AC_CHECK_HEADER([ltdl.h],
+      [AC_CHECK_DECL([lt_dlinterface_register],
+	   [AC_CHECK_LIB([ltdl], [lt_dladvise_preload],
+	       [with_included_ltdl=no],
+	       [with_included_ltdl=yes])],
+	   [with_included_ltdl=yes],
+	   [AC_INCLUDES_DEFAULT
+	    #include <ltdl.h>])],
+      [with_included_ltdl=yes],
+      [AC_INCLUDES_DEFAULT]
+  )
+fi
+
+dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE
+dnl was called yet, then for old times' sake, we assume libltdl is in an
+dnl eponymous directory:
+AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])])
+
+AC_ARG_WITH([ltdl_include],
+    [AS_HELP_STRING([--with-ltdl-include=DIR],
+                    [use the ltdl headers installed in DIR])])
+
+if test -n "$with_ltdl_include"; then
+  if test -f "$with_ltdl_include/ltdl.h"; then :
+  else
+    AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include'])
+  fi
+else
+  with_ltdl_include=no
+fi
+
+AC_ARG_WITH([ltdl_lib],
+    [AS_HELP_STRING([--with-ltdl-lib=DIR],
+                    [use the libltdl.la installed in DIR])])
+
+if test -n "$with_ltdl_lib"; then
+  if test -f "$with_ltdl_lib/libltdl.la"; then :
+  else
+    AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib'])
+  fi
+else
+  with_ltdl_lib=no
+fi
+
+case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in
+  ,yes,no,no,)
+	m4_case(m4_default(_LTDL_TYPE, [convenience]),
+	    [convenience], [_LTDL_CONVENIENCE],
+	    [installable], [_LTDL_INSTALLABLE],
+	  [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)])
+	;;
+  ,no,no,no,)
+	# If the included ltdl is not to be used, then use the
+	# preinstalled libltdl we found.
+	AC_DEFINE([HAVE_LTDL], [1],
+	  [Define this if a modern libltdl is already installed])
+	LIBLTDL=-lltdl
+	LTDLDEPS=
+	LTDLINCL=
+	;;
+  ,no*,no,*)
+	AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together])
+	;;
+  *)	with_included_ltdl=no
+	LIBLTDL="-L$with_ltdl_lib -lltdl"
+	LTDLDEPS=
+	LTDLINCL="-I$with_ltdl_include"
+	;;
+esac
+INCLTDL="$LTDLINCL"
+
+# Report our decision...
+AC_MSG_CHECKING([where to find libltdl headers])
+AC_MSG_RESULT([$LTDLINCL])
+AC_MSG_CHECKING([where to find libltdl library])
+AC_MSG_RESULT([$LIBLTDL])
+
+_LTDL_SETUP
+
+dnl restore autoconf definition.
+m4_popdef([AC_LIBOBJ])
+m4_popdef([AC_LIBSOURCES])
+
+AC_CONFIG_COMMANDS_PRE([
+    _ltdl_libobjs=
+    _ltdl_ltlibobjs=
+    if test -n "$_LT_LIBOBJS"; then
+      # Remove the extension.
+      _lt_sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do
+        _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext"
+        _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo"
+      done
+    fi
+    AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs])
+    AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs])
+])
+
+# Only expand once:
+m4_define([LTDL_INIT])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_SYS_MODULE_EXT])dnl
+AC_REQUIRE([LT_SYS_MODULE_PATH])dnl
+AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl
+AC_REQUIRE([LT_LIB_DLLOAD])dnl
+AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
+AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl
+AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl
+AC_REQUIRE([gl_FUNC_ARGZ])dnl
+
+m4_require([_LT_CHECK_OBJDIR])dnl
+m4_require([_LT_HEADER_DLFCN])dnl
+m4_require([_LT_CHECK_DLPREOPEN])dnl
+m4_require([_LT_DECL_SED])dnl
+
+dnl Don't require this, or it will be expanded earlier than the code
+dnl that sets the variables it relies on:
+_LT_ENABLE_INSTALL
+
+dnl _LTDL_MODE specific code must be called at least once:
+_LTDL_MODE_DISPATCH
+
+# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS
+# the user used.  This is so that ltdl.h can pick up the parent projects
+# config.h file, The first file in AC_CONFIG_HEADERS must contain the
+# definitions required by ltdl.c.
+# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility).
+AC_CONFIG_COMMANDS_PRE([dnl
+m4_pattern_allow([^LT_CONFIG_H$])dnl
+m4_ifset([AH_HEADER],
+    [LT_CONFIG_H=AH_HEADER],
+    [m4_ifset([AC_LIST_HEADERS],
+	    [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[      ]]*,,;s,[[ :]].*$,,'`],
+	[])])])
+AC_SUBST([LT_CONFIG_H])
+
+AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h],
+	[], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])])
+AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])])
+
+AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension])
+
+name=ltdl
+LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""`
+AC_SUBST([LTDLOPEN])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:437: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_CACHE_CHECK([whether deplibs are loaded by dlopen],
+  [lt_cv_sys_dlopen_deplibs],
+  [# PORTME does your system automatically load deplibs for dlopen?
+  # or its logical equivalent (e.g. shl_load for HP-UX < 11)
+  # For now, we just catch OSes we know something about -- in the
+  # future, we'll try test this programmatically.
+  lt_cv_sys_dlopen_deplibs=unknown
+  case $host_os in
+  aix3*|aix4.1.*|aix4.2.*)
+    # Unknown whether this is true for these versions of AIX, but
+    # we want this `case' here to explicitly catch those versions.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  aix[[4-9]]*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  amigaos*)
+    case $host_cpu in
+    powerpc)
+      lt_cv_sys_dlopen_deplibs=no
+      ;;
+    esac
+    ;;
+  darwin*)
+    # Assuming the user has installed a libdl from somewhere, this is true
+    # If you are looking for one http://www.opendarwin.org/projects/dlcompat
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  freebsd* | dragonfly*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    # GNU and its variants, using gnu ld.so (Glibc)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  hpux10*|hpux11*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  interix*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  irix[[12345]]*|irix6.[[01]]*)
+    # Catch all versions of IRIX before 6.2, and indicate that we don't
+    # know how it worked for any of those versions.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  irix*)
+    # The case above catches anything before 6.2, and it's known that
+    # at 6.2 and later dlopen does load deplibs.
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  netbsd* | netbsdelf*-gnu)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  openbsd*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  osf[[1234]]*)
+    # dlopen did load deplibs (at least at 4.x), but until the 5.x series,
+    # it did *not* use an RPATH in a shared library to find objects the
+    # library depends on, so we explicitly say `no'.
+    lt_cv_sys_dlopen_deplibs=no
+    ;;
+  osf5.0|osf5.0a|osf5.1)
+    # dlopen *does* load deplibs and with the right loader patch applied
+    # it even uses RPATH in a shared library to search for shared objects
+    # that the library depends on, but there's no easy way to know if that
+    # patch is installed.  Since this is the case, all we can really
+    # say is unknown -- it depends on the patch being installed.  If
+    # it is, this changes to `yes'.  Without it, it would be `no'.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  osf*)
+    # the two cases above should catch all versions of osf <= 5.1.  Read
+    # the comments above for what we know about them.
+    # At > 5.1, deplibs are loaded *and* any RPATH in a shared library
+    # is used to find them so we can finally say `yes'.
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  qnx*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  solaris*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    libltdl_cv_sys_dlopen_deplibs=yes
+    ;;
+  esac
+  ])
+if test "$lt_cv_sys_dlopen_deplibs" != yes; then
+ AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1],
+    [Define if the OS needs help to load dependent libraries for dlopen().])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:543: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([which extension is used for runtime loadable modules],
+  [libltdl_cv_shlibext],
+[
+module=yes
+eval libltdl_cv_shlibext=$shrext_cmds
+  ])
+if test -n "$libltdl_cv_shlibext"; then
+  m4_pattern_allow([LT_MODULE_EXT])dnl
+  AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"],
+    [Define to the extension used for runtime loadable modules, say, ".so".])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:566: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([which variable specifies run-time module search path],
+  [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"])
+if test -n "$lt_cv_module_path_var"; then
+  m4_pattern_allow([LT_MODULE_PATH_VAR])dnl
+  AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"],
+    [Define to the name of the environment variable that determines the run-time module search path.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:585: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([for the default library search path],
+  [lt_cv_sys_dlsearch_path],
+  [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"])
+if test -n "$lt_cv_sys_dlsearch_path"; then
+  sys_dlsearch_path=
+  for dir in $lt_cv_sys_dlsearch_path; do
+    if test -z "$sys_dlsearch_path"; then
+      sys_dlsearch_path="$dir"
+    else
+      sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir"
+    fi
+  done
+  m4_pattern_allow([LT_DLSEARCH_PATH])dnl
+  AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"],
+    [Define to the system default library search path.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:632: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$])
+LT_DLLOADERS=
+AC_SUBST([LT_DLLOADERS])
+
+AC_LANG_PUSH([C])
+
+LIBADD_DLOPEN=
+AC_SEARCH_LIBS([dlopen], [dl],
+	[AC_DEFINE([HAVE_LIBDL], [1],
+		   [Define if you have the libdl library or equivalent.])
+	if test "$ac_cv_search_dlopen" != "none required" ; then
+	  LIBADD_DLOPEN="-ldl"
+	fi
+	libltdl_cv_lib_dl_dlopen="yes"
+	LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H
+#  include <dlfcn.h>
+#endif
+    ]], [[dlopen(0, 0);]])],
+	    [AC_DEFINE([HAVE_LIBDL], [1],
+		       [Define if you have the libdl library or equivalent.])
+	    libltdl_cv_func_dlopen="yes"
+	    LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+	[AC_CHECK_LIB([svld], [dlopen],
+		[AC_DEFINE([HAVE_LIBDL], [1],
+			 [Define if you have the libdl library or equivalent.])
+	        LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes"
+		LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])])
+if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes
+then
+  lt_save_LIBS="$LIBS"
+  LIBS="$LIBS $LIBADD_DLOPEN"
+  AC_CHECK_FUNCS([dlerror])
+  LIBS="$lt_save_LIBS"
+fi
+AC_SUBST([LIBADD_DLOPEN])
+
+LIBADD_SHL_LOAD=
+AC_CHECK_FUNC([shl_load],
+	[AC_DEFINE([HAVE_SHL_LOAD], [1],
+		   [Define if you have the shl_load function.])
+	LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"],
+    [AC_CHECK_LIB([dld], [shl_load],
+	    [AC_DEFINE([HAVE_SHL_LOAD], [1],
+		       [Define if you have the shl_load function.])
+	    LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"
+	    LIBADD_SHL_LOAD="-ldld"])])
+AC_SUBST([LIBADD_SHL_LOAD])
+
+case $host_os in
+darwin[[1567]].*)
+# We only want this for pre-Mac OS X 10.4.
+  AC_CHECK_FUNC([_dyld_func_lookup],
+	[AC_DEFINE([HAVE_DYLD], [1],
+		   [Define if you have the _dyld_func_lookup function.])
+	LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"])
+  ;;
+beos*)
+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+  ;;
+cygwin* | mingw* | os2* | pw32*)
+  AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include <sys/cygwin.h>]])
+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la"
+  ;;
+esac
+
+AC_CHECK_LIB([dld], [dld_link],
+	[AC_DEFINE([HAVE_DLD], [1],
+		   [Define if you have the GNU dld library.])
+		LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"])
+AC_SUBST([LIBADD_DLD_LINK])
+
+m4_pattern_allow([^LT_DLPREOPEN$])
+LT_DLPREOPEN=
+if test -n "$LT_DLLOADERS"
+then
+  for lt_loader in $LT_DLLOADERS; do
+    LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader "
+  done
+  AC_DEFINE([HAVE_LIBDLLOADER], [1],
+            [Define if libdlloader will be built on this platform])
+fi
+AC_SUBST([LT_DLPREOPEN])
+
+dnl This isn't used anymore, but set it for backwards compatibility
+LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD"
+AC_SUBST([LIBADD_DL])
+
+AC_LANG_POP
+])
+m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:733: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+AC_CACHE_CHECK([for _ prefix in compiled symbols],
+  [lt_cv_sys_symbol_underscore],
+  [lt_cv_sys_symbol_underscore=no
+  cat > conftest.$ac_ext <<_LT_EOF
+void nm_test_func(){}
+int main(){nm_test_func;return 0;}
+_LT_EOF
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    ac_nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
+      # See whether the symbols have a leading underscore.
+      if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
+        lt_cv_sys_symbol_underscore=yes
+      else
+        if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
+	  :
+        else
+	  echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD
+        fi
+      fi
+    else
+      echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.c >&AS_MESSAGE_LOG_FD
+  fi
+  rm -rf conftest*
+  ])
+  sys_symbol_underscore=$lt_cv_sys_symbol_underscore
+  AC_SUBST([sys_symbol_underscore])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:777: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
+if test x"$lt_cv_sys_symbol_underscore" = xyes; then
+  if test x"$libltdl_cv_func_dlopen" = xyes ||
+     test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then
+	AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
+	  [libltdl_cv_need_uscore],
+	  [libltdl_cv_need_uscore=unknown
+          save_LIBS="$LIBS"
+          LIBS="$LIBS $LIBADD_DLOPEN"
+	  _LT_TRY_DLOPEN_SELF(
+	    [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes],
+	    [],				 [libltdl_cv_need_uscore=cross])
+	  LIBS="$save_LIBS"
+	])
+  fi
+fi
+
+if test x"$libltdl_cv_need_uscore" = xyes; then
+  AC_DEFINE([NEED_USCORE], [1],
+    [Define if dlsym() requires a leading underscore in symbol names.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])])
+m4trace:/usr/share/aclocal-1.11/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+m4trace:/usr/share/aclocal-1.11/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+m4trace:/usr/share/aclocal-1.11/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+m4trace:/usr/share/aclocal-1.11/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+m4trace:/usr/share/aclocal-1.11/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])
+m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+m4trace:/usr/share/aclocal-1.11/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+m4trace:/usr/share/aclocal-1.11/mkdirp.m4:11: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+m4trace:/usr/share/aclocal-1.11/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+m4trace:/usr/share/aclocal-1.11/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+m4trace:/usr/share/aclocal-1.11/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+m4trace:/usr/share/aclocal-1.11/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+m4trace:/usr/share/aclocal-1.11/python.m4:35: -1- AC_DEFUN([AM_PATH_PYTHON], [
+  dnl Find a Python interpreter.  Python versions prior to 2.0 are not
+  dnl supported. (2.0 was released on October 16, 2000).
+  m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
+                    [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl
+python2.1 python2.0])
+
+  m4_if([$1],[],[
+    dnl No version check is needed.
+    # Find any Python interpreter.
+    if test -z "$PYTHON"; then
+      AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
+    fi
+    am_display_PYTHON=python
+  ], [
+    dnl A version check is needed.
+    if test -n "$PYTHON"; then
+      # If the user set $PYTHON, use it and don't search something else.
+      AC_MSG_CHECKING([whether $PYTHON version >= $1])
+      AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
+			      [AC_MSG_RESULT(yes)],
+			      [AC_MSG_ERROR(too old)])
+      am_display_PYTHON=$PYTHON
+    else
+      # Otherwise, try each interpreter until we find one that satisfies
+      # VERSION.
+      AC_CACHE_CHECK([for a Python interpreter with version >= $1],
+	[am_cv_pathless_PYTHON],[
+	for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
+	  test "$am_cv_pathless_PYTHON" = none && break
+	  AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
+	done])
+      # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
+      if test "$am_cv_pathless_PYTHON" = none; then
+	PYTHON=:
+      else
+        AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
+      fi
+      am_display_PYTHON=$am_cv_pathless_PYTHON
+    fi
+  ])
+
+  if test "$PYTHON" = :; then
+  dnl Run any user-specified action, or abort.
+    m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
+  else
+
+  dnl Query Python for its version number.  Getting [:3] seems to be
+  dnl the best way to do this; it's what "site.py" does in the standard
+  dnl library.
+
+  AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
+    [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`])
+  AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+
+  dnl Use the values of $prefix and $exec_prefix for the corresponding
+  dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX.  These are made
+  dnl distinct variables so they can be overridden if need be.  However,
+  dnl general consensus is that you shouldn't need this ability.
+
+  AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
+  AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
+
+  dnl At times (like when building shared libraries) you may want
+  dnl to know which OS platform Python thinks this is.
+
+  AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
+    [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`])
+  AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
+
+
+  dnl Set up 4 directories:
+
+  dnl pythondir -- where to install python scripts.  This is the
+  dnl   site-packages directory, not the python standard library
+  dnl   directory like in previous automake betas.  This behavior
+  dnl   is more consistent with lispdir.m4 for example.
+  dnl Query distutils for this directory.  distutils does not exist in
+  dnl Python 1.5, so we fall back to the hardcoded directory if it
+  dnl doesn't work.
+  AC_CACHE_CHECK([for $am_display_PYTHON script directory],
+    [am_cv_python_pythondir],
+    [if test "x$prefix" = xNONE
+     then
+       am_py_prefix=$ac_default_prefix
+     else
+       am_py_prefix=$prefix
+     fi
+     am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null ||
+     echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     case $am_cv_python_pythondir in
+     $am_py_prefix*)
+       am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
+       am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
+       ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
+     esac
+    ])
+  AC_SUBST([pythondir], [$am_cv_python_pythondir])
+
+  dnl pkgpythondir -- $PACKAGE directory under pythondir.  Was
+  dnl   PYTHON_SITE_PACKAGE in previous betas, but this naming is
+  dnl   more consistent with the rest of automake.
+
+  AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
+
+  dnl pyexecdir -- directory for installing python extension modules
+  dnl   (shared libraries)
+  dnl Query distutils for this directory.  distutils does not exist in
+  dnl Python 1.5, so we fall back to the hardcoded directory if it
+  dnl doesn't work.
+  AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
+    [am_cv_python_pyexecdir],
+    [if test "x$exec_prefix" = xNONE
+     then
+       am_py_exec_prefix=$am_py_prefix
+     else
+       am_py_exec_prefix=$exec_prefix
+     fi
+     am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null ||
+     echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+     case $am_cv_python_pyexecdir in
+     $am_py_exec_prefix*)
+       am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
+       am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
+       ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
+     esac
+    ])
+  AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
+
+  dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
+
+  AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
+
+  dnl Run any user-specified action.
+  $2
+  fi
+
+])
+m4trace:/usr/share/aclocal-1.11/python.m4:199: -1- AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys
+# split strings by '.' and convert to numeric.  Append some zeros
+# because we need at least 4 digits for the hex conversion.
+# map returns an iterator in Python 3.0 and a list in 2.x
+minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
+minverhex = 0
+# xrange is not present in Python 3.0 and range returns an iterator
+for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]]
+sys.exit(sys.hexversion < minverhex)"
+  AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
+m4trace:/usr/share/aclocal-1.11/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules],
+[  --enable-silent-rules          less verbose build output (undo: `make V=1')
+  --disable-silent-rules         verbose build output (undo: `make V=0')])
+case $enable_silent_rules in
+yes) AM_DEFAULT_VERBOSITY=0;;
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+m4trace:/usr/share/aclocal-1.11/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE])
+m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+])
+m4trace:config/autotroll.m4:70: -1- m4_pattern_forbid([^AT_])
+m4trace:config/autotroll.m4:71: -1- m4_pattern_forbid([^_AT_])
+m4trace:config/autotroll.m4:97: -1- AC_DEFUN([AT_WITH_QT], [ AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_CANONICAL_BUILD])
+  AC_REQUIRE([AC_PROG_CXX])
+
+  test x"$TROLL" != x && echo 'ViM rox emacs.'
+
+dnl Memo: AC_ARG_WITH(package, help-string, [if-given], [if-not-given])
+  AC_ARG_WITH([qt],
+              [AS_HELP_STRING([--with-qt],
+                 [Path to Qt @<:@Look in PATH and /usr/local/Trolltech@:>@])],
+              [QT_PATH=$withval], [QT_PATH=])
+
+  # Find Qt.
+  if test -d /usr/local/Trolltech; then
+    # Try to find the latest version.
+    tmp_qt_paths=`echo /usr/local/Trolltech/*/bin | tr ' ' '\n' | sort -nr \
+                                              | xargs | sed 's/  */:/g'`
+  fi
+
+  # Find qmake.
+  AC_PATH_PROGS([QMAKE], [qmake-qt4${EXEEXT}], [missing], [$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths])
+  if test x"$QMAKE" = xmissing; then
+    AC_PATH_PROGS([QMAKE], [qmake${EXEEXT}], [missing], [$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths])
+    if test x"$QMAKE" = xmissing; then
+      AC_MSG_ERROR([Cannot find qmake in your PATH. Try using --with-qt.])
+    fi
+  fi
+
+  # Find moc (Meta Object Compiler).
+  AC_PATH_PROGS([MOC], [moc-qt4${EXEEXT}], [missing], [$QT_PATH:$PATH:$tmp_qt_paths])
+  if test x"$MOC" = xmissing; then
+    AC_PATH_PROGS([MOC], [moc${EXEEXT}], [missing], [$QT_PATH:$PATH:$tmp_qt_paths])
+    if test x"$MOC" = xmissing; then
+      AC_MSG_ERROR([Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt.])
+    fi
+  fi
+
+  # Find uic (User Interface Compiler).
+  AC_PATH_PROGS([UIC], [uic-qt4${EXEEXT}], [missing], [$QT_PATH:$PATH:$tmp_qt_paths])
+  if test x"$UIC" = xmissing; then
+    AC_PATH_PROGS([UIC], [uic${EXEEXT}], [missing], [$QT_PATH:$PATH:$tmp_qt_paths])
+    if test x"$UIC" = xmissing; then
+      AC_MSG_ERROR([Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt.])
+    fi
+  fi
+
+  # Find rcc (Qt Resource Compiler).
+  AC_PATH_PROGS([RCC], [rcc-qt4${EXEEXT}], [false], [$QT_PATH:$PATH:$tmp_qt_paths])
+  if test x"$RCC" = xfalse; then
+    AC_PATH_PROGS([RCC], [rcc${EXEEXT}], [false], [$QT_PATH:$PATH:$tmp_qt_paths])
+    if test x"$RCC" = xfalse; then
+      AC_MSG_WARN([Cannot find rcc (Qt Resource Compiler) in your PATH. Try using --with-qt.])
+    fi
+  fi
+
+  # If we don't know the path to Qt, guess it from the path to qmake.
+  if test x"$QT_PATH" = x; then
+    QT_PATH=`dirname "$QMAKE"`
+  fi
+  if test x"$QT_PATH" = x; then
+    AC_MSG_ERROR([Cannot find the path to your Qt install. Use --with-qt.])
+  fi
+  AC_SUBST([QT_PATH])
+
+  # Get ready to build a test-app with Qt.
+
+  # Look for a writable temporary directory.
+  AC_ARG_VAR([TMPDIR], [A temporary directory with write access @<:@/tmp@:>@])
+  if test x"$TMPDIR" = x || test ! -d "$TMPDIR" || test ! -w "$TMPDIR"; then
+    echo "$as_me:$LINENO: no TMPDIR or bad TMPDIR ($TMPDIR)" \
+      >&AS_MESSAGE_LOG_FD
+    for i in /tmp /var/tmp; do
+      if test -d "$i" && test -w "$i"; then
+        TMPDIR=$i
+        export TMPDIR
+        echo "$as_me:$LINENO: setting TMPDIR=$TMPDIR" >&AS_MESSAGE_LOG_FD
+        break
+      fi
+    done
+  fi
+
+  # Kludge!!  QMake has a very strange behavior.  For instance, if you
+  # install Qt under your $HOME and run QMake somewhere else under your
+  # $HOME, it will try to be clever and produce Makefiles with relative
+  # include paths.  In order to avoid this, we will test QMake from a
+  # temporary directory (usually /tmp).  Note that this problem was only
+  # observed with Qt 4.
+  my_configure_pwd=`pwd`
+  my_tmpdir="$TMPDIR/conftest$$.dir"
+  test -d "$my_tmpdir" || mkdir "$my_tmpdir"
+  if test -w "$my_tmpdir" && cd "$my_tmpdir"
+  then
+    :
+  else
+    AC_MSG_ERROR([Cannot cd to or write in $my_tmpdir])
+  fi
+  cat >conftest.h <<_ASEOF
+#include <QObject>
+
+class Foo: public QObject
+{
+  Q_OBJECT;
+public:
+  Foo();
+  ~Foo() {}
+public slots:
+  void setValue(int value);
+signals:
+  void valueChanged(int newValue);
+private:
+  int value_;
+};
+_ASEOF
+
+  cat >conftest.cpp <<_ASEOF
+#include "conftest.h"
+Foo::Foo()
+  : value_ (42)
+{
+  connect(this, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
+}
+
+void Foo::setValue(int value)
+{
+  value_ = value;
+}
+
+int main()
+{
+  Foo f;
+}
+_ASEOF
+  if $QMAKE -project; then :; else
+    AC_MSG_ERROR([Calling $QMAKE -project failed.])
+  fi
+
+  # Find the .pro file generated by qmake.
+  pro_file='conftest.dir.pro'
+  test -f $pro_file || pro_file=`echo *.pro`
+  if test -f "$pro_file"; then :; else
+    AC_MSG_ERROR([Can't find the .pro file generated by Qmake.])
+  fi
+
+dnl Tweak the value of QT in the .pro if have been the 1st arg.
+m4_ifval([$1], [_AT_TWEAK_PRO_FILE([QT], [$1])])
+
+dnl Tweak the value of CONFIG in the .pro if have been given a 2nd arg.
+m4_ifval([$2], [_AT_TWEAK_PRO_FILE([CONFIG], [$2])])
+
+m4_ifval([$3],
+[ # Add the extra-settings the user wants to set in the .pro
+  echo "$3" >>"$pro_file"
+])
+
+  echo "$as_me:$LINENO: Invoking $QMAKE on $pro_file" >&AS_MESSAGE_LOG_FD
+  sed 's/^/| /' "$pro_file" >&AS_MESSAGE_LOG_FD
+
+  if $QMAKE; then :; else
+    AC_MSG_ERROR([Calling $QMAKE failed.])
+  fi
+  # Try to compile a simple Qt app.
+  AC_CACHE_CHECK([whether we can build a simple Qt app], [at_cv_qt_build],
+  [at_cv_qt_build=ko
+  : ${MAKE=make}
+
+  if $MAKE >&AS_MESSAGE_LOG_FD 2>&1; then
+    at_cv_qt_build='ok, looks like Qt 4'
+  else
+    echo "$as_me:$LINENO: Build failed, trying to #include <qobject.h> \
+instead" >&AS_MESSAGE_LOG_FD
+    sed 's/<QObject>/<qobject.h>/' conftest.h > tmp.h && mv tmp.h conftest.h
+    if $MAKE >&AS_MESSAGE_LOG_FD 2>&1; then
+      at_cv_qt_build='ok, looks like Qt 3'
+    else
+      # Sometimes (such as on Debian) build will fail because Qt hasn't been
+      # installed in debug mode and qmake tries (by default) to build apps in
+      # debug mode => Try again in release mode.
+      echo "$as_me:$LINENO: Build failed, trying to enforce release mode" \
+            >&AS_MESSAGE_LOG_FD
+
+      _AT_TWEAK_PRO_FILE([CONFIG], [+release])
+
+      sed 's/<qobject.h>/<QObject>/' conftest.h > tmp.h && mv tmp.h conftest.h
+      if $MAKE >&AS_MESSAGE_LOG_FD 2>&1; then
+        at_cv_qt_build='ok, looks like Qt 4, release mode forced'
+      else
+        echo "$as_me:$LINENO: Build failed, trying to #include <qobject.h> \
+instead" >&AS_MESSAGE_LOG_FD
+        sed 's/<QObject>/<qobject.h>/' conftest.h > tmp.h && mv tmp.h conftest.h
+        if $MAKE >&AS_MESSAGE_LOG_FD 2>&1; then
+          at_cv_qt_build='ok, looks like Qt 3, release mode forced'
+        else
+          at_cv_qt_build=ko
+          echo "$as_me:$LINENO: failed program was:" >&AS_MESSAGE_LOG_FD
+          sed 's/^/| /' conftest.h >&AS_MESSAGE_LOG_FD
+          echo "$as_me:$LINENO: failed program was:" >&AS_MESSAGE_LOG_FD
+          sed 's/^/| /' conftest.cpp >&AS_MESSAGE_LOG_FD
+        fi # if make with Qt3-style #include and release mode forced.
+      fi # if make with Qt4-style #include and release mode forced.
+    fi # if make with Qt3-style #include.
+  fi # if make with Qt4-style #include.
+  ])dnl end: AC_CACHE_CHECK(at_cv_qt_build)
+
+  if test x"$at_cv_qt_build" = xko; then
+    AC_MSG_ERROR([Cannot build a test Qt program])
+  fi
+  QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^[^0-9]*//'`
+  AC_SUBST([QT_VERSION_MAJOR])
+
+  # This sed filter is applied after an expression of the form: /^FOO.*=/!d;
+  # It starts by removing the beginning of the line, removing references to
+  # SUBLIBS, removing unnecessary whitespaces at the beginning, and prefixes
+  # all variable uses by QT_.
+  qt_sed_filter='s///;
+                 s/$(SUBLIBS)//g;
+                 s/^ *//;
+                 s/\$(\(@<:@A-Z_@:>@@<:@A-Z_@:>@*\))/$(QT_\1)/g'
+
+  # Find the Makefile (qmake happens to generate a fake Makefile which invokes
+  # a Makefile.Debug or Makefile.Release). We we have both, we'll pick the
+  # Makefile.Release. The reason is that the main difference is that release
+  # uses -Os and debug -g. We can override -Os by passing another -O but we
+  # usually don't override -g.
+  if test -f Makefile.Release; then
+    at_mfile='Makefile.Release'
+  else
+    at_mfile='Makefile'
+  fi
+  if test -f $at_mfile; then :; else
+    cd "$my_configure_pwd"
+    AC_MSG_ERROR([Cannot find the Makefile generated by qmake.])
+  fi
+
+  # Find the DEFINES of Qt (should have been named CPPFLAGS).
+  AC_CACHE_CHECK([for the DEFINES to use with Qt], [at_cv_env_QT_DEFINES],
+  [at_cv_env_QT_DEFINES=`sed "/^DEFINES@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`])
+  AC_SUBST([QT_DEFINES], [$at_cv_env_QT_DEFINES])
+
+  # Find the CFLAGS of Qt (We can use Qt in C?!)
+  AC_CACHE_CHECK([for the CFLAGS to use with Qt], [at_cv_env_QT_CFLAGS],
+  [at_cv_env_QT_CFLAGS=`sed "/^CFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`])
+  AC_SUBST([QT_CFLAGS], [$at_cv_env_QT_CFLAGS])
+
+  # Find the CXXFLAGS of Qt.
+  AC_CACHE_CHECK([for the CXXFLAGS to use with Qt], [at_cv_env_QT_CXXFLAGS],
+  [at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`])
+  AC_SUBST([QT_CXXFLAGS], [$at_cv_env_QT_CXXFLAGS])
+
+  # Find the INCPATH of Qt.
+  AC_CACHE_CHECK([for the INCPATH to use with Qt], [at_cv_env_QT_INCPATH],
+  [at_cv_env_QT_INCPATH=`sed "/^INCPATH@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`])
+  AC_SUBST([QT_INCPATH], [$at_cv_env_QT_INCPATH])
+
+  AC_SUBST([QT_CPPFLAGS], ["$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH"])
+
+  # Find the LFLAGS of Qt (Should have been named LDFLAGS)
+  AC_CACHE_CHECK([for the LDFLAGS to use with Qt], [at_cv_env_QT_LDFLAGS],
+  [at_cv_env_QT_LDFLAGS=`sed "/^LDFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`])
+  AC_SUBST([QT_LFLAGS], [$at_cv_env_QT_LDFLAGS])
+  AC_SUBST([QT_LDFLAGS], [$at_cv_env_QT_LDFLAGS])
+
+  AC_MSG_CHECKING([whether host operating system is Darwin])
+  at_darwin="no"
+  case $host_os in
+    darwin*)
+      at_darwin="yes"
+      ;;
+  esac
+  AC_MSG_RESULT([$at_darwin])
+
+  # Find the LIBS of Qt.
+  AC_CACHE_CHECK([for the LIBS to use with Qt], [at_cv_env_QT_LIBS],
+  [at_cv_env_QT_LIBS=`sed "/^LIBS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`
+   if test x$at_darwin = xyes; then
+     # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) doesn't handle
+     # -F properly. The "bug" has been fixed on 22 October 2006
+     # by Peter O'Gorman but we provide backward compatibility here.
+     at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \
+                             | sed 's/^-F/-Wl,-F/;s/ -F/ -Wl,-F/g'`
+   fi
+  ])
+  AC_SUBST([QT_LIBS], [$at_cv_env_QT_LIBS])
+
+  cd "$my_configure_pwd" || echo 'WTF!'
+  rm -rf "$my_tmpdir"
+])
+m4trace:config/autotroll.m4:389: -1- AC_DEFUN([AT_REQUIRE_QT_VERSION], [ AC_PREREQ([2.60])
+  if test x"$QMAKE" = x; then
+    AC_MSG_ERROR([\$QMAKE is empty. \
+Did you invoke AT@&t at _WITH_QT before AT@&t at _REQUIRE_QT_VERSION?])
+  fi
+  AC_CACHE_CHECK([for Qt's version], [at_cv_QT_VERSION],
+  [echo "$as_me:$LINENO: Running $QMAKE --version:" >&AS_MESSAGE_LOG_FD
+  $QMAKE --version >&AS_MESSAGE_LOG_FD 2>&1
+  qmake_version_sed=['/^.*\([0-9]\.[0-9]\.[0-9]\).*$/!d;s//\1/']
+  at_cv_QT_VERSION=`$QMAKE --version 2>&1 | sed "$qmake_version_sed"`])
+  if test x"$at_cv_QT_VERSION" = x; then
+    AC_MSG_ERROR([Cannot detect Qt's version.])
+  fi
+  AC_SUBST([QT_VERSION], [$at_cv_QT_VERSION])
+  AS_VERSION_COMPARE([$QT_VERSION], [$1],
+    [AC_MSG_ERROR([This package requires Qt $1 or above.])])
+])
+m4trace:config/autotroll.m4:416: -1- AC_DEFUN([_AT_TWEAK_PRO_FILE], [ # Tweak the value of $1 in the .pro file for $2.
+
+  qt_conf=''
+  for at_mod in $2; do
+    at_mod=`echo "$at_mod" | sed 's/^-//; tough
+                                  s/^+//; beef
+                                  :ough
+                                  s/^/$1 -= /;n
+                                  :eef
+                                  s/^/$1 += /'`
+    qt_conf="$qt_conf
+$at_mod"
+  done
+  echo "$qt_conf" | sed 1d >>"$pro_file"
+])
+m4trace:config/libtool.m4:67: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])
+m4trace:config/libtool.m4:102: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:config/libtool.m4:102: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:config/libtool.m4:103: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:config/libtool.m4:103: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:config/libtool.m4:562: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])
+m4trace:config/libtool.m4:757: -1- AC_DEFUN([LT_SUPPORTED_TAG], [])
+m4trace:config/libtool.m4:768: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])
+m4trace:config/libtool.m4:830: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+m4trace:config/libtool.m4:830: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(C++)])
+m4trace:config/libtool.m4:831: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+m4trace:config/libtool.m4:831: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Fortran 77)])
+m4trace:config/libtool.m4:832: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+m4trace:config/libtool.m4:832: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Fortran)])
+m4trace:config/libtool.m4:833: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+m4trace:config/libtool.m4:833: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Java)])
+m4trace:config/libtool.m4:1402: -1- AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])
+m4trace:config/libtool.m4:1444: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])])
+m4trace:config/libtool.m4:1444: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])])
+m4trace:config/libtool.m4:1453: -1- AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])
+m4trace:config/libtool.m4:1488: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])])
+m4trace:config/libtool.m4:1488: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])])
+m4trace:config/libtool.m4:1495: -1- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])
+m4trace:config/libtool.m4:1623: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])])
+m4trace:config/libtool.m4:1623: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])])
+m4trace:config/libtool.m4:1724: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])
+m4trace:config/libtool.m4:1841: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])])
+m4trace:config/libtool.m4:1841: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])])
+m4trace:config/libtool.m4:2741: -1- AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])
+m4trace:config/libtool.m4:2803: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])])
+m4trace:config/libtool.m4:2803: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])])
+m4trace:config/libtool.m4:2826: -1- AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])
+m4trace:config/libtool.m4:2914: -1- AU_DEFUN([AM_PROG_LD], [m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:config/libtool.m4:2914: -1- AC_DEFUN([AM_PROG_LD], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LD' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:config/libtool.m4:2915: -1- AU_DEFUN([AC_PROG_LD], [m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:config/libtool.m4:2915: -1- AC_DEFUN([AC_PROG_LD], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LD' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:config/libtool.m4:3179: -1- AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])
+m4trace:config/libtool.m4:3257: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:config/libtool.m4:3257: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:config/libtool.m4:3258: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:config/libtool.m4:3258: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:config/libtool.m4:3267: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])
+m4trace:config/libtool.m4:3286: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])])
+m4trace:config/libtool.m4:3286: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])])
+m4trace:config/libtool.m4:6987: -1- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+m4trace:config/libtool.m4:6996: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])])
+m4trace:config/libtool.m4:6996: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])])
+m4trace:config/libtool.m4:7003: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,)
+])
+m4trace:config/libtool.m4:7008: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])])
+m4trace:config/libtool.m4:7008: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])])
+m4trace:config/libtool.m4:7119: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])])
+m4trace:config/libtool.m4:7119: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])])
+m4trace:config/ltoptions.m4:13: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+m4trace:config/ltoptions.m4:110: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:110: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:145: -1- AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:145: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete.
+You should run autoupdate.])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:194: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+m4trace:config/ltoptions.m4:198: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+m4trace:config/ltoptions.m4:202: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+m4trace:config/ltoptions.m4:202: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete.
+You should run autoupdate.])dnl
+AC_ENABLE_SHARED($@)])
+m4trace:config/ltoptions.m4:203: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+m4trace:config/ltoptions.m4:203: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete.
+You should run autoupdate.])dnl
+AC_DISABLE_SHARED($@)])
+m4trace:config/ltoptions.m4:248: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+m4trace:config/ltoptions.m4:252: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+m4trace:config/ltoptions.m4:256: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+m4trace:config/ltoptions.m4:256: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete.
+You should run autoupdate.])dnl
+AC_ENABLE_STATIC($@)])
+m4trace:config/ltoptions.m4:257: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+m4trace:config/ltoptions.m4:257: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete.
+You should run autoupdate.])dnl
+AC_DISABLE_STATIC($@)])
+m4trace:config/ltoptions.m4:302: -1- AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:302: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:309: -1- AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:309: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:342: -1- AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltoptions.m4:342: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+m4trace:config/ltsugar.m4:13: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+m4trace:config/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+m4trace:config/lt~obsolete.m4:36: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+m4trace:config/lt~obsolete.m4:40: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])
+m4trace:config/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_SHELL_INIT])
+m4trace:config/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])
+m4trace:config/lt~obsolete.m4:44: -1- AC_DEFUN([_LT_AC_TAGVAR])
+m4trace:config/lt~obsolete.m4:45: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL])
+m4trace:config/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_PREOPEN])
+m4trace:config/lt~obsolete.m4:47: -1- AC_DEFUN([_LT_AC_SYS_COMPILER])
+m4trace:config/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_LOCK])
+m4trace:config/lt~obsolete.m4:49: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])
+m4trace:config/lt~obsolete.m4:50: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])
+m4trace:config/lt~obsolete.m4:51: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])
+m4trace:config/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])
+m4trace:config/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR])
+m4trace:config/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LTDL_OBJDIR])
+m4trace:config/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])
+m4trace:config/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])
+m4trace:config/lt~obsolete.m4:57: -1- AC_DEFUN([AC_PATH_MAGIC])
+m4trace:config/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PROG_LD_GNU])
+m4trace:config/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])
+m4trace:config/lt~obsolete.m4:60: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])
+m4trace:config/lt~obsolete.m4:61: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])
+m4trace:config/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])
+m4trace:config/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])
+m4trace:config/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])
+m4trace:config/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])
+m4trace:config/lt~obsolete.m4:66: -1- AC_DEFUN([LT_AC_PROG_EGREP])
+m4trace:config/lt~obsolete.m4:71: -1- AC_DEFUN([_AC_PROG_LIBTOOL])
+m4trace:config/lt~obsolete.m4:72: -1- AC_DEFUN([AC_LIBTOOL_SETUP])
+m4trace:config/lt~obsolete.m4:73: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN])
+m4trace:config/lt~obsolete.m4:74: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])
+m4trace:config/lt~obsolete.m4:75: -1- AC_DEFUN([_LT_AC_TAGCONFIG])
+m4trace:config/lt~obsolete.m4:77: -1- AC_DEFUN([_LT_AC_LANG_CXX])
+m4trace:config/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_F77])
+m4trace:config/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_GCJ])
+m4trace:config/lt~obsolete.m4:80: -1- AC_DEFUN([AC_LIBTOOL_RC])
+m4trace:config/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])
+m4trace:config/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG])
+m4trace:config/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])
+m4trace:config/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])
+m4trace:config/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])
+m4trace:config/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG])
+m4trace:config/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])
+m4trace:config/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])
+m4trace:config/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])
+m4trace:config/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG])
+m4trace:config/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG])
+m4trace:config/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$])
+m4trace:configure.ac:4: -1- m4_pattern_allow([^MGL_RELEASE$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^MGL_CURRENT$])
+m4trace:configure.ac:22: -1- m4_pattern_allow([^MGL_REVISION$])
+m4trace:configure.ac:23: -1- m4_pattern_allow([^MGL_AGE$])
+m4trace:configure.ac:25: -1- AM_INIT_AUTOMAKE
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
+m4trace:configure.ac:25: -1- AM_SET_CURRENT_AUTOMAKE_VERSION
+m4trace:configure.ac:25: -1- AM_AUTOMAKE_VERSION([1.11.1])
+m4trace:configure.ac:25: -1- _AM_AUTOCONF_VERSION([2.67])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_DATA$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^am__isrc$])
+m4trace:configure.ac:25: -1- _AM_SUBST_NOTMAKE([am__isrc])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^CYGPATH_W$])
+m4trace:configure.ac:25: -1- _AM_SET_OPTIONS([])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:25: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])
+m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([no-define])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:25: -1- AM_SANITY_CHECK
+m4trace:configure.ac:25: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+m4trace:configure.ac:25: -1- AM_MISSING_HAS_RUN
+m4trace:configure.ac:25: -1- AM_AUX_DIR_EXPAND
+m4trace:configure.ac:25: -1- m4_pattern_allow([^ACLOCAL$])
+m4trace:configure.ac:25: -1- AM_MISSING_PROG([AUTOCONF], [autoconf])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOCONF$])
+m4trace:configure.ac:25: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOMAKE$])
+m4trace:configure.ac:25: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOHEADER$])
+m4trace:configure.ac:25: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^MAKEINFO$])
+m4trace:configure.ac:25: -1- AM_PROG_INSTALL_SH
+m4trace:configure.ac:25: -1- m4_pattern_allow([^install_sh$])
+m4trace:configure.ac:25: -1- AM_PROG_INSTALL_STRIP
+m4trace:configure.ac:25: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
+m4trace:configure.ac:25: -1- AM_PROG_MKDIR_P
+m4trace:configure.ac:25: -1- m4_pattern_allow([^MKDIR_P$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^mkdir_p$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AWK$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:25: -1- AM_SET_LEADING_DOT
+m4trace:configure.ac:25: -1- m4_pattern_allow([^am__leading_dot$])
+m4trace:configure.ac:25: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([tar-ustar])
+m4trace:configure.ac:25: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])
+m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([tar-pax])
+m4trace:configure.ac:25: -1- _AM_PROG_TAR([v7])
+m4trace:configure.ac:25: -1- AM_MISSING_PROG([AMTAR], [tar])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AMTAR$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^am__tar$])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^am__untar$])
+m4trace:configure.ac:25: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([no-dependencies])
+m4trace:configure.ac:25: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])
+m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([silent-rules])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CFLAGS$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^ac_ct_CC$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^EXEEXT$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^OBJEXT$])
+m4trace:configure.ac:27: -1- _AM_DEPENDENCIES([CC])
+m4trace:configure.ac:27: -1- AM_SET_DEPDIR
+m4trace:configure.ac:27: -1- m4_pattern_allow([^DEPDIR$])
+m4trace:configure.ac:27: -1- AM_OUTPUT_DEPENDENCY_COMMANDS
+m4trace:configure.ac:27: -1- AM_MAKE_INCLUDE
+m4trace:configure.ac:27: -1- m4_pattern_allow([^am__include$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^am__quote$])
+m4trace:configure.ac:27: -1- AM_DEP_TRACK
+m4trace:configure.ac:27: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEP_TRUE$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEP_FALSE$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CCDEPMODE$])
+m4trace:configure.ac:27: -1- AM_CONDITIONAL([am__fastdepCC], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CXXFLAGS$])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^ac_ct_CXX$])
+m4trace:configure.ac:28: -1- _AM_DEPENDENCIES([CXX])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CXXDEPMODE$])
+m4trace:configure.ac:28: -1- AM_CONDITIONAL([am__fastdepCXX], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
+m4trace:configure.ac:28: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:28: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:31: -1- AC_LIBTOOL_WIN32_DLL
+m4trace:configure.ac:31: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete.
+You should run autoupdate.], [config/ltoptions.m4:145: AC_LIBTOOL_WIN32_DLL is expanded from...
+configure.ac:31: the top level])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^build$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^build_cpu$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^build_vendor$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^build_os$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^host$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^host_cpu$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^host_vendor$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^host_os$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^AS$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^DLLTOOL$])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:31: -1- _m4_warn([obsolete], [AC_LIBTOOL_WIN32_DLL: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.], [config/ltoptions.m4:145: AC_LIBTOOL_WIN32_DLL is expanded from...
+configure.ac:31: the top level])
+m4trace:configure.ac:32: -1- AC_LIBTOOL_DLOPEN
+m4trace:configure.ac:32: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete.
+You should run autoupdate.], [config/ltoptions.m4:110: AC_LIBTOOL_DLOPEN is expanded from...
+configure.ac:32: the top level])
+m4trace:configure.ac:32: -1- _m4_warn([obsolete], [AC_LIBTOOL_DLOPEN: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.], [config/ltoptions.m4:110: AC_LIBTOOL_DLOPEN is expanded from...
+configure.ac:32: the top level])
+m4trace:configure.ac:33: -1- AC_PROG_LIBTOOL
+m4trace:configure.ac:33: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete.
+You should run autoupdate.], [config/libtool.m4:102: AC_PROG_LIBTOOL is expanded from...
+configure.ac:33: the top level])
+m4trace:configure.ac:33: -1- LT_INIT
+m4trace:configure.ac:33: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])
+m4trace:configure.ac:33: -1- LTOPTIONS_VERSION
+m4trace:configure.ac:33: -1- LTSUGAR_VERSION
+m4trace:configure.ac:33: -1- LTVERSION_VERSION
+m4trace:configure.ac:33: -1- LTOBSOLETE_VERSION
+m4trace:configure.ac:33: -1- _LT_PROG_LTMAIN
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LIBTOOL$])
+m4trace:configure.ac:33: -1- LT_PATH_LD
+m4trace:configure.ac:33: -1- m4_pattern_allow([^SED$])
+m4trace:configure.ac:33: -1- AC_PROG_EGREP
+m4trace:configure.ac:33: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^EGREP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^FGREP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:33: -1- LT_PATH_NM
+m4trace:configure.ac:33: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^ac_ct_DUMPBIN$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^NM$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LN_S$])
+m4trace:configure.ac:33: -1- LT_CMD_MAX_LEN
+m4trace:configure.ac:33: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^RANLIB$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([LT_OBJDIR])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LT_OBJDIR$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^lt_ECHO$])
+m4trace:configure.ac:33: -1- _LT_CC_BASENAME([$compiler])
+m4trace:configure.ac:33: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH])
+m4trace:configure.ac:33: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH])
+m4trace:configure.ac:33: -1- LT_SUPPORTED_TAG([CC])
+m4trace:configure.ac:33: -1- _LT_COMPILER_BOILERPLATE
+m4trace:configure.ac:33: -1- _LT_LINKER_BOILERPLATE
+m4trace:configure.ac:33: -1- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"])
+m4trace:configure.ac:33: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t at m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;;
+     esac], [_LT_TAGVAR(lt_prog_compiler_pic, )=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no])
+m4trace:configure.ac:33: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^DSYMUTIL$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^NMEDIT$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LIPO$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^OTOOL$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^OTOOL64$])
+m4trace:configure.ac:33: -1- LT_SYS_DLOPEN_SELF
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^HAVE_DLFCN_H$])
+m4trace:configure.ac:33: -1- LT_LANG([CXX])
+m4trace:configure.ac:33: -1- LT_SUPPORTED_TAG([CXX])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXFLAGS$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^ac_ct_CXX$])
+m4trace:configure.ac:33: -1- _AM_DEPENDENCIES([CXX])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXDEPMODE$])
+m4trace:configure.ac:33: -1- AM_CONDITIONAL([am__fastdepCXX], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
+m4trace:configure.ac:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:33: -1- _LT_COMPILER_BOILERPLATE
+m4trace:configure.ac:33: -1- _LT_LINKER_BOILERPLATE
+m4trace:configure.ac:33: -1- _LT_CC_BASENAME([$compiler])
+m4trace:configure.ac:33: -1- LT_PATH_LD
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:33: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, CXX) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, CXX)], [$_LT_TAGVAR(lt_prog_compiler_pic, CXX)@&t at m4_if([CXX],[],[ -DPIC],[m4_if([CXX],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, CXX) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, CXX)=" $_LT_TAGVAR(lt_prog_compiler_pic, CXX)" ;;
+     esac], [_LT_TAGVAR(lt_prog_compiler_pic, CXX)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, CXX)=no])
+m4trace:configure.ac:33: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works_CXX], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, CXX)=])
+m4trace:configure.ac:44: -1- m4_pattern_allow([^MGL_USE_DOUBLE$])
+m4trace:configure.ac:46: -1- m4_pattern_allow([^MGL_USE_DOUBLE$])
+m4trace:configure.ac:72: -1- m4_pattern_allow([^PTHREAD_FLAGS$])
+m4trace:configure.ac:75: -1- m4_pattern_allow([^PTHREAD_LIBS$])
+m4trace:configure.ac:77: -1- AM_CONDITIONAL([USE_PTHREAD], [test x$pthread = xtrue])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^USE_PTHREAD_TRUE$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^USE_PTHREAD_FALSE$])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([USE_PTHREAD_TRUE])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([USE_PTHREAD_FALSE])
+m4trace:configure.ac:89: -1- m4_pattern_allow([^GSL_FLAGS$])
+m4trace:configure.ac:90: -1- m4_pattern_allow([^GSL_LIBS$])
+m4trace:configure.ac:100: -1- m4_pattern_allow([^GSL_FLAGS$])
+m4trace:configure.ac:102: -1- AM_CONDITIONAL([USE_GSL], [test x$test_gsl = xtrue])
+m4trace:configure.ac:102: -1- m4_pattern_allow([^USE_GSL_TRUE$])
+m4trace:configure.ac:102: -1- m4_pattern_allow([^USE_GSL_FALSE$])
+m4trace:configure.ac:102: -1- _AM_SUBST_NOTMAKE([USE_GSL_TRUE])
+m4trace:configure.ac:102: -1- _AM_SUBST_NOTMAKE([USE_GSL_FALSE])
+m4trace:configure.ac:115: -1- m4_pattern_allow([^GL_LIBS$])
+m4trace:configure.ac:118: -1- m4_pattern_allow([^GLUT_LIBS$])
+m4trace:configure.ac:125: -1- m4_pattern_allow([^GL_LIBS$])
+m4trace:configure.ac:128: -1- m4_pattern_allow([^GLUT_FLAGS$])
+m4trace:configure.ac:130: -1- m4_pattern_allow([^GLUT_LIBS$])
+m4trace:configure.ac:137: -1- m4_pattern_allow([^GL_LIBS$])
+m4trace:configure.ac:140: -1- m4_pattern_allow([^GLUT_FLAGS$])
+m4trace:configure.ac:142: -1- m4_pattern_allow([^GLUT_LIBS$])
+m4trace:configure.ac:147: -1- AM_CONDITIONAL([USE_GLUT], [(test x$all = xtrue || test x$glut = xtrue)])
+m4trace:configure.ac:147: -1- m4_pattern_allow([^USE_GLUT_TRUE$])
+m4trace:configure.ac:147: -1- m4_pattern_allow([^USE_GLUT_FALSE$])
+m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([USE_GLUT_TRUE])
+m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([USE_GLUT_FALSE])
+m4trace:configure.ac:177: -1- m4_pattern_allow([^HDF5_FLAGS$])
+m4trace:configure.ac:179: -1- m4_pattern_allow([^HDF5_LIBS$])
+m4trace:configure.ac:181: -1- AM_CONDITIONAL([USE_HDF5], [(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue)])
+m4trace:configure.ac:181: -1- m4_pattern_allow([^USE_HDF5_TRUE$])
+m4trace:configure.ac:181: -1- m4_pattern_allow([^USE_HDF5_FALSE$])
+m4trace:configure.ac:181: -1- _AM_SUBST_NOTMAKE([USE_HDF5_TRUE])
+m4trace:configure.ac:181: -1- _AM_SUBST_NOTMAKE([USE_HDF5_FALSE])
+m4trace:configure.ac:193: -1- m4_pattern_allow([^HDF4_FLAGS$])
+m4trace:configure.ac:194: -1- m4_pattern_allow([^HDF4_LIBS$])
+m4trace:configure.ac:196: -1- AM_CONDITIONAL([USE_HDF4], [(test x$all = xtrue || test x$hdf4 = xtrue)])
+m4trace:configure.ac:196: -1- m4_pattern_allow([^USE_HDF4_TRUE$])
+m4trace:configure.ac:196: -1- m4_pattern_allow([^USE_HDF4_FALSE$])
+m4trace:configure.ac:196: -1- _AM_SUBST_NOTMAKE([USE_HDF4_TRUE])
+m4trace:configure.ac:196: -1- _AM_SUBST_NOTMAKE([USE_HDF4_FALSE])
+m4trace:configure.ac:205: -1- m4_pattern_allow([^GIF_FLAGS$])
+m4trace:configure.ac:208: -1- m4_pattern_allow([^GIF_LIBS$])
+m4trace:configure.ac:210: -1- AM_CONDITIONAL([USE_GIF], [(test x$all = xtrue || test x$gif = xtrue)])
+m4trace:configure.ac:210: -1- m4_pattern_allow([^USE_GIF_TRUE$])
+m4trace:configure.ac:210: -1- m4_pattern_allow([^USE_GIF_FALSE$])
+m4trace:configure.ac:210: -1- _AM_SUBST_NOTMAKE([USE_GIF_TRUE])
+m4trace:configure.ac:210: -1- _AM_SUBST_NOTMAKE([USE_GIF_FALSE])
+m4trace:configure.ac:214: -1- m4_pattern_allow([^PNG_LIBS$])
+m4trace:configure.ac:224: -1- m4_pattern_allow([^JPEG_FLAGS$])
+m4trace:configure.ac:227: -1- m4_pattern_allow([^JPEG_LIBS$])
+m4trace:configure.ac:229: -1- AM_CONDITIONAL([USE_JPEG], [(test x$all = xtrue || test x$jpeg = xtrue)])
+m4trace:configure.ac:229: -1- m4_pattern_allow([^USE_JPEG_TRUE$])
+m4trace:configure.ac:229: -1- m4_pattern_allow([^USE_JPEG_FALSE$])
+m4trace:configure.ac:229: -1- _AM_SUBST_NOTMAKE([USE_JPEG_TRUE])
+m4trace:configure.ac:229: -1- _AM_SUBST_NOTMAKE([USE_JPEG_FALSE])
+m4trace:configure.ac:240: -1- m4_pattern_allow([^FLTK_FLAGS$])
+m4trace:configure.ac:241: -1- m4_pattern_allow([^FLTK_LIBS$])
+m4trace:configure.ac:250: -1- AM_CONDITIONAL([USE_FLTK], [test x$test_fltk = xtrue])
+m4trace:configure.ac:250: -1- m4_pattern_allow([^USE_FLTK_TRUE$])
+m4trace:configure.ac:250: -1- m4_pattern_allow([^USE_FLTK_FALSE$])
+m4trace:configure.ac:250: -1- _AM_SUBST_NOTMAKE([USE_FLTK_TRUE])
+m4trace:configure.ac:250: -1- _AM_SUBST_NOTMAKE([USE_FLTK_FALSE])
+m4trace:configure.ac:262: -1- m4_pattern_allow([^WX_FLAGS$])
+m4trace:configure.ac:263: -1- m4_pattern_allow([^WX_LIBS$])
+m4trace:configure.ac:272: -1- AM_CONDITIONAL([USE_WX], [test x$test_wx = xtrue])
+m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_WX_TRUE$])
+m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_WX_FALSE$])
+m4trace:configure.ac:272: -1- _AM_SUBST_NOTMAKE([USE_WX_TRUE])
+m4trace:configure.ac:272: -1- _AM_SUBST_NOTMAKE([USE_WX_FALSE])
+m4trace:configure.ac:282: -1- AT_WITH_QT
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QMAKE$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QMAKE$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^MOC$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^MOC$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^UIC$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^UIC$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^RCC$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^RCC$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_PATH$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^TMPDIR$])
+m4trace:configure.ac:282: -1- _AT_TWEAK_PRO_FILE([CONFIG], [+release])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_VERSION_MAJOR$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_DEFINES$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CFLAGS$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CXXFLAGS$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_INCPATH$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CPPFLAGS$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LFLAGS$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LDFLAGS$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LIBS$])
+m4trace:configure.ac:283: -1- AT_REQUIRE_QT_VERSION([4.3])
+m4trace:configure.ac:283: -1- m4_pattern_allow([^QT_VERSION$])
+m4trace:configure.ac:286: -1- AM_CONDITIONAL([USE_QT], [test x$test_qt = xtrue])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^USE_QT_TRUE$])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^USE_QT_FALSE$])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([USE_QT_TRUE])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([USE_QT_FALSE])
+m4trace:configure.ac:296: -1- m4_pattern_allow([^PYTHON_HEADERS$])
+m4trace:configure.ac:297: -1- m4_pattern_allow([^HAVE_SWIG$])
+m4trace:configure.ac:300: -1- AM_PATH_PYTHON([])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON$])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_VERSION$])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_PREFIX$])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_PLATFORM$])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^pythondir$])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^pkgpythondir$])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^pyexecdir$])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^pkgpyexecdir$])
+m4trace:configure.ac:306: -1- AM_CONDITIONAL([USE_PYTHON], [test x$test_python = xtrue ])
+m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PYTHON_TRUE$])
+m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PYTHON_FALSE$])
+m4trace:configure.ac:306: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_TRUE])
+m4trace:configure.ac:306: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_FALSE])
+m4trace:configure.ac:316: -1- m4_pattern_allow([^OCTAVE$])
+m4trace:configure.ac:322: -1- m4_pattern_allow([^OCTAVE_ARCH$])
+m4trace:configure.ac:323: -1- m4_pattern_allow([^OCTAVE_INCFLAGS$])
+m4trace:configure.ac:326: -1- AM_CONDITIONAL([USE_OCTAVE], [test x$test_octave = xtrue ])
+m4trace:configure.ac:326: -1- m4_pattern_allow([^USE_OCTAVE_TRUE$])
+m4trace:configure.ac:326: -1- m4_pattern_allow([^USE_OCTAVE_FALSE$])
+m4trace:configure.ac:326: -1- _AM_SUBST_NOTMAKE([USE_OCTAVE_TRUE])
+m4trace:configure.ac:326: -1- _AM_SUBST_NOTMAKE([USE_OCTAVE_FALSE])
+m4trace:configure.ac:335: -1- AM_CONDITIONAL([USE_TESTIO], [test x$testio = xtrue ])
+m4trace:configure.ac:335: -1- m4_pattern_allow([^USE_TESTIO_TRUE$])
+m4trace:configure.ac:335: -1- m4_pattern_allow([^USE_TESTIO_FALSE$])
+m4trace:configure.ac:335: -1- _AM_SUBST_NOTMAKE([USE_TESTIO_TRUE])
+m4trace:configure.ac:335: -1- _AM_SUBST_NOTMAKE([USE_TESTIO_FALSE])
+m4trace:configure.ac:347: -1- AM_CONDITIONAL([USE_DOCS], [(test x$docs = xtrue || test x$all = xtrue) ])
+m4trace:configure.ac:347: -1- m4_pattern_allow([^USE_DOCS_TRUE$])
+m4trace:configure.ac:347: -1- m4_pattern_allow([^USE_DOCS_FALSE$])
+m4trace:configure.ac:347: -1- _AM_SUBST_NOTMAKE([USE_DOCS_TRUE])
+m4trace:configure.ac:347: -1- _AM_SUBST_NOTMAKE([USE_DOCS_FALSE])
+m4trace:configure.ac:350: -1- m4_pattern_allow([^AM_CXXFLAGS$])
+m4trace:configure.ac:361: -1- m4_pattern_allow([^LIB@&t at OBJS$])
+m4trace:configure.ac:361: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.ac:361: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])
+m4trace:configure.ac:361: -1- m4_pattern_allow([^am__EXEEXT_TRUE$])
+m4trace:configure.ac:361: -1- m4_pattern_allow([^am__EXEEXT_FALSE$])
+m4trace:configure.ac:361: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE])
+m4trace:configure.ac:361: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE])
+m4trace:configure.ac:361: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"])
+m4trace:configure.ac:361: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS
+m4trace:configure.ac:361: -1- _LT_PROG_LTMAIN
diff --git a/autom4te.cache/traces.1 b/autom4te.cache/traces.1
new file mode 100644
index 0000000..0f93fd8
--- /dev/null
+++ b/autom4te.cache/traces.1
@@ -0,0 +1,931 @@
+m4trace:aclocal.m4:1157: -1- m4_include([config/autotroll.m4])
+m4trace:config/autotroll.m4:70: -1- m4_pattern_forbid([^AT_])
+m4trace:config/autotroll.m4:71: -1- m4_pattern_forbid([^_AT_])
+m4trace:aclocal.m4:1158: -1- m4_include([config/libtool.m4])
+m4trace:aclocal.m4:1159: -1- m4_include([config/ltoptions.m4])
+m4trace:aclocal.m4:1160: -1- m4_include([config/ltsugar.m4])
+m4trace:aclocal.m4:1161: -1- m4_include([config/ltversion.m4])
+m4trace:aclocal.m4:1162: -1- m4_include([config/lt~obsolete.m4])
+m4trace:configure.ac:1: -1- AC_INIT([mathgl], [1.10], [mathgl.abalakin at gmail.com])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.ac:1: -1- AC_SUBST([SHELL])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([SHELL])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$])
+m4trace:configure.ac:1: -1- AC_SUBST([PATH_SEPARATOR])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_NAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_STRING])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL],       ['AC_PACKAGE_URL'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_URL])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- AC_SUBST([exec_prefix], [NONE])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([exec_prefix])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$])
+m4trace:configure.ac:1: -1- AC_SUBST([prefix], [NONE])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([prefix])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$])
+m4trace:configure.ac:1: -1- AC_SUBST([program_transform_name], [s,x,x,])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([program_transform_name])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$])
+m4trace:configure.ac:1: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([bindir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sbindir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$])
+m4trace:configure.ac:1: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([libexecdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([datarootdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([datadir], ['${datarootdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([datadir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sysconfdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sharedstatedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([localstatedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([includedir], ['${prefix}/include'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([includedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([oldincludedir], ['/usr/include'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([oldincludedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
+				     ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
+				     ['${datarootdir}/doc/${PACKAGE}'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([docdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([infodir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$])
+m4trace:configure.ac:1: -1- AC_SUBST([htmldir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([htmldir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$])
+m4trace:configure.ac:1: -1- AC_SUBST([dvidir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([dvidir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$])
+m4trace:configure.ac:1: -1- AC_SUBST([pdfdir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([pdfdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([psdir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([psdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([libdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([localedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([mandir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
+@%:@undef PACKAGE_NAME])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
+@%:@undef PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
+@%:@undef PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
+@%:@undef PACKAGE_STRING])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
+@%:@undef PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */
+@%:@undef PACKAGE_URL])
+m4trace:configure.ac:1: -1- AC_SUBST([DEFS])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([DEFS])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_C])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_C])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_N])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_N])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_T])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_T])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$])
+m4trace:configure.ac:1: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:1: -1- AC_SUBST([build_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([build_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$])
+m4trace:configure.ac:1: -1- AC_SUBST([host_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([host_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$])
+m4trace:configure.ac:1: -1- AC_SUBST([target_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([target_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$])
+m4trace:configure.ac:4: -1- AC_SUBST([MGL_RELEASE])
+m4trace:configure.ac:4: -1- AC_SUBST_TRACE([MGL_RELEASE])
+m4trace:configure.ac:4: -1- m4_pattern_allow([^MGL_RELEASE$])
+m4trace:configure.ac:7: -1- AC_CONFIG_AUX_DIR([config])
+m4trace:configure.ac:9: -1- AC_CONFIG_HEADERS([include/mgl/config.h])
+m4trace:configure.ac:21: -1- AC_SUBST([MGL_CURRENT])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([MGL_CURRENT])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^MGL_CURRENT$])
+m4trace:configure.ac:22: -1- AC_SUBST([MGL_REVISION])
+m4trace:configure.ac:22: -1- AC_SUBST_TRACE([MGL_REVISION])
+m4trace:configure.ac:22: -1- m4_pattern_allow([^MGL_REVISION$])
+m4trace:configure.ac:23: -1- AC_SUBST([MGL_AGE])
+m4trace:configure.ac:23: -1- AC_SUBST_TRACE([MGL_AGE])
+m4trace:configure.ac:23: -1- m4_pattern_allow([^MGL_AGE$])
+m4trace:configure.ac:25: -1- AM_INIT_AUTOMAKE
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
+m4trace:configure.ac:25: -1- AM_AUTOMAKE_VERSION([1.11.1])
+m4trace:configure.ac:25: -1- AC_REQUIRE_AUX_FILE([install-sh])
+m4trace:configure.ac:25: -1- AC_SUBST([INSTALL_PROGRAM])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
+m4trace:configure.ac:25: -1- AC_SUBST([INSTALL_SCRIPT])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
+m4trace:configure.ac:25: -1- AC_SUBST([INSTALL_DATA])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([INSTALL_DATA])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_DATA$])
+m4trace:configure.ac:25: -1- AC_SUBST([am__isrc], [' -I$(srcdir)'])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([am__isrc])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^am__isrc$])
+m4trace:configure.ac:25: -1- _AM_SUBST_NOTMAKE([am__isrc])
+m4trace:configure.ac:25: -1- AC_SUBST([CYGPATH_W])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([CYGPATH_W])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^CYGPATH_W$])
+m4trace:configure.ac:25: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([PACKAGE])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:25: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([VERSION])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:25: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:25: -1- AH_OUTPUT([PACKAGE], [/* Name of package */
+@%:@undef PACKAGE])
+m4trace:configure.ac:25: -1- AC_DEFINE_TRACE_LITERAL([VERSION])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:25: -1- AH_OUTPUT([VERSION], [/* Version number of package */
+@%:@undef VERSION])
+m4trace:configure.ac:25: -1- AC_REQUIRE_AUX_FILE([missing])
+m4trace:configure.ac:25: -1- AC_SUBST([ACLOCAL])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([ACLOCAL])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^ACLOCAL$])
+m4trace:configure.ac:25: -1- AC_SUBST([AUTOCONF])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AUTOCONF])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOCONF$])
+m4trace:configure.ac:25: -1- AC_SUBST([AUTOMAKE])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AUTOMAKE])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOMAKE$])
+m4trace:configure.ac:25: -1- AC_SUBST([AUTOHEADER])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AUTOHEADER])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOHEADER$])
+m4trace:configure.ac:25: -1- AC_SUBST([MAKEINFO])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([MAKEINFO])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^MAKEINFO$])
+m4trace:configure.ac:25: -1- AC_SUBST([install_sh])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([install_sh])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^install_sh$])
+m4trace:configure.ac:25: -1- AC_SUBST([STRIP])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([STRIP])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:25: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
+m4trace:configure.ac:25: -1- AC_REQUIRE_AUX_FILE([install-sh])
+m4trace:configure.ac:25: -1- AC_SUBST([MKDIR_P])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([MKDIR_P])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^MKDIR_P$])
+m4trace:configure.ac:25: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([mkdir_p])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^mkdir_p$])
+m4trace:configure.ac:25: -1- AC_SUBST([AWK])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AWK])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AWK$])
+m4trace:configure.ac:25: -1- AC_SUBST([SET_MAKE])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([SET_MAKE])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:25: -1- AC_SUBST([am__leading_dot])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([am__leading_dot])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^am__leading_dot$])
+m4trace:configure.ac:25: -1- AC_SUBST([AMTAR])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AMTAR])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^AMTAR$])
+m4trace:configure.ac:25: -1- AC_SUBST([am__tar])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([am__tar])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^am__tar$])
+m4trace:configure.ac:25: -1- AC_SUBST([am__untar])
+m4trace:configure.ac:25: -1- AC_SUBST_TRACE([am__untar])
+m4trace:configure.ac:25: -1- m4_pattern_allow([^am__untar$])
+m4trace:configure.ac:27: -1- AC_SUBST([CC])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- AC_SUBST([CFLAGS])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CFLAGS])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CFLAGS$])
+m4trace:configure.ac:27: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([LDFLAGS])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:27: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:27: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:27: -1- AC_SUBST([CC])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- AC_SUBST([CC])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- AC_SUBST([CC])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- AC_SUBST([CC])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:27: -1- AC_SUBST([ac_ct_CC])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([ac_ct_CC])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^ac_ct_CC$])
+m4trace:configure.ac:27: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([EXEEXT])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^EXEEXT$])
+m4trace:configure.ac:27: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([OBJEXT])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^OBJEXT$])
+m4trace:configure.ac:27: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([DEPDIR])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^DEPDIR$])
+m4trace:configure.ac:27: -1- AC_SUBST([am__include])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([am__include])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^am__include$])
+m4trace:configure.ac:27: -1- AC_SUBST([am__quote])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([am__quote])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^am__quote$])
+m4trace:configure.ac:27: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+m4trace:configure.ac:27: -1- AC_SUBST([AMDEP_TRUE])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AMDEP_TRUE])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEP_TRUE$])
+m4trace:configure.ac:27: -1- AC_SUBST([AMDEP_FALSE])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AMDEP_FALSE])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEP_FALSE$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE])
+m4trace:configure.ac:27: -1- AC_SUBST([AMDEPBACKSLASH])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AMDEPBACKSLASH])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])
+m4trace:configure.ac:27: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CCDEPMODE])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^CCDEPMODE$])
+m4trace:configure.ac:27: -1- AM_CONDITIONAL([am__fastdepCC], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:27: -1- AC_SUBST([am__fastdepCC_TRUE])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
+m4trace:configure.ac:27: -1- AC_SUBST([am__fastdepCC_FALSE])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
+m4trace:configure.ac:28: -1- AC_SUBST([CXX])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CXX])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:28: -1- AC_SUBST([CXXFLAGS])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CXXFLAGS])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CXXFLAGS$])
+m4trace:configure.ac:28: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([LDFLAGS])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:28: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:28: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:28: -1- AC_SUBST([CXX])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CXX])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:28: -1- AC_SUBST([ac_ct_CXX])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([ac_ct_CXX])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^ac_ct_CXX$])
+m4trace:configure.ac:28: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CXXDEPMODE])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^CXXDEPMODE$])
+m4trace:configure.ac:28: -1- AM_CONDITIONAL([am__fastdepCXX], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:28: -1- AC_SUBST([am__fastdepCXX_TRUE])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
+m4trace:configure.ac:28: -1- AC_SUBST([am__fastdepCXX_FALSE])
+m4trace:configure.ac:28: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:28: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
+m4trace:configure.ac:28: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:28: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:31: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete.
+You should run autoupdate.], [config/ltoptions.m4:145: AC_LIBTOOL_WIN32_DLL is expanded from...
+configure.ac:31: the top level])
+m4trace:configure.ac:31: -1- AC_CANONICAL_HOST
+m4trace:configure.ac:31: -1- AC_CANONICAL_BUILD
+m4trace:configure.ac:31: -1- AC_REQUIRE_AUX_FILE([config.sub])
+m4trace:configure.ac:31: -1- AC_REQUIRE_AUX_FILE([config.guess])
+m4trace:configure.ac:31: -1- AC_SUBST([build], [$ac_cv_build])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([build])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^build$])
+m4trace:configure.ac:31: -1- AC_SUBST([build_cpu], [$[1]])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([build_cpu])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^build_cpu$])
+m4trace:configure.ac:31: -1- AC_SUBST([build_vendor], [$[2]])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([build_vendor])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^build_vendor$])
+m4trace:configure.ac:31: -1- AC_SUBST([build_os])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([build_os])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^build_os$])
+m4trace:configure.ac:31: -1- AC_SUBST([host], [$ac_cv_host])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([host])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^host$])
+m4trace:configure.ac:31: -1- AC_SUBST([host_cpu], [$[1]])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([host_cpu])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^host_cpu$])
+m4trace:configure.ac:31: -1- AC_SUBST([host_vendor], [$[2]])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([host_vendor])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^host_vendor$])
+m4trace:configure.ac:31: -1- AC_SUBST([host_os])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([host_os])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^host_os$])
+m4trace:configure.ac:31: -1- AC_SUBST([AS])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AS])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^AS$])
+m4trace:configure.ac:31: -1- AC_SUBST([DLLTOOL])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([DLLTOOL])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^DLLTOOL$])
+m4trace:configure.ac:31: -1- AC_SUBST([OBJDUMP])
+m4trace:configure.ac:31: -1- AC_SUBST_TRACE([OBJDUMP])
+m4trace:configure.ac:31: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:31: -1- _m4_warn([obsolete], [AC_LIBTOOL_WIN32_DLL: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.], [config/ltoptions.m4:145: AC_LIBTOOL_WIN32_DLL is expanded from...
+configure.ac:31: the top level])
+m4trace:configure.ac:32: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete.
+You should run autoupdate.], [config/ltoptions.m4:110: AC_LIBTOOL_DLOPEN is expanded from...
+configure.ac:32: the top level])
+m4trace:configure.ac:32: -1- _m4_warn([obsolete], [AC_LIBTOOL_DLOPEN: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.], [config/ltoptions.m4:110: AC_LIBTOOL_DLOPEN is expanded from...
+configure.ac:32: the top level])
+m4trace:configure.ac:33: -1- AC_PROG_LIBTOOL
+m4trace:configure.ac:33: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete.
+You should run autoupdate.], [config/libtool.m4:102: AC_PROG_LIBTOOL is expanded from...
+configure.ac:33: the top level])
+m4trace:configure.ac:33: -1- LT_INIT
+m4trace:configure.ac:33: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])
+m4trace:configure.ac:33: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])
+m4trace:configure.ac:33: -1- AC_SUBST([LIBTOOL])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LIBTOOL])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LIBTOOL$])
+m4trace:configure.ac:33: -1- AC_SUBST([SED])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([SED])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^SED$])
+m4trace:configure.ac:33: -1- AC_SUBST([GREP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([GREP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:33: -1- AC_SUBST([EGREP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([EGREP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^EGREP$])
+m4trace:configure.ac:33: -1- AC_SUBST([FGREP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([FGREP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^FGREP$])
+m4trace:configure.ac:33: -1- AC_SUBST([GREP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([GREP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:33: -1- AC_SUBST([LD])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LD])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:33: -1- AC_SUBST([DUMPBIN])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([DUMPBIN])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:33: -1- AC_SUBST([ac_ct_DUMPBIN])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^ac_ct_DUMPBIN$])
+m4trace:configure.ac:33: -1- AC_SUBST([DUMPBIN])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([DUMPBIN])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:33: -1- AC_SUBST([NM])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([NM])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^NM$])
+m4trace:configure.ac:33: -1- AC_SUBST([LN_S], [$as_ln_s])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LN_S])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LN_S$])
+m4trace:configure.ac:33: -1- AC_SUBST([OBJDUMP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([OBJDUMP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:33: -1- AC_SUBST([OBJDUMP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([OBJDUMP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:33: -1- AC_SUBST([AR])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([AR])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:33: -1- AC_SUBST([STRIP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([STRIP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:33: -1- AC_SUBST([RANLIB])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([RANLIB])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^RANLIB$])
+m4trace:configure.ac:33: -1- m4_pattern_allow([LT_OBJDIR])
+m4trace:configure.ac:33: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LT_OBJDIR$])
+m4trace:configure.ac:33: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+@%:@undef LT_OBJDIR])
+m4trace:configure.ac:33: -1- AC_SUBST([lt_ECHO])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([lt_ECHO])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^lt_ECHO$])
+m4trace:configure.ac:33: -1- LT_SUPPORTED_TAG([CC])
+m4trace:configure.ac:33: -1- AC_SUBST([DSYMUTIL])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([DSYMUTIL])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^DSYMUTIL$])
+m4trace:configure.ac:33: -1- AC_SUBST([NMEDIT])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([NMEDIT])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^NMEDIT$])
+m4trace:configure.ac:33: -1- AC_SUBST([LIPO])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LIPO])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LIPO$])
+m4trace:configure.ac:33: -1- AC_SUBST([OTOOL])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([OTOOL])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^OTOOL$])
+m4trace:configure.ac:33: -1- AC_SUBST([OTOOL64])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([OTOOL64])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^OTOOL64$])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
+@%:@undef HAVE_DLFCN_H])
+m4trace:configure.ac:33: -1- AC_SUBST([CPP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:33: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:33: -1- AC_SUBST([CPP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:33: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:33: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
+@%:@undef STDC_HEADERS])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
+@%:@undef HAVE_SYS_TYPES_H])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
+@%:@undef HAVE_SYS_STAT_H])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+@%:@undef HAVE_STDLIB_H])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
+@%:@undef HAVE_STRING_H])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
+@%:@undef HAVE_MEMORY_H])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
+@%:@undef HAVE_STRINGS_H])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
+@%:@undef HAVE_INTTYPES_H])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
+@%:@undef HAVE_STDINT_H])
+m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+@%:@undef HAVE_UNISTD_H])
+m4trace:configure.ac:33: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^HAVE_DLFCN_H$])
+m4trace:configure.ac:33: -1- LT_SUPPORTED_TAG([CXX])
+m4trace:configure.ac:33: -1- AC_SUBST([CXX])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXX])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:33: -1- AC_SUBST([CXXFLAGS])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXXFLAGS])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXFLAGS$])
+m4trace:configure.ac:33: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LDFLAGS])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:33: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:33: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:33: -1- AC_SUBST([CXX])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXX])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:33: -1- AC_SUBST([ac_ct_CXX])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([ac_ct_CXX])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^ac_ct_CXX$])
+m4trace:configure.ac:33: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXXDEPMODE])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXDEPMODE$])
+m4trace:configure.ac:33: -1- AM_CONDITIONAL([am__fastdepCXX], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:33: -1- AC_SUBST([am__fastdepCXX_TRUE])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
+m4trace:configure.ac:33: -1- AC_SUBST([am__fastdepCXX_FALSE])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
+m4trace:configure.ac:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:33: -1- AC_SUBST([CXXCPP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXXCPP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:33: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:33: -1- AC_SUBST([CXXCPP])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXXCPP])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:33: -1- AC_SUBST([LD])
+m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LD])
+m4trace:configure.ac:33: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:44: -1- AC_DEFINE_TRACE_LITERAL([MGL_USE_DOUBLE])
+m4trace:configure.ac:44: -1- m4_pattern_allow([^MGL_USE_DOUBLE$])
+m4trace:configure.ac:44: -1- AH_OUTPUT([MGL_USE_DOUBLE], [/* This define enables double precision in MathGL */
+@%:@undef MGL_USE_DOUBLE])
+m4trace:configure.ac:46: -1- AC_DEFINE_TRACE_LITERAL([MGL_USE_DOUBLE])
+m4trace:configure.ac:46: -1- m4_pattern_allow([^MGL_USE_DOUBLE$])
+m4trace:configure.ac:46: -1- AH_OUTPUT([MGL_USE_DOUBLE], [/* This define enables double precision in MathGL */
+@%:@undef MGL_USE_DOUBLE])
+m4trace:configure.ac:72: -1- AC_SUBST([PTHREAD_FLAGS])
+m4trace:configure.ac:72: -1- AC_SUBST_TRACE([PTHREAD_FLAGS])
+m4trace:configure.ac:72: -1- m4_pattern_allow([^PTHREAD_FLAGS$])
+m4trace:configure.ac:75: -1- AC_SUBST([PTHREAD_LIBS])
+m4trace:configure.ac:75: -1- AC_SUBST_TRACE([PTHREAD_LIBS])
+m4trace:configure.ac:75: -1- m4_pattern_allow([^PTHREAD_LIBS$])
+m4trace:configure.ac:77: -1- AM_CONDITIONAL([USE_PTHREAD], [test x$pthread = xtrue])
+m4trace:configure.ac:77: -1- AC_SUBST([USE_PTHREAD_TRUE])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([USE_PTHREAD_TRUE])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^USE_PTHREAD_TRUE$])
+m4trace:configure.ac:77: -1- AC_SUBST([USE_PTHREAD_FALSE])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([USE_PTHREAD_FALSE])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^USE_PTHREAD_FALSE$])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([USE_PTHREAD_TRUE])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([USE_PTHREAD_FALSE])
+m4trace:configure.ac:89: -1- AC_SUBST([GSL_FLAGS])
+m4trace:configure.ac:89: -1- AC_SUBST_TRACE([GSL_FLAGS])
+m4trace:configure.ac:89: -1- m4_pattern_allow([^GSL_FLAGS$])
+m4trace:configure.ac:90: -1- AC_SUBST([GSL_LIBS])
+m4trace:configure.ac:90: -1- AC_SUBST_TRACE([GSL_LIBS])
+m4trace:configure.ac:90: -1- m4_pattern_allow([^GSL_LIBS$])
+m4trace:configure.ac:100: -1- AC_SUBST([GSL_FLAGS])
+m4trace:configure.ac:100: -1- AC_SUBST_TRACE([GSL_FLAGS])
+m4trace:configure.ac:100: -1- m4_pattern_allow([^GSL_FLAGS$])
+m4trace:configure.ac:102: -1- AM_CONDITIONAL([USE_GSL], [test x$test_gsl = xtrue])
+m4trace:configure.ac:102: -1- AC_SUBST([USE_GSL_TRUE])
+m4trace:configure.ac:102: -1- AC_SUBST_TRACE([USE_GSL_TRUE])
+m4trace:configure.ac:102: -1- m4_pattern_allow([^USE_GSL_TRUE$])
+m4trace:configure.ac:102: -1- AC_SUBST([USE_GSL_FALSE])
+m4trace:configure.ac:102: -1- AC_SUBST_TRACE([USE_GSL_FALSE])
+m4trace:configure.ac:102: -1- m4_pattern_allow([^USE_GSL_FALSE$])
+m4trace:configure.ac:102: -1- _AM_SUBST_NOTMAKE([USE_GSL_TRUE])
+m4trace:configure.ac:102: -1- _AM_SUBST_NOTMAKE([USE_GSL_FALSE])
+m4trace:configure.ac:115: -1- AC_SUBST([GL_LIBS])
+m4trace:configure.ac:115: -1- AC_SUBST_TRACE([GL_LIBS])
+m4trace:configure.ac:115: -1- m4_pattern_allow([^GL_LIBS$])
+m4trace:configure.ac:118: -1- AC_SUBST([GLUT_LIBS])
+m4trace:configure.ac:118: -1- AC_SUBST_TRACE([GLUT_LIBS])
+m4trace:configure.ac:118: -1- m4_pattern_allow([^GLUT_LIBS$])
+m4trace:configure.ac:125: -1- AC_SUBST([GL_LIBS])
+m4trace:configure.ac:125: -1- AC_SUBST_TRACE([GL_LIBS])
+m4trace:configure.ac:125: -1- m4_pattern_allow([^GL_LIBS$])
+m4trace:configure.ac:128: -1- AC_SUBST([GLUT_FLAGS])
+m4trace:configure.ac:128: -1- AC_SUBST_TRACE([GLUT_FLAGS])
+m4trace:configure.ac:128: -1- m4_pattern_allow([^GLUT_FLAGS$])
+m4trace:configure.ac:130: -1- AC_SUBST([GLUT_LIBS])
+m4trace:configure.ac:130: -1- AC_SUBST_TRACE([GLUT_LIBS])
+m4trace:configure.ac:130: -1- m4_pattern_allow([^GLUT_LIBS$])
+m4trace:configure.ac:137: -1- AC_SUBST([GL_LIBS])
+m4trace:configure.ac:137: -1- AC_SUBST_TRACE([GL_LIBS])
+m4trace:configure.ac:137: -1- m4_pattern_allow([^GL_LIBS$])
+m4trace:configure.ac:140: -1- AC_SUBST([GLUT_FLAGS])
+m4trace:configure.ac:140: -1- AC_SUBST_TRACE([GLUT_FLAGS])
+m4trace:configure.ac:140: -1- m4_pattern_allow([^GLUT_FLAGS$])
+m4trace:configure.ac:142: -1- AC_SUBST([GLUT_LIBS])
+m4trace:configure.ac:142: -1- AC_SUBST_TRACE([GLUT_LIBS])
+m4trace:configure.ac:142: -1- m4_pattern_allow([^GLUT_LIBS$])
+m4trace:configure.ac:147: -1- AM_CONDITIONAL([USE_GLUT], [(test x$all = xtrue || test x$glut = xtrue)])
+m4trace:configure.ac:147: -1- AC_SUBST([USE_GLUT_TRUE])
+m4trace:configure.ac:147: -1- AC_SUBST_TRACE([USE_GLUT_TRUE])
+m4trace:configure.ac:147: -1- m4_pattern_allow([^USE_GLUT_TRUE$])
+m4trace:configure.ac:147: -1- AC_SUBST([USE_GLUT_FALSE])
+m4trace:configure.ac:147: -1- AC_SUBST_TRACE([USE_GLUT_FALSE])
+m4trace:configure.ac:147: -1- m4_pattern_allow([^USE_GLUT_FALSE$])
+m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([USE_GLUT_TRUE])
+m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([USE_GLUT_FALSE])
+m4trace:configure.ac:177: -1- AC_SUBST([HDF5_FLAGS])
+m4trace:configure.ac:177: -1- AC_SUBST_TRACE([HDF5_FLAGS])
+m4trace:configure.ac:177: -1- m4_pattern_allow([^HDF5_FLAGS$])
+m4trace:configure.ac:179: -1- AC_SUBST([HDF5_LIBS])
+m4trace:configure.ac:179: -1- AC_SUBST_TRACE([HDF5_LIBS])
+m4trace:configure.ac:179: -1- m4_pattern_allow([^HDF5_LIBS$])
+m4trace:configure.ac:181: -1- AM_CONDITIONAL([USE_HDF5], [(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue)])
+m4trace:configure.ac:181: -1- AC_SUBST([USE_HDF5_TRUE])
+m4trace:configure.ac:181: -1- AC_SUBST_TRACE([USE_HDF5_TRUE])
+m4trace:configure.ac:181: -1- m4_pattern_allow([^USE_HDF5_TRUE$])
+m4trace:configure.ac:181: -1- AC_SUBST([USE_HDF5_FALSE])
+m4trace:configure.ac:181: -1- AC_SUBST_TRACE([USE_HDF5_FALSE])
+m4trace:configure.ac:181: -1- m4_pattern_allow([^USE_HDF5_FALSE$])
+m4trace:configure.ac:181: -1- _AM_SUBST_NOTMAKE([USE_HDF5_TRUE])
+m4trace:configure.ac:181: -1- _AM_SUBST_NOTMAKE([USE_HDF5_FALSE])
+m4trace:configure.ac:193: -1- AC_SUBST([HDF4_FLAGS])
+m4trace:configure.ac:193: -1- AC_SUBST_TRACE([HDF4_FLAGS])
+m4trace:configure.ac:193: -1- m4_pattern_allow([^HDF4_FLAGS$])
+m4trace:configure.ac:194: -1- AC_SUBST([HDF4_LIBS])
+m4trace:configure.ac:194: -1- AC_SUBST_TRACE([HDF4_LIBS])
+m4trace:configure.ac:194: -1- m4_pattern_allow([^HDF4_LIBS$])
+m4trace:configure.ac:196: -1- AM_CONDITIONAL([USE_HDF4], [(test x$all = xtrue || test x$hdf4 = xtrue)])
+m4trace:configure.ac:196: -1- AC_SUBST([USE_HDF4_TRUE])
+m4trace:configure.ac:196: -1- AC_SUBST_TRACE([USE_HDF4_TRUE])
+m4trace:configure.ac:196: -1- m4_pattern_allow([^USE_HDF4_TRUE$])
+m4trace:configure.ac:196: -1- AC_SUBST([USE_HDF4_FALSE])
+m4trace:configure.ac:196: -1- AC_SUBST_TRACE([USE_HDF4_FALSE])
+m4trace:configure.ac:196: -1- m4_pattern_allow([^USE_HDF4_FALSE$])
+m4trace:configure.ac:196: -1- _AM_SUBST_NOTMAKE([USE_HDF4_TRUE])
+m4trace:configure.ac:196: -1- _AM_SUBST_NOTMAKE([USE_HDF4_FALSE])
+m4trace:configure.ac:205: -1- AC_SUBST([GIF_FLAGS])
+m4trace:configure.ac:205: -1- AC_SUBST_TRACE([GIF_FLAGS])
+m4trace:configure.ac:205: -1- m4_pattern_allow([^GIF_FLAGS$])
+m4trace:configure.ac:208: -1- AC_SUBST([GIF_LIBS])
+m4trace:configure.ac:208: -1- AC_SUBST_TRACE([GIF_LIBS])
+m4trace:configure.ac:208: -1- m4_pattern_allow([^GIF_LIBS$])
+m4trace:configure.ac:210: -1- AM_CONDITIONAL([USE_GIF], [(test x$all = xtrue || test x$gif = xtrue)])
+m4trace:configure.ac:210: -1- AC_SUBST([USE_GIF_TRUE])
+m4trace:configure.ac:210: -1- AC_SUBST_TRACE([USE_GIF_TRUE])
+m4trace:configure.ac:210: -1- m4_pattern_allow([^USE_GIF_TRUE$])
+m4trace:configure.ac:210: -1- AC_SUBST([USE_GIF_FALSE])
+m4trace:configure.ac:210: -1- AC_SUBST_TRACE([USE_GIF_FALSE])
+m4trace:configure.ac:210: -1- m4_pattern_allow([^USE_GIF_FALSE$])
+m4trace:configure.ac:210: -1- _AM_SUBST_NOTMAKE([USE_GIF_TRUE])
+m4trace:configure.ac:210: -1- _AM_SUBST_NOTMAKE([USE_GIF_FALSE])
+m4trace:configure.ac:214: -1- AC_SUBST([PNG_LIBS])
+m4trace:configure.ac:214: -1- AC_SUBST_TRACE([PNG_LIBS])
+m4trace:configure.ac:214: -1- m4_pattern_allow([^PNG_LIBS$])
+m4trace:configure.ac:224: -1- AC_SUBST([JPEG_FLAGS])
+m4trace:configure.ac:224: -1- AC_SUBST_TRACE([JPEG_FLAGS])
+m4trace:configure.ac:224: -1- m4_pattern_allow([^JPEG_FLAGS$])
+m4trace:configure.ac:227: -1- AC_SUBST([JPEG_LIBS])
+m4trace:configure.ac:227: -1- AC_SUBST_TRACE([JPEG_LIBS])
+m4trace:configure.ac:227: -1- m4_pattern_allow([^JPEG_LIBS$])
+m4trace:configure.ac:229: -1- AM_CONDITIONAL([USE_JPEG], [(test x$all = xtrue || test x$jpeg = xtrue)])
+m4trace:configure.ac:229: -1- AC_SUBST([USE_JPEG_TRUE])
+m4trace:configure.ac:229: -1- AC_SUBST_TRACE([USE_JPEG_TRUE])
+m4trace:configure.ac:229: -1- m4_pattern_allow([^USE_JPEG_TRUE$])
+m4trace:configure.ac:229: -1- AC_SUBST([USE_JPEG_FALSE])
+m4trace:configure.ac:229: -1- AC_SUBST_TRACE([USE_JPEG_FALSE])
+m4trace:configure.ac:229: -1- m4_pattern_allow([^USE_JPEG_FALSE$])
+m4trace:configure.ac:229: -1- _AM_SUBST_NOTMAKE([USE_JPEG_TRUE])
+m4trace:configure.ac:229: -1- _AM_SUBST_NOTMAKE([USE_JPEG_FALSE])
+m4trace:configure.ac:240: -1- AC_SUBST([FLTK_FLAGS])
+m4trace:configure.ac:240: -1- AC_SUBST_TRACE([FLTK_FLAGS])
+m4trace:configure.ac:240: -1- m4_pattern_allow([^FLTK_FLAGS$])
+m4trace:configure.ac:241: -1- AC_SUBST([FLTK_LIBS])
+m4trace:configure.ac:241: -1- AC_SUBST_TRACE([FLTK_LIBS])
+m4trace:configure.ac:241: -1- m4_pattern_allow([^FLTK_LIBS$])
+m4trace:configure.ac:250: -1- AM_CONDITIONAL([USE_FLTK], [test x$test_fltk = xtrue])
+m4trace:configure.ac:250: -1- AC_SUBST([USE_FLTK_TRUE])
+m4trace:configure.ac:250: -1- AC_SUBST_TRACE([USE_FLTK_TRUE])
+m4trace:configure.ac:250: -1- m4_pattern_allow([^USE_FLTK_TRUE$])
+m4trace:configure.ac:250: -1- AC_SUBST([USE_FLTK_FALSE])
+m4trace:configure.ac:250: -1- AC_SUBST_TRACE([USE_FLTK_FALSE])
+m4trace:configure.ac:250: -1- m4_pattern_allow([^USE_FLTK_FALSE$])
+m4trace:configure.ac:250: -1- _AM_SUBST_NOTMAKE([USE_FLTK_TRUE])
+m4trace:configure.ac:250: -1- _AM_SUBST_NOTMAKE([USE_FLTK_FALSE])
+m4trace:configure.ac:262: -1- AC_SUBST([WX_FLAGS])
+m4trace:configure.ac:262: -1- AC_SUBST_TRACE([WX_FLAGS])
+m4trace:configure.ac:262: -1- m4_pattern_allow([^WX_FLAGS$])
+m4trace:configure.ac:263: -1- AC_SUBST([WX_LIBS])
+m4trace:configure.ac:263: -1- AC_SUBST_TRACE([WX_LIBS])
+m4trace:configure.ac:263: -1- m4_pattern_allow([^WX_LIBS$])
+m4trace:configure.ac:272: -1- AM_CONDITIONAL([USE_WX], [test x$test_wx = xtrue])
+m4trace:configure.ac:272: -1- AC_SUBST([USE_WX_TRUE])
+m4trace:configure.ac:272: -1- AC_SUBST_TRACE([USE_WX_TRUE])
+m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_WX_TRUE$])
+m4trace:configure.ac:272: -1- AC_SUBST([USE_WX_FALSE])
+m4trace:configure.ac:272: -1- AC_SUBST_TRACE([USE_WX_FALSE])
+m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_WX_FALSE$])
+m4trace:configure.ac:272: -1- _AM_SUBST_NOTMAKE([USE_WX_TRUE])
+m4trace:configure.ac:272: -1- _AM_SUBST_NOTMAKE([USE_WX_FALSE])
+m4trace:configure.ac:282: -1- AC_SUBST([QMAKE])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QMAKE])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QMAKE$])
+m4trace:configure.ac:282: -1- AC_SUBST([QMAKE])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QMAKE])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QMAKE$])
+m4trace:configure.ac:282: -1- AC_SUBST([MOC])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([MOC])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^MOC$])
+m4trace:configure.ac:282: -1- AC_SUBST([MOC])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([MOC])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^MOC$])
+m4trace:configure.ac:282: -1- AC_SUBST([UIC])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([UIC])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^UIC$])
+m4trace:configure.ac:282: -1- AC_SUBST([UIC])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([UIC])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^UIC$])
+m4trace:configure.ac:282: -1- AC_SUBST([RCC])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([RCC])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^RCC$])
+m4trace:configure.ac:282: -1- AC_SUBST([RCC])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([RCC])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^RCC$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_PATH])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_PATH])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_PATH$])
+m4trace:configure.ac:282: -1- AC_SUBST([TMPDIR])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([TMPDIR])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^TMPDIR$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_VERSION_MAJOR])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_VERSION_MAJOR])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_VERSION_MAJOR$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_DEFINES], [$at_cv_env_QT_DEFINES])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_DEFINES])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_DEFINES$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_CFLAGS], [$at_cv_env_QT_CFLAGS])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_CFLAGS])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CFLAGS$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_CXXFLAGS], [$at_cv_env_QT_CXXFLAGS])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_CXXFLAGS])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CXXFLAGS$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_INCPATH], [$at_cv_env_QT_INCPATH])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_INCPATH])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_INCPATH$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_CPPFLAGS], ["$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH"])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_CPPFLAGS])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CPPFLAGS$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_LFLAGS], [$at_cv_env_QT_LDFLAGS])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_LFLAGS])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LFLAGS$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_LDFLAGS], [$at_cv_env_QT_LDFLAGS])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_LDFLAGS])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LDFLAGS$])
+m4trace:configure.ac:282: -1- AC_SUBST([QT_LIBS], [$at_cv_env_QT_LIBS])
+m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_LIBS])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LIBS$])
+m4trace:configure.ac:283: -1- AC_SUBST([QT_VERSION], [$at_cv_QT_VERSION])
+m4trace:configure.ac:283: -1- AC_SUBST_TRACE([QT_VERSION])
+m4trace:configure.ac:283: -1- m4_pattern_allow([^QT_VERSION$])
+m4trace:configure.ac:286: -1- AM_CONDITIONAL([USE_QT], [test x$test_qt = xtrue])
+m4trace:configure.ac:286: -1- AC_SUBST([USE_QT_TRUE])
+m4trace:configure.ac:286: -1- AC_SUBST_TRACE([USE_QT_TRUE])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^USE_QT_TRUE$])
+m4trace:configure.ac:286: -1- AC_SUBST([USE_QT_FALSE])
+m4trace:configure.ac:286: -1- AC_SUBST_TRACE([USE_QT_FALSE])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^USE_QT_FALSE$])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([USE_QT_TRUE])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([USE_QT_FALSE])
+m4trace:configure.ac:296: -1- AC_SUBST([PYTHON_HEADERS])
+m4trace:configure.ac:296: -1- AC_SUBST_TRACE([PYTHON_HEADERS])
+m4trace:configure.ac:296: -1- m4_pattern_allow([^PYTHON_HEADERS$])
+m4trace:configure.ac:297: -1- AC_SUBST([HAVE_SWIG])
+m4trace:configure.ac:297: -1- AC_SUBST_TRACE([HAVE_SWIG])
+m4trace:configure.ac:297: -1- m4_pattern_allow([^HAVE_SWIG$])
+m4trace:configure.ac:300: -1- AC_SUBST([PYTHON])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON$])
+m4trace:configure.ac:300: -1- AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON_VERSION])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_VERSION$])
+m4trace:configure.ac:300: -1- AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON_PREFIX])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_PREFIX$])
+m4trace:configure.ac:300: -1- AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON_EXEC_PREFIX])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$])
+m4trace:configure.ac:300: -1- AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON_PLATFORM])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_PLATFORM$])
+m4trace:configure.ac:300: -1- AC_SUBST([pythondir], [$am_cv_python_pythondir])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([pythondir])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^pythondir$])
+m4trace:configure.ac:300: -1- AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([pkgpythondir])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^pkgpythondir$])
+m4trace:configure.ac:300: -1- AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([pyexecdir])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^pyexecdir$])
+m4trace:configure.ac:300: -1- AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
+m4trace:configure.ac:300: -1- AC_SUBST_TRACE([pkgpyexecdir])
+m4trace:configure.ac:300: -1- m4_pattern_allow([^pkgpyexecdir$])
+m4trace:configure.ac:306: -1- AM_CONDITIONAL([USE_PYTHON], [test x$test_python = xtrue ])
+m4trace:configure.ac:306: -1- AC_SUBST([USE_PYTHON_TRUE])
+m4trace:configure.ac:306: -1- AC_SUBST_TRACE([USE_PYTHON_TRUE])
+m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PYTHON_TRUE$])
+m4trace:configure.ac:306: -1- AC_SUBST([USE_PYTHON_FALSE])
+m4trace:configure.ac:306: -1- AC_SUBST_TRACE([USE_PYTHON_FALSE])
+m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PYTHON_FALSE$])
+m4trace:configure.ac:306: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_TRUE])
+m4trace:configure.ac:306: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_FALSE])
+m4trace:configure.ac:316: -1- AC_SUBST([OCTAVE])
+m4trace:configure.ac:316: -1- AC_SUBST_TRACE([OCTAVE])
+m4trace:configure.ac:316: -1- m4_pattern_allow([^OCTAVE$])
+m4trace:configure.ac:322: -1- AC_SUBST([OCTAVE_ARCH], [$OCTAVE_ARCH])
+m4trace:configure.ac:322: -1- AC_SUBST_TRACE([OCTAVE_ARCH])
+m4trace:configure.ac:322: -1- m4_pattern_allow([^OCTAVE_ARCH$])
+m4trace:configure.ac:323: -1- AC_SUBST([OCTAVE_INCFLAGS], [$OCTAVE_INCFLAGS])
+m4trace:configure.ac:323: -1- AC_SUBST_TRACE([OCTAVE_INCFLAGS])
+m4trace:configure.ac:323: -1- m4_pattern_allow([^OCTAVE_INCFLAGS$])
+m4trace:configure.ac:326: -1- AM_CONDITIONAL([USE_OCTAVE], [test x$test_octave = xtrue ])
+m4trace:configure.ac:326: -1- AC_SUBST([USE_OCTAVE_TRUE])
+m4trace:configure.ac:326: -1- AC_SUBST_TRACE([USE_OCTAVE_TRUE])
+m4trace:configure.ac:326: -1- m4_pattern_allow([^USE_OCTAVE_TRUE$])
+m4trace:configure.ac:326: -1- AC_SUBST([USE_OCTAVE_FALSE])
+m4trace:configure.ac:326: -1- AC_SUBST_TRACE([USE_OCTAVE_FALSE])
+m4trace:configure.ac:326: -1- m4_pattern_allow([^USE_OCTAVE_FALSE$])
+m4trace:configure.ac:326: -1- _AM_SUBST_NOTMAKE([USE_OCTAVE_TRUE])
+m4trace:configure.ac:326: -1- _AM_SUBST_NOTMAKE([USE_OCTAVE_FALSE])
+m4trace:configure.ac:335: -1- AM_CONDITIONAL([USE_TESTIO], [test x$testio = xtrue ])
+m4trace:configure.ac:335: -1- AC_SUBST([USE_TESTIO_TRUE])
+m4trace:configure.ac:335: -1- AC_SUBST_TRACE([USE_TESTIO_TRUE])
+m4trace:configure.ac:335: -1- m4_pattern_allow([^USE_TESTIO_TRUE$])
+m4trace:configure.ac:335: -1- AC_SUBST([USE_TESTIO_FALSE])
+m4trace:configure.ac:335: -1- AC_SUBST_TRACE([USE_TESTIO_FALSE])
+m4trace:configure.ac:335: -1- m4_pattern_allow([^USE_TESTIO_FALSE$])
+m4trace:configure.ac:335: -1- _AM_SUBST_NOTMAKE([USE_TESTIO_TRUE])
+m4trace:configure.ac:335: -1- _AM_SUBST_NOTMAKE([USE_TESTIO_FALSE])
+m4trace:configure.ac:345: -1- AC_CONFIG_FILES([texinfo/Makefile texinfo/png/Makefile])
+m4trace:configure.ac:347: -1- AM_CONDITIONAL([USE_DOCS], [(test x$docs = xtrue || test x$all = xtrue) ])
+m4trace:configure.ac:347: -1- AC_SUBST([USE_DOCS_TRUE])
+m4trace:configure.ac:347: -1- AC_SUBST_TRACE([USE_DOCS_TRUE])
+m4trace:configure.ac:347: -1- m4_pattern_allow([^USE_DOCS_TRUE$])
+m4trace:configure.ac:347: -1- AC_SUBST([USE_DOCS_FALSE])
+m4trace:configure.ac:347: -1- AC_SUBST_TRACE([USE_DOCS_FALSE])
+m4trace:configure.ac:347: -1- m4_pattern_allow([^USE_DOCS_FALSE$])
+m4trace:configure.ac:347: -1- _AM_SUBST_NOTMAKE([USE_DOCS_TRUE])
+m4trace:configure.ac:347: -1- _AM_SUBST_NOTMAKE([USE_DOCS_FALSE])
+m4trace:configure.ac:350: -1- AC_SUBST([AM_CXXFLAGS])
+m4trace:configure.ac:350: -1- AC_SUBST_TRACE([AM_CXXFLAGS])
+m4trace:configure.ac:350: -1- m4_pattern_allow([^AM_CXXFLAGS$])
+m4trace:configure.ac:352: -1- AC_CONFIG_FILES([
+Makefile
+mgl/Makefile
+examples/Makefile
+include/Makefile
+lang/Makefile
+utils/Makefile
+widgets/Makefile
+])
+m4trace:configure.ac:361: -1- AC_SUBST([LIB@&t at OBJS], [$ac_libobjs])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([LIB@&t at OBJS])
+m4trace:configure.ac:361: -1- m4_pattern_allow([^LIB@&t at OBJS$])
+m4trace:configure.ac:361: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([LTLIBOBJS])
+m4trace:configure.ac:361: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.ac:361: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])
+m4trace:configure.ac:361: -1- AC_SUBST([am__EXEEXT_TRUE])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE])
+m4trace:configure.ac:361: -1- m4_pattern_allow([^am__EXEEXT_TRUE$])
+m4trace:configure.ac:361: -1- AC_SUBST([am__EXEEXT_FALSE])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE])
+m4trace:configure.ac:361: -1- m4_pattern_allow([^am__EXEEXT_FALSE$])
+m4trace:configure.ac:361: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE])
+m4trace:configure.ac:361: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([top_builddir])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([top_build_prefix])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([srcdir])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([abs_srcdir])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([top_srcdir])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([abs_top_srcdir])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([builddir])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([abs_builddir])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([abs_top_builddir])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([INSTALL])
+m4trace:configure.ac:361: -1- AC_SUBST_TRACE([MKDIR_P])
+m4trace:configure.ac:361: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])
diff --git a/config.log b/config.log
new file mode 100644
index 0000000..529c202
--- /dev/null
+++ b/config.log
@@ -0,0 +1,1157 @@
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by mathgl configure 1.10, which was
+generated by GNU Autoconf 2.67.  Invocation command line was
+
+  $ ./configure --prefix=/usr --mandir=${prefix}/share/man --infodir=${prefix}/share/info --host=x86_64-linux-gnu --build=x86_64-linux-gnu --enable-all --enable-octave --enable-python
+
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = filippos
+uname -m = x86_64
+uname -r = 2.6.36-trunk-amd64
+uname -s = Linux
+uname -v = #1 SMP Wed Oct 27 14:28:29 UTC 2010
+
+/usr/bin/uname -p = unknown
+/bin/uname -X     = unknown
+
+/bin/arch              = unknown
+/usr/bin/arch -k       = unknown
+/usr/convex/getsysinfo = unknown
+/usr/bin/hostinfo      = unknown
+/bin/machine           = unknown
+/usr/bin/oslevel       = unknown
+/bin/universe          = unknown
+
+PATH: /usr/sbin
+PATH: /usr/bin
+PATH: /sbin
+PATH: /bin
+PATH: /usr/bin/X11
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+configure:2691: checking for a BSD-compatible install
+configure:2759: result: /usr/bin/install -c
+configure:2770: checking whether build environment is sane
+configure:2820: result: yes
+configure:2961: checking for a thread-safe mkdir -p
+configure:3000: result: /bin/mkdir -p
+configure:3013: checking for gawk
+configure:3029: found /usr/bin/gawk
+configure:3040: result: gawk
+configure:3051: checking whether make sets $(MAKE)
+configure:3073: result: yes
+configure:3162: checking for x86_64-linux-gnu-gcc
+configure:3178: found /usr/bin/x86_64-linux-gnu-gcc
+configure:3189: result: x86_64-linux-gnu-gcc
+configure:3458: checking for C compiler version
+configure:3467: x86_64-linux-gnu-gcc --version >&5
+x86_64-linux-gnu-gcc (Debian 4.4.5-6) 4.4.5
+Copyright (C) 2010 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+configure:3478: $? = 0
+configure:3467: x86_64-linux-gnu-gcc -v >&5
+Using built-in specs.
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-6' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+Thread model: posix
+gcc version 4.4.5 (Debian 4.4.5-6) 
+configure:3478: $? = 0
+configure:3467: x86_64-linux-gnu-gcc -V >&5
+x86_64-linux-gnu-gcc: '-V' option must have argument
+configure:3478: $? = 1
+configure:3467: x86_64-linux-gnu-gcc -qversion >&5
+x86_64-linux-gnu-gcc: unrecognized option '-qversion'
+x86_64-linux-gnu-gcc: no input files
+configure:3478: $? = 1
+configure:3498: checking whether the C compiler works
+configure:3520: x86_64-linux-gnu-gcc -Wall -g -O2   conftest.c  >&5
+configure:3524: $? = 0
+configure:3572: result: yes
+configure:3575: checking for C compiler default output file name
+configure:3577: result: a.out
+configure:3583: checking for suffix of executables
+configure:3590: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
+configure:3594: $? = 0
+configure:3616: result: 
+configure:3638: checking whether we are cross compiling
+configure:3646: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
+configure:3650: $? = 0
+configure:3657: ./conftest
+configure:3661: $? = 0
+configure:3676: result: no
+configure:3681: checking for suffix of object files
+configure:3703: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:3707: $? = 0
+configure:3728: result: o
+configure:3732: checking whether we are using the GNU C compiler
+configure:3751: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:3751: $? = 0
+configure:3760: result: yes
+configure:3769: checking whether x86_64-linux-gnu-gcc accepts -g
+configure:3789: x86_64-linux-gnu-gcc -c -g  conftest.c >&5
+configure:3789: $? = 0
+configure:3830: result: yes
+configure:3847: checking for x86_64-linux-gnu-gcc option to accept ISO C89
+configure:3911: x86_64-linux-gnu-gcc  -c -Wall -g -O2  conftest.c >&5
+configure:3911: $? = 0
+configure:3924: result: none needed
+configure:3955: checking for style of include used by make
+configure:3983: result: GNU
+configure:4008: checking dependency style of x86_64-linux-gnu-gcc
+configure:4118: result: gcc3
+configure:4147: checking for x86_64-linux-gnu-g++
+configure:4163: found /usr/bin/x86_64-linux-gnu-g++
+configure:4174: result: x86_64-linux-gnu-g++
+configure:4245: checking for C++ compiler version
+configure:4254: x86_64-linux-gnu-g++ --version >&5
+x86_64-linux-gnu-g++ (Debian 4.4.5-6) 4.4.5
+Copyright (C) 2010 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+configure:4265: $? = 0
+configure:4254: x86_64-linux-gnu-g++ -v >&5
+Using built-in specs.
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-6' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+Thread model: posix
+gcc version 4.4.5 (Debian 4.4.5-6) 
+configure:4265: $? = 0
+configure:4254: x86_64-linux-gnu-g++ -V >&5
+x86_64-linux-gnu-g++: '-V' option must have argument
+configure:4265: $? = 1
+configure:4254: x86_64-linux-gnu-g++ -qversion >&5
+x86_64-linux-gnu-g++: unrecognized option '-qversion'
+x86_64-linux-gnu-g++: no input files
+configure:4265: $? = 1
+configure:4269: checking whether we are using the GNU C++ compiler
+configure:4288: x86_64-linux-gnu-g++ -c -g -O2  conftest.cpp >&5
+configure:4288: $? = 0
+configure:4297: result: yes
+configure:4306: checking whether x86_64-linux-gnu-g++ accepts -g
+configure:4326: x86_64-linux-gnu-g++ -c -g  conftest.cpp >&5
+configure:4326: $? = 0
+configure:4367: result: yes
+configure:4392: checking dependency style of x86_64-linux-gnu-g++
+configure:4502: result: gcc3
+configure:4523: checking build system type
+configure:4537: result: x86_64-pc-linux-gnu
+configure:4557: checking host system type
+configure:4570: result: x86_64-pc-linux-gnu
+configure:4922: checking for a sed that does not truncate output
+configure:4986: result: /bin/sed
+configure:5004: checking for grep that handles long lines and -e
+configure:5062: result: /bin/grep
+configure:5067: checking for egrep
+configure:5129: result: /bin/grep -E
+configure:5134: checking for fgrep
+configure:5196: result: /bin/grep -F
+configure:5231: checking for ld used by x86_64-linux-gnu-gcc
+configure:5298: result: /usr/bin/ld
+configure:5305: checking if the linker (/usr/bin/ld) is GNU ld
+configure:5320: result: yes
+configure:5332: checking for BSD- or MS-compatible name lister (nm)
+configure:5381: result: /usr/bin/nm -B
+configure:5499: checking the name lister (/usr/bin/nm -B) interface
+configure:5506: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:5509: /usr/bin/nm -B "conftest.o"
+configure:5512: output
+0000000000000000 B some_variable
+configure:5519: result: BSD nm
+configure:5522: checking whether ln -s works
+configure:5526: result: yes
+configure:5534: checking the maximum length of command line arguments
+configure:5654: result: 3458764513820540925
+configure:5671: checking whether the shell understands some XSI constructs
+configure:5681: result: yes
+configure:5685: checking whether the shell understands "+="
+configure:5691: result: yes
+configure:5726: checking for /usr/bin/ld option to reload object files
+configure:5733: result: -r
+configure:5762: checking for x86_64-linux-gnu-objdump
+configure:5789: result: objdump
+configure:5858: checking how to recognize dependent libraries
+configure:6054: result: pass_all
+configure:6074: checking for x86_64-linux-gnu-ar
+configure:6104: result: no
+configure:6114: checking for ar
+configure:6130: found /usr/bin/ar
+configure:6141: result: ar
+configure:6179: checking for x86_64-linux-gnu-strip
+configure:6209: result: no
+configure:6219: checking for strip
+configure:6235: found /usr/bin/strip
+configure:6246: result: strip
+configure:6278: checking for x86_64-linux-gnu-ranlib
+configure:6308: result: no
+configure:6318: checking for ranlib
+configure:6334: found /usr/bin/ranlib
+configure:6345: result: ranlib
+configure:6435: checking command to parse /usr/bin/nm -B output from x86_64-linux-gnu-gcc object
+configure:6553: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:6556: $? = 0
+configure:6560: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[	 ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[	 ][	 ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' \> conftest.nm
+configure:6563: $? = 0
+configure:6617: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c conftstm.o >&5
+configure:6620: $? = 0
+configure:6658: result: ok
+configure:6754: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:6757: $? = 0
+configure:7467: checking how to run the C preprocessor
+configure:7498: x86_64-linux-gnu-gcc -E  conftest.c
+configure:7498: $? = 0
+configure:7512: x86_64-linux-gnu-gcc -E  conftest.c
+conftest.c:11:28: error: ac_nonexistent.h: No such file or directory
+configure:7512: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:7537: result: x86_64-linux-gnu-gcc -E
+configure:7557: x86_64-linux-gnu-gcc -E  conftest.c
+configure:7557: $? = 0
+configure:7571: x86_64-linux-gnu-gcc -E  conftest.c
+conftest.c:11:28: error: ac_nonexistent.h: No such file or directory
+configure:7571: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:7600: checking for ANSI C header files
+configure:7620: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7620: $? = 0
+configure:7693: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
+configure:7693: $? = 0
+configure:7693: ./conftest
+configure:7693: $? = 0
+configure:7704: result: yes
+configure:7717: checking for sys/types.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7717: checking for sys/stat.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7717: checking for stdlib.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7717: checking for string.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7717: checking for memory.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7717: checking for strings.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7717: checking for inttypes.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7717: checking for stdint.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7717: checking for unistd.h
+configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7717: $? = 0
+configure:7717: result: yes
+configure:7731: checking for dlfcn.h
+configure:7731: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:7731: $? = 0
+configure:7731: result: yes
+configure:7856: checking for C++ compiler version
+configure:7865: x86_64-linux-gnu-g++ --version >&5
+x86_64-linux-gnu-g++ (Debian 4.4.5-6) 4.4.5
+Copyright (C) 2010 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+configure:7876: $? = 0
+configure:7865: x86_64-linux-gnu-g++ -v >&5
+Using built-in specs.
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-6' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+Thread model: posix
+gcc version 4.4.5 (Debian 4.4.5-6) 
+configure:7876: $? = 0
+configure:7865: x86_64-linux-gnu-g++ -V >&5
+x86_64-linux-gnu-g++: '-V' option must have argument
+configure:7876: $? = 1
+configure:7865: x86_64-linux-gnu-g++ -qversion >&5
+x86_64-linux-gnu-g++: unrecognized option '-qversion'
+x86_64-linux-gnu-g++: no input files
+configure:7876: $? = 1
+configure:7880: checking whether we are using the GNU C++ compiler
+configure:7908: result: yes
+configure:7917: checking whether x86_64-linux-gnu-g++ accepts -g
+configure:7978: result: yes
+configure:8003: checking dependency style of x86_64-linux-gnu-g++
+configure:8113: result: gcc3
+configure:8136: checking how to run the C++ preprocessor
+configure:8163: x86_64-linux-gnu-g++ -E  conftest.cpp
+configure:8163: $? = 0
+configure:8177: x86_64-linux-gnu-g++ -E  conftest.cpp
+conftest.cpp:22:28: error: ac_nonexistent.h: No such file or directory
+configure:8177: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:8202: result: x86_64-linux-gnu-g++ -E
+configure:8222: x86_64-linux-gnu-g++ -E  conftest.cpp
+configure:8222: $? = 0
+configure:8236: x86_64-linux-gnu-g++ -E  conftest.cpp
+conftest.cpp:22:28: error: ac_nonexistent.h: No such file or directory
+configure:8236: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:8438: checking for objdir
+configure:8453: result: .libs
+configure:8749: checking if x86_64-linux-gnu-gcc supports -fno-rtti -fno-exceptions
+configure:8767: x86_64-linux-gnu-gcc -c -Wall -g -O2  -fno-rtti -fno-exceptions conftest.c >&5
+cc1: warning: command line option "-fno-rtti" is valid for C++/ObjC++ but not for C
+configure:8771: $? = 0
+configure:8784: result: no
+configure:8804: checking for x86_64-linux-gnu-gcc option to produce PIC
+configure:9076: result: -fPIC -DPIC
+configure:9088: checking if x86_64-linux-gnu-gcc PIC flag -fPIC -DPIC works
+configure:9106: x86_64-linux-gnu-gcc -c -Wall -g -O2  -fPIC -DPIC -DPIC conftest.c >&5
+configure:9110: $? = 0
+configure:9123: result: yes
+configure:9147: checking if x86_64-linux-gnu-gcc static flag -static works
+configure:9175: result: yes
+configure:9190: checking if x86_64-linux-gnu-gcc supports -c -o file.o
+configure:9211: x86_64-linux-gnu-gcc -c -Wall -g -O2  -o out/conftest2.o conftest.c >&5
+configure:9215: $? = 0
+configure:9237: result: yes
+configure:9245: checking if x86_64-linux-gnu-gcc supports -c -o file.o
+configure:9292: result: yes
+configure:9325: checking whether the x86_64-linux-gnu-gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
+configure:10316: result: yes
+configure:10353: checking whether -lc should be explicitly linked in
+configure:10358: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:10361: $? = 0
+configure:10376: x86_64-linux-gnu-gcc -shared conftest.o  -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep  -lc  \>/dev/null 2\>\&1
+configure:10379: $? = 0
+configure:10391: result: no
+configure:10555: checking dynamic linker characteristics
+configure:10988: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   -Wl,-rpath -Wl,/foo conftest.c  >&5
+configure:10988: $? = 0
+configure:11218: result: GNU/Linux ld.so
+configure:11320: checking how to hardcode library paths into programs
+configure:11345: result: immediate
+configure:11439: checking for shl_load
+configure:11439: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
+/tmp/ccnsfxCS.o: In function `main':
+/home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/conftest.c:57: undefined reference to `shl_load'
+collect2: ld returned 1 exit status
+configure:11439: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| /* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+| #define shl_load innocuous_shl_load
+| 
+| /* System header to define __stub macros and hopefully few prototypes,
+|     which can conflict with char shl_load (); below.
+|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+|     <limits.h> exists even on freestanding compilers.  */
+| 
+| #ifdef __STDC__
+| # include <limits.h>
+| #else
+| # include <assert.h>
+| #endif
+| 
+| #undef shl_load
+| 
+| /* Override any GCC internal prototype to avoid an error.
+|    Use char because int might match the return type of a GCC
+|    builtin and then its argument prototype would still apply.  */
+| #ifdef __cplusplus
+| extern "C"
+| #endif
+| char shl_load ();
+| /* The GNU C library defines this for functions which it implements
+|     to always fail with ENOSYS.  Some functions are actually named
+|     something starting with __ and the normal name is an alias.  */
+| #if defined __stub_shl_load || defined __stub___shl_load
+| choke me
+| #endif
+| 
+| int
+| main ()
+| {
+| return shl_load ();
+|   ;
+|   return 0;
+| }
+configure:11439: result: no
+configure:11443: checking for shl_load in -ldld
+configure:11468: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -ldld   >&5
+/usr/bin/ld: cannot find -ldld
+collect2: ld returned 1 exit status
+configure:11468: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| 
+| /* Override any GCC internal prototype to avoid an error.
+|    Use char because int might match the return type of a GCC
+|    builtin and then its argument prototype would still apply.  */
+| #ifdef __cplusplus
+| extern "C"
+| #endif
+| char shl_load ();
+| int
+| main ()
+| {
+| return shl_load ();
+|   ;
+|   return 0;
+| }
+configure:11477: result: no
+configure:11482: checking for dlopen
+configure:11482: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
+/tmp/ccaDEGxM.o: In function `main':
+/home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/conftest.c:57: undefined reference to `dlopen'
+collect2: ld returned 1 exit status
+configure:11482: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| /* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+| #define dlopen innocuous_dlopen
+| 
+| /* System header to define __stub macros and hopefully few prototypes,
+|     which can conflict with char dlopen (); below.
+|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+|     <limits.h> exists even on freestanding compilers.  */
+| 
+| #ifdef __STDC__
+| # include <limits.h>
+| #else
+| # include <assert.h>
+| #endif
+| 
+| #undef dlopen
+| 
+| /* Override any GCC internal prototype to avoid an error.
+|    Use char because int might match the return type of a GCC
+|    builtin and then its argument prototype would still apply.  */
+| #ifdef __cplusplus
+| extern "C"
+| #endif
+| char dlopen ();
+| /* The GNU C library defines this for functions which it implements
+|     to always fail with ENOSYS.  Some functions are actually named
+|     something starting with __ and the normal name is an alias.  */
+| #if defined __stub_dlopen || defined __stub___dlopen
+| choke me
+| #endif
+| 
+| int
+| main ()
+| {
+| return dlopen ();
+|   ;
+|   return 0;
+| }
+configure:11482: result: no
+configure:11486: checking for dlopen in -ldl
+configure:11511: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -ldl   >&5
+configure:11511: $? = 0
+configure:11520: result: yes
+configure:11639: checking whether a program can dlopen itself
+configure:11709: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2  -DHAVE_DLFCN_H  -Wl,--export-dynamic conftest.c -ldl  >&5
+configure: In function 'fnord':
+configure:11690: warning: unused variable 'i'
+configure:11712: $? = 0
+configure:11730: result: yes
+configure:11735: checking whether a statically linked program can dlopen itself
+configure:11805: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2  -DHAVE_DLFCN_H  -Wl,--export-dynamic -static conftest.c -ldl  >&5
+configure: In function 'fnord':
+configure:11786: warning: unused variable 'i'
+/tmp/ccqOnLlW.o: In function `main':
+/home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/configure:11789: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
+/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie
+collect2: ld returned 1 exit status
+configure:11808: $? = 1
+configure:11826: result: no
+configure:11865: checking whether stripping libraries is possible
+configure:11870: result: yes
+configure:11905: checking if libtool supports shared libraries
+configure:11907: result: yes
+configure:11910: checking whether to build shared libraries
+configure:11931: result: yes
+configure:11934: checking whether to build static libraries
+configure:11938: result: yes
+configure:12088: checking for ld used by x86_64-linux-gnu-g++
+configure:12155: result: /usr/bin/ld -m elf_x86_64
+configure:12162: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld
+configure:12177: result: yes
+configure:12232: checking whether the x86_64-linux-gnu-g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
+configure:13145: result: yes
+configure:13173: x86_64-linux-gnu-g++ -c -g -O2  conftest.cpp >&5
+configure:13176: $? = 0
+configure:13358: checking for x86_64-linux-gnu-g++ option to produce PIC
+configure:13675: result: -fPIC -DPIC
+configure:13684: checking if x86_64-linux-gnu-g++ PIC flag -fPIC -DPIC works
+configure:13702: x86_64-linux-gnu-g++ -c -g -O2  -fPIC -DPIC -DPIC conftest.cpp >&5
+configure:13706: $? = 0
+configure:13719: result: yes
+configure:13740: checking if x86_64-linux-gnu-g++ static flag -static works
+configure:13768: result: yes
+configure:13780: checking if x86_64-linux-gnu-g++ supports -c -o file.o
+configure:13801: x86_64-linux-gnu-g++ -c -g -O2  -o out/conftest2.o conftest.cpp >&5
+configure:13805: $? = 0
+configure:13827: result: yes
+configure:13832: checking if x86_64-linux-gnu-g++ supports -c -o file.o
+configure:13879: result: yes
+configure:13909: checking whether the x86_64-linux-gnu-g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
+configure:13938: result: yes
+configure:14075: checking dynamic linker characteristics
+configure:14456: x86_64-linux-gnu-g++ -o conftest -g -O2   -Wl,-rpath -Wl,/foo conftest.cpp  >&5
+configure:14456: $? = 0
+configure:14686: result: GNU/Linux ld.so
+configure:14737: checking how to hardcode library paths into programs
+configure:14762: result: immediate
+configure:14878: checking pthread.h usability
+configure:14878: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:14878: $? = 0
+configure:14878: result: yes
+configure:14878: checking pthread.h presence
+configure:14878: x86_64-linux-gnu-gcc -E  conftest.c
+configure:14878: $? = 0
+configure:14878: result: yes
+configure:14878: checking for pthread.h
+configure:14878: result: yes
+configure:14887: checking for main in -lpthread
+configure:14906: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -lpthread   >&5
+configure:14906: $? = 0
+configure:14915: result: yes
+configure:14948: checking for gsl-config
+configure:14964: found /usr/bin/gsl-config
+configure:14975: result: -I/usr/include
+configure:14985: checking for gsl-config
+configure:15001: found /usr/bin/gsl-config
+configure:15012: result: -L/usr/lib -lgsl -lgslcblas -lm
+configure:15161: checking GL/gl.h usability
+configure:15161: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:15161: $? = 0
+configure:15161: result: yes
+configure:15161: checking GL/gl.h presence
+configure:15161: x86_64-linux-gnu-gcc -E  conftest.c
+configure:15161: $? = 0
+configure:15161: result: yes
+configure:15161: checking for GL/gl.h
+configure:15161: result: yes
+configure:15170: checking for main in -lGL
+configure:15189: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -lGL   >&5
+configure:15189: $? = 0
+configure:15199: result: yes
+configure:15208: checking GL/glut.h usability
+configure:15208: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:15208: $? = 0
+configure:15208: result: yes
+configure:15208: checking GL/glut.h presence
+configure:15208: x86_64-linux-gnu-gcc -E  conftest.c
+configure:15208: $? = 0
+configure:15208: result: yes
+configure:15208: checking for GL/glut.h
+configure:15208: result: yes
+configure:15217: checking for main in -lglut
+configure:15236: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -lglut   >&5
+configure:15236: $? = 0
+configure:15246: result: yes
+configure:15298: checking hdf5.h usability
+configure:15298: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+configure:15298: $? = 0
+configure:15298: result: yes
+configure:15298: checking hdf5.h presence
+configure:15298: x86_64-linux-gnu-gcc -E  conftest.c
+configure:15298: $? = 0
+configure:15298: result: yes
+configure:15298: checking for hdf5.h
+configure:15298: result: yes
+configure:15310: checking for main in -lhdf5
+configure:15329: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -lhdf5   >&5
+configure:15329: $? = 0
+configure:15338: result: yes
+configure:15367: checking hdf/mfhdf.h usability
+configure:15367: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
+conftest.c:57:23: error: hdf/mfhdf.h: No such file or directory
+configure:15367: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define MGL_USE_DOUBLE 0
+| /* end confdefs.h.  */
+| #include <stdio.h>
+| #ifdef HAVE_SYS_TYPES_H
+| # include <sys/types.h>
+| #endif
+| #ifdef HAVE_SYS_STAT_H
+| # include <sys/stat.h>
+| #endif
+| #ifdef STDC_HEADERS
+| # include <stdlib.h>
+| # include <stddef.h>
+| #else
+| # ifdef HAVE_STDLIB_H
+| #  include <stdlib.h>
+| # endif
+| #endif
+| #ifdef HAVE_STRING_H
+| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+| #  include <memory.h>
+| # endif
+| # include <string.h>
+| #endif
+| #ifdef HAVE_STRINGS_H
+| # include <strings.h>
+| #endif
+| #ifdef HAVE_INTTYPES_H
+| # include <inttypes.h>
+| #endif
+| #ifdef HAVE_STDINT_H
+| # include <stdint.h>
+| #endif
+| #ifdef HAVE_UNISTD_H
+| # include <unistd.h>
+| #endif
+| #include <hdf/mfhdf.h>
+configure:15367: result: no
+configure:15367: checking hdf/mfhdf.h presence
+configure:15367: x86_64-linux-gnu-gcc -E  conftest.c
+conftest.c:24:23: error: hdf/mfhdf.h: No such file or directory
+configure:15367: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "mathgl"
+| #define PACKAGE_TARNAME "mathgl"
+| #define PACKAGE_VERSION "1.10"
+| #define PACKAGE_STRING "mathgl 1.10"
+| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+| #define PACKAGE_URL ""
+| #define PACKAGE "mathgl"
+| #define VERSION "1.10"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define MGL_USE_DOUBLE 0
+| /* end confdefs.h.  */
+| #include <hdf/mfhdf.h>
+configure:15367: result: no
+configure:15367: checking for hdf/mfhdf.h
+configure:15367: result: no
+
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+
+ac_cv_build=x86_64-pc-linux-gnu
+ac_cv_c_compiler_gnu=yes
+ac_cv_cxx_compiler_gnu=yes
+ac_cv_env_CCC_set=
+ac_cv_env_CCC_value=
+ac_cv_env_CC_set=
+ac_cv_env_CC_value=
+ac_cv_env_CFLAGS_set=set
+ac_cv_env_CFLAGS_value='-Wall -g -O2'
+ac_cv_env_CPPFLAGS_set=set
+ac_cv_env_CPPFLAGS_value=
+ac_cv_env_CPP_set=
+ac_cv_env_CPP_value=
+ac_cv_env_CXXCPP_set=
+ac_cv_env_CXXCPP_value=
+ac_cv_env_CXXFLAGS_set=set
+ac_cv_env_CXXFLAGS_value='-g -O2'
+ac_cv_env_CXX_set=
+ac_cv_env_CXX_value=
+ac_cv_env_LDFLAGS_set=set
+ac_cv_env_LDFLAGS_value=
+ac_cv_env_LIBS_set=
+ac_cv_env_LIBS_value=
+ac_cv_env_TMPDIR_set=
+ac_cv_env_TMPDIR_value=
+ac_cv_env_build_alias_set=set
+ac_cv_env_build_alias_value=x86_64-linux-gnu
+ac_cv_env_host_alias_set=set
+ac_cv_env_host_alias_value=x86_64-linux-gnu
+ac_cv_env_target_alias_set=
+ac_cv_env_target_alias_value=
+ac_cv_func_dlopen=no
+ac_cv_func_shl_load=no
+ac_cv_header_GL_gl_h=yes
+ac_cv_header_GL_glut_h=yes
+ac_cv_header_dlfcn_h=yes
+ac_cv_header_hdf5_h=yes
+ac_cv_header_hdf_mfhdf_h=no
+ac_cv_header_inttypes_h=yes
+ac_cv_header_memory_h=yes
+ac_cv_header_pthread_h=yes
+ac_cv_header_stdc=yes
+ac_cv_header_stdint_h=yes
+ac_cv_header_stdlib_h=yes
+ac_cv_header_string_h=yes
+ac_cv_header_strings_h=yes
+ac_cv_header_sys_stat_h=yes
+ac_cv_header_sys_types_h=yes
+ac_cv_header_unistd_h=yes
+ac_cv_host=x86_64-pc-linux-gnu
+ac_cv_lib_GL___main=yes
+ac_cv_lib_dl_dlopen=yes
+ac_cv_lib_dld_shl_load=no
+ac_cv_lib_glut___main=yes
+ac_cv_lib_hdf5_main=yes
+ac_cv_lib_pthread_main=yes
+ac_cv_objext=o
+ac_cv_path_EGREP='/bin/grep -E'
+ac_cv_path_FGREP='/bin/grep -F'
+ac_cv_path_GREP=/bin/grep
+ac_cv_path_SED=/bin/sed
+ac_cv_path_install='/usr/bin/install -c'
+ac_cv_path_mkdir=/bin/mkdir
+ac_cv_prog_AWK=gawk
+ac_cv_prog_CC=x86_64-linux-gnu-gcc
+ac_cv_prog_CPP='x86_64-linux-gnu-gcc -E'
+ac_cv_prog_CXX=x86_64-linux-gnu-g++
+ac_cv_prog_CXXCPP='x86_64-linux-gnu-g++ -E'
+ac_cv_prog_GSL_FLAGS=-I/usr/include
+ac_cv_prog_GSL_LIBS='-L/usr/lib -lgsl -lgslcblas -lm'
+ac_cv_prog_OBJDUMP=objdump
+ac_cv_prog_ac_ct_AR=ar
+ac_cv_prog_ac_ct_RANLIB=ranlib
+ac_cv_prog_ac_ct_STRIP=strip
+ac_cv_prog_cc_c89=
+ac_cv_prog_cc_g=yes
+ac_cv_prog_cxx_g=yes
+ac_cv_prog_make_make_set=yes
+am_cv_CC_dependencies_compiler_type=gcc3
+am_cv_CXX_dependencies_compiler_type=gcc3
+lt_cv_deplibs_check_method=pass_all
+lt_cv_dlopen=dlopen
+lt_cv_dlopen_libs=-ldl
+lt_cv_dlopen_self=yes
+lt_cv_dlopen_self_static=no
+lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_ld_reload_flag=-r
+lt_cv_nm_interface='BSD nm'
+lt_cv_objdir=.libs
+lt_cv_path_LD=/usr/bin/ld
+lt_cv_path_LDCXX='/usr/bin/ld -m elf_x86_64'
+lt_cv_path_NM='/usr/bin/nm -B'
+lt_cv_prog_compiler_c_o=yes
+lt_cv_prog_compiler_c_o_CXX=yes
+lt_cv_prog_compiler_pic_works=yes
+lt_cv_prog_compiler_pic_works_CXX=yes
+lt_cv_prog_compiler_rtti_exceptions=no
+lt_cv_prog_compiler_static_works=yes
+lt_cv_prog_compiler_static_works_CXX=yes
+lt_cv_prog_gnu_ld=yes
+lt_cv_prog_gnu_ldcxx=yes
+lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[	 ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[	 ][	 ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'''
+lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/  {"\2", (void *) \&\2},/p'\'''
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/  {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/  {"lib\2", (void *) \&\2},/p'\'''
+lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\'''
+lt_cv_sys_max_cmd_len=3458764513820540925
+
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+
+ACLOCAL='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run aclocal-1.11'
+AMDEPBACKSLASH='\'
+AMDEP_FALSE='#'
+AMDEP_TRUE=''
+AMTAR='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run tar'
+AM_CXXFLAGS=''
+AR='ar'
+AS='as'
+AUTOCONF='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run autoconf'
+AUTOHEADER='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run autoheader'
+AUTOMAKE='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run automake-1.11'
+AWK='gawk'
+CC='x86_64-linux-gnu-gcc'
+CCDEPMODE='depmode=gcc3'
+CFLAGS='-Wall -g -O2'
+CPP='x86_64-linux-gnu-gcc -E'
+CPPFLAGS=''
+CXX='x86_64-linux-gnu-g++'
+CXXCPP='x86_64-linux-gnu-g++ -E'
+CXXDEPMODE='depmode=gcc3'
+CXXFLAGS='-g -O2'
+CYGPATH_W='echo'
+DEFS=''
+DEPDIR='.deps'
+DLLTOOL='dlltool'
+DSYMUTIL=''
+DUMPBIN=''
+ECHO_C=''
+ECHO_N='-n'
+ECHO_T=''
+EGREP='/bin/grep -E'
+EXEEXT=''
+FGREP='/bin/grep -F'
+FLTK_FLAGS=''
+FLTK_LIBS=''
+GIF_FLAGS=''
+GIF_LIBS=''
+GLUT_FLAGS='-DHAVE_GLUT'
+GLUT_LIBS='-lglut'
+GL_LIBS='-lGL'
+GREP='/bin/grep'
+GSL_FLAGS='-I/usr/include'
+GSL_LIBS='-L/usr/lib -lgsl -lgslcblas -lm'
+HAVE_SWIG=''
+HDF4_FLAGS=''
+HDF4_LIBS=''
+HDF5_FLAGS='-DHAVE_HDF5 -DH5_USE_16_API'
+HDF5_LIBS='-lhdf5'
+INSTALL_DATA='${INSTALL} -m 644'
+INSTALL_PROGRAM='${INSTALL}'
+INSTALL_SCRIPT='${INSTALL}'
+INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
+JPEG_FLAGS=''
+JPEG_LIBS=''
+LD='/usr/bin/ld -m elf_x86_64'
+LDFLAGS=''
+LIBOBJS=''
+LIBS=''
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+LIPO=''
+LN_S='ln -s'
+LTLIBOBJS=''
+MAKEINFO='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run makeinfo'
+MGL_AGE='0'
+MGL_CURRENT='5'
+MGL_RELEASE='1.10'
+MGL_REVISION='0'
+MKDIR_P='/bin/mkdir -p'
+MOC=''
+NM='/usr/bin/nm -B'
+NMEDIT=''
+OBJDUMP='objdump'
+OBJEXT='o'
+OCTAVE=''
+OCTAVE_ARCH=''
+OCTAVE_INCFLAGS=''
+OTOOL64=''
+OTOOL=''
+PACKAGE='mathgl'
+PACKAGE_BUGREPORT='mathgl.abalakin at gmail.com'
+PACKAGE_NAME='mathgl'
+PACKAGE_STRING='mathgl 1.10'
+PACKAGE_TARNAME='mathgl'
+PACKAGE_URL=''
+PACKAGE_VERSION='1.10'
+PATH_SEPARATOR=':'
+PNG_LIBS=''
+PTHREAD_FLAGS='-DHAVE_PTHREAD'
+PTHREAD_LIBS='-lpthread'
+PYTHON=''
+PYTHON_EXEC_PREFIX=''
+PYTHON_HEADERS=''
+PYTHON_PLATFORM=''
+PYTHON_PREFIX=''
+PYTHON_VERSION=''
+QMAKE=''
+QT_CFLAGS=''
+QT_CPPFLAGS=''
+QT_CXXFLAGS=''
+QT_DEFINES=''
+QT_INCPATH=''
+QT_LDFLAGS=''
+QT_LFLAGS=''
+QT_LIBS=''
+QT_PATH=''
+QT_VERSION=''
+QT_VERSION_MAJOR=''
+RANLIB='ranlib'
+RCC=''
+SED='/bin/sed'
+SET_MAKE=''
+SHELL='/bin/bash'
+STRIP='strip'
+TMPDIR=''
+UIC=''
+USE_DOCS_FALSE=''
+USE_DOCS_TRUE=''
+USE_FLTK_FALSE=''
+USE_FLTK_TRUE=''
+USE_GIF_FALSE=''
+USE_GIF_TRUE=''
+USE_GLUT_FALSE='#'
+USE_GLUT_TRUE=''
+USE_GSL_FALSE='#'
+USE_GSL_TRUE=''
+USE_HDF4_FALSE=''
+USE_HDF4_TRUE=''
+USE_HDF5_FALSE='#'
+USE_HDF5_TRUE=''
+USE_JPEG_FALSE=''
+USE_JPEG_TRUE=''
+USE_OCTAVE_FALSE=''
+USE_OCTAVE_TRUE=''
+USE_PTHREAD_FALSE='#'
+USE_PTHREAD_TRUE=''
+USE_PYTHON_FALSE=''
+USE_PYTHON_TRUE=''
+USE_QT_FALSE=''
+USE_QT_TRUE=''
+USE_TESTIO_FALSE=''
+USE_TESTIO_TRUE=''
+USE_WX_FALSE=''
+USE_WX_TRUE=''
+VERSION='1.10'
+WX_FLAGS=''
+WX_LIBS=''
+ac_ct_CC=''
+ac_ct_CXX=''
+ac_ct_DUMPBIN=''
+am__EXEEXT_FALSE=''
+am__EXEEXT_TRUE=''
+am__fastdepCC_FALSE='#'
+am__fastdepCC_TRUE=''
+am__fastdepCXX_FALSE='#'
+am__fastdepCXX_TRUE=''
+am__include='include'
+am__isrc=''
+am__leading_dot='.'
+am__quote=''
+am__tar='${AMTAR} chof - "$$tardir"'
+am__untar='${AMTAR} xf -'
+bindir='${exec_prefix}/bin'
+build='x86_64-pc-linux-gnu'
+build_alias='x86_64-linux-gnu'
+build_cpu='x86_64'
+build_os='linux-gnu'
+build_vendor='pc'
+datadir='${datarootdir}'
+datarootdir='${prefix}/share'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+dvidir='${docdir}'
+exec_prefix='NONE'
+host='x86_64-pc-linux-gnu'
+host_alias='x86_64-linux-gnu'
+host_cpu='x86_64'
+host_os='linux-gnu'
+host_vendor='pc'
+htmldir='${docdir}'
+includedir='${prefix}/include'
+infodir='${prefix}/share/info'
+install_sh='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/install-sh'
+libdir='${exec_prefix}/lib'
+libexecdir='${exec_prefix}/libexec'
+localedir='${datarootdir}/locale'
+localstatedir='${prefix}/var'
+lt_ECHO='echo'
+mandir='${prefix}/share/man'
+mkdir_p='/bin/mkdir -p'
+oldincludedir='/usr/include'
+pdfdir='${docdir}'
+pkgpyexecdir=''
+pkgpythondir=''
+prefix='/usr'
+program_transform_name='s,x,x,'
+psdir='${docdir}'
+pyexecdir=''
+pythondir=''
+sbindir='${exec_prefix}/sbin'
+sharedstatedir='${prefix}/com'
+sysconfdir='${prefix}/etc'
+target_alias=''
+
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+
+/* confdefs.h */
+#define PACKAGE_NAME "mathgl"
+#define PACKAGE_TARNAME "mathgl"
+#define PACKAGE_VERSION "1.10"
+#define PACKAGE_STRING "mathgl 1.10"
+#define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
+#define PACKAGE_URL ""
+#define PACKAGE "mathgl"
+#define VERSION "1.10"
+#define STDC_HEADERS 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_STRINGS_H 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_DLFCN_H 1
+#define LT_OBJDIR ".libs/"
+#define MGL_USE_DOUBLE 0
+
+configure: exit 0
diff --git a/config/config.guess b/config/config.guess
index da83314..c2246a4 100755
--- a/config/config.guess
+++ b/config/config.guess
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
 #   Free Software Foundation, Inc.
 
-timestamp='2009-04-27'
+timestamp='2009-12-30'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -27,16 +27,16 @@ timestamp='2009-04-27'
 # the same distribution terms that you use for the rest of that program.
 
 
-# Originally written by Per Bothner <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches at gnu.org> and include a ChangeLog
+# entry.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # exits with 0.  Otherwise, it exits with 1.
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -56,8 +56,9 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -170,7 +171,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
+			| grep -q __ELF__
 		then
 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
 		    # Return netbsd for either.  FIX?
@@ -333,6 +334,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	eval $set_cc_for_build
 	SUN_ARCH="i386"
@@ -656,7 +660,7 @@ EOF
 	    # => hppa64-hp-hpux11.23
 
 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
+		grep -q __LP64__
 	    then
 		HP_ARCH="hppa2.0w"
 	    else
@@ -807,12 +811,12 @@ EOF
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
-    *:Interix*:[3456]*)
+    *:Interix*:*)
     	case ${UNAME_MACHINE} in
 	    x86)
 		echo i586-pc-interix${UNAME_RELEASE}
 		exit ;;
-	    EM64T | authenticamd | genuineintel)
+	    authenticamd | genuineintel | EM64T)
 		echo x86_64-unknown-interix${UNAME_RELEASE}
 		exit ;;
 	    IA64)
@@ -822,6 +826,9 @@ EOF
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
 	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -851,6 +858,20 @@ EOF
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
     arm*:Linux:*:*)
 	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -873,6 +894,17 @@ EOF
     frv:Linux:*:*)
     	echo frv-unknown-linux-gnu
 	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	exit ;;
     ia64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
@@ -882,78 +914,34 @@ EOF
     m68*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    mips:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips
-	#undef mipsel
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    mips64:Linux:*:*)
+    mips:Linux:*:* | mips64:Linux:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 	#undef CPU
-	#undef mips64
-	#undef mips64el
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
+	CPU=${UNAME_MACHINE}el
 	#else
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
+	CPU=${UNAME_MACHINE}
 	#else
 	CPU=
 	#endif
 	#endif
 EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     or32:Linux:*:*)
 	echo or32-unknown-linux-gnu
 	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-	exit ;;
     padre:Linux:*:*)
 	echo sparc-unknown-linux-gnu
 	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -962,8 +950,11 @@ EOF
 	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
 	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux
@@ -986,66 +977,6 @@ EOF
     xtensa*:Linux:*:*)
     	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^LIBC/{
-		s: ::g
-		p
-	    }'`"
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
@@ -1074,7 +1005,7 @@ EOF
     i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
 	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     i*86:*DOS:*:*)
@@ -1182,7 +1113,7 @@ EOF
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     SM[BE]S:UNIX_SV:*:*)
@@ -1275,6 +1206,16 @@ EOF
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
 	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
 	    unknown) UNAME_PROCESSOR=powerpc ;;
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
diff --git a/config/config.sub b/config/config.sub
index a39437d..c2d1257 100755
--- a/config/config.sub
+++ b/config/config.sub
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
 #   Free Software Foundation, Inc.
 
-timestamp='2009-04-17'
+timestamp='2010-01-22'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -32,13 +32,16 @@ timestamp='2009-04-17'
 
 
 # Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -72,8 +75,9 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -149,10 +153,13 @@ case $os in
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray)
+	-apple | -axis | -knuth | -cray | -microblaze)
 		os=
 		basic_machine=$1
 		;;
+        -bluegene*)
+	        os=-cnk
+		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
 		basic_machine=$1
@@ -281,6 +288,7 @@ case $basic_machine in
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
 	| pyramid \
+	| rx \
 	| score \
 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
@@ -288,13 +296,14 @@ case $basic_machine in
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
 	| spu | strongarm \
 	| tahoe | thumb | tic4x | tic80 | tron \
+	| ubicom32 \
 	| v850 | v850e \
 	| we32k \
 	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
 	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
+	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
 		# Motorola 68HC11/12.
 		basic_machine=$basic_machine-unknown
 		os=-none
@@ -337,7 +346,7 @@ case $basic_machine in
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -365,15 +374,17 @@ case $basic_machine in
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
 	| pyramid-* \
-	| romp-* | rs6000-* \
+	| romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
 	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile-* | tilegx-* \
 	| tron-* \
+	| ubicom32-* \
 	| v850-* | v850e-* | vax-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
@@ -467,6 +478,10 @@ case $basic_machine in
 		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
 		os=-linux
 		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
@@ -719,6 +734,9 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+        microblaze)
+		basic_machine=microblaze-xilinx
+		;;
 	mingw32)
 		basic_machine=i386-pc
 		os=-mingw32
@@ -1069,6 +1087,11 @@ case $basic_machine in
 		basic_machine=tic6x-unknown
 		os=-coff
 		;;
+        # This must be matched before tile*.
+        tilegx*)
+		basic_machine=tilegx-unknown
+		os=-linux-gnu
+		;;
 	tile*)
 		basic_machine=tile-unknown
 		os=-linux-gnu
@@ -1240,6 +1263,9 @@ case $os in
         # First match some system type aliases
         # that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
+        -auroraux)
+	        os=-auroraux
+		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
@@ -1260,9 +1286,9 @@ case $os in
 	# Each alternative MUST END IN A *, to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-	      | -kopensolaris* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
 	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1283,7 +1309,7 @@ case $os in
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1416,6 +1442,8 @@ case $os in
 	-dicos*)
 		os=-dicos
 		;;
+        -nacl*)
+	        ;;
 	-none)
 		;;
 	*)
@@ -1613,7 +1641,7 @@ case $basic_machine in
 			-sunos*)
 				vendor=sun
 				;;
-			-aix*)
+			-cnk*|-aix*)
 				vendor=ibm
 				;;
 			-beos*)
diff --git a/config/libtool.m4 b/config/libtool.m4
index 1e7ea47..a3fee53 100644
--- a/config/libtool.m4
+++ b/config/libtool.m4
@@ -2445,7 +2445,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -3084,7 +3084,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -3705,7 +3705,7 @@ m4_if([$1], [CXX], [
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -3989,7 +3989,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -4285,6 +4285,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -4376,7 +4377,7 @@ _LT_EOF
       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -5860,7 +5861,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
diff --git a/config/ltmain.sh b/config/ltmain.sh
index 3506ead..7ed280b 100755
--- a/config/ltmain.sh
+++ b/config/ltmain.sh
@@ -1,6 +1,6 @@
 # Generated from ltmain.m4sh.
 
-# ltmain.sh (GNU libtool) 2.2.6
+# ltmain.sh (GNU libtool) 2.2.6b
 # Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
@@ -65,7 +65,7 @@
 #       compiler:		$LTCC
 #       compiler flags:		$LTCFLAGS
 #       linker:		$LD (gnu? $with_gnu_ld)
-#       $progname:		(GNU libtool) 2.2.6 Debian-2.2.6a-4
+#       $progname:		(GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1
 #       automake:		$automake_version
 #       autoconf:		$autoconf_version
 #
@@ -73,9 +73,9 @@
 
 PROGRAM=ltmain.sh
 PACKAGE=libtool
-VERSION="2.2.6 Debian-2.2.6a-4"
+VERSION="2.2.6b Debian-2.2.6b-2ubuntu1"
 TIMESTAMP=""
-package_revision=1.3012
+package_revision=1.3017
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
diff --git a/config/ltversion.m4 b/config/ltversion.m4
index b8e154f..f3c5309 100644
--- a/config/ltversion.m4
+++ b/config/ltversion.m4
@@ -9,15 +9,15 @@
 
 # Generated from ltversion.in.
 
-# serial 3012 ltversion.m4
+# serial 3017 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.2.6])
-m4_define([LT_PACKAGE_REVISION], [1.3012])
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6'
-macro_revision='1.3012'
+[macro_version='2.2.6b'
+macro_revision='1.3017'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/config/texinfo.tex b/config/texinfo.tex
index 0d3ba16..9140826 100644
--- a/config/texinfo.tex
+++ b/config/texinfo.tex
@@ -1,9 +1,9 @@
 % texinfo.tex -- TeX macros to handle Texinfo files.
-%
+% 
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2009-05-16.16}
+\def\texinfoversion{2009-08-14.15}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -1332,13 +1332,16 @@ output) for that.)}
 
 \ifpdf
   %
-  % Color manipulation macros based on pdfcolor.tex.
-  \def\cmykDarkRed{0.28 1 1 0.35}
-  \def\cmykBlack{0 0 0 1}
+  % Color manipulation macros based on pdfcolor.tex,
+  % except using rgb instead of cmyk; the latter is said to render as a
+  % very dark gray on-screen and a very dark halftone in print, instead
+  % of actual black.
+  \def\rgbDarkRed{0.50 0.09 0.12}
+  \def\rgbBlack{0 0 0}
   %
   % k sets the color for filling (usual text, etc.);
   % K sets the color for stroking (thin rules, e.g., normal _'s).
-  \def\pdfsetcolor#1{\pdfliteral{#1 k  #1 K}}
+  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
   %
   % Set color, and create a mark which defines \thiscolor accordingly,
   % so that \makeheadline knows which color to restore.
@@ -1348,7 +1351,7 @@ output) for that.)}
     \pdfsetcolor{#1}%
   }
   %
-  \def\maincolor{\cmykBlack}
+  \def\maincolor{\rgbBlack}
   \pdfsetcolor{\maincolor}
   \edef\thiscolor{\maincolor}
   \def\lastcolordefs{}
@@ -1443,8 +1446,8 @@ output) for that.)}
   %
   % by default, use a color that is dark enough to print on paper as
   % nearly black, but still distinguishable for online viewing.
-  \def\urlcolor{\cmykDarkRed}
-  \def\linkcolor{\cmykDarkRed}
+  \def\urlcolor{\rgbDarkRed}
+  \def\linkcolor{\rgbDarkRed}
   \def\endlink{\setcolor{\maincolor}\pdfendlink}
   %
   % Adding outlines to PDF; macros for calculating structure of outlines
@@ -4322,6 +4325,7 @@ end
   \definedummyword\code
   \definedummyword\command
   \definedummyword\dfn
+  \definedummyword\email
   \definedummyword\emph
   \definedummyword\env
   \definedummyword\file
@@ -9272,12 +9276,8 @@ directory should work if nowhere else does.}
 @markupsetuplqdefault
 @markupsetuprqdefault
 
- at c Gnulib now utterly and painfully insists on no trailing whitespace.
- at c So we have to nuke it.
-
 @c Local variables:
 @c eval: (add-hook 'write-file-hooks 'time-stamp)
- at c eval: (add-hook 'write-file-hooks 'nuke-trailing-whitespace)
 @c page-delimiter: "^\\\\message"
 @c time-stamp-start: "def\\\\texinfoversion{"
 @c time-stamp-format: "%:y-%02m-%02d.%02H"
diff --git a/configure b/configure
index 4016c53..96ab6cf 100755
--- a/configure
+++ b/configure
@@ -1,13 +1,15 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64 for mathgl 1.10.
+# Generated by GNU Autoconf 2.67 for mathgl 1.10.
 #
 # Report bugs to <mathgl.abalakin at gmail.com>.
 #
+#
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
 # Foundation, Inc.
 #
+#
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
 ## -------------------- ##
@@ -317,7 +319,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -357,19 +359,19 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -736,10 +738,11 @@ as_awk_strverscmp='
   }
 '
 
-exec 7<&0 </dev/null 6>&1
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -862,6 +865,10 @@ USE_GIF_FALSE
 USE_GIF_TRUE
 GIF_LIBS
 GIF_FLAGS
+USE_HDF4_FALSE
+USE_HDF4_TRUE
+HDF4_LIBS
+HDF4_FLAGS
 USE_HDF5_FALSE
 USE_HDF5_TRUE
 HDF5_LIBS
@@ -958,6 +965,7 @@ INSTALL_PROGRAM
 MGL_AGE
 MGL_REVISION
 MGL_CURRENT
+MGL_RELEASE
 target_alias
 host_alias
 build_alias
@@ -1014,6 +1022,7 @@ enable_gsl
 enable_glut
 enable_hdf5
 enable_hdf5_18
+enable_hdf4
 enable_gif
 enable_jpeg
 enable_fltk
@@ -1101,8 +1110,9 @@ do
   fi
 
   case $ac_option in
-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)	ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1147,7 +1157,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1173,7 +1183,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1377,7 +1387,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1393,7 +1403,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1423,8 +1433,8 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1432,7 +1442,7 @@ Try \`$0 --help' for more information."
     # Reject names that are not valid shell variable names.
     case $ac_envvar in #(
       '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1450,13 +1460,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  as_fn_error $? "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1479,7 +1489,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1493,8 +1503,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1509,9 +1519,9 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error "working directory cannot be determined"
+  as_fn_error $? "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error "pwd does not report name of working directory"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1550,11 +1560,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1594,7 +1604,7 @@ Configuration:
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
+  -q, --quiet, --silent   do not print \`checking ...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
@@ -1673,6 +1683,7 @@ Optional Features:
   --enable-glut    Turn on glut
   --enable-hdf5    Turn on hdf5
   --enable-hdf5_18    Turn on hdf5 version 1.8
+  --enable-hdf4    Turn on hdf4
   --enable-gif    Turn on gif
   --enable-jpeg    Turn on jpeg
   --enable-fltk    Turn on fltk
@@ -1697,7 +1708,7 @@ Some influential environment variables:
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
@@ -1772,9 +1783,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 mathgl configure 1.10
-generated by GNU Autoconf 2.64
+generated by GNU Autoconf 2.67
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1819,7 +1830,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 	ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
 
@@ -1857,7 +1868,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 	ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_compile
 
@@ -1903,7 +1914,7 @@ fi
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
 
@@ -1916,7 +1927,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1959,7 +1970,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -1971,7 +1982,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
 
@@ -2013,7 +2024,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
 
@@ -2025,7 +2036,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2105,7 +2116,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
 	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
 	 test ! -s conftest.err
        }; then :
@@ -2117,7 +2128,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_cpp
 
@@ -2163,7 +2174,7 @@ fi
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+  as_fn_set_status $ac_retval
 
 } # ac_fn_cxx_try_link
 
@@ -2175,10 +2186,10 @@ fi
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  if eval "test \"\${$3+set}\"" = set; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -2214,7 +2225,7 @@ if ac_fn_c_try_cpp "$LINENO"; then :
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
 $as_echo "$ac_header_preproc" >&6; }
 
@@ -2237,17 +2248,15 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( cat <<\_ASBOX
-## ---------------------------------------- ##
+( $as_echo "## ---------------------------------------- ##
 ## Report this to mathgl.abalakin at gmail.com ##
-## ---------------------------------------- ##
-_ASBOX
+## ---------------------------------------- ##"
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$3+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -2264,7 +2273,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by mathgl $as_me 1.10, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.67.  Invocation command line was
 
   $ $0 $@
 
@@ -2374,11 +2383,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2412,11 +2419,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2429,11 +2434,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2447,11 +2450,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2506,7 +2507,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -2517,18 +2523,22 @@ fi
 for ac_site_file in "$ac_site_file1" "$ac_site_file2"
 do
   test "x$ac_site_file" = xNONE && continue
-  if test -r "$ac_site_file"; then
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
   fi
 done
 
 if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
 $as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
@@ -2597,7 +2607,7 @@ if $ac_cache_corrupted; then
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2611,19 +2621,28 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+MGL_RELEASE=1.10
+
+
 
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2759,11 +2778,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2785,7 +2804,7 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" "$LINENO" 5
    fi
 
@@ -2795,7 +2814,7 @@ then
    # Ok.
    :
 else
-   as_fn_error "newly created file is older than distributed files!
+   as_fn_error $? "newly created file is older than distributed files!
 Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -2967,6 +2986,7 @@ IFS=$as_save_IFS
 
 fi
 
+  test -d ./--version && rmdir ./--version
   if test "${ac_cv_path_mkdir+set}" = set; then
     MKDIR_P="$ac_cv_path_mkdir -p"
   else
@@ -2974,7 +2994,6 @@ fi
     # value for MKDIR_P within a source directory, because that will
     # break other packages using the cache if that directory is
     # removed, or if the value is a relative name.
-    test -d ./--version && rmdir ./--version
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
@@ -3033,7 +3052,7 @@ done
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -3041,7 +3060,7 @@ SHELL = /bin/sh
 all:
 	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -3075,7 +3094,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
   fi
 fi
 
@@ -3432,8 +3451,8 @@ fi
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3454,32 +3473,30 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
 
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdio.h>
+
 int
 main ()
 {
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
 
   ;
   return 0;
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
@@ -3541,62 +3558,28 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
 if test -z "$ac_file"; then :
-  $as_echo "$as_me: failed program was:" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
 
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
 $as_echo_n "checking for suffix of executables... " >&6; }
 if { { ac_try="$ac_link"
@@ -3626,16 +3609,75 @@ done
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
-rm -f conftest$ac_cv_exeext
+rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
 $as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
 if test "${ac_cv_objext+set}" = set; then :
@@ -3678,8 +3720,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -4218,8 +4260,8 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
@@ -4476,7 +4518,7 @@ fi
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
@@ -4487,16 +4529,16 @@ else
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -4521,7 +4563,7 @@ else
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -4529,7 +4571,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -4860,8 +4902,8 @@ esac
 
 
 
-macro_version='2.2.6'
-macro_revision='1.3012'
+macro_version='2.2.6b'
+macro_revision='1.3017'
 
 
 
@@ -4934,7 +4976,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
@@ -5010,7 +5052,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_GREP=$GREP
@@ -5076,7 +5118,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -5143,7 +5185,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -5259,7 +5301,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -5461,13 +5503,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5464: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5506: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5467: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5509: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5470: output\"" >&5)
+  (eval echo "\"\$as_me:5512: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -5930,7 +5972,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -6670,7 +6712,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 6673 "configure"' > conftest.$ac_ext
+  echo '#line 6715 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7459,7 +7501,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -7475,11 +7517,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -7518,7 +7560,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -7534,18 +7576,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
 
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
 fi
 
 ac_ext=c
@@ -7674,8 +7716,7 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -7830,8 +7871,8 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
   fi
+  rm -f conftest.er1 conftest.err
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
@@ -8125,7 +8166,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -8141,11 +8182,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -8184,7 +8225,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -8200,11 +8241,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
 
 else
@@ -8694,6 +8735,10 @@ _lt_linker_boilerplate=`cat conftest.err`
 $RM -r conftest*
 
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
 if test -n "$compiler"; then
 
 lt_prog_compiler_no_builtin_flag=
@@ -8719,11 +8764,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8722: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8767: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8726: \$? = $ac_status" >&5
+   echo "$as_me:8771: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8888,7 +8933,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -9058,11 +9103,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9061: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9106: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:9065: \$? = $ac_status" >&5
+   echo "$as_me:9110: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -9163,11 +9208,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9166: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9211: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9170: \$? = $ac_status" >&5
+   echo "$as_me:9215: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9218,11 +9263,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9221: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:9266: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9225: \$? = $ac_status" >&5
+   echo "$as_me:9270: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -9361,6 +9406,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -9452,7 +9498,7 @@ _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -10914,7 +10960,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -11601,7 +11647,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11604 "configure"
+#line 11650 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11697,7 +11743,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11700 "configure"
+#line 11746 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12112,7 +12158,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
@@ -12637,7 +12683,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         inherit_rpath_CXX=yes
         ;;
 
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -13465,7 +13511,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -13653,11 +13699,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13656: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13702: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:13660: \$? = $ac_status" >&5
+   echo "$as_me:13706: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -13752,11 +13798,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13755: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13801: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13759: \$? = $ac_status" >&5
+   echo "$as_me:13805: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -13804,11 +13850,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:13807: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:13853: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:13811: \$? = $ac_status" >&5
+   echo "$as_me:13857: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -14382,7 +14428,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu)
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -14777,7 +14823,7 @@ if test "${enable_double+set}" = set; then :
   enableval=$enable_double; case "${enableval}" in
   yes) double=true ;;
   no)  double=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-double" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-double" "$LINENO" 5  ;;
 esac
 else
   double=false
@@ -14799,7 +14845,7 @@ if test "${enable_all+set}" = set; then :
   enableval=$enable_all; case "${enableval}" in
   yes) all=true ;;
   no)  all=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-all" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-all" "$LINENO" 5  ;;
 esac
 else
   all=false
@@ -14811,7 +14857,7 @@ if test "${enable_langall+set}" = set; then :
   enableval=$enable_langall; case "${enableval}" in
   yes) langall=true ;;
   no)  langall=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-langall" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-langall" "$LINENO" 5  ;;
 esac
 else
   langall=false
@@ -14823,7 +14869,7 @@ if test "${enable_pthread+set}" = set; then :
   enableval=$enable_pthread; case "${enableval}" in
   yes) pthread=true ;;
   no)  pthread=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-pthread" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-pthread" "$LINENO" 5  ;;
 esac
 else
   pthread=true
@@ -14888,7 +14934,7 @@ if test "${enable_gsl+set}" = set; then :
   enableval=$enable_gsl; case "${enableval}" in
   yes) gsl=true ;;
   no)  gsl=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-gsl" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-gsl" "$LINENO" 5  ;;
 esac
 else
   gsl=true
@@ -14996,7 +15042,7 @@ if test "${enable_glut+set}" = set; then :
   enableval=$enable_glut; case "${enableval}" in
   yes) glut=true ;;
   no)  glut=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-glut" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-glut" "$LINENO" 5  ;;
 esac
 else
   glut=false
@@ -15026,7 +15072,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5
 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15055,8 +15101,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   GL_LIBS=-l${GL_LIBS}
 else
   echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit
@@ -15074,7 +15119,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5
 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15103,8 +15148,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS}
 else
   (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit
@@ -15125,7 +15169,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5
 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15154,8 +15198,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   GL_LIBS=-l${GL_LIBS}
 else
   echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit
@@ -15173,7 +15216,7 @@ fi
 	as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5
 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; }
-if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval "test \"\${$as_ac_Lib+set}\"" = set; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -15202,8 +15245,7 @@ fi
 eval ac_res=\$$as_ac_Lib
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_Lib
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS}
 else
   (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit
@@ -15235,7 +15277,7 @@ if test "${enable_hdf5+set}" = set; then :
   enableval=$enable_hdf5; case "${enableval}" in
   yes) hdf5=true ;;
   no)  hdf5=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-hdf5" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf5" "$LINENO" 5  ;;
 esac
 else
   hdf5=false
@@ -15246,7 +15288,7 @@ if test "${enable_hdf5_18+set}" = set; then :
   enableval=$enable_hdf5_18; case "${enableval}" in
   yes) hdf5_18=true ;;
   no)  hdf5_18=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5  ;;
 esac
 else
   hdf5_18=false
@@ -15310,12 +15352,78 @@ else
 fi
 
 
+
+# Check whether --enable-hdf4 was given.
+if test "${enable_hdf4+set}" = set; then :
+  enableval=$enable_hdf4; case "${enableval}" in
+  yes) hdf4=true ;;
+  no)  hdf4=false ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-hdf4" "$LINENO" 5  ;;
+esac
+else
+  hdf4=false
+fi
+
+ac_fn_c_check_header_mongrel "$LINENO" "hdf/mfhdf.h" "ac_cv_header_hdf_mfhdf_h" "$ac_includes_default"
+if test "x$ac_cv_header_hdf_mfhdf_h" = x""yes; then :
+  (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4
+else
+  (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldf" >&5
+$as_echo_n "checking for main in -ldf... " >&6; }
+if test "${ac_cv_lib_df_main+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldf  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+return main ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_df_main=yes
+else
+  ac_cv_lib_df_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_df_main" >&5
+$as_echo "$ac_cv_lib_df_main" >&6; }
+if test "x$ac_cv_lib_df_main" = x""yes; then :
+  (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf"
+else
+  (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit
+fi
+
+ if (test x$all = xtrue || test x$hdf4 = xtrue); then
+  USE_HDF4_TRUE=
+  USE_HDF4_FALSE='#'
+else
+  USE_HDF4_TRUE='#'
+  USE_HDF4_FALSE=
+fi
+
+
 # Check whether --enable-gif was given.
 if test "${enable_gif+set}" = set; then :
   enableval=$enable_gif; case "${enableval}" in
   yes) gif=true ;;
   no)  gif=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-gif" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-gif" "$LINENO" 5  ;;
 esac
 else
   gif=false
@@ -15426,7 +15534,7 @@ if test "${enable_jpeg+set}" = set; then :
   enableval=$enable_jpeg; case "${enableval}" in
   yes) jpeg=true ;;
   no)  jpeg=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-jpeg" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-jpeg" "$LINENO" 5  ;;
 esac
 else
   jpeg=false
@@ -15491,7 +15599,7 @@ if test "${enable_fltk+set}" = set; then :
   enableval=$enable_fltk; case "${enableval}" in
   yes) fltk=true ;;
   no)  fltk=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-fltk" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-fltk" "$LINENO" 5  ;;
 esac
 else
   fltk=false
@@ -15595,7 +15703,7 @@ if test "${enable_wx+set}" = set; then :
   enableval=$enable_wx; case "${enableval}" in
   yes) wx=true ;;
   no)  wx=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-wx" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-wx" "$LINENO" 5  ;;
 esac
 else
   wx=false
@@ -15700,7 +15808,7 @@ if test "${enable_qt+set}" = set; then :
   enableval=$enable_qt; case "${enableval}" in
   yes) qt=true ;;
   no)  qt=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-qt" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-qt" "$LINENO" 5  ;;
 esac
 else
   qt=false
@@ -15826,7 +15934,7 @@ done
 test -n "$QMAKE" || QMAKE="missing"
 
     if test x"$QMAKE" = xmissing; then
-      as_fn_error "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5
     fi
   fi
 
@@ -15927,7 +16035,7 @@ done
 test -n "$MOC" || MOC="missing"
 
     if test x"$MOC" = xmissing; then
-      as_fn_error "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
     fi
   fi
 
@@ -16028,7 +16136,7 @@ done
 test -n "$UIC" || UIC="missing"
 
     if test x"$UIC" = xmissing; then
-      as_fn_error "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
+      as_fn_error $? "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5
     fi
   fi
 
@@ -16139,7 +16247,7 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.
     QT_PATH=`dirname "$QMAKE"`
   fi
   if test x"$QT_PATH" = x; then
-    as_fn_error "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5
+    as_fn_error $? "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5
   fi
 
 
@@ -16173,7 +16281,7 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH.
   then
     :
   else
-    as_fn_error "Cannot cd to or write in $my_tmpdir" "$LINENO" 5
+    as_fn_error $? "Cannot cd to or write in $my_tmpdir" "$LINENO" 5
   fi
   cat >conftest.h <<_ASEOF
 #include <QObject>
@@ -16212,14 +16320,14 @@ int main()
 }
 _ASEOF
   if $QMAKE -project; then :; else
-    as_fn_error "Calling $QMAKE -project failed." "$LINENO" 5
+    as_fn_error $? "Calling $QMAKE -project failed." "$LINENO" 5
   fi
 
   # Find the .pro file generated by qmake.
   pro_file='conftest.dir.pro'
   test -f $pro_file || pro_file=`echo *.pro`
   if test -f "$pro_file"; then :; else
-    as_fn_error "Can't find the .pro file generated by Qmake." "$LINENO" 5
+    as_fn_error $? "Can't find the .pro file generated by Qmake." "$LINENO" 5
   fi
 
 
@@ -16232,7 +16340,7 @@ _ASEOF
   sed 's/^/| /' "$pro_file" >&5
 
   if $QMAKE; then :; else
-    as_fn_error "Calling $QMAKE failed." "$LINENO" 5
+    as_fn_error $? "Calling $QMAKE failed." "$LINENO" 5
   fi
   # Try to compile a simple Qt app.
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt app" >&5
@@ -16298,7 +16406,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5
 $as_echo "$at_cv_qt_build" >&6; }
   if test x"$at_cv_qt_build" = xko; then
-    as_fn_error "Cannot build a test Qt program" "$LINENO" 5
+    as_fn_error $? "Cannot build a test Qt program" "$LINENO" 5
   fi
   QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^^0-9*//'`
 
@@ -16324,7 +16432,7 @@ $as_echo "$at_cv_qt_build" >&6; }
   fi
   if test -f $at_mfile; then :; else
     cd "$my_configure_pwd"
-    as_fn_error "Cannot find the Makefile generated by qmake." "$LINENO" 5
+    as_fn_error $? "Cannot find the Makefile generated by qmake." "$LINENO" 5
   fi
 
   # Find the DEFINES of Qt (should have been named CPPFLAGS).
@@ -16434,7 +16542,7 @@ $as_echo "$at_cv_env_QT_LIBS" >&6; }
 
 
   if test x"$QMAKE" = x; then
-    as_fn_error "\$QMAKE is empty. \
+    as_fn_error $? "\$QMAKE is empty. \
 Did you invoke AT_WITH_QT before AT_REQUIRE_QT_VERSION?" "$LINENO" 5
   fi
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt's version" >&5
@@ -16450,7 +16558,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_QT_VERSION" >&5
 $as_echo "$at_cv_QT_VERSION" >&6; }
   if test x"$at_cv_QT_VERSION" = x; then
-    as_fn_error "Cannot detect Qt's version." "$LINENO" 5
+    as_fn_error $? "Cannot detect Qt's version." "$LINENO" 5
   fi
   QT_VERSION=$at_cv_QT_VERSION
 
@@ -16459,7 +16567,7 @@ as_arg_v2=4.3
 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null
 case $? in #(
   1) :
-    as_fn_error "This package requires Qt 4.3 or above." "$LINENO" 5 ;; #(
+    as_fn_error $? "This package requires Qt 4.3 or above." "$LINENO" 5  ;; #(
   0) :
      ;; #(
   2) :
@@ -16484,7 +16592,7 @@ if test "${enable_python+set}" = set; then :
   enableval=$enable_python; case "${enableval}" in
   yes) python=true ;;
   no)  python=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-python" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5  ;;
 esac
 else
   python=false
@@ -16624,7 +16732,7 @@ test -n "$PYTHON" || PYTHON=":"
 
 
   if test "$PYTHON" = :; then
-      as_fn_error "no suitable Python interpreter found" "$LINENO" 5
+      as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5
   else
 
 
@@ -16679,6 +16787,14 @@ else
        am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'`
        am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"`
        ;;
+     *)
+       case $am_py_prefix in
+         /usr|/System*) ;;
+         *)
+	  am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	  ;;
+       esac
+       ;;
      esac
 
 fi
@@ -16709,6 +16825,14 @@ else
        am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'`
        am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"`
        ;;
+     *)
+       case $am_py_exec_prefix in
+         /usr|/System*) ;;
+         *)
+	   am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages
+	   ;;
+       esac
+       ;;
      esac
 
 fi
@@ -16744,7 +16868,7 @@ if test "${enable_octave+set}" = set; then :
   enableval=$enable_octave; case "${enableval}" in
   yes) octave=true ;;
   no)  octave=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-octave" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-octave" "$LINENO" 5  ;;
 esac
 else
   octave=false
@@ -16815,7 +16939,7 @@ if test "${enable_testio+set}" = set; then :
   enableval=$enable_testio; case "${enableval}" in
   yes) testio=true ;;
   no)  testio=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-testio" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-testio" "$LINENO" 5  ;;
 esac
 else
   testio=false
@@ -16835,7 +16959,7 @@ if test "${enable_docs+set}" = set; then :
   enableval=$enable_docs; case "${enableval}" in
   yes) docs=true ;;
   no)  docs=false ;;
-  *) as_fn_error "bad value ${enableval} for --enable-docs" "$LINENO" 5 ;;
+  *) as_fn_error $? "bad value ${enableval} for --enable-docs" "$LINENO" 5  ;;
 esac
 else
   docs=false
@@ -16942,6 +17066,7 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
+U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
@@ -16965,71 +17090,75 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_PTHREAD_TRUE}" && test -z "${USE_PTHREAD_FALSE}"; then
-  as_fn_error "conditional \"USE_PTHREAD\" was never defined.
+  as_fn_error $? "conditional \"USE_PTHREAD\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_GSL_TRUE}" && test -z "${USE_GSL_FALSE}"; then
-  as_fn_error "conditional \"USE_GSL\" was never defined.
+  as_fn_error $? "conditional \"USE_GSL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_GLUT_TRUE}" && test -z "${USE_GLUT_FALSE}"; then
-  as_fn_error "conditional \"USE_GLUT\" was never defined.
+  as_fn_error $? "conditional \"USE_GLUT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_HDF5_TRUE}" && test -z "${USE_HDF5_FALSE}"; then
-  as_fn_error "conditional \"USE_HDF5\" was never defined.
+  as_fn_error $? "conditional \"USE_HDF5\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_HDF4_TRUE}" && test -z "${USE_HDF4_FALSE}"; then
+  as_fn_error $? "conditional \"USE_HDF4\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_GIF_TRUE}" && test -z "${USE_GIF_FALSE}"; then
-  as_fn_error "conditional \"USE_GIF\" was never defined.
+  as_fn_error $? "conditional \"USE_GIF\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_JPEG_TRUE}" && test -z "${USE_JPEG_FALSE}"; then
-  as_fn_error "conditional \"USE_JPEG\" was never defined.
+  as_fn_error $? "conditional \"USE_JPEG\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_FLTK_TRUE}" && test -z "${USE_FLTK_FALSE}"; then
-  as_fn_error "conditional \"USE_FLTK\" was never defined.
+  as_fn_error $? "conditional \"USE_FLTK\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_WX_TRUE}" && test -z "${USE_WX_FALSE}"; then
-  as_fn_error "conditional \"USE_WX\" was never defined.
+  as_fn_error $? "conditional \"USE_WX\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_QT_TRUE}" && test -z "${USE_QT_FALSE}"; then
-  as_fn_error "conditional \"USE_QT\" was never defined.
+  as_fn_error $? "conditional \"USE_QT\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then
-  as_fn_error "conditional \"USE_PYTHON\" was never defined.
+  as_fn_error $? "conditional \"USE_PYTHON\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_OCTAVE_TRUE}" && test -z "${USE_OCTAVE_FALSE}"; then
-  as_fn_error "conditional \"USE_OCTAVE\" was never defined.
+  as_fn_error $? "conditional \"USE_OCTAVE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_TESTIO_TRUE}" && test -z "${USE_TESTIO_FALSE}"; then
-  as_fn_error "conditional \"USE_TESTIO\" was never defined.
+  as_fn_error $? "conditional \"USE_TESTIO\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${USE_DOCS_TRUE}" && test -z "${USE_DOCS_FALSE}"; then
-  as_fn_error "conditional \"USE_DOCS\" was never defined.
+  as_fn_error $? "conditional \"USE_DOCS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
@@ -17179,19 +17308,19 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -17387,7 +17516,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -17441,7 +17570,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by mathgl $as_me 1.10, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.67.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -17481,6 +17610,7 @@ Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
   -q, --quiet, --silent
                    do not print progress messages
   -d, --debug      don't remove temporary files
@@ -17503,12 +17633,13 @@ Report bugs to <mathgl.abalakin at gmail.com>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 mathgl config.status 1.10
-configured by $0, generated by GNU Autoconf 2.64,
-  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+configured by $0, generated by GNU Autoconf 2.67,
+  with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -17526,11 +17657,16 @@ ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
-  --*=*)
+  --*=?*)
     ac_option=`expr "X$1" : 'X\([^=]*\)='`
     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
   *)
     ac_option=$1
     ac_optarg=$2
@@ -17544,12 +17680,15 @@ do
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
     $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -17562,7 +17701,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -17571,7 +17710,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -17990,7 +18129,7 @@ do
     "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;;
     "widgets/Makefile") CONFIG_FILES="$CONFIG_FILES widgets/Makefile" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
   esac
 done
 
@@ -18028,7 +18167,7 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -18045,7 +18184,7 @@ if test "x$ac_cr" = x; then
 fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
@@ -18059,18 +18198,18 @@ _ACEOF
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   . ./conf$$subs.sh ||
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
 
   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
   if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -18092,7 +18231,7 @@ s/'"$ac_delim"'$//
 t delim
 :nl
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more1
 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
 p
@@ -18106,7 +18245,7 @@ s/.\{148\}//
 t nl
 :delim
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more2
 s/["\\]/\\&/g; s/^/"/; s/$/"/
 p
@@ -18159,20 +18298,28 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
 else
   cat
 fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[	 ]*\):*/\1/
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
 s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
 s/^[^=]*=[	 ]*$//
 }'
 fi
@@ -18200,7 +18347,7 @@ for ac_last_try in false false :; do
   if test -z "$ac_t"; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -18285,7 +18432,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -18298,7 +18445,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -18326,7 +18473,7 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -18353,7 +18500,7 @@ $as_echo "$as_me: creating $ac_file" >&6;}
 
     case $ac_tag in
     *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
     esac
     ;;
   esac
@@ -18490,22 +18637,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
+which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&2;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
   -) cat "$tmp/out" && rm -f "$tmp/out";;
   *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
   esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -18516,19 +18663,19 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
       $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
     } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
       mv "$tmp/config.h" "$ac_file" \
-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
       && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
 _am_arg="$ac_file"
@@ -19486,7 +19633,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -19507,7 +19654,7 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit $?
+  $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
diff --git a/lang/INDEX b/configure-stamp
similarity index 100%
copy from lang/INDEX
copy to configure-stamp
diff --git a/configure.ac b/configure.ac
index ff6a500..b4afae5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,8 @@
 AC_INIT([mathgl], [1.10], [mathgl.abalakin at gmail.com])
 
+MGL_RELEASE=1.10
+AC_SUBST(MGL_RELEASE)
+
 AC_CONFIG_MACRO_DIR([config])
 AC_CONFIG_AUX_DIR(config)
 AC_CONFIG_SRCDIR(mgl)
@@ -177,6 +180,21 @@ AC_CHECK_LIB([hdf5], [main], [(test x$all = xtrue || test x$hdf5 = xtrue || test
     [(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 library" && exit])
 AM_CONDITIONAL(USE_HDF5, (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue))
 
+
+AC_ARG_ENABLE(hdf4,
+[  --enable-hdf4    Turn on hdf4],
+[case "${enableval}" in
+  yes) hdf4=true ;;
+  no)  hdf4=false ;;
+  *) AC_MSG_ERROR(bad value ${enableval} for --enable-hdf4) ;;
+esac],[hdf4=false])
+AC_CHECK_HEADER(hdf/mfhdf.h,[(test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4 ],
+    [(test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit])
+    AC_SUBST(HDF4_FLAGS)
+AC_CHECK_LIB([df], [main], [(test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf" AC_SUBST(HDF4_LIBS)], 
+    [(test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit])
+AM_CONDITIONAL(USE_HDF4, (test x$all = xtrue || test x$hdf4 = xtrue))
+
 AC_ARG_ENABLE(gif,
 [  --enable-gif    Turn on gif],
 [case "${enableval}" in
diff --git a/debian/changelog b/debian/changelog
index 1518e0b..91ad473 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,12 @@
-mathgl (1.10.2.1-3) unstable; urgency=low
+mathgl (1.11-1) unstable; urgency=low
+
+  * New upstream release (Closes: #603004)
+  * Remove .pdf sample pictures from the html documentation since they
+    are not 3d.
+
+ -- Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>  Wed, 10 Nov 2010 20:46:00 +0200
+
+mathgl (1.10.2.1-3) unreleased; urgency=low
 
   * Make .pdf sample pictures accessible from the html documentation.
   * Correct several spelling mistakes in manpages and in lang/numpy.i
diff --git a/debian/mathgl-doc.install b/debian/mathgl-doc.install
index f165f03..e6f8b51 100644
--- a/debian/mathgl-doc.install
+++ b/debian/mathgl-doc.install
@@ -1,7 +1,6 @@
 usr/share/doc/mathgl/mathgl_en.html/ usr/share/doc/mathgl-doc/en/
 usr/share/doc/mathgl/png_static/ usr/share/doc/mathgl-doc/en/mathgl_en.html/
 usr/share/doc/mathgl/png/ usr/share/doc/mathgl-doc/en/mathgl_en.html/
-usr/share/doc/mathgl/pdf_u3d/ usr/share/doc/mathgl-doc/en/mathgl_en.html/
 usr/share/doc/mathgl/mathgl_en.pdf usr/share/doc/mathgl-doc/
 usr/share/info/mathgl_en.info*
 debian/folder/mathgl-doc /usr/share/doc-base/
\ No newline at end of file
diff --git a/debian/patches/debian-changes-1.11-1 b/debian/patches/debian-changes-1.11-1
new file mode 100644
index 0000000..1fe5eab
--- /dev/null
+++ b/debian/patches/debian-changes-1.11-1
@@ -0,0 +1,9436 @@
+Description: Upstream changes introduced in version 1.11-1
+ This patch has been created by dpkg-source during the package build.
+ Here's the last changelog entry, hopefully it gives details on why
+ those changes were made:
+ .
+ mathgl (1.11-1) unstable; urgency=low
+ .
+   * New upstream release (Closes: #603004)
+   * Remove .pdf sample pictures from the html documentation since they
+     are not 3d.
+ .
+ The person named in the Author field signed this changelog entry.
+Author: Dimitrios Eftaxiopoulos <eftaxi12 at otenet.gr>
+Bug-Debian: http://bugs.debian.org/603004
+
+---
+The information above should follow the Patch Tagging Guidelines, please
+checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
+are templates for supplementary fields that you might want to add:
+
+Origin: <vendor|upstream|other>, <url of original patch>
+Bug: <url in upstream bugtracker>
+Bug-Debian: http://bugs.debian.org/<bugnumber>
+Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
+Forwarded: <no|not-needed|url proving that it has been forwarded>
+Reviewed-By: <name and email of someone who approved the patch>
+Last-Update: <YYYY-MM-DD>
+
+--- mathgl-1.11.orig/Makefile.in
++++ mathgl-1.11/Makefile.in
+@@ -46,7 +46,11 @@ DIST_COMMON = README $(am__configure_dep
+ 	config/texinfo.tex
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+--- mathgl-1.11.orig/aclocal.m4
++++ mathgl-1.11/aclocal.m4
+@@ -19,7972 +19,6 @@ You have another version of autoconf.  I
+ If you have problems, you may need to regenerate the build system entirely.
+ To do so, use the procedure documented by the package, typically `autoreconf'.])])
+ 
+-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+-#
+-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+-#   Written by Gordon Matzigkeit, 1996
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-m4_define([_LT_COPYING], [dnl
+-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+-#   Written by Gordon Matzigkeit, 1996
+-#
+-#   This file is part of GNU Libtool.
+-#
+-# GNU Libtool is free software; you can redistribute it and/or
+-# modify it under the terms of the GNU General Public License as
+-# published by the Free Software Foundation; either version 2 of
+-# the License, or (at your option) any later version.
+-#
+-# As a special exception to the GNU General Public License,
+-# if you distribute this file as part of a program or library that
+-# is built using GNU Libtool, you may include this file under the
+-# same distribution terms that you use for the rest of that program.
+-#
+-# GNU Libtool is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with GNU Libtool; see the file COPYING.  If not, a copy
+-# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+-# obtained by writing to the Free Software Foundation, Inc.,
+-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+-])
+-
+-# serial 56 LT_INIT
+-
+-
+-# LT_PREREQ(VERSION)
+-# ------------------
+-# Complain and exit if this libtool version is less that VERSION.
+-m4_defun([LT_PREREQ],
+-[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+-       [m4_default([$3],
+-		   [m4_fatal([Libtool version $1 or higher is required],
+-		             63)])],
+-       [$2])])
+-
+-
+-# _LT_CHECK_BUILDDIR
+-# ------------------
+-# Complain if the absolute build directory name contains unusual characters
+-m4_defun([_LT_CHECK_BUILDDIR],
+-[case `pwd` in
+-  *\ * | *\	*)
+-    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+-esac
+-])
+-
+-
+-# LT_INIT([OPTIONS])
+-# ------------------
+-AC_DEFUN([LT_INIT],
+-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+-AC_BEFORE([$0], [LT_LANG])dnl
+-AC_BEFORE([$0], [LT_OUTPUT])dnl
+-AC_BEFORE([$0], [LTDL_INIT])dnl
+-m4_require([_LT_CHECK_BUILDDIR])dnl
+-
+-dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+-m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+-m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+-dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+-dnl unless we require an AC_DEFUNed macro:
+-AC_REQUIRE([LTOPTIONS_VERSION])dnl
+-AC_REQUIRE([LTSUGAR_VERSION])dnl
+-AC_REQUIRE([LTVERSION_VERSION])dnl
+-AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+-m4_require([_LT_PROG_LTMAIN])dnl
+-
+-dnl Parse OPTIONS
+-_LT_SET_OPTIONS([$0], [$1])
+-
+-# This can be used to rebuild libtool when needed
+-LIBTOOL_DEPS="$ltmain"
+-
+-# Always use our own libtool.
+-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+-AC_SUBST(LIBTOOL)dnl
+-
+-_LT_SETUP
+-
+-# Only expand once:
+-m4_define([LT_INIT])
+-])# LT_INIT
+-
+-# Old names:
+-AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+-AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+-dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+-
+-
+-# _LT_CC_BASENAME(CC)
+-# -------------------
+-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+-m4_defun([_LT_CC_BASENAME],
+-[for cc_temp in $1""; do
+-  case $cc_temp in
+-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+-    \-*) ;;
+-    *) break;;
+-  esac
+-done
+-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+-])
+-
+-
+-# _LT_FILEUTILS_DEFAULTS
+-# ----------------------
+-# It is okay to use these file commands and assume they have been set
+-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+-m4_defun([_LT_FILEUTILS_DEFAULTS],
+-[: ${CP="cp -f"}
+-: ${MV="mv -f"}
+-: ${RM="rm -f"}
+-])# _LT_FILEUTILS_DEFAULTS
+-
+-
+-# _LT_SETUP
+-# ---------
+-m4_defun([_LT_SETUP],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+-_LT_DECL([], [host_alias], [0], [The host system])dnl
+-_LT_DECL([], [host], [0])dnl
+-_LT_DECL([], [host_os], [0])dnl
+-dnl
+-_LT_DECL([], [build_alias], [0], [The build system])dnl
+-_LT_DECL([], [build], [0])dnl
+-_LT_DECL([], [build_os], [0])dnl
+-dnl
+-AC_REQUIRE([AC_PROG_CC])dnl
+-AC_REQUIRE([LT_PATH_LD])dnl
+-AC_REQUIRE([LT_PATH_NM])dnl
+-dnl
+-AC_REQUIRE([AC_PROG_LN_S])dnl
+-test -z "$LN_S" && LN_S="ln -s"
+-_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+-dnl
+-AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+-_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+-_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+-dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+-m4_require([_LT_CMD_RELOAD])dnl
+-m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+-m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+-
+-_LT_CONFIG_LIBTOOL_INIT([
+-# See if we are running on zsh, and set the options which allow our
+-# commands through without removal of \ escapes INIT.
+-if test -n "\${ZSH_VERSION+set}" ; then
+-   setopt NO_GLOB_SUBST
+-fi
+-])
+-if test -n "${ZSH_VERSION+set}" ; then
+-   setopt NO_GLOB_SUBST
+-fi
+-
+-_LT_CHECK_OBJDIR
+-
+-m4_require([_LT_TAG_COMPILER])dnl
+-_LT_PROG_ECHO_BACKSLASH
+-
+-case $host_os in
+-aix3*)
+-  # AIX sometimes has problems with the GCC collect2 program.  For some
+-  # reason, if we set the COLLECT_NAMES environment variable, the problems
+-  # vanish in a puff of smoke.
+-  if test "X${COLLECT_NAMES+set}" != Xset; then
+-    COLLECT_NAMES=
+-    export COLLECT_NAMES
+-  fi
+-  ;;
+-esac
+-
+-# Sed substitution that helps us do robust quoting.  It backslashifies
+-# metacharacters that are still active within double-quoted strings.
+-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+-
+-# Same as above, but do not quote variable references.
+-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+-
+-# Sed substitution to delay expansion of an escaped shell variable in a
+-# double_quote_subst'ed string.
+-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+-
+-# Sed substitution to delay expansion of an escaped single quote.
+-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+-
+-# Sed substitution to avoid accidental globbing in evaled expressions
+-no_glob_subst='s/\*/\\\*/g'
+-
+-# Global variables:
+-ofile=libtool
+-can_build_shared=yes
+-
+-# All known linkers require a `.a' archive for static linking (except MSVC,
+-# which needs '.lib').
+-libext=a
+-
+-with_gnu_ld="$lt_cv_prog_gnu_ld"
+-
+-old_CC="$CC"
+-old_CFLAGS="$CFLAGS"
+-
+-# Set sane defaults for various variables
+-test -z "$CC" && CC=cc
+-test -z "$LTCC" && LTCC=$CC
+-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+-test -z "$LD" && LD=ld
+-test -z "$ac_objext" && ac_objext=o
+-
+-_LT_CC_BASENAME([$compiler])
+-
+-# Only perform the check for file, if the check method requires it
+-test -z "$MAGIC_CMD" && MAGIC_CMD=file
+-case $deplibs_check_method in
+-file_magic*)
+-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+-    _LT_PATH_MAGIC
+-  fi
+-  ;;
+-esac
+-
+-# Use C for the default configuration in the libtool script
+-LT_SUPPORTED_TAG([CC])
+-_LT_LANG_C_CONFIG
+-_LT_LANG_DEFAULT_CONFIG
+-_LT_CONFIG_COMMANDS
+-])# _LT_SETUP
+-
+-
+-# _LT_PROG_LTMAIN
+-# ---------------
+-# Note that this code is called both from `configure', and `config.status'
+-# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+-# `config.status' has no value for ac_aux_dir unless we are using Automake,
+-# so we pass a copy along to make sure it has a sensible value anyway.
+-m4_defun([_LT_PROG_LTMAIN],
+-[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+-_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+-ltmain="$ac_aux_dir/ltmain.sh"
+-])# _LT_PROG_LTMAIN
+-
+-
+-
+-# So that we can recreate a full libtool script including additional
+-# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+-# in macros and then make a single call at the end using the `libtool'
+-# label.
+-
+-
+-# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+-# ----------------------------------------
+-# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+-m4_define([_LT_CONFIG_LIBTOOL_INIT],
+-[m4_ifval([$1],
+-          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+-                     [$1
+-])])])
+-
+-# Initialize.
+-m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+-
+-
+-# _LT_CONFIG_LIBTOOL([COMMANDS])
+-# ------------------------------
+-# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+-m4_define([_LT_CONFIG_LIBTOOL],
+-[m4_ifval([$1],
+-          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+-                     [$1
+-])])])
+-
+-# Initialize.
+-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+-
+-
+-# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+-# -----------------------------------------------------
+-m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+-[_LT_CONFIG_LIBTOOL([$1])
+-_LT_CONFIG_LIBTOOL_INIT([$2])
+-])
+-
+-
+-# _LT_FORMAT_COMMENT([COMMENT])
+-# -----------------------------
+-# Add leading comment marks to the start of each line, and a trailing
+-# full-stop to the whole comment if one is not present already.
+-m4_define([_LT_FORMAT_COMMENT],
+-[m4_ifval([$1], [
+-m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+-              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+-)])
+-
+-
+-
+-
+-
+-# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+-# -------------------------------------------------------------------
+-# CONFIGNAME is the name given to the value in the libtool script.
+-# VARNAME is the (base) name used in the configure script.
+-# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+-# VARNAME.  Any other value will be used directly.
+-m4_define([_LT_DECL],
+-[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+-    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+-	[m4_ifval([$1], [$1], [$2])])
+-    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+-    m4_ifval([$4],
+-	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+-    lt_dict_add_subkey([lt_decl_dict], [$2],
+-	[tagged?], [m4_ifval([$5], [yes], [no])])])
+-])
+-
+-
+-# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+-# --------------------------------------------------------
+-m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+-
+-
+-# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+-# ------------------------------------------------
+-m4_define([lt_decl_tag_varnames],
+-[_lt_decl_filter([tagged?], [yes], $@)])
+-
+-
+-# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+-# ---------------------------------------------------------
+-m4_define([_lt_decl_filter],
+-[m4_case([$#],
+-  [0], [m4_fatal([$0: too few arguments: $#])],
+-  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+-  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+-  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+-  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+-])
+-
+-
+-# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+-# --------------------------------------------------
+-m4_define([lt_decl_quote_varnames],
+-[_lt_decl_filter([value], [1], $@)])
+-
+-
+-# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+-# ---------------------------------------------------
+-m4_define([lt_decl_dquote_varnames],
+-[_lt_decl_filter([value], [2], $@)])
+-
+-
+-# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+-# ---------------------------------------------------
+-m4_define([lt_decl_varnames_tagged],
+-[m4_assert([$# <= 2])dnl
+-_$0(m4_quote(m4_default([$1], [[, ]])),
+-    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+-    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+-m4_define([_lt_decl_varnames_tagged],
+-[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+-
+-
+-# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+-# ------------------------------------------------
+-m4_define([lt_decl_all_varnames],
+-[_$0(m4_quote(m4_default([$1], [[, ]])),
+-     m4_if([$2], [],
+-	   m4_quote(lt_decl_varnames),
+-	m4_quote(m4_shift($@))))[]dnl
+-])
+-m4_define([_lt_decl_all_varnames],
+-[lt_join($@, lt_decl_varnames_tagged([$1],
+-			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+-])
+-
+-
+-# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+-# ------------------------------------
+-# Quote a variable value, and forward it to `config.status' so that its
+-# declaration there will have the same value as in `configure'.  VARNAME
+-# must have a single quote delimited value for this to work.
+-m4_define([_LT_CONFIG_STATUS_DECLARE],
+-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+-
+-
+-# _LT_CONFIG_STATUS_DECLARATIONS
+-# ------------------------------
+-# We delimit libtool config variables with single quotes, so when
+-# we write them to config.status, we have to be sure to quote all
+-# embedded single quotes properly.  In configure, this macro expands
+-# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+-#
+-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+-m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+-[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+-    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+-
+-
+-# _LT_LIBTOOL_TAGS
+-# ----------------
+-# Output comment and list of tags supported by the script
+-m4_defun([_LT_LIBTOOL_TAGS],
+-[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+-available_tags="_LT_TAGS"dnl
+-])
+-
+-
+-# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+-# -----------------------------------
+-# Extract the dictionary values for VARNAME (optionally with TAG) and
+-# expand to a commented shell variable setting:
+-#
+-#    # Some comment about what VAR is for.
+-#    visible_name=$lt_internal_name
+-m4_define([_LT_LIBTOOL_DECLARE],
+-[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+-					   [description])))[]dnl
+-m4_pushdef([_libtool_name],
+-    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+-m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+-    [0], [_libtool_name=[$]$1],
+-    [1], [_libtool_name=$lt_[]$1],
+-    [2], [_libtool_name=$lt_[]$1],
+-    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+-m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+-])
+-
+-
+-# _LT_LIBTOOL_CONFIG_VARS
+-# -----------------------
+-# Produce commented declarations of non-tagged libtool config variables
+-# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+-# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+-# section) are produced by _LT_LIBTOOL_TAG_VARS.
+-m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+-[m4_foreach([_lt_var],
+-    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+-
+-
+-# _LT_LIBTOOL_TAG_VARS(TAG)
+-# -------------------------
+-m4_define([_LT_LIBTOOL_TAG_VARS],
+-[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+-    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+-
+-
+-# _LT_TAGVAR(VARNAME, [TAGNAME])
+-# ------------------------------
+-m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+-
+-
+-# _LT_CONFIG_COMMANDS
+-# -------------------
+-# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+-# variables for single and double quote escaping we saved from calls
+-# to _LT_DECL, we can put quote escaped variables declarations
+-# into `config.status', and then the shell code to quote escape them in
+-# for loops in `config.status'.  Finally, any additional code accumulated
+-# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+-m4_defun([_LT_CONFIG_COMMANDS],
+-[AC_PROVIDE_IFELSE([LT_OUTPUT],
+-	dnl If the libtool generation code has been placed in $CONFIG_LT,
+-	dnl instead of duplicating it all over again into config.status,
+-	dnl then we will have config.status run $CONFIG_LT later, so it
+-	dnl needs to know what name is stored there:
+-        [AC_CONFIG_COMMANDS([libtool],
+-            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+-    dnl If the libtool generation code is destined for config.status,
+-    dnl expand the accumulated commands and init code now:
+-    [AC_CONFIG_COMMANDS([libtool],
+-        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+-])#_LT_CONFIG_COMMANDS
+-
+-
+-# Initialize.
+-m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+-[
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+-
+-sed_quote_subst='$sed_quote_subst'
+-double_quote_subst='$double_quote_subst'
+-delay_variable_subst='$delay_variable_subst'
+-_LT_CONFIG_STATUS_DECLARATIONS
+-LTCC='$LTCC'
+-LTCFLAGS='$LTCFLAGS'
+-compiler='$compiler_DEFAULT'
+-
+-# Quote evaled strings.
+-for var in lt_decl_all_varnames([[ \
+-]], lt_decl_quote_varnames); do
+-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+-    *[[\\\\\\\`\\"\\\$]]*)
+-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+-      ;;
+-    *)
+-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+-      ;;
+-    esac
+-done
+-
+-# Double-quote double-evaled strings.
+-for var in lt_decl_all_varnames([[ \
+-]], lt_decl_dquote_varnames); do
+-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+-    *[[\\\\\\\`\\"\\\$]]*)
+-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+-      ;;
+-    *)
+-      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+-      ;;
+-    esac
+-done
+-
+-# Fix-up fallback echo if it was mangled by the above quoting rules.
+-case \$lt_ECHO in
+-*'\\\[$]0 --fallback-echo"')dnl "
+-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+-  ;;
+-esac
+-
+-_LT_OUTPUT_LIBTOOL_INIT
+-])
+-
+-
+-# LT_OUTPUT
+-# ---------
+-# This macro allows early generation of the libtool script (before
+-# AC_OUTPUT is called), incase it is used in configure for compilation
+-# tests.
+-AC_DEFUN([LT_OUTPUT],
+-[: ${CONFIG_LT=./config.lt}
+-AC_MSG_NOTICE([creating $CONFIG_LT])
+-cat >"$CONFIG_LT" <<_LTEOF
+-#! $SHELL
+-# Generated by $as_me.
+-# Run this file to recreate a libtool stub with the current configuration.
+-
+-lt_cl_silent=false
+-SHELL=\${CONFIG_SHELL-$SHELL}
+-_LTEOF
+-
+-cat >>"$CONFIG_LT" <<\_LTEOF
+-AS_SHELL_SANITIZE
+-_AS_PREPARE
+-
+-exec AS_MESSAGE_FD>&1
+-exec AS_MESSAGE_LOG_FD>>config.log
+-{
+-  echo
+-  AS_BOX([Running $as_me.])
+-} >&AS_MESSAGE_LOG_FD
+-
+-lt_cl_help="\
+-\`$as_me' creates a local libtool stub from the current configuration,
+-for use in further configure time tests before the real libtool is
+-generated.
+-
+-Usage: $[0] [[OPTIONS]]
+-
+-  -h, --help      print this help, then exit
+-  -V, --version   print version number, then exit
+-  -q, --quiet     do not print progress messages
+-  -d, --debug     don't remove temporary files
+-
+-Report bugs to <bug-libtool at gnu.org>."
+-
+-lt_cl_version="\
+-m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+-m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+-configured by $[0], generated by m4_PACKAGE_STRING.
+-
+-Copyright (C) 2008 Free Software Foundation, Inc.
+-This config.lt script is free software; the Free Software Foundation
+-gives unlimited permision to copy, distribute and modify it."
+-
+-while test $[#] != 0
+-do
+-  case $[1] in
+-    --version | --v* | -V )
+-      echo "$lt_cl_version"; exit 0 ;;
+-    --help | --h* | -h )
+-      echo "$lt_cl_help"; exit 0 ;;
+-    --debug | --d* | -d )
+-      debug=: ;;
+-    --quiet | --q* | --silent | --s* | -q )
+-      lt_cl_silent=: ;;
+-
+-    -*) AC_MSG_ERROR([unrecognized option: $[1]
+-Try \`$[0] --help' for more information.]) ;;
+-
+-    *) AC_MSG_ERROR([unrecognized argument: $[1]
+-Try \`$[0] --help' for more information.]) ;;
+-  esac
+-  shift
+-done
+-
+-if $lt_cl_silent; then
+-  exec AS_MESSAGE_FD>/dev/null
+-fi
+-_LTEOF
+-
+-cat >>"$CONFIG_LT" <<_LTEOF
+-_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+-_LTEOF
+-
+-cat >>"$CONFIG_LT" <<\_LTEOF
+-AC_MSG_NOTICE([creating $ofile])
+-_LT_OUTPUT_LIBTOOL_COMMANDS
+-AS_EXIT(0)
+-_LTEOF
+-chmod +x "$CONFIG_LT"
+-
+-# configure is writing to config.log, but config.lt does its own redirection,
+-# appending to config.log, which fails on DOS, as config.log is still kept
+-# open by configure.  Here we exec the FD to /dev/null, effectively closing
+-# config.log, so it can be properly (re)opened and appended to by config.lt.
+-if test "$no_create" != yes; then
+-  lt_cl_success=:
+-  test "$silent" = yes &&
+-    lt_config_lt_args="$lt_config_lt_args --quiet"
+-  exec AS_MESSAGE_LOG_FD>/dev/null
+-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+-  exec AS_MESSAGE_LOG_FD>>config.log
+-  $lt_cl_success || AS_EXIT(1)
+-fi
+-])# LT_OUTPUT
+-
+-
+-# _LT_CONFIG(TAG)
+-# ---------------
+-# If TAG is the built-in tag, create an initial libtool script with a
+-# default configuration from the untagged config vars.  Otherwise add code
+-# to config.status for appending the configuration named by TAG from the
+-# matching tagged config vars.
+-m4_defun([_LT_CONFIG],
+-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-_LT_CONFIG_SAVE_COMMANDS([
+-  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+-  m4_if(_LT_TAG, [C], [
+-    # See if we are running on zsh, and set the options which allow our
+-    # commands through without removal of \ escapes.
+-    if test -n "${ZSH_VERSION+set}" ; then
+-      setopt NO_GLOB_SUBST
+-    fi
+-
+-    cfgfile="${ofile}T"
+-    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+-    $RM "$cfgfile"
+-
+-    cat <<_LT_EOF >> "$cfgfile"
+-#! $SHELL
+-
+-# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+-# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+-#
+-_LT_COPYING
+-_LT_LIBTOOL_TAGS
+-
+-# ### BEGIN LIBTOOL CONFIG
+-_LT_LIBTOOL_CONFIG_VARS
+-_LT_LIBTOOL_TAG_VARS
+-# ### END LIBTOOL CONFIG
+-
+-_LT_EOF
+-
+-  case $host_os in
+-  aix3*)
+-    cat <<\_LT_EOF >> "$cfgfile"
+-# AIX sometimes has problems with the GCC collect2 program.  For some
+-# reason, if we set the COLLECT_NAMES environment variable, the problems
+-# vanish in a puff of smoke.
+-if test "X${COLLECT_NAMES+set}" != Xset; then
+-  COLLECT_NAMES=
+-  export COLLECT_NAMES
+-fi
+-_LT_EOF
+-    ;;
+-  esac
+-
+-  _LT_PROG_LTMAIN
+-
+-  # We use sed instead of cat because bash on DJGPP gets confused if
+-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+-  # text mode, it properly converts lines to CR/LF.  This bash problem
+-  # is reportedly fixed, but why not run on old versions too?
+-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+-    || (rm -f "$cfgfile"; exit 1)
+-
+-  _LT_PROG_XSI_SHELLFNS
+-
+-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+-    || (rm -f "$cfgfile"; exit 1)
+-
+-  mv -f "$cfgfile" "$ofile" ||
+-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+-  chmod +x "$ofile"
+-],
+-[cat <<_LT_EOF >> "$ofile"
+-
+-dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+-dnl in a comment (ie after a #).
+-# ### BEGIN LIBTOOL TAG CONFIG: $1
+-_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+-# ### END LIBTOOL TAG CONFIG: $1
+-_LT_EOF
+-])dnl /m4_if
+-],
+-[m4_if([$1], [], [
+-    PACKAGE='$PACKAGE'
+-    VERSION='$VERSION'
+-    TIMESTAMP='$TIMESTAMP'
+-    RM='$RM'
+-    ofile='$ofile'], [])
+-])dnl /_LT_CONFIG_SAVE_COMMANDS
+-])# _LT_CONFIG
+-
+-
+-# LT_SUPPORTED_TAG(TAG)
+-# ---------------------
+-# Trace this macro to discover what tags are supported by the libtool
+-# --tag option, using:
+-#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+-AC_DEFUN([LT_SUPPORTED_TAG], [])
+-
+-
+-# C support is built-in for now
+-m4_define([_LT_LANG_C_enabled], [])
+-m4_define([_LT_TAGS], [])
+-
+-
+-# LT_LANG(LANG)
+-# -------------
+-# Enable libtool support for the given language if not already enabled.
+-AC_DEFUN([LT_LANG],
+-[AC_BEFORE([$0], [LT_OUTPUT])dnl
+-m4_case([$1],
+-  [C],			[_LT_LANG(C)],
+-  [C++],		[_LT_LANG(CXX)],
+-  [Java],		[_LT_LANG(GCJ)],
+-  [Fortran 77],		[_LT_LANG(F77)],
+-  [Fortran],		[_LT_LANG(FC)],
+-  [Windows Resource],	[_LT_LANG(RC)],
+-  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+-    [_LT_LANG($1)],
+-    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+-])# LT_LANG
+-
+-
+-# _LT_LANG(LANGNAME)
+-# ------------------
+-m4_defun([_LT_LANG],
+-[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+-  [LT_SUPPORTED_TAG([$1])dnl
+-  m4_append([_LT_TAGS], [$1 ])dnl
+-  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+-  _LT_LANG_$1_CONFIG($1)])dnl
+-])# _LT_LANG
+-
+-
+-# _LT_LANG_DEFAULT_CONFIG
+-# -----------------------
+-m4_defun([_LT_LANG_DEFAULT_CONFIG],
+-[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+-  [LT_LANG(CXX)],
+-  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+-
+-AC_PROVIDE_IFELSE([AC_PROG_F77],
+-  [LT_LANG(F77)],
+-  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+-
+-AC_PROVIDE_IFELSE([AC_PROG_FC],
+-  [LT_LANG(FC)],
+-  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+-
+-dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+-dnl pulling things in needlessly.
+-AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+-  [LT_LANG(GCJ)],
+-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+-    [LT_LANG(GCJ)],
+-    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+-      [LT_LANG(GCJ)],
+-      [m4_ifdef([AC_PROG_GCJ],
+-	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+-       m4_ifdef([A][M_PROG_GCJ],
+-	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+-       m4_ifdef([LT_PROG_GCJ],
+-	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+-
+-AC_PROVIDE_IFELSE([LT_PROG_RC],
+-  [LT_LANG(RC)],
+-  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+-])# _LT_LANG_DEFAULT_CONFIG
+-
+-# Obsolete macros:
+-AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+-AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+-AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+-AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+-dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+-dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+-dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+-
+-
+-# _LT_TAG_COMPILER
+-# ----------------
+-m4_defun([_LT_TAG_COMPILER],
+-[AC_REQUIRE([AC_PROG_CC])dnl
+-
+-_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+-_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+-_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+-_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+-
+-# If no C compiler was specified, use CC.
+-LTCC=${LTCC-"$CC"}
+-
+-# If no C compiler flags were specified, use CFLAGS.
+-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+-
+-# Allow CC to be a program name with arguments.
+-compiler=$CC
+-])# _LT_TAG_COMPILER
+-
+-
+-# _LT_COMPILER_BOILERPLATE
+-# ------------------------
+-# Check for compiler boilerplate output or warnings with
+-# the simple compiler test code.
+-m4_defun([_LT_COMPILER_BOILERPLATE],
+-[m4_require([_LT_DECL_SED])dnl
+-ac_outfile=conftest.$ac_objext
+-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+-_lt_compiler_boilerplate=`cat conftest.err`
+-$RM conftest*
+-])# _LT_COMPILER_BOILERPLATE
+-
+-
+-# _LT_LINKER_BOILERPLATE
+-# ----------------------
+-# Check for linker boilerplate output or warnings with
+-# the simple link test code.
+-m4_defun([_LT_LINKER_BOILERPLATE],
+-[m4_require([_LT_DECL_SED])dnl
+-ac_outfile=conftest.$ac_objext
+-echo "$lt_simple_link_test_code" >conftest.$ac_ext
+-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+-_lt_linker_boilerplate=`cat conftest.err`
+-$RM -r conftest*
+-])# _LT_LINKER_BOILERPLATE
+-
+-# _LT_REQUIRED_DARWIN_CHECKS
+-# -------------------------
+-m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+-  case $host_os in
+-    rhapsody* | darwin*)
+-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+-    AC_CHECK_TOOL([LIPO], [lipo], [:])
+-    AC_CHECK_TOOL([OTOOL], [otool], [:])
+-    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+-    _LT_DECL([], [DSYMUTIL], [1],
+-      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+-    _LT_DECL([], [NMEDIT], [1],
+-      [Tool to change global to local symbols on Mac OS X])
+-    _LT_DECL([], [LIPO], [1],
+-      [Tool to manipulate fat objects and archives on Mac OS X])
+-    _LT_DECL([], [OTOOL], [1],
+-      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+-    _LT_DECL([], [OTOOL64], [1],
+-      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+-
+-    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+-      [lt_cv_apple_cc_single_mod=no
+-      if test -z "${LT_MULTI_MODULE}"; then
+-	# By default we will add the -single_module flag. You can override
+-	# by either setting the environment variable LT_MULTI_MODULE
+-	# non-empty at configure time, or by adding -multi_module to the
+-	# link flags.
+-	rm -rf libconftest.dylib*
+-	echo "int foo(void){return 1;}" > conftest.c
+-	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+--dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+-	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+-        _lt_result=$?
+-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+-	  lt_cv_apple_cc_single_mod=yes
+-	else
+-	  cat conftest.err >&AS_MESSAGE_LOG_FD
+-	fi
+-	rm -rf libconftest.dylib*
+-	rm -f conftest.*
+-      fi])
+-    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+-      [lt_cv_ld_exported_symbols_list],
+-      [lt_cv_ld_exported_symbols_list=no
+-      save_LDFLAGS=$LDFLAGS
+-      echo "_main" > conftest.sym
+-      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+-      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+-	[lt_cv_ld_exported_symbols_list=yes],
+-	[lt_cv_ld_exported_symbols_list=no])
+-	LDFLAGS="$save_LDFLAGS"
+-    ])
+-    case $host_os in
+-    rhapsody* | darwin1.[[012]])
+-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+-    darwin1.*)
+-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+-    darwin*) # darwin 5.x on
+-      # if running on 10.5 or later, the deployment target defaults
+-      # to the OS version, if on x86, and 10.4, the deployment
+-      # target defaults to 10.4. Don't you love it?
+-      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+-	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+-	10.[[012]]*)
+-	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+-	10.*)
+-	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+-      esac
+-    ;;
+-  esac
+-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+-      _lt_dar_single_mod='$single_module'
+-    fi
+-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+-      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+-    else
+-      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+-    fi
+-    if test "$DSYMUTIL" != ":"; then
+-      _lt_dsymutil='~$DSYMUTIL $lib || :'
+-    else
+-      _lt_dsymutil=
+-    fi
+-    ;;
+-  esac
+-])
+-
+-
+-# _LT_DARWIN_LINKER_FEATURES
+-# --------------------------
+-# Checks for linker and compiler features on darwin
+-m4_defun([_LT_DARWIN_LINKER_FEATURES],
+-[
+-  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+-  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-  _LT_TAGVAR(hardcode_direct, $1)=no
+-  _LT_TAGVAR(hardcode_automatic, $1)=yes
+-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+-  _LT_TAGVAR(link_all_deplibs, $1)=yes
+-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+-  case $cc_basename in
+-     ifort*) _lt_dar_can_shared=yes ;;
+-     *) _lt_dar_can_shared=$GCC ;;
+-  esac
+-  if test "$_lt_dar_can_shared" = "yes"; then
+-    output_verbose_link_cmd=echo
+-    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+-    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+-    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+-    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+-    m4_if([$1], [CXX],
+-[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+-      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+-      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+-    fi
+-],[])
+-  else
+-  _LT_TAGVAR(ld_shlibs, $1)=no
+-  fi
+-])
+-
+-# _LT_SYS_MODULE_PATH_AIX
+-# -----------------------
+-# Links a minimal program and checks the executable
+-# for the system default hardcoded library path. In most cases,
+-# this is /usr/lib:/lib, but when the MPI compilers are used
+-# the location of the communication and MPI libs are included too.
+-# If we don't find anything, use the default library path according
+-# to the aix ld manual.
+-m4_defun([_LT_SYS_MODULE_PATH_AIX],
+-[m4_require([_LT_DECL_SED])dnl
+-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+-lt_aix_libpath_sed='
+-    /Import File Strings/,/^$/ {
+-	/^0/ {
+-	    s/^0  *\(.*\)$/\1/
+-	    p
+-	}
+-    }'
+-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-# Check for a 64-bit object if we didn't find anything.
+-if test -z "$aix_libpath"; then
+-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+-fi],[])
+-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+-])# _LT_SYS_MODULE_PATH_AIX
+-
+-
+-# _LT_SHELL_INIT(ARG)
+-# -------------------
+-m4_define([_LT_SHELL_INIT],
+-[ifdef([AC_DIVERSION_NOTICE],
+-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+-	 [AC_DIVERT_PUSH(NOTICE)])
+-$1
+-AC_DIVERT_POP
+-])# _LT_SHELL_INIT
+-
+-
+-# _LT_PROG_ECHO_BACKSLASH
+-# -----------------------
+-# Add some code to the start of the generated configure script which
+-# will find an echo command which doesn't interpret backslashes.
+-m4_defun([_LT_PROG_ECHO_BACKSLASH],
+-[_LT_SHELL_INIT([
+-# Check that we are running under the correct shell.
+-SHELL=${CONFIG_SHELL-/bin/sh}
+-
+-case X$lt_ECHO in
+-X*--fallback-echo)
+-  # Remove one level of quotation (which was required for Make).
+-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+-  ;;
+-esac
+-
+-ECHO=${lt_ECHO-echo}
+-if test "X[$]1" = X--no-reexec; then
+-  # Discard the --no-reexec flag, and continue.
+-  shift
+-elif test "X[$]1" = X--fallback-echo; then
+-  # Avoid inline document here, it may be left over
+-  :
+-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+-  # Yippee, $ECHO works!
+-  :
+-else
+-  # Restart under the correct shell.
+-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+-fi
+-
+-if test "X[$]1" = X--fallback-echo; then
+-  # used as fallback echo
+-  shift
+-  cat <<_LT_EOF
+-[$]*
+-_LT_EOF
+-  exit 0
+-fi
+-
+-# The HP-UX ksh and POSIX shell print the target directory to stdout
+-# if CDPATH is set.
+-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+-
+-if test -z "$lt_ECHO"; then
+-  if test "X${echo_test_string+set}" != Xset; then
+-    # find a string as large as possible, as long as the shell can cope with it
+-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+-      then
+-        break
+-      fi
+-    done
+-  fi
+-
+-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+-     test "X$echo_testing_string" = "X$echo_test_string"; then
+-    :
+-  else
+-    # The Solaris, AIX, and Digital Unix default echo programs unquote
+-    # backslashes.  This makes it impossible to quote backslashes using
+-    #   echo "$something" | sed 's/\\/\\\\/g'
+-    #
+-    # So, first we look for a working echo in the user's PATH.
+-
+-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-    for dir in $PATH /usr/ucb; do
+-      IFS="$lt_save_ifs"
+-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+-         test "X$echo_testing_string" = "X$echo_test_string"; then
+-        ECHO="$dir/echo"
+-        break
+-      fi
+-    done
+-    IFS="$lt_save_ifs"
+-
+-    if test "X$ECHO" = Xecho; then
+-      # We didn't find a better echo, so look for alternatives.
+-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+-         test "X$echo_testing_string" = "X$echo_test_string"; then
+-        # This shell has a builtin print -r that does the trick.
+-        ECHO='print -r'
+-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
+-        # If we have ksh, try running configure again with it.
+-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+-        export ORIGINAL_CONFIG_SHELL
+-        CONFIG_SHELL=/bin/ksh
+-        export CONFIG_SHELL
+-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+-      else
+-        # Try using printf.
+-        ECHO='printf %s\n'
+-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+-	   test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  # Cool, printf works
+-	  :
+-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+-	     test "X$echo_testing_string" = 'X\t' &&
+-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+-	     test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+-	  export CONFIG_SHELL
+-	  SHELL="$CONFIG_SHELL"
+-	  export SHELL
+-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+-	     test "X$echo_testing_string" = 'X\t' &&
+-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+-	     test "X$echo_testing_string" = "X$echo_test_string"; then
+-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+-        else
+-	  # maybe with a smaller string...
+-	  prev=:
+-
+-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+-	    then
+-	      break
+-	    fi
+-	    prev="$cmd"
+-	  done
+-
+-	  if test "$prev" != 'sed 50q "[$]0"'; then
+-	    echo_test_string=`eval $prev`
+-	    export echo_test_string
+-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+-	  else
+-	    # Oops.  We lost completely, so just stick with echo.
+-	    ECHO=echo
+-	  fi
+-        fi
+-      fi
+-    fi
+-  fi
+-fi
+-
+-# Copy echo and quote the copy suitably for passing to libtool from
+-# the Makefile, instead of quoting the original, which is used later.
+-lt_ECHO=$ECHO
+-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+-fi
+-
+-AC_SUBST(lt_ECHO)
+-])
+-_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+-_LT_DECL([], [ECHO], [1],
+-    [An echo program that does not interpret backslashes])
+-])# _LT_PROG_ECHO_BACKSLASH
+-
+-
+-# _LT_ENABLE_LOCK
+-# ---------------
+-m4_defun([_LT_ENABLE_LOCK],
+-[AC_ARG_ENABLE([libtool-lock],
+-  [AS_HELP_STRING([--disable-libtool-lock],
+-    [avoid locking (might break parallel builds)])])
+-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+-
+-# Some flags need to be propagated to the compiler or linker for good
+-# libtool support.
+-case $host in
+-ia64-*-hpux*)
+-  # Find out which ABI we are using.
+-  echo 'int i;' > conftest.$ac_ext
+-  if AC_TRY_EVAL(ac_compile); then
+-    case `/usr/bin/file conftest.$ac_objext` in
+-      *ELF-32*)
+-	HPUX_IA64_MODE="32"
+-	;;
+-      *ELF-64*)
+-	HPUX_IA64_MODE="64"
+-	;;
+-    esac
+-  fi
+-  rm -rf conftest*
+-  ;;
+-*-*-irix6*)
+-  # Find out which ABI we are using.
+-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+-  if AC_TRY_EVAL(ac_compile); then
+-    if test "$lt_cv_prog_gnu_ld" = yes; then
+-      case `/usr/bin/file conftest.$ac_objext` in
+-	*32-bit*)
+-	  LD="${LD-ld} -melf32bsmip"
+-	  ;;
+-	*N32*)
+-	  LD="${LD-ld} -melf32bmipn32"
+-	  ;;
+-	*64-bit*)
+-	  LD="${LD-ld} -melf64bmip"
+-	;;
+-      esac
+-    else
+-      case `/usr/bin/file conftest.$ac_objext` in
+-	*32-bit*)
+-	  LD="${LD-ld} -32"
+-	  ;;
+-	*N32*)
+-	  LD="${LD-ld} -n32"
+-	  ;;
+-	*64-bit*)
+-	  LD="${LD-ld} -64"
+-	  ;;
+-      esac
+-    fi
+-  fi
+-  rm -rf conftest*
+-  ;;
+-
+-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+-  # Find out which ABI we are using.
+-  echo 'int i;' > conftest.$ac_ext
+-  if AC_TRY_EVAL(ac_compile); then
+-    case `/usr/bin/file conftest.o` in
+-      *32-bit*)
+-	case $host in
+-	  x86_64-*kfreebsd*-gnu)
+-	    LD="${LD-ld} -m elf_i386_fbsd"
+-	    ;;
+-	  x86_64-*linux*)
+-	    LD="${LD-ld} -m elf_i386"
+-	    ;;
+-	  ppc64-*linux*|powerpc64-*linux*)
+-	    LD="${LD-ld} -m elf32ppclinux"
+-	    ;;
+-	  s390x-*linux*)
+-	    LD="${LD-ld} -m elf_s390"
+-	    ;;
+-	  sparc64-*linux*)
+-	    LD="${LD-ld} -m elf32_sparc"
+-	    ;;
+-	esac
+-	;;
+-      *64-bit*)
+-	case $host in
+-	  x86_64-*kfreebsd*-gnu)
+-	    LD="${LD-ld} -m elf_x86_64_fbsd"
+-	    ;;
+-	  x86_64-*linux*)
+-	    LD="${LD-ld} -m elf_x86_64"
+-	    ;;
+-	  ppc*-*linux*|powerpc*-*linux*)
+-	    LD="${LD-ld} -m elf64ppc"
+-	    ;;
+-	  s390*-*linux*|s390*-*tpf*)
+-	    LD="${LD-ld} -m elf64_s390"
+-	    ;;
+-	  sparc*-*linux*)
+-	    LD="${LD-ld} -m elf64_sparc"
+-	    ;;
+-	esac
+-	;;
+-    esac
+-  fi
+-  rm -rf conftest*
+-  ;;
+-
+-*-*-sco3.2v5*)
+-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+-  SAVE_CFLAGS="$CFLAGS"
+-  CFLAGS="$CFLAGS -belf"
+-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+-    [AC_LANG_PUSH(C)
+-     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+-     AC_LANG_POP])
+-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+-    CFLAGS="$SAVE_CFLAGS"
+-  fi
+-  ;;
+-sparc*-*solaris*)
+-  # Find out which ABI we are using.
+-  echo 'int i;' > conftest.$ac_ext
+-  if AC_TRY_EVAL(ac_compile); then
+-    case `/usr/bin/file conftest.o` in
+-    *64-bit*)
+-      case $lt_cv_prog_gnu_ld in
+-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+-      *)
+-	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+-	  LD="${LD-ld} -64"
+-	fi
+-	;;
+-      esac
+-      ;;
+-    esac
+-  fi
+-  rm -rf conftest*
+-  ;;
+-esac
+-
+-need_locks="$enable_libtool_lock"
+-])# _LT_ENABLE_LOCK
+-
+-
+-# _LT_CMD_OLD_ARCHIVE
+-# -------------------
+-m4_defun([_LT_CMD_OLD_ARCHIVE],
+-[AC_CHECK_TOOL(AR, ar, false)
+-test -z "$AR" && AR=ar
+-test -z "$AR_FLAGS" && AR_FLAGS=cru
+-_LT_DECL([], [AR], [1], [The archiver])
+-_LT_DECL([], [AR_FLAGS], [1])
+-
+-AC_CHECK_TOOL(STRIP, strip, :)
+-test -z "$STRIP" && STRIP=:
+-_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+-
+-AC_CHECK_TOOL(RANLIB, ranlib, :)
+-test -z "$RANLIB" && RANLIB=:
+-_LT_DECL([], [RANLIB], [1],
+-    [Commands used to install an old-style archive])
+-
+-# Determine commands to create old-style static archives.
+-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+-old_postinstall_cmds='chmod 644 $oldlib'
+-old_postuninstall_cmds=
+-
+-if test -n "$RANLIB"; then
+-  case $host_os in
+-  openbsd*)
+-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+-    ;;
+-  *)
+-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+-    ;;
+-  esac
+-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+-fi
+-_LT_DECL([], [old_postinstall_cmds], [2])
+-_LT_DECL([], [old_postuninstall_cmds], [2])
+-_LT_TAGDECL([], [old_archive_cmds], [2],
+-    [Commands used to build an old-style archive])
+-])# _LT_CMD_OLD_ARCHIVE
+-
+-
+-# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+-#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+-# ----------------------------------------------------------------
+-# Check whether the given compiler option works
+-AC_DEFUN([_LT_COMPILER_OPTION],
+-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_SED])dnl
+-AC_CACHE_CHECK([$1], [$2],
+-  [$2=no
+-   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+-   lt_compiler_flag="$3"
+-   # Insert the option either (1) after the last *FLAGS variable, or
+-   # (2) before a word containing "conftest.", or (3) at the end.
+-   # Note that $ac_compile itself does not contain backslashes and begins
+-   # with a dollar sign (not a hyphen), so the echo should work correctly.
+-   # The option is referenced via a variable to avoid confusing sed.
+-   lt_compile=`echo "$ac_compile" | $SED \
+-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+-   -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+-   (eval "$lt_compile" 2>conftest.err)
+-   ac_status=$?
+-   cat conftest.err >&AS_MESSAGE_LOG_FD
+-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+-   if (exit $ac_status) && test -s "$ac_outfile"; then
+-     # The compiler can only warn and ignore the option if not recognized
+-     # So say no if there are warnings other than the usual output.
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+-     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+-     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+-       $2=yes
+-     fi
+-   fi
+-   $RM conftest*
+-])
+-
+-if test x"[$]$2" = xyes; then
+-    m4_if([$5], , :, [$5])
+-else
+-    m4_if([$6], , :, [$6])
+-fi
+-])# _LT_COMPILER_OPTION
+-
+-# Old name:
+-AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+-
+-
+-# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+-#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+-# ----------------------------------------------------
+-# Check whether the given linker option works
+-AC_DEFUN([_LT_LINKER_OPTION],
+-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_SED])dnl
+-AC_CACHE_CHECK([$1], [$2],
+-  [$2=no
+-   save_LDFLAGS="$LDFLAGS"
+-   LDFLAGS="$LDFLAGS $3"
+-   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+-     # The linker can only warn and ignore the option if not recognized
+-     # So say no if there are warnings
+-     if test -s conftest.err; then
+-       # Append any errors to the config.log.
+-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+-       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+-       if diff conftest.exp conftest.er2 >/dev/null; then
+-         $2=yes
+-       fi
+-     else
+-       $2=yes
+-     fi
+-   fi
+-   $RM -r conftest*
+-   LDFLAGS="$save_LDFLAGS"
+-])
+-
+-if test x"[$]$2" = xyes; then
+-    m4_if([$4], , :, [$4])
+-else
+-    m4_if([$5], , :, [$5])
+-fi
+-])# _LT_LINKER_OPTION
+-
+-# Old name:
+-AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+-
+-
+-# LT_CMD_MAX_LEN
+-#---------------
+-AC_DEFUN([LT_CMD_MAX_LEN],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-# find the maximum length of command line arguments
+-AC_MSG_CHECKING([the maximum length of command line arguments])
+-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+-  i=0
+-  teststring="ABCD"
+-
+-  case $build_os in
+-  msdosdjgpp*)
+-    # On DJGPP, this test can blow up pretty badly due to problems in libc
+-    # (any single argument exceeding 2000 bytes causes a buffer overrun
+-    # during glob expansion).  Even if it were fixed, the result of this
+-    # check would be larger than it should be.
+-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+-    ;;
+-
+-  gnu*)
+-    # Under GNU Hurd, this test is not required because there is
+-    # no limit to the length of command line arguments.
+-    # Libtool will interpret -1 as no limit whatsoever
+-    lt_cv_sys_max_cmd_len=-1;
+-    ;;
+-
+-  cygwin* | mingw* | cegcc*)
+-    # On Win9x/ME, this test blows up -- it succeeds, but takes
+-    # about 5 minutes as the teststring grows exponentially.
+-    # Worse, since 9x/ME are not pre-emptively multitasking,
+-    # you end up with a "frozen" computer, even though with patience
+-    # the test eventually succeeds (with a max line length of 256k).
+-    # Instead, let's just punt: use the minimum linelength reported by
+-    # all of the supported platforms: 8192 (on NT/2K/XP).
+-    lt_cv_sys_max_cmd_len=8192;
+-    ;;
+-
+-  amigaos*)
+-    # On AmigaOS with pdksh, this test takes hours, literally.
+-    # So we just punt and use a minimum line length of 8192.
+-    lt_cv_sys_max_cmd_len=8192;
+-    ;;
+-
+-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+-    # This has been around since 386BSD, at least.  Likely further.
+-    if test -x /sbin/sysctl; then
+-      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+-    elif test -x /usr/sbin/sysctl; then
+-      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+-    else
+-      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+-    fi
+-    # And add a safety zone
+-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+-    ;;
+-
+-  interix*)
+-    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+-    lt_cv_sys_max_cmd_len=196608
+-    ;;
+-
+-  osf*)
+-    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+-    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+-    # nice to cause kernel panics so lets avoid the loop below.
+-    # First set a reasonable default.
+-    lt_cv_sys_max_cmd_len=16384
+-    #
+-    if test -x /sbin/sysconfig; then
+-      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+-        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+-      esac
+-    fi
+-    ;;
+-  sco3.2v5*)
+-    lt_cv_sys_max_cmd_len=102400
+-    ;;
+-  sysv5* | sco5v6* | sysv4.2uw2*)
+-    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+-    if test -n "$kargmax"; then
+-      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+-    else
+-      lt_cv_sys_max_cmd_len=32768
+-    fi
+-    ;;
+-  *)
+-    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+-    if test -n "$lt_cv_sys_max_cmd_len"; then
+-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+-    else
+-      # Make teststring a little bigger before we do anything with it.
+-      # a 1K string should be a reasonable start.
+-      for i in 1 2 3 4 5 6 7 8 ; do
+-        teststring=$teststring$teststring
+-      done
+-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+-      # If test is not a shell built-in, we'll probably end up computing a
+-      # maximum length that is only half of the actual maximum length, but
+-      # we can't tell.
+-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+-	      test $i != 17 # 1/2 MB should be enough
+-      do
+-        i=`expr $i + 1`
+-        teststring=$teststring$teststring
+-      done
+-      # Only check the string length outside the loop.
+-      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+-      teststring=
+-      # Add a significant safety factor because C++ compilers can tack on
+-      # massive amounts of additional arguments before passing them to the
+-      # linker.  It appears as though 1/2 is a usable value.
+-      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+-    fi
+-    ;;
+-  esac
+-])
+-if test -n $lt_cv_sys_max_cmd_len ; then
+-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+-else
+-  AC_MSG_RESULT(none)
+-fi
+-max_cmd_len=$lt_cv_sys_max_cmd_len
+-_LT_DECL([], [max_cmd_len], [0],
+-    [What is the maximum length of a command?])
+-])# LT_CMD_MAX_LEN
+-
+-# Old name:
+-AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+-
+-
+-# _LT_HEADER_DLFCN
+-# ----------------
+-m4_defun([_LT_HEADER_DLFCN],
+-[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+-])# _LT_HEADER_DLFCN
+-
+-
+-# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+-#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+-# ----------------------------------------------------------------
+-m4_defun([_LT_TRY_DLOPEN_SELF],
+-[m4_require([_LT_HEADER_DLFCN])dnl
+-if test "$cross_compiling" = yes; then :
+-  [$4]
+-else
+-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+-  lt_status=$lt_dlunknown
+-  cat > conftest.$ac_ext <<_LT_EOF
+-[#line __oline__ "configure"
+-#include "confdefs.h"
+-
+-#if HAVE_DLFCN_H
+-#include <dlfcn.h>
+-#endif
+-
+-#include <stdio.h>
+-
+-#ifdef RTLD_GLOBAL
+-#  define LT_DLGLOBAL		RTLD_GLOBAL
+-#else
+-#  ifdef DL_GLOBAL
+-#    define LT_DLGLOBAL		DL_GLOBAL
+-#  else
+-#    define LT_DLGLOBAL		0
+-#  endif
+-#endif
+-
+-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+-   find out it does not work in some platform. */
+-#ifndef LT_DLLAZY_OR_NOW
+-#  ifdef RTLD_LAZY
+-#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+-#  else
+-#    ifdef DL_LAZY
+-#      define LT_DLLAZY_OR_NOW		DL_LAZY
+-#    else
+-#      ifdef RTLD_NOW
+-#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+-#      else
+-#        ifdef DL_NOW
+-#          define LT_DLLAZY_OR_NOW	DL_NOW
+-#        else
+-#          define LT_DLLAZY_OR_NOW	0
+-#        endif
+-#      endif
+-#    endif
+-#  endif
+-#endif
+-
+-void fnord() { int i=42;}
+-int main ()
+-{
+-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+-  int status = $lt_dlunknown;
+-
+-  if (self)
+-    {
+-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+-      /* dlclose (self); */
+-    }
+-  else
+-    puts (dlerror ());
+-
+-  return status;
+-}]
+-_LT_EOF
+-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+-    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+-    lt_status=$?
+-    case x$lt_status in
+-      x$lt_dlno_uscore) $1 ;;
+-      x$lt_dlneed_uscore) $2 ;;
+-      x$lt_dlunknown|x*) $3 ;;
+-    esac
+-  else :
+-    # compilation failed
+-    $3
+-  fi
+-fi
+-rm -fr conftest*
+-])# _LT_TRY_DLOPEN_SELF
+-
+-
+-# LT_SYS_DLOPEN_SELF
+-# ------------------
+-AC_DEFUN([LT_SYS_DLOPEN_SELF],
+-[m4_require([_LT_HEADER_DLFCN])dnl
+-if test "x$enable_dlopen" != xyes; then
+-  enable_dlopen=unknown
+-  enable_dlopen_self=unknown
+-  enable_dlopen_self_static=unknown
+-else
+-  lt_cv_dlopen=no
+-  lt_cv_dlopen_libs=
+-
+-  case $host_os in
+-  beos*)
+-    lt_cv_dlopen="load_add_on"
+-    lt_cv_dlopen_libs=
+-    lt_cv_dlopen_self=yes
+-    ;;
+-
+-  mingw* | pw32* | cegcc*)
+-    lt_cv_dlopen="LoadLibrary"
+-    lt_cv_dlopen_libs=
+-    ;;
+-
+-  cygwin*)
+-    lt_cv_dlopen="dlopen"
+-    lt_cv_dlopen_libs=
+-    ;;
+-
+-  darwin*)
+-  # if libdl is installed we need to link against it
+-    AC_CHECK_LIB([dl], [dlopen],
+-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+-    lt_cv_dlopen="dyld"
+-    lt_cv_dlopen_libs=
+-    lt_cv_dlopen_self=yes
+-    ])
+-    ;;
+-
+-  *)
+-    AC_CHECK_FUNC([shl_load],
+-	  [lt_cv_dlopen="shl_load"],
+-      [AC_CHECK_LIB([dld], [shl_load],
+-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+-	[AC_CHECK_FUNC([dlopen],
+-	      [lt_cv_dlopen="dlopen"],
+-	  [AC_CHECK_LIB([dl], [dlopen],
+-		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+-	    [AC_CHECK_LIB([svld], [dlopen],
+-		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+-	      [AC_CHECK_LIB([dld], [dld_link],
+-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+-	      ])
+-	    ])
+-	  ])
+-	])
+-      ])
+-    ;;
+-  esac
+-
+-  if test "x$lt_cv_dlopen" != xno; then
+-    enable_dlopen=yes
+-  else
+-    enable_dlopen=no
+-  fi
+-
+-  case $lt_cv_dlopen in
+-  dlopen)
+-    save_CPPFLAGS="$CPPFLAGS"
+-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+-
+-    save_LDFLAGS="$LDFLAGS"
+-    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+-
+-    save_LIBS="$LIBS"
+-    LIBS="$lt_cv_dlopen_libs $LIBS"
+-
+-    AC_CACHE_CHECK([whether a program can dlopen itself],
+-	  lt_cv_dlopen_self, [dnl
+-	  _LT_TRY_DLOPEN_SELF(
+-	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+-	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+-    ])
+-
+-    if test "x$lt_cv_dlopen_self" = xyes; then
+-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+-	  lt_cv_dlopen_self_static, [dnl
+-	  _LT_TRY_DLOPEN_SELF(
+-	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+-	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+-      ])
+-    fi
+-
+-    CPPFLAGS="$save_CPPFLAGS"
+-    LDFLAGS="$save_LDFLAGS"
+-    LIBS="$save_LIBS"
+-    ;;
+-  esac
+-
+-  case $lt_cv_dlopen_self in
+-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+-  *) enable_dlopen_self=unknown ;;
+-  esac
+-
+-  case $lt_cv_dlopen_self_static in
+-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+-  *) enable_dlopen_self_static=unknown ;;
+-  esac
+-fi
+-_LT_DECL([dlopen_support], [enable_dlopen], [0],
+-	 [Whether dlopen is supported])
+-_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+-	 [Whether dlopen of programs is supported])
+-_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+-	 [Whether dlopen of statically linked programs is supported])
+-])# LT_SYS_DLOPEN_SELF
+-
+-# Old name:
+-AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+-
+-
+-# _LT_COMPILER_C_O([TAGNAME])
+-# ---------------------------
+-# Check to see if options -c and -o are simultaneously supported by compiler.
+-# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+-m4_defun([_LT_COMPILER_C_O],
+-[m4_require([_LT_DECL_SED])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_TAG_COMPILER])dnl
+-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+-  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+-   $RM -r conftest 2>/dev/null
+-   mkdir conftest
+-   cd conftest
+-   mkdir out
+-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+-
+-   lt_compiler_flag="-o out/conftest2.$ac_objext"
+-   # Insert the option either (1) after the last *FLAGS variable, or
+-   # (2) before a word containing "conftest.", or (3) at the end.
+-   # Note that $ac_compile itself does not contain backslashes and begins
+-   # with a dollar sign (not a hyphen), so the echo should work correctly.
+-   lt_compile=`echo "$ac_compile" | $SED \
+-   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+-   -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+-   (eval "$lt_compile" 2>out/conftest.err)
+-   ac_status=$?
+-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+-   then
+-     # The compiler can only warn and ignore the option if not recognized
+-     # So say no if there are warnings
+-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+-     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+-     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+-       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+-     fi
+-   fi
+-   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+-   $RM conftest*
+-   # SGI C++ compiler will create directory out/ii_files/ for
+-   # template instantiation
+-   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+-   $RM out/* && rmdir out
+-   cd ..
+-   $RM -r conftest
+-   $RM conftest*
+-])
+-_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+-	[Does compiler simultaneously support -c and -o options?])
+-])# _LT_COMPILER_C_O
+-
+-
+-# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+-# ----------------------------------
+-# Check to see if we can do hard links to lock some files if needed
+-m4_defun([_LT_COMPILER_FILE_LOCKS],
+-[m4_require([_LT_ENABLE_LOCK])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-_LT_COMPILER_C_O([$1])
+-
+-hard_links="nottested"
+-if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+-  # do not overwrite the value of need_locks provided by the user
+-  AC_MSG_CHECKING([if we can lock with hard links])
+-  hard_links=yes
+-  $RM conftest*
+-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+-  touch conftest.a
+-  ln conftest.a conftest.b 2>&5 || hard_links=no
+-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+-  AC_MSG_RESULT([$hard_links])
+-  if test "$hard_links" = no; then
+-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+-    need_locks=warn
+-  fi
+-else
+-  need_locks=no
+-fi
+-_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+-])# _LT_COMPILER_FILE_LOCKS
+-
+-
+-# _LT_CHECK_OBJDIR
+-# ----------------
+-m4_defun([_LT_CHECK_OBJDIR],
+-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+-[rm -f .libs 2>/dev/null
+-mkdir .libs 2>/dev/null
+-if test -d .libs; then
+-  lt_cv_objdir=.libs
+-else
+-  # MS-DOS does not allow filenames that begin with a dot.
+-  lt_cv_objdir=_libs
+-fi
+-rmdir .libs 2>/dev/null])
+-objdir=$lt_cv_objdir
+-_LT_DECL([], [objdir], [0],
+-         [The name of the directory that contains temporary libtool files])dnl
+-m4_pattern_allow([LT_OBJDIR])dnl
+-AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+-  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+-])# _LT_CHECK_OBJDIR
+-
+-
+-# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+-# --------------------------------------
+-# Check hardcoding attributes.
+-m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+-[AC_MSG_CHECKING([how to hardcode library paths into programs])
+-_LT_TAGVAR(hardcode_action, $1)=
+-if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+-   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+-   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+-
+-  # We can hardcode non-existent directories.
+-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+-     # have to relink, otherwise we might link with an installed library
+-     # when we should be linking with a yet-to-be-installed one
+-     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+-     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+-    # Linking always hardcodes the temporary library directory.
+-    _LT_TAGVAR(hardcode_action, $1)=relink
+-  else
+-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+-    _LT_TAGVAR(hardcode_action, $1)=immediate
+-  fi
+-else
+-  # We cannot hardcode anything, or else we can only hardcode existing
+-  # directories.
+-  _LT_TAGVAR(hardcode_action, $1)=unsupported
+-fi
+-AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+-
+-if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+-   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+-  # Fast installation is not supported
+-  enable_fast_install=no
+-elif test "$shlibpath_overrides_runpath" = yes ||
+-     test "$enable_shared" = no; then
+-  # Fast installation is not necessary
+-  enable_fast_install=needless
+-fi
+-_LT_TAGDECL([], [hardcode_action], [0],
+-    [How to hardcode a shared library path into an executable])
+-])# _LT_LINKER_HARDCODE_LIBPATH
+-
+-
+-# _LT_CMD_STRIPLIB
+-# ----------------
+-m4_defun([_LT_CMD_STRIPLIB],
+-[m4_require([_LT_DECL_EGREP])
+-striplib=
+-old_striplib=
+-AC_MSG_CHECKING([whether stripping libraries is possible])
+-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+-  AC_MSG_RESULT([yes])
+-else
+-# FIXME - insert some real tests, host_os isn't really good enough
+-  case $host_os in
+-  darwin*)
+-    if test -n "$STRIP" ; then
+-      striplib="$STRIP -x"
+-      old_striplib="$STRIP -S"
+-      AC_MSG_RESULT([yes])
+-    else
+-      AC_MSG_RESULT([no])
+-    fi
+-    ;;
+-  *)
+-    AC_MSG_RESULT([no])
+-    ;;
+-  esac
+-fi
+-_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+-_LT_DECL([], [striplib], [1])
+-])# _LT_CMD_STRIPLIB
+-
+-
+-# _LT_SYS_DYNAMIC_LINKER([TAG])
+-# -----------------------------
+-# PORTME Fill in your ld.so characteristics
+-m4_defun([_LT_SYS_DYNAMIC_LINKER],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_OBJDUMP])dnl
+-m4_require([_LT_DECL_SED])dnl
+-AC_MSG_CHECKING([dynamic linker characteristics])
+-m4_if([$1],
+-	[], [
+-if test "$GCC" = yes; then
+-  case $host_os in
+-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+-    *) lt_awk_arg="/^libraries:/" ;;
+-  esac
+-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+-    # if the path contains ";" then we assume it to be the separator
+-    # otherwise default to the standard path separator (i.e. ":") - it is
+-    # assumed that no part of a normal pathname contains ";" but that should
+-    # okay in the real world where ";" in dirpaths is itself problematic.
+-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+-  else
+-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+-  fi
+-  # Ok, now we have the path, separated by spaces, we can step through it
+-  # and add multilib dir if necessary.
+-  lt_tmp_lt_search_path_spec=
+-  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+-  for lt_sys_path in $lt_search_path_spec; do
+-    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+-      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+-    else
+-      test -d "$lt_sys_path" && \
+-	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+-    fi
+-  done
+-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+-BEGIN {RS=" "; FS="/|\n";} {
+-  lt_foo="";
+-  lt_count=0;
+-  for (lt_i = NF; lt_i > 0; lt_i--) {
+-    if ($lt_i != "" && $lt_i != ".") {
+-      if ($lt_i == "..") {
+-        lt_count++;
+-      } else {
+-        if (lt_count == 0) {
+-          lt_foo="/" $lt_i lt_foo;
+-        } else {
+-          lt_count--;
+-        }
+-      }
+-    }
+-  }
+-  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+-  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+-}'`
+-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+-else
+-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+-fi])
+-library_names_spec=
+-libname_spec='lib$name'
+-soname_spec=
+-shrext_cmds=".so"
+-postinstall_cmds=
+-postuninstall_cmds=
+-finish_cmds=
+-finish_eval=
+-shlibpath_var=
+-shlibpath_overrides_runpath=unknown
+-version_type=none
+-dynamic_linker="$host_os ld.so"
+-sys_lib_dlsearch_path_spec="/lib /usr/lib"
+-need_lib_prefix=unknown
+-hardcode_into_libs=no
+-
+-# when you set need_version to no, make sure it does not cause -set_version
+-# flags to be left without arguments
+-need_version=unknown
+-
+-case $host_os in
+-aix3*)
+-  version_type=linux
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+-  shlibpath_var=LIBPATH
+-
+-  # AIX 3 has no versioning support, so we append a major version to the name.
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  ;;
+-
+-aix[[4-9]]*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  hardcode_into_libs=yes
+-  if test "$host_cpu" = ia64; then
+-    # AIX 5 supports IA64
+-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+-    shlibpath_var=LD_LIBRARY_PATH
+-  else
+-    # With GCC up to 2.95.x, collect2 would create an import file
+-    # for dependence libraries.  The import file would start with
+-    # the line `#! .'.  This would cause the generated library to
+-    # depend on `.', always an invalid library.  This was fixed in
+-    # development snapshots of GCC prior to 3.0.
+-    case $host_os in
+-      aix4 | aix4.[[01]] | aix4.[[01]].*)
+-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+-	   echo ' yes '
+-	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+-	:
+-      else
+-	can_build_shared=no
+-      fi
+-      ;;
+-    esac
+-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+-    # soname into executable. Probably we can add versioning support to
+-    # collect2, so additional links can be useful in future.
+-    if test "$aix_use_runtimelinking" = yes; then
+-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+-      # instead of lib<name>.a to let people know that these are not
+-      # typical AIX shared libraries.
+-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    else
+-      # We preserve .a as extension for shared libraries through AIX4.2
+-      # and later when we are not doing run time linking.
+-      library_names_spec='${libname}${release}.a $libname.a'
+-      soname_spec='${libname}${release}${shared_ext}$major'
+-    fi
+-    shlibpath_var=LIBPATH
+-  fi
+-  ;;
+-
+-amigaos*)
+-  case $host_cpu in
+-  powerpc)
+-    # Since July 2007 AmigaOS4 officially supports .so libraries.
+-    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    ;;
+-  m68k)
+-    library_names_spec='$libname.ixlibrary $libname.a'
+-    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+-    ;;
+-  esac
+-  ;;
+-
+-beos*)
+-  library_names_spec='${libname}${shared_ext}'
+-  dynamic_linker="$host_os ld.so"
+-  shlibpath_var=LIBRARY_PATH
+-  ;;
+-
+-bsdi[[45]]*)
+-  version_type=linux
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+-  # the default ld.so.conf also contains /usr/contrib/lib and
+-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+-  # libtool to hard-code these into programs
+-  ;;
+-
+-cygwin* | mingw* | pw32* | cegcc*)
+-  version_type=windows
+-  shrext_cmds=".dll"
+-  need_version=no
+-  need_lib_prefix=no
+-
+-  case $GCC,$host_os in
+-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+-    library_names_spec='$libname.dll.a'
+-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+-    postinstall_cmds='base_file=`basename \${file}`~
+-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+-      dldir=$destdir/`dirname \$dlpath`~
+-      test -d \$dldir || mkdir -p \$dldir~
+-      $install_prog $dir/$dlname \$dldir/$dlname~
+-      chmod a+x \$dldir/$dlname~
+-      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+-        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+-      fi'
+-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+-      dlpath=$dir/\$dldll~
+-       $RM \$dlpath'
+-    shlibpath_overrides_runpath=yes
+-
+-    case $host_os in
+-    cygwin*)
+-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+-      ;;
+-    mingw* | cegcc*)
+-      # MinGW DLLs use traditional 'lib' prefix
+-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+-        # It is most probably a Windows format PATH printed by
+-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+-        # path with ; separators, and with drive letters. We can handle the
+-        # drive letters (cygwin fileutils understands them), so leave them,
+-        # especially as we might pass files found there to a mingw objdump,
+-        # which wouldn't understand a cygwinified path. Ahh.
+-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+-      else
+-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+-      fi
+-      ;;
+-    pw32*)
+-      # pw32 DLLs use 'pw' prefix rather than 'lib'
+-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+-      ;;
+-    esac
+-    ;;
+-
+-  *)
+-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+-    ;;
+-  esac
+-  dynamic_linker='Win32 ld.exe'
+-  # FIXME: first we should search . and the directory the executable is in
+-  shlibpath_var=PATH
+-  ;;
+-
+-darwin* | rhapsody*)
+-  dynamic_linker="$host_os dyld"
+-  version_type=darwin
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+-  soname_spec='${libname}${release}${major}$shared_ext'
+-  shlibpath_overrides_runpath=yes
+-  shlibpath_var=DYLD_LIBRARY_PATH
+-  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+-m4_if([$1], [],[
+-  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+-  ;;
+-
+-dgux*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  ;;
+-
+-freebsd1*)
+-  dynamic_linker=no
+-  ;;
+-
+-freebsd* | dragonfly*)
+-  # DragonFly does not have aout.  When/if they implement a new
+-  # versioning mechanism, adjust this.
+-  if test -x /usr/bin/objformat; then
+-    objformat=`/usr/bin/objformat`
+-  else
+-    case $host_os in
+-    freebsd[[123]]*) objformat=aout ;;
+-    *) objformat=elf ;;
+-    esac
+-  fi
+-  version_type=freebsd-$objformat
+-  case $version_type in
+-    freebsd-elf*)
+-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+-      need_version=no
+-      need_lib_prefix=no
+-      ;;
+-    freebsd-*)
+-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+-      need_version=yes
+-      ;;
+-  esac
+-  shlibpath_var=LD_LIBRARY_PATH
+-  case $host_os in
+-  freebsd2*)
+-    shlibpath_overrides_runpath=yes
+-    ;;
+-  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+-    shlibpath_overrides_runpath=yes
+-    hardcode_into_libs=yes
+-    ;;
+-  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+-  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+-    shlibpath_overrides_runpath=no
+-    hardcode_into_libs=yes
+-    ;;
+-  *) # from 4.6 on, and DragonFly
+-    shlibpath_overrides_runpath=yes
+-    hardcode_into_libs=yes
+-    ;;
+-  esac
+-  ;;
+-
+-gnu*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  hardcode_into_libs=yes
+-  ;;
+-
+-hpux9* | hpux10* | hpux11*)
+-  # Give a soname corresponding to the major version so that dld.sl refuses to
+-  # link against other versions.
+-  version_type=sunos
+-  need_lib_prefix=no
+-  need_version=no
+-  case $host_cpu in
+-  ia64*)
+-    shrext_cmds='.so'
+-    hardcode_into_libs=yes
+-    dynamic_linker="$host_os dld.so"
+-    shlibpath_var=LD_LIBRARY_PATH
+-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    soname_spec='${libname}${release}${shared_ext}$major'
+-    if test "X$HPUX_IA64_MODE" = X32; then
+-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+-    else
+-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+-    fi
+-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+-    ;;
+-  hppa*64*)
+-    shrext_cmds='.sl'
+-    hardcode_into_libs=yes
+-    dynamic_linker="$host_os dld.sl"
+-    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    soname_spec='${libname}${release}${shared_ext}$major'
+-    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+-    ;;
+-  *)
+-    shrext_cmds='.sl'
+-    dynamic_linker="$host_os dld.sl"
+-    shlibpath_var=SHLIB_PATH
+-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-    soname_spec='${libname}${release}${shared_ext}$major'
+-    ;;
+-  esac
+-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+-  postinstall_cmds='chmod 555 $lib'
+-  ;;
+-
+-interix[[3-9]]*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  hardcode_into_libs=yes
+-  ;;
+-
+-irix5* | irix6* | nonstopux*)
+-  case $host_os in
+-    nonstopux*) version_type=nonstopux ;;
+-    *)
+-	if test "$lt_cv_prog_gnu_ld" = yes; then
+-		version_type=linux
+-	else
+-		version_type=irix
+-	fi ;;
+-  esac
+-  need_lib_prefix=no
+-  need_version=no
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+-  case $host_os in
+-  irix5* | nonstopux*)
+-    libsuff= shlibsuff=
+-    ;;
+-  *)
+-    case $LD in # libtool.m4 will add one of these switches to LD
+-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+-      libsuff= shlibsuff= libmagic=32-bit;;
+-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+-      libsuff=32 shlibsuff=N32 libmagic=N32;;
+-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+-    *) libsuff= shlibsuff= libmagic=never-match;;
+-    esac
+-    ;;
+-  esac
+-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+-  shlibpath_overrides_runpath=no
+-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+-  hardcode_into_libs=yes
+-  ;;
+-
+-# No shared lib support for Linux oldld, aout, or coff.
+-linux*oldld* | linux*aout* | linux*coff*)
+-  dynamic_linker=no
+-  ;;
+-
+-# This must be Linux ELF.
+-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  # Some binutils ld are patched to set DT_RUNPATH
+-  save_LDFLAGS=$LDFLAGS
+-  save_libdir=$libdir
+-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+-       [shlibpath_overrides_runpath=yes])])
+-  LDFLAGS=$save_LDFLAGS
+-  libdir=$save_libdir
+-
+-  # This implies no fast_install, which is unacceptable.
+-  # Some rework will be needed to allow for fast_install
+-  # before this can be enabled.
+-  hardcode_into_libs=yes
+-
+-  # Append ld.so.conf contents to the search path
+-  if test -f /etc/ld.so.conf; then
+-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+-  fi
+-
+-  # We used to test for /lib/ld.so.1 and disable shared libraries on
+-  # powerpc, because MkLinux only supported shared libraries with the
+-  # GNU dynamic linker.  Since this was broken with cross compilers,
+-  # most powerpc-linux boxes support dynamic linking these days and
+-  # people can always --disable-shared, the test was removed, and we
+-  # assume the GNU/Linux dynamic linker is in use.
+-  dynamic_linker='GNU/Linux ld.so'
+-  ;;
+-
+-netbsdelf*-gnu)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  hardcode_into_libs=yes
+-  dynamic_linker='NetBSD ld.elf_so'
+-  ;;
+-
+-netbsd*)
+-  version_type=sunos
+-  need_lib_prefix=no
+-  need_version=no
+-  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+-    dynamic_linker='NetBSD (a.out) ld.so'
+-  else
+-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+-    soname_spec='${libname}${release}${shared_ext}$major'
+-    dynamic_linker='NetBSD ld.elf_so'
+-  fi
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  hardcode_into_libs=yes
+-  ;;
+-
+-newsos6)
+-  version_type=linux
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  ;;
+-
+-*nto* | *qnx*)
+-  version_type=qnx
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  hardcode_into_libs=yes
+-  dynamic_linker='ldqnx.so'
+-  ;;
+-
+-openbsd*)
+-  version_type=sunos
+-  sys_lib_dlsearch_path_spec="/usr/lib"
+-  need_lib_prefix=no
+-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+-  case $host_os in
+-    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+-    *)				need_version=no  ;;
+-  esac
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+-    case $host_os in
+-      openbsd2.[[89]] | openbsd2.[[89]].*)
+-	shlibpath_overrides_runpath=no
+-	;;
+-      *)
+-	shlibpath_overrides_runpath=yes
+-	;;
+-      esac
+-  else
+-    shlibpath_overrides_runpath=yes
+-  fi
+-  ;;
+-
+-os2*)
+-  libname_spec='$name'
+-  shrext_cmds=".dll"
+-  need_lib_prefix=no
+-  library_names_spec='$libname${shared_ext} $libname.a'
+-  dynamic_linker='OS/2 ld.exe'
+-  shlibpath_var=LIBPATH
+-  ;;
+-
+-osf3* | osf4* | osf5*)
+-  version_type=osf
+-  need_lib_prefix=no
+-  need_version=no
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+-  ;;
+-
+-rdos*)
+-  dynamic_linker=no
+-  ;;
+-
+-solaris*)
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  hardcode_into_libs=yes
+-  # ldd complains unless libraries are executable
+-  postinstall_cmds='chmod +x $lib'
+-  ;;
+-
+-sunos4*)
+-  version_type=sunos
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  if test "$with_gnu_ld" = yes; then
+-    need_lib_prefix=no
+-  fi
+-  need_version=yes
+-  ;;
+-
+-sysv4 | sysv4.3*)
+-  version_type=linux
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  case $host_vendor in
+-    sni)
+-      shlibpath_overrides_runpath=no
+-      need_lib_prefix=no
+-      runpath_var=LD_RUN_PATH
+-      ;;
+-    siemens)
+-      need_lib_prefix=no
+-      ;;
+-    motorola)
+-      need_lib_prefix=no
+-      need_version=no
+-      shlibpath_overrides_runpath=no
+-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+-      ;;
+-  esac
+-  ;;
+-
+-sysv4*MP*)
+-  if test -d /usr/nec ;then
+-    version_type=linux
+-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+-    soname_spec='$libname${shared_ext}.$major'
+-    shlibpath_var=LD_LIBRARY_PATH
+-  fi
+-  ;;
+-
+-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+-  version_type=freebsd-elf
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=yes
+-  hardcode_into_libs=yes
+-  if test "$with_gnu_ld" = yes; then
+-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+-  else
+-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+-    case $host_os in
+-      sco3.2v5*)
+-        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+-	;;
+-    esac
+-  fi
+-  sys_lib_dlsearch_path_spec='/usr/lib'
+-  ;;
+-
+-tpf*)
+-  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+-  version_type=linux
+-  need_lib_prefix=no
+-  need_version=no
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  shlibpath_overrides_runpath=no
+-  hardcode_into_libs=yes
+-  ;;
+-
+-uts4*)
+-  version_type=linux
+-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+-  soname_spec='${libname}${release}${shared_ext}$major'
+-  shlibpath_var=LD_LIBRARY_PATH
+-  ;;
+-
+-*)
+-  dynamic_linker=no
+-  ;;
+-esac
+-AC_MSG_RESULT([$dynamic_linker])
+-test "$dynamic_linker" = no && can_build_shared=no
+-
+-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+-if test "$GCC" = yes; then
+-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+-fi
+-
+-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+-  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+-fi
+-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+-  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+-fi
+-
+-_LT_DECL([], [variables_saved_for_relink], [1],
+-    [Variables whose values should be saved in libtool wrapper scripts and
+-    restored at link time])
+-_LT_DECL([], [need_lib_prefix], [0],
+-    [Do we need the "lib" prefix for modules?])
+-_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+-_LT_DECL([], [version_type], [0], [Library versioning type])
+-_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+-_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+-_LT_DECL([], [shlibpath_overrides_runpath], [0],
+-    [Is shlibpath searched before the hard-coded library search path?])
+-_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+-_LT_DECL([], [library_names_spec], [1],
+-    [[List of archive names.  First name is the real one, the rest are links.
+-    The last name is the one that the linker finds with -lNAME]])
+-_LT_DECL([], [soname_spec], [1],
+-    [[The coded name of the library, if different from the real name]])
+-_LT_DECL([], [postinstall_cmds], [2],
+-    [Command to use after installation of a shared archive])
+-_LT_DECL([], [postuninstall_cmds], [2],
+-    [Command to use after uninstallation of a shared archive])
+-_LT_DECL([], [finish_cmds], [2],
+-    [Commands used to finish a libtool library installation in a directory])
+-_LT_DECL([], [finish_eval], [1],
+-    [[As "finish_cmds", except a single script fragment to be evaled but
+-    not shown]])
+-_LT_DECL([], [hardcode_into_libs], [0],
+-    [Whether we should hardcode library paths into libraries])
+-_LT_DECL([], [sys_lib_search_path_spec], [2],
+-    [Compile-time system search path for libraries])
+-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+-    [Run-time system search path for libraries])
+-])# _LT_SYS_DYNAMIC_LINKER
+-
+-
+-# _LT_PATH_TOOL_PREFIX(TOOL)
+-# --------------------------
+-# find a file program which can recognize shared library
+-AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+-[m4_require([_LT_DECL_EGREP])dnl
+-AC_MSG_CHECKING([for $1])
+-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+-[case $MAGIC_CMD in
+-[[\\/*] |  ?:[\\/]*])
+-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+-  ;;
+-*)
+-  lt_save_MAGIC_CMD="$MAGIC_CMD"
+-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-dnl $ac_dummy forces splitting on constant user-supplied paths.
+-dnl POSIX.2 word splitting is done only on the output of word expansions,
+-dnl not every word.  This closes a longstanding sh security hole.
+-  ac_dummy="m4_if([$2], , $PATH, [$2])"
+-  for ac_dir in $ac_dummy; do
+-    IFS="$lt_save_ifs"
+-    test -z "$ac_dir" && ac_dir=.
+-    if test -f $ac_dir/$1; then
+-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+-      if test -n "$file_magic_test_file"; then
+-	case $deplibs_check_method in
+-	"file_magic "*)
+-	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+-	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+-	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+-	    $EGREP "$file_magic_regex" > /dev/null; then
+-	    :
+-	  else
+-	    cat <<_LT_EOF 1>&2
+-
+-*** Warning: the command libtool uses to detect shared libraries,
+-*** $file_magic_cmd, produces output that libtool cannot recognize.
+-*** The result is that libtool may fail to recognize shared libraries
+-*** as such.  This will affect the creation of libtool libraries that
+-*** depend on shared libraries, but programs linked with such libtool
+-*** libraries will work regardless of this problem.  Nevertheless, you
+-*** may want to report the problem to your system manager and/or to
+-*** bug-libtool at gnu.org
+-
+-_LT_EOF
+-	  fi ;;
+-	esac
+-      fi
+-      break
+-    fi
+-  done
+-  IFS="$lt_save_ifs"
+-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+-  ;;
+-esac])
+-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+-if test -n "$MAGIC_CMD"; then
+-  AC_MSG_RESULT($MAGIC_CMD)
+-else
+-  AC_MSG_RESULT(no)
+-fi
+-_LT_DECL([], [MAGIC_CMD], [0],
+-	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+-])# _LT_PATH_TOOL_PREFIX
+-
+-# Old name:
+-AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+-
+-
+-# _LT_PATH_MAGIC
+-# --------------
+-# find a file program which can recognize a shared library
+-m4_defun([_LT_PATH_MAGIC],
+-[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+-if test -z "$lt_cv_path_MAGIC_CMD"; then
+-  if test -n "$ac_tool_prefix"; then
+-    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+-  else
+-    MAGIC_CMD=:
+-  fi
+-fi
+-])# _LT_PATH_MAGIC
+-
+-
+-# LT_PATH_LD
+-# ----------
+-# find the pathname to the GNU or non-GNU linker
+-AC_DEFUN([LT_PATH_LD],
+-[AC_REQUIRE([AC_PROG_CC])dnl
+-AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+-m4_require([_LT_DECL_SED])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-
+-AC_ARG_WITH([gnu-ld],
+-    [AS_HELP_STRING([--with-gnu-ld],
+-	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+-    [test "$withval" = no || with_gnu_ld=yes],
+-    [with_gnu_ld=no])dnl
+-
+-ac_prog=ld
+-if test "$GCC" = yes; then
+-  # Check if gcc -print-prog-name=ld gives a path.
+-  AC_MSG_CHECKING([for ld used by $CC])
+-  case $host in
+-  *-*-mingw*)
+-    # gcc leaves a trailing carriage return which upsets mingw
+-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+-  *)
+-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+-  esac
+-  case $ac_prog in
+-    # Accept absolute paths.
+-    [[\\/]]* | ?:[[\\/]]*)
+-      re_direlt='/[[^/]][[^/]]*/\.\./'
+-      # Canonicalize the pathname of ld
+-      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+-      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+-	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+-      done
+-      test -z "$LD" && LD="$ac_prog"
+-      ;;
+-  "")
+-    # If it fails, then pretend we aren't using GCC.
+-    ac_prog=ld
+-    ;;
+-  *)
+-    # If it is relative, then search for the first ld in PATH.
+-    with_gnu_ld=unknown
+-    ;;
+-  esac
+-elif test "$with_gnu_ld" = yes; then
+-  AC_MSG_CHECKING([for GNU ld])
+-else
+-  AC_MSG_CHECKING([for non-GNU ld])
+-fi
+-AC_CACHE_VAL(lt_cv_path_LD,
+-[if test -z "$LD"; then
+-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-  for ac_dir in $PATH; do
+-    IFS="$lt_save_ifs"
+-    test -z "$ac_dir" && ac_dir=.
+-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+-      lt_cv_path_LD="$ac_dir/$ac_prog"
+-      # Check to see if the program is GNU ld.  I'd rather use --version,
+-      # but apparently some variants of GNU ld only accept -v.
+-      # Break only if it was the GNU/non-GNU ld that we prefer.
+-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+-      *GNU* | *'with BFD'*)
+-	test "$with_gnu_ld" != no && break
+-	;;
+-      *)
+-	test "$with_gnu_ld" != yes && break
+-	;;
+-      esac
+-    fi
+-  done
+-  IFS="$lt_save_ifs"
+-else
+-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+-fi])
+-LD="$lt_cv_path_LD"
+-if test -n "$LD"; then
+-  AC_MSG_RESULT($LD)
+-else
+-  AC_MSG_RESULT(no)
+-fi
+-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+-_LT_PATH_LD_GNU
+-AC_SUBST([LD])
+-
+-_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+-])# LT_PATH_LD
+-
+-# Old names:
+-AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+-AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AM_PROG_LD], [])
+-dnl AC_DEFUN([AC_PROG_LD], [])
+-
+-
+-# _LT_PATH_LD_GNU
+-#- --------------
+-m4_defun([_LT_PATH_LD_GNU],
+-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+-[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+-case `$LD -v 2>&1 </dev/null` in
+-*GNU* | *'with BFD'*)
+-  lt_cv_prog_gnu_ld=yes
+-  ;;
+-*)
+-  lt_cv_prog_gnu_ld=no
+-  ;;
+-esac])
+-with_gnu_ld=$lt_cv_prog_gnu_ld
+-])# _LT_PATH_LD_GNU
+-
+-
+-# _LT_CMD_RELOAD
+-# --------------
+-# find reload flag for linker
+-#   -- PORTME Some linkers may need a different reload flag.
+-m4_defun([_LT_CMD_RELOAD],
+-[AC_CACHE_CHECK([for $LD option to reload object files],
+-  lt_cv_ld_reload_flag,
+-  [lt_cv_ld_reload_flag='-r'])
+-reload_flag=$lt_cv_ld_reload_flag
+-case $reload_flag in
+-"" | " "*) ;;
+-*) reload_flag=" $reload_flag" ;;
+-esac
+-reload_cmds='$LD$reload_flag -o $output$reload_objs'
+-case $host_os in
+-  darwin*)
+-    if test "$GCC" = yes; then
+-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+-    else
+-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+-    fi
+-    ;;
+-esac
+-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+-_LT_DECL([], [reload_cmds], [2])dnl
+-])# _LT_CMD_RELOAD
+-
+-
+-# _LT_CHECK_MAGIC_METHOD
+-# ----------------------
+-# how to check for library dependencies
+-#  -- PORTME fill in with the dynamic library characteristics
+-m4_defun([_LT_CHECK_MAGIC_METHOD],
+-[m4_require([_LT_DECL_EGREP])
+-m4_require([_LT_DECL_OBJDUMP])
+-AC_CACHE_CHECK([how to recognize dependent libraries],
+-lt_cv_deplibs_check_method,
+-[lt_cv_file_magic_cmd='$MAGIC_CMD'
+-lt_cv_file_magic_test_file=
+-lt_cv_deplibs_check_method='unknown'
+-# Need to set the preceding variable on all platforms that support
+-# interlibrary dependencies.
+-# 'none' -- dependencies not supported.
+-# `unknown' -- same as none, but documents that we really don't know.
+-# 'pass_all' -- all dependencies passed with no checks.
+-# 'test_compile' -- check by making test program.
+-# 'file_magic [[regex]]' -- check by looking for files in library path
+-# which responds to the $file_magic_cmd with a given extended regex.
+-# If you have `file' or equivalent on your system and you're not sure
+-# whether `pass_all' will *always* work, you probably want this one.
+-
+-case $host_os in
+-aix[[4-9]]*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-beos*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-bsdi[[45]]*)
+-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+-  lt_cv_file_magic_cmd='/usr/bin/file -L'
+-  lt_cv_file_magic_test_file=/shlib/libc.so
+-  ;;
+-
+-cygwin*)
+-  # func_win32_libid is a shell function defined in ltmain.sh
+-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+-  lt_cv_file_magic_cmd='func_win32_libid'
+-  ;;
+-
+-mingw* | pw32*)
+-  # Base MSYS/MinGW do not provide the 'file' command needed by
+-  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+-  # unless we find 'file', for example because we are cross-compiling.
+-  if ( file / ) >/dev/null 2>&1; then
+-    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+-    lt_cv_file_magic_cmd='func_win32_libid'
+-  else
+-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+-    lt_cv_file_magic_cmd='$OBJDUMP -f'
+-  fi
+-  ;;
+-
+-cegcc)
+-  # use the weaker test based on 'objdump'. See mingw*.
+-  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+-  lt_cv_file_magic_cmd='$OBJDUMP -f'
+-  ;;
+-
+-darwin* | rhapsody*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-freebsd* | dragonfly*)
+-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+-    case $host_cpu in
+-    i*86 )
+-      # Not sure whether the presence of OpenBSD here was a mistake.
+-      # Let's accept both of them until this is cleared up.
+-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+-      lt_cv_file_magic_cmd=/usr/bin/file
+-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+-      ;;
+-    esac
+-  else
+-    lt_cv_deplibs_check_method=pass_all
+-  fi
+-  ;;
+-
+-gnu*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-hpux10.20* | hpux11*)
+-  lt_cv_file_magic_cmd=/usr/bin/file
+-  case $host_cpu in
+-  ia64*)
+-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+-    ;;
+-  hppa*64*)
+-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+-    ;;
+-  *)
+-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+-    ;;
+-  esac
+-  ;;
+-
+-interix[[3-9]]*)
+-  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+-  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+-  ;;
+-
+-irix5* | irix6* | nonstopux*)
+-  case $LD in
+-  *-32|*"-32 ") libmagic=32-bit;;
+-  *-n32|*"-n32 ") libmagic=N32;;
+-  *-64|*"-64 ") libmagic=64-bit;;
+-  *) libmagic=never-match;;
+-  esac
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-# This must be Linux ELF.
+-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-netbsd* | netbsdelf*-gnu)
+-  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+-  else
+-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+-  fi
+-  ;;
+-
+-newos6*)
+-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+-  lt_cv_file_magic_cmd=/usr/bin/file
+-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+-  ;;
+-
+-*nto* | *qnx*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-openbsd*)
+-  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+-  else
+-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+-  fi
+-  ;;
+-
+-osf3* | osf4* | osf5*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-rdos*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-solaris*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-
+-sysv4 | sysv4.3*)
+-  case $host_vendor in
+-  motorola)
+-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+-    ;;
+-  ncr)
+-    lt_cv_deplibs_check_method=pass_all
+-    ;;
+-  sequent)
+-    lt_cv_file_magic_cmd='/bin/file'
+-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+-    ;;
+-  sni)
+-    lt_cv_file_magic_cmd='/bin/file'
+-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+-    lt_cv_file_magic_test_file=/lib/libc.so
+-    ;;
+-  siemens)
+-    lt_cv_deplibs_check_method=pass_all
+-    ;;
+-  pc)
+-    lt_cv_deplibs_check_method=pass_all
+-    ;;
+-  esac
+-  ;;
+-
+-tpf*)
+-  lt_cv_deplibs_check_method=pass_all
+-  ;;
+-esac
+-])
+-file_magic_cmd=$lt_cv_file_magic_cmd
+-deplibs_check_method=$lt_cv_deplibs_check_method
+-test -z "$deplibs_check_method" && deplibs_check_method=unknown
+-
+-_LT_DECL([], [deplibs_check_method], [1],
+-    [Method to check whether dependent libraries are shared objects])
+-_LT_DECL([], [file_magic_cmd], [1],
+-    [Command to use when deplibs_check_method == "file_magic"])
+-])# _LT_CHECK_MAGIC_METHOD
+-
+-
+-# LT_PATH_NM
+-# ----------
+-# find the pathname to a BSD- or MS-compatible name lister
+-AC_DEFUN([LT_PATH_NM],
+-[AC_REQUIRE([AC_PROG_CC])dnl
+-AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+-[if test -n "$NM"; then
+-  # Let the user override the test.
+-  lt_cv_path_NM="$NM"
+-else
+-  lt_nm_to_check="${ac_tool_prefix}nm"
+-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+-    lt_nm_to_check="$lt_nm_to_check nm"
+-  fi
+-  for lt_tmp_nm in $lt_nm_to_check; do
+-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+-    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+-      IFS="$lt_save_ifs"
+-      test -z "$ac_dir" && ac_dir=.
+-      tmp_nm="$ac_dir/$lt_tmp_nm"
+-      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+-	# Check to see if the nm accepts a BSD-compat flag.
+-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+-	#   nm: unknown option "B" ignored
+-	# Tru64's nm complains that /dev/null is an invalid object file
+-	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+-	*/dev/null* | *'Invalid file or object type'*)
+-	  lt_cv_path_NM="$tmp_nm -B"
+-	  break
+-	  ;;
+-	*)
+-	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+-	  */dev/null*)
+-	    lt_cv_path_NM="$tmp_nm -p"
+-	    break
+-	    ;;
+-	  *)
+-	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+-	    continue # so that we can try to find one that supports BSD flags
+-	    ;;
+-	  esac
+-	  ;;
+-	esac
+-      fi
+-    done
+-    IFS="$lt_save_ifs"
+-  done
+-  : ${lt_cv_path_NM=no}
+-fi])
+-if test "$lt_cv_path_NM" != "no"; then
+-  NM="$lt_cv_path_NM"
+-else
+-  # Didn't find any BSD compatible name lister, look for dumpbin.
+-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+-  AC_SUBST([DUMPBIN])
+-  if test "$DUMPBIN" != ":"; then
+-    NM="$DUMPBIN"
+-  fi
+-fi
+-test -z "$NM" && NM=nm
+-AC_SUBST([NM])
+-_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+-
+-AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+-  [lt_cv_nm_interface="BSD nm"
+-  echo "int some_variable = 0;" > conftest.$ac_ext
+-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+-  (eval "$ac_compile" 2>conftest.err)
+-  cat conftest.err >&AS_MESSAGE_LOG_FD
+-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+-  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+-  cat conftest.err >&AS_MESSAGE_LOG_FD
+-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+-  cat conftest.out >&AS_MESSAGE_LOG_FD
+-  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+-    lt_cv_nm_interface="MS dumpbin"
+-  fi
+-  rm -f conftest*])
+-])# LT_PATH_NM
+-
+-# Old names:
+-AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+-AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AM_PROG_NM], [])
+-dnl AC_DEFUN([AC_PROG_NM], [])
+-
+-
+-# LT_LIB_M
+-# --------
+-# check for math library
+-AC_DEFUN([LT_LIB_M],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-LIBM=
+-case $host in
+-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+-  # These system don't have libm, or don't need it
+-  ;;
+-*-ncr-sysv4.3*)
+-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+-  ;;
+-*)
+-  AC_CHECK_LIB(m, cos, LIBM="-lm")
+-  ;;
+-esac
+-AC_SUBST([LIBM])
+-])# LT_LIB_M
+-
+-# Old name:
+-AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_CHECK_LIBM], [])
+-
+-
+-# _LT_COMPILER_NO_RTTI([TAGNAME])
+-# -------------------------------
+-m4_defun([_LT_COMPILER_NO_RTTI],
+-[m4_require([_LT_TAG_COMPILER])dnl
+-
+-_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+-
+-if test "$GCC" = yes; then
+-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+-
+-  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+-    lt_cv_prog_compiler_rtti_exceptions,
+-    [-fno-rtti -fno-exceptions], [],
+-    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+-fi
+-_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+-	[Compiler flag to turn off builtin functions])
+-])# _LT_COMPILER_NO_RTTI
+-
+-
+-# _LT_CMD_GLOBAL_SYMBOLS
+-# ----------------------
+-m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-AC_REQUIRE([AC_PROG_CC])dnl
+-AC_REQUIRE([LT_PATH_NM])dnl
+-AC_REQUIRE([LT_PATH_LD])dnl
+-m4_require([_LT_DECL_SED])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-m4_require([_LT_TAG_COMPILER])dnl
+-
+-# Check for command to grab the raw symbol name followed by C symbol from nm.
+-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+-[
+-# These are sane defaults that work on at least a few old systems.
+-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+-
+-# Character class describing NM global symbol codes.
+-symcode='[[BCDEGRST]]'
+-
+-# Regexp to match symbols that can be accessed directly from C.
+-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+-
+-# Define system-specific variables.
+-case $host_os in
+-aix*)
+-  symcode='[[BCDT]]'
+-  ;;
+-cygwin* | mingw* | pw32* | cegcc*)
+-  symcode='[[ABCDGISTW]]'
+-  ;;
+-hpux*)
+-  if test "$host_cpu" = ia64; then
+-    symcode='[[ABCDEGRST]]'
+-  fi
+-  ;;
+-irix* | nonstopux*)
+-  symcode='[[BCDEGRST]]'
+-  ;;
+-osf*)
+-  symcode='[[BCDEGQRST]]'
+-  ;;
+-solaris*)
+-  symcode='[[BDRT]]'
+-  ;;
+-sco3.2v5*)
+-  symcode='[[DT]]'
+-  ;;
+-sysv4.2uw2*)
+-  symcode='[[DT]]'
+-  ;;
+-sysv5* | sco5v6* | unixware* | OpenUNIX*)
+-  symcode='[[ABDT]]'
+-  ;;
+-sysv4)
+-  symcode='[[DFNSTU]]'
+-  ;;
+-esac
+-
+-# If we're using GNU nm, then use its standard symbol codes.
+-case `$NM -V 2>&1` in
+-*GNU* | *'with BFD'*)
+-  symcode='[[ABCDGIRSTW]]' ;;
+-esac
+-
+-# Transform an extracted symbol line into a proper C declaration.
+-# Some systems (esp. on ia64) link data and code symbols differently,
+-# so use this general approach.
+-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+-
+-# Transform an extracted symbol line into symbol name and symbol address
+-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+-
+-# Handle CRLF in mingw tool chain
+-opt_cr=
+-case $build_os in
+-mingw*)
+-  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+-  ;;
+-esac
+-
+-# Try without a prefix underscore, then with it.
+-for ac_symprfx in "" "_"; do
+-
+-  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+-  symxfrm="\\1 $ac_symprfx\\2 \\2"
+-
+-  # Write the raw and C identifiers.
+-  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+-    # Fake it for dumpbin and say T for any non-static function
+-    # and D for any global variable.
+-    # Also find C++ and __fastcall symbols from MSVC++,
+-    # which start with @ or ?.
+-    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+-"     {last_section=section; section=\$ 3};"\
+-"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+-"     \$ 0!~/External *\|/{next};"\
+-"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+-"     {if(hide[section]) next};"\
+-"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+-"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+-"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+-"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+-"     ' prfx=^$ac_symprfx]"
+-  else
+-    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+-  fi
+-
+-  # Check to see that the pipe works correctly.
+-  pipe_works=no
+-
+-  rm -f conftest*
+-  cat > conftest.$ac_ext <<_LT_EOF
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-char nm_test_var;
+-void nm_test_func(void);
+-void nm_test_func(void){}
+-#ifdef __cplusplus
+-}
+-#endif
+-int main(){nm_test_var='a';nm_test_func();return(0);}
+-_LT_EOF
+-
+-  if AC_TRY_EVAL(ac_compile); then
+-    # Now try to grab the symbols.
+-    nlist=conftest.nm
+-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+-      # Try sorting and uniquifying the output.
+-      if sort "$nlist" | uniq > "$nlist"T; then
+-	mv -f "$nlist"T "$nlist"
+-      else
+-	rm -f "$nlist"T
+-      fi
+-
+-      # Make sure that we snagged all the symbols we need.
+-      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+-	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+-	  cat <<_LT_EOF > conftest.$ac_ext
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-_LT_EOF
+-	  # Now generate the symbol file.
+-	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+-
+-	  cat <<_LT_EOF >> conftest.$ac_ext
+-
+-/* The mapping between symbol names and symbols.  */
+-const struct {
+-  const char *name;
+-  void       *address;
+-}
+-lt__PROGRAM__LTX_preloaded_symbols[[]] =
+-{
+-  { "@PROGRAM@", (void *) 0 },
+-_LT_EOF
+-	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+-	  cat <<\_LT_EOF >> conftest.$ac_ext
+-  {0, (void *) 0}
+-};
+-
+-/* This works around a problem in FreeBSD linker */
+-#ifdef FREEBSD_WORKAROUND
+-static const void *lt_preloaded_setup() {
+-  return lt__PROGRAM__LTX_preloaded_symbols;
+-}
+-#endif
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-_LT_EOF
+-	  # Now try linking the two files.
+-	  mv conftest.$ac_objext conftstm.$ac_objext
+-	  lt_save_LIBS="$LIBS"
+-	  lt_save_CFLAGS="$CFLAGS"
+-	  LIBS="conftstm.$ac_objext"
+-	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+-	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+-	    pipe_works=yes
+-	  fi
+-	  LIBS="$lt_save_LIBS"
+-	  CFLAGS="$lt_save_CFLAGS"
+-	else
+-	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+-	fi
+-      else
+-	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+-      fi
+-    else
+-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+-    fi
+-  else
+-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+-    cat conftest.$ac_ext >&5
+-  fi
+-  rm -rf conftest* conftst*
+-
+-  # Do not use the global_symbol_pipe unless it works.
+-  if test "$pipe_works" = yes; then
+-    break
+-  else
+-    lt_cv_sys_global_symbol_pipe=
+-  fi
+-done
+-])
+-if test -z "$lt_cv_sys_global_symbol_pipe"; then
+-  lt_cv_sys_global_symbol_to_cdecl=
+-fi
+-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+-  AC_MSG_RESULT(failed)
+-else
+-  AC_MSG_RESULT(ok)
+-fi
+-
+-_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+-    [Take the output of nm and produce a listing of raw symbols and C names])
+-_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+-    [Transform the output of nm in a proper C declaration])
+-_LT_DECL([global_symbol_to_c_name_address],
+-    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+-    [Transform the output of nm in a C name address pair])
+-_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+-    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+-    [Transform the output of nm in a C name address pair when lib prefix is needed])
+-]) # _LT_CMD_GLOBAL_SYMBOLS
+-
+-
+-# _LT_COMPILER_PIC([TAGNAME])
+-# ---------------------------
+-m4_defun([_LT_COMPILER_PIC],
+-[m4_require([_LT_TAG_COMPILER])dnl
+-_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+-_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-_LT_TAGVAR(lt_prog_compiler_static, $1)=
+-
+-AC_MSG_CHECKING([for $compiler option to produce PIC])
+-m4_if([$1], [CXX], [
+-  # C++ specific cases for pic, static, wl, etc.
+-  if test "$GXX" = yes; then
+-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-
+-    case $host_os in
+-    aix*)
+-      # All AIX code is PIC.
+-      if test "$host_cpu" = ia64; then
+-	# AIX 5 now supports IA64 processor
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      fi
+-      ;;
+-
+-    amigaos*)
+-      case $host_cpu in
+-      powerpc)
+-            # see comment about AmigaOS4 .so support
+-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-        ;;
+-      m68k)
+-            # FIXME: we need at least 68020 code to build shared libraries, but
+-            # adding the `-m68020' flag to GCC prevents building anything better,
+-            # like `-m68040'.
+-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+-        ;;
+-      esac
+-      ;;
+-
+-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+-      # PIC is the default for these OSes.
+-      ;;
+-    mingw* | cygwin* | os2* | pw32* | cegcc*)
+-      # This hack is so that the source file can tell whether it is being
+-      # built for inclusion in a dll (and should export symbols for example).
+-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+-      # (--disable-auto-import) libraries
+-      m4_if([$1], [GCJ], [],
+-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+-      ;;
+-    darwin* | rhapsody*)
+-      # PIC is the default on this platform
+-      # Common symbols not allowed in MH_DYLIB files
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+-      ;;
+-    *djgpp*)
+-      # DJGPP does not support shared libraries at all
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-      ;;
+-    interix[[3-9]]*)
+-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+-      # Instead, we relocate shared libraries at runtime.
+-      ;;
+-    sysv4*MP*)
+-      if test -d /usr/nec; then
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+-      fi
+-      ;;
+-    hpux*)
+-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+-      # sets the default TLS model and affects inlining.
+-      case $host_cpu in
+-      hppa*64*)
+-	;;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	;;
+-      esac
+-      ;;
+-    *qnx* | *nto*)
+-      # QNX uses GNU C++, but need to define -shared option too, otherwise
+-      # it will coredump.
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+-      ;;
+-    *)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-      ;;
+-    esac
+-  else
+-    case $host_os in
+-      aix[[4-9]]*)
+-	# All AIX code is PIC.
+-	if test "$host_cpu" = ia64; then
+-	  # AIX 5 now supports IA64 processor
+-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	else
+-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+-	fi
+-	;;
+-      chorus*)
+-	case $cc_basename in
+-	cxch68*)
+-	  # Green Hills C++ Compiler
+-	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+-	  ;;
+-	esac
+-	;;
+-      dgux*)
+-	case $cc_basename in
+-	  ec++*)
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    ;;
+-	  ghcx*)
+-	    # Green Hills C++ Compiler
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      freebsd* | dragonfly*)
+-	# FreeBSD uses GNU C++
+-	;;
+-      hpux9* | hpux10* | hpux11*)
+-	case $cc_basename in
+-	  CC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+-	    if test "$host_cpu" != ia64; then
+-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+-	    fi
+-	    ;;
+-	  aCC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+-	    case $host_cpu in
+-	    hppa*64*|ia64*)
+-	      # +Z the default
+-	      ;;
+-	    *)
+-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+-	      ;;
+-	    esac
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      interix*)
+-	# This is c89, which is MS Visual C++ (no shared libs)
+-	# Anyone wants to do a port?
+-	;;
+-      irix5* | irix6* | nonstopux*)
+-	case $cc_basename in
+-	  CC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-	    # CC pic flag -KPIC is the default.
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+-	case $cc_basename in
+-	  KCC*)
+-	    # KAI C++ Compiler
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	    ;;
+-	  ecpc* )
+-	    # old Intel C++ for x86_64 which still supported -KPIC.
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-	    ;;
+-	  icpc* )
+-	    # Intel C++, used to be incompatible with GCC.
+-	    # ICC 10 doesn't accept -KPIC any more.
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-	    ;;
+-	  pgCC* | pgcpp*)
+-	    # Portland Group C++ compiler
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	    ;;
+-	  cxx*)
+-	    # Compaq C++
+-	    # Make sure the PIC flag is empty.  It appears that all Alpha
+-	    # Linux and Compaq Tru64 Unix objects are PIC.
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-	    ;;
+-	  xlc* | xlC*)
+-	    # IBM XL 8.0 on PPC
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+-	    ;;
+-	  *)
+-	    case `$CC -V 2>&1 | sed 5q` in
+-	    *Sun\ C*)
+-	      # Sun C++ 5.9
+-	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+-	      ;;
+-	    esac
+-	    ;;
+-	esac
+-	;;
+-      lynxos*)
+-	;;
+-      m88k*)
+-	;;
+-      mvs*)
+-	case $cc_basename in
+-	  cxx*)
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      netbsd* | netbsdelf*-gnu)
+-	;;
+-      *qnx* | *nto*)
+-        # QNX uses GNU C++, but need to define -shared option too, otherwise
+-        # it will coredump.
+-        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+-        ;;
+-      osf3* | osf4* | osf5*)
+-	case $cc_basename in
+-	  KCC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+-	    ;;
+-	  RCC*)
+-	    # Rational C++ 2.4.1
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-	    ;;
+-	  cxx*)
+-	    # Digital/Compaq C++
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    # Make sure the PIC flag is empty.  It appears that all Alpha
+-	    # Linux and Compaq Tru64 Unix objects are PIC.
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      psos*)
+-	;;
+-      solaris*)
+-	case $cc_basename in
+-	  CC*)
+-	    # Sun C++ 4.2, 5.x and Centerline C++
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+-	    ;;
+-	  gcx*)
+-	    # Green Hills C++ Compiler
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      sunos4*)
+-	case $cc_basename in
+-	  CC*)
+-	    # Sun C++ 4.x
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	    ;;
+-	  lcc*)
+-	    # Lucid
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+-	case $cc_basename in
+-	  CC*)
+-	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	    ;;
+-	esac
+-	;;
+-      tandem*)
+-	case $cc_basename in
+-	  NCC*)
+-	    # NonStop-UX NCC 3.20
+-	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	    ;;
+-	  *)
+-	    ;;
+-	esac
+-	;;
+-      vxworks*)
+-	;;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+-	;;
+-    esac
+-  fi
+-],
+-[
+-  if test "$GCC" = yes; then
+-    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-
+-    case $host_os in
+-      aix*)
+-      # All AIX code is PIC.
+-      if test "$host_cpu" = ia64; then
+-	# AIX 5 now supports IA64 processor
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      fi
+-      ;;
+-
+-    amigaos*)
+-      case $host_cpu in
+-      powerpc)
+-            # see comment about AmigaOS4 .so support
+-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-        ;;
+-      m68k)
+-            # FIXME: we need at least 68020 code to build shared libraries, but
+-            # adding the `-m68020' flag to GCC prevents building anything better,
+-            # like `-m68040'.
+-            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+-        ;;
+-      esac
+-      ;;
+-
+-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+-      # PIC is the default for these OSes.
+-      ;;
+-
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
+-      # This hack is so that the source file can tell whether it is being
+-      # built for inclusion in a dll (and should export symbols for example).
+-      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+-      # (--disable-auto-import) libraries
+-      m4_if([$1], [GCJ], [],
+-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+-      ;;
+-
+-    darwin* | rhapsody*)
+-      # PIC is the default on this platform
+-      # Common symbols not allowed in MH_DYLIB files
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+-      ;;
+-
+-    hpux*)
+-      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+-      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+-      # sets the default TLS model and affects inlining.
+-      case $host_cpu in
+-      hppa*64*)
+-	# +Z the default
+-	;;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	;;
+-      esac
+-      ;;
+-
+-    interix[[3-9]]*)
+-      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+-      # Instead, we relocate shared libraries at runtime.
+-      ;;
+-
+-    msdosdjgpp*)
+-      # Just because we use GCC doesn't mean we suddenly get shared libraries
+-      # on systems that don't support them.
+-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+-      enable_shared=no
+-      ;;
+-
+-    *nto* | *qnx*)
+-      # QNX uses GNU C++, but need to define -shared option too, otherwise
+-      # it will coredump.
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+-      ;;
+-
+-    sysv4*MP*)
+-      if test -d /usr/nec; then
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+-      fi
+-      ;;
+-
+-    *)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-      ;;
+-    esac
+-  else
+-    # PORTME Check for flag to pass linker flags through the system compiler.
+-    case $host_os in
+-    aix*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      if test "$host_cpu" = ia64; then
+-	# AIX 5 now supports IA64 processor
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      else
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+-      fi
+-      ;;
+-
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
+-      # This hack is so that the source file can tell whether it is being
+-      # built for inclusion in a dll (and should export symbols for example).
+-      m4_if([$1], [GCJ], [],
+-	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+-      ;;
+-
+-    hpux9* | hpux10* | hpux11*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+-      # not for PA HP-UX.
+-      case $host_cpu in
+-      hppa*64*|ia64*)
+-	# +Z the default
+-	;;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+-	;;
+-      esac
+-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+-      ;;
+-
+-    irix5* | irix6* | nonstopux*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      # PIC (with -KPIC) is the default.
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-      ;;
+-
+-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+-      case $cc_basename in
+-      # old Intel for x86_64 which still supported -KPIC.
+-      ecc*)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-        ;;
+-      # icc used to be incompatible with GCC.
+-      # ICC 10 doesn't accept -KPIC any more.
+-      icc* | ifort*)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+-        ;;
+-      # Lahey Fortran 8.1.
+-      lf95*)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+-	;;
+-      pgcc* | pgf77* | pgf90* | pgf95*)
+-        # Portland Group compilers (*not* the Pentium gcc compiler,
+-	# which looks to be a dead project)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-        ;;
+-      ccc*)
+-        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-        # All Alpha code is PIC.
+-        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-        ;;
+-      xl*)
+-	# IBM XL C 8.0/Fortran 10.1 on PPC
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+-	;;
+-      *)
+-	case `$CC -V 2>&1 | sed 5q` in
+-	*Sun\ C*)
+-	  # Sun C 5.9
+-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-	  ;;
+-	*Sun\ F*)
+-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+-	  ;;
+-	esac
+-	;;
+-      esac
+-      ;;
+-
+-    newsos6)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    *nto* | *qnx*)
+-      # QNX uses GNU C++, but need to define -shared option too, otherwise
+-      # it will coredump.
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+-      ;;
+-
+-    osf3* | osf4* | osf5*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      # All OSF/1 code is PIC.
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-      ;;
+-
+-    rdos*)
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+-      ;;
+-
+-    solaris*)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      case $cc_basename in
+-      f77* | f90* | f95*)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+-      *)
+-	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+-      esac
+-      ;;
+-
+-    sunos4*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    sysv4 | sysv4.2uw2* | sysv4.3*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    sysv4*MP*)
+-      if test -d /usr/nec ;then
+-	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+-	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      fi
+-      ;;
+-
+-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    unicos*)
+-      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+-      ;;
+-
+-    uts4*)
+-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+-      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+-      ;;
+-
+-    *)
+-      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+-      ;;
+-    esac
+-  fi
+-])
+-case $host_os in
+-  # For platforms which do not support PIC, -DPIC is meaningless:
+-  *djgpp*)
+-    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-    ;;
+-  *)
+-    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+-    ;;
+-esac
+-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+-	[How to pass a linker flag through the compiler])
+-
+-#
+-# Check to make sure the PIC flag actually works.
+-#
+-if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+-  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+-    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+-    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+-    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+-     "" | " "*) ;;
+-     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+-     esac],
+-    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+-     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+-fi
+-_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+-	[Additional compiler flags for building library objects])
+-
+-#
+-# Check to make sure the static flag actually works.
+-#
+-wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+-_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+-  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+-  $lt_tmp_static_flag,
+-  [],
+-  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+-_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+-	[Compiler flag to prevent dynamic linking])
+-])# _LT_COMPILER_PIC
+-
+-
+-# _LT_LINKER_SHLIBS([TAGNAME])
+-# ----------------------------
+-# See if the linker supports building shared libraries.
+-m4_defun([_LT_LINKER_SHLIBS],
+-[AC_REQUIRE([LT_PATH_LD])dnl
+-AC_REQUIRE([LT_PATH_NM])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-m4_require([_LT_DECL_SED])dnl
+-m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+-m4_require([_LT_TAG_COMPILER])dnl
+-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+-m4_if([$1], [CXX], [
+-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+-  case $host_os in
+-  aix[[4-9]]*)
+-    # If we're using GNU nm, then we don't want the "-C" option.
+-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+-    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+-    else
+-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+-    fi
+-    ;;
+-  pw32*)
+-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+-  ;;
+-  cygwin* | mingw* | cegcc*)
+-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+-  ;;
+-  linux* | k*bsd*-gnu)
+-    _LT_TAGVAR(link_all_deplibs, $1)=no
+-  ;;
+-  *)
+-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+-  ;;
+-  esac
+-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+-], [
+-  runpath_var=
+-  _LT_TAGVAR(allow_undefined_flag, $1)=
+-  _LT_TAGVAR(always_export_symbols, $1)=no
+-  _LT_TAGVAR(archive_cmds, $1)=
+-  _LT_TAGVAR(archive_expsym_cmds, $1)=
+-  _LT_TAGVAR(compiler_needs_object, $1)=no
+-  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+-  _LT_TAGVAR(hardcode_automatic, $1)=no
+-  _LT_TAGVAR(hardcode_direct, $1)=no
+-  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+-  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+-  _LT_TAGVAR(hardcode_minus_L, $1)=no
+-  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+-  _LT_TAGVAR(inherit_rpath, $1)=no
+-  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+-  _LT_TAGVAR(module_cmds, $1)=
+-  _LT_TAGVAR(module_expsym_cmds, $1)=
+-  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+-  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+-  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+-  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-  # include_expsyms should be a list of space-separated symbols to be *always*
+-  # included in the symbol list
+-  _LT_TAGVAR(include_expsyms, $1)=
+-  # exclude_expsyms can be an extended regexp of symbols to exclude
+-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+-  # as well as any symbol that contains `d'.
+-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+-  # platforms (ab)use it in PIC code, but their linkers get confused if
+-  # the symbol is explicitly referenced.  Since portable code cannot
+-  # rely on this symbol name, it's probably fine to never include it in
+-  # preloaded symbol tables.
+-  # Exclude shared library initialization/finalization symbols.
+-dnl Note also adjust exclude_expsyms for C++ above.
+-  extract_expsyms_cmds=
+-
+-  case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
+-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+-    # When not using gcc, we currently assume that we are using
+-    # Microsoft Visual C++.
+-    if test "$GCC" != yes; then
+-      with_gnu_ld=no
+-    fi
+-    ;;
+-  interix*)
+-    # we just hope/assume this is gcc and not c89 (= MSVC++)
+-    with_gnu_ld=yes
+-    ;;
+-  openbsd*)
+-    with_gnu_ld=no
+-    ;;
+-  linux* | k*bsd*-gnu)
+-    _LT_TAGVAR(link_all_deplibs, $1)=no
+-    ;;
+-  esac
+-
+-  _LT_TAGVAR(ld_shlibs, $1)=yes
+-  if test "$with_gnu_ld" = yes; then
+-    # If archive_cmds runs LD, not CC, wlarc should be empty
+-    wlarc='${wl}'
+-
+-    # Set some defaults for GNU ld with shared library support. These
+-    # are reset later if shared libraries are not supported. Putting them
+-    # here allows them to be overridden if necessary.
+-    runpath_var=LD_RUN_PATH
+-    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-    # ancient GNU ld didn't support --whole-archive et. al.
+-    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+-      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+-    else
+-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-    fi
+-    supports_anon_versioning=no
+-    case `$LD -v 2>&1` in
+-      *GNU\ gold*) supports_anon_versioning=yes ;;
+-      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+-      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+-      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+-      *\ 2.11.*) ;; # other 2.11 versions
+-      *) supports_anon_versioning=yes ;;
+-    esac
+-
+-    # See if GNU ld supports shared libraries.
+-    case $host_os in
+-    aix[[3-9]]*)
+-      # On AIX/PPC, the GNU linker is very broken
+-      if test "$host_cpu" != ia64; then
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	cat <<_LT_EOF 1>&2
+-
+-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+-*** to be unable to reliably create shared libraries on AIX.
+-*** Therefore, libtool is disabling shared libraries support.  If you
+-*** really care for shared libraries, you may want to modify your PATH
+-*** so that a non-GNU linker is found, and then restart.
+-
+-_LT_EOF
+-      fi
+-      ;;
+-
+-    amigaos*)
+-      case $host_cpu in
+-      powerpc)
+-            # see comment about AmigaOS4 .so support
+-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+-        ;;
+-      m68k)
+-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-        ;;
+-      esac
+-      ;;
+-
+-    beos*)
+-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+-	# support --undefined.  This deserves some investigation.  FIXME
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    cygwin* | mingw* | pw32* | cegcc*)
+-      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+-      # as there is no search path for DLLs.
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      _LT_TAGVAR(always_export_symbols, $1)=no
+-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+-
+-      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-	# If the export-symbols file already is a .def file (1st line
+-	# is EXPORTS), use it as is; otherwise, prepend...
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+-	  cp $export_symbols $output_objdir/$soname.def;
+-	else
+-	  echo EXPORTS > $output_objdir/$soname.def;
+-	  cat $export_symbols >> $output_objdir/$soname.def;
+-	fi~
+-	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    interix[[3-9]]*)
+-      _LT_TAGVAR(hardcode_direct, $1)=no
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+-      # Instead, shared libraries are loaded at an image base (0x10000000 by
+-      # default) and relocated if they conflict, which is a slow very memory
+-      # consuming and fragmenting process.  To avoid this, we pick a random,
+-      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+-      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+-      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+-      ;;
+-
+-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+-      tmp_diet=no
+-      if test "$host_os" = linux-dietlibc; then
+-	case $cc_basename in
+-	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+-	esac
+-      fi
+-      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+-	 && test "$tmp_diet" = no
+-      then
+-	tmp_addflag=
+-	tmp_sharedflag='-shared'
+-	case $cc_basename,$host_cpu in
+-        pgcc*)				# Portland Group C compiler
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-	  tmp_addflag=' $pic_flag'
+-	  ;;
+-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-	  tmp_addflag=' $pic_flag -Mnomain' ;;
+-	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+-	  tmp_addflag=' -i_dynamic' ;;
+-	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+-	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+-	ifc* | ifort*)			# Intel Fortran compiler
+-	  tmp_addflag=' -nofor_main' ;;
+-	lf95*)				# Lahey Fortran 8.1
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-	  tmp_sharedflag='--shared' ;;
+-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+-	  tmp_sharedflag='-qmkshrobj'
+-	  tmp_addflag= ;;
+-	esac
+-	case `$CC -V 2>&1 | sed 5q` in
+-	*Sun\ C*)			# Sun C 5.9
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+-	  tmp_sharedflag='-G' ;;
+-	*Sun\ F*)			# Sun Fortran 8.3
+-	  tmp_sharedflag='-G' ;;
+-	esac
+-	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-
+-        if test "x$supports_anon_versioning" = xyes; then
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+-	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+-	    echo "local: *; };" >> $output_objdir/$libname.ver~
+-	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+-        fi
+-
+-	case $cc_basename in
+-	xlf*)
+-	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+-	  if test "x$supports_anon_versioning" = xyes; then
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+-	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+-	      echo "local: *; };" >> $output_objdir/$libname.ver~
+-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+-	  fi
+-	  ;;
+-	esac
+-      else
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    netbsd* | netbsdelf*-gnu)
+-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+-	wlarc=
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-      fi
+-      ;;
+-
+-    solaris*)
+-      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	cat <<_LT_EOF 1>&2
+-
+-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+-*** create shared libraries on Solaris systems.  Therefore, libtool
+-*** is disabling shared libraries support.  We urge you to upgrade GNU
+-*** binutils to release 2.9.1 or newer.  Another option is to modify
+-*** your PATH or compiler configuration so that the native linker is
+-*** used, and then restart.
+-
+-_LT_EOF
+-      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+-      case `$LD -v 2>&1` in
+-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	cat <<_LT_EOF 1>&2
+-
+-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+-*** reliably create shared libraries on SCO systems.  Therefore, libtool
+-*** is disabling shared libraries support.  We urge you to upgrade GNU
+-*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+-*** your PATH or compiler configuration so that the native linker is
+-*** used, and then restart.
+-
+-_LT_EOF
+-	;;
+-	*)
+-	  # For security reasons, it is highly recommended that you always
+-	  # use absolute paths for naming shared libraries, and exclude the
+-	  # DT_RUNPATH tag from executables and libraries.  But doing so
+-	  # requires that you compile everything twice, which is a pain.
+-	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-	  else
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	  fi
+-	;;
+-      esac
+-      ;;
+-
+-    sunos4*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+-      wlarc=
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    *)
+-      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-    esac
+-
+-    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+-      runpath_var=
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-    fi
+-  else
+-    # PORTME fill in a description of your system's linker (not GNU ld)
+-    case $host_os in
+-    aix3*)
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      _LT_TAGVAR(always_export_symbols, $1)=yes
+-      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+-      # Note: this linker hardcodes the directories in LIBPATH if there
+-      # are no directories specified by -L.
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+-	# Neither direct hardcoding nor static linking is supported with a
+-	# broken collect2.
+-	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+-      fi
+-      ;;
+-
+-    aix[[4-9]]*)
+-      if test "$host_cpu" = ia64; then
+-	# On IA64, the linker does run time linking by default, so we don't
+-	# have to do anything special.
+-	aix_use_runtimelinking=no
+-	exp_sym_flag='-Bexport'
+-	no_entry_flag=""
+-      else
+-	# If we're using GNU nm, then we don't want the "-C" option.
+-	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+-	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+-	else
+-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+-	fi
+-	aix_use_runtimelinking=no
+-
+-	# Test if we are trying to use run time linking or normal
+-	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+-	# need to do runtime linking.
+-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+-	  for ld_flag in $LDFLAGS; do
+-	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+-	    aix_use_runtimelinking=yes
+-	    break
+-	  fi
+-	  done
+-	  ;;
+-	esac
+-
+-	exp_sym_flag='-bexport'
+-	no_entry_flag='-bnoentry'
+-      fi
+-
+-      # When large executables or shared objects are built, AIX ld can
+-      # have problems creating the table of contents.  If linking a library
+-      # or program results in "error TOC overflow" add -mminimal-toc to
+-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+-
+-      _LT_TAGVAR(archive_cmds, $1)=''
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+-      _LT_TAGVAR(link_all_deplibs, $1)=yes
+-      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+-
+-      if test "$GCC" = yes; then
+-	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+-	# We only want to do this on AIX 4.2 and lower, the check
+-	# below for broken collect2 doesn't work under 4.3+
+-	  collect2name=`${CC} -print-prog-name=collect2`
+-	  if test -f "$collect2name" &&
+-	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+-	  then
+-	  # We have reworked collect2
+-	  :
+-	  else
+-	  # We have old collect2
+-	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+-	  # It fails to find uninstalled libraries when the uninstalled
+-	  # path is not listed in the libpath.  Setting hardcode_minus_L
+-	  # to unsupported forces relinking
+-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+-	  fi
+-	  ;;
+-	esac
+-	shared_flag='-shared'
+-	if test "$aix_use_runtimelinking" = yes; then
+-	  shared_flag="$shared_flag "'${wl}-G'
+-	fi
+-	_LT_TAGVAR(link_all_deplibs, $1)=no
+-      else
+-	# not using gcc
+-	if test "$host_cpu" = ia64; then
+-	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+-	# chokes on -Wl,-G. The following line is correct:
+-	  shared_flag='-G'
+-	else
+-	  if test "$aix_use_runtimelinking" = yes; then
+-	    shared_flag='${wl}-G'
+-	  else
+-	    shared_flag='${wl}-bM:SRE'
+-	  fi
+-	fi
+-      fi
+-
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+-      # It seems that -bexpall does not export symbols beginning with
+-      # underscore (_), so it is better to generate a list of symbols to export.
+-      _LT_TAGVAR(always_export_symbols, $1)=yes
+-      if test "$aix_use_runtimelinking" = yes; then
+-	# Warning - without using the other runtime loading flags (-brtl),
+-	# -berok will link without error, but may produce a broken library.
+-	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+-        # Determine the default libpath from the value encoded in an
+-        # empty executable.
+-        _LT_SYS_MODULE_PATH_AIX
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+-      else
+-	if test "$host_cpu" = ia64; then
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+-	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+-	else
+-	 # Determine the default libpath from the value encoded in an
+-	 # empty executable.
+-	 _LT_SYS_MODULE_PATH_AIX
+-	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-	  # Warning - without using the other run time loading flags,
+-	  # -berok will link without error, but may produce a broken library.
+-	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+-	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+-	  # Exported symbols can be pulled into shared objects from archives
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-	  # This is similar to how AIX traditionally builds its shared libraries.
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+-	fi
+-      fi
+-      ;;
+-
+-    amigaos*)
+-      case $host_cpu in
+-      powerpc)
+-            # see comment about AmigaOS4 .so support
+-            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+-        ;;
+-      m68k)
+-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+-            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-        ;;
+-      esac
+-      ;;
+-
+-    bsdi[[45]]*)
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+-      ;;
+-
+-    cygwin* | mingw* | pw32* | cegcc*)
+-      # When not using gcc, we currently assume that we are using
+-      # Microsoft Visual C++.
+-      # hardcode_libdir_flag_spec is actually meaningless, as there is
+-      # no search path for DLLs.
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      # Tell ltmain to make .lib files, not .a files.
+-      libext=lib
+-      # Tell ltmain to make .dll files, not .so files.
+-      shrext_cmds=".dll"
+-      # FIXME: Setting linknames here is a bad hack.
+-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+-      # The linker will automatically build a .lib file if we build a DLL.
+-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+-      # FIXME: Should let the user specify the lib program.
+-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-      ;;
+-
+-    darwin* | rhapsody*)
+-      _LT_DARWIN_LINKER_FEATURES($1)
+-      ;;
+-
+-    dgux*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    freebsd1*)
+-      _LT_TAGVAR(ld_shlibs, $1)=no
+-      ;;
+-
+-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+-    # support.  Future versions do this automatically, but an explicit c++rt0.o
+-    # does not break anything, and helps significantly (at the cost of a little
+-    # extra space).
+-    freebsd2.2*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+-    freebsd2*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+-    freebsd* | dragonfly*)
+-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    hpux9*)
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+-      fi
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-
+-      # hardcode_minus_L: Not really in the search PATH,
+-      # but as the default location of the library.
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-      ;;
+-
+-    hpux10*)
+-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+-      fi
+-      if test "$with_gnu_ld" = no; then
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-	_LT_TAGVAR(hardcode_direct, $1)=yes
+-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-	# hardcode_minus_L: Not really in the search PATH,
+-	# but as the default location of the library.
+-	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      fi
+-      ;;
+-
+-    hpux11*)
+-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+-	case $host_cpu in
+-	hppa*64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	ia64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	esac
+-      else
+-	case $host_cpu in
+-	hppa*64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	ia64*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	esac
+-      fi
+-      if test "$with_gnu_ld" = no; then
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	case $host_cpu in
+-	hppa*64*|ia64*)
+-	  _LT_TAGVAR(hardcode_direct, $1)=no
+-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	  ;;
+-	*)
+-	  _LT_TAGVAR(hardcode_direct, $1)=yes
+-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-
+-	  # hardcode_minus_L: Not really in the search PATH,
+-	  # but as the default location of the library.
+-	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-	  ;;
+-	esac
+-      fi
+-      ;;
+-
+-    irix5* | irix6* | nonstopux*)
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-	# Try to use the -exported_symbol ld option, if it does not
+-	# work, assume that -exports_file does not work either and
+-	# implicitly export all symbols.
+-        save_LDFLAGS="$LDFLAGS"
+-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+-        AC_LINK_IFELSE(int foo(void) {},
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+-        )
+-        LDFLAGS="$save_LDFLAGS"
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+-      fi
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      _LT_TAGVAR(inherit_rpath, $1)=yes
+-      _LT_TAGVAR(link_all_deplibs, $1)=yes
+-      ;;
+-
+-    netbsd* | netbsdelf*-gnu)
+-      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+-      fi
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    newsos6)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    *nto* | *qnx*)
+-      ;;
+-
+-    openbsd*)
+-      if test -f /usr/libexec/ld.so; then
+-	_LT_TAGVAR(hardcode_direct, $1)=yes
+-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-	else
+-	  case $host_os in
+-	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+-	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	     ;;
+-	   *)
+-	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+-	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	     ;;
+-	  esac
+-	fi
+-      else
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-      fi
+-      ;;
+-
+-    os2*)
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+-      ;;
+-
+-    osf3*)
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-      else
+-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-      fi
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      ;;
+-
+-    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-      else
+-	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+-
+-	# Both c and cxx compiler support -rpath directly
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+-      fi
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-      ;;
+-
+-    solaris*)
+-      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+-      if test "$GCC" = yes; then
+-	wlarc='${wl}'
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+-      else
+-	case `$CC -V 2>&1` in
+-	*"Compilers 5.0"*)
+-	  wlarc=''
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+-	  ;;
+-	*)
+-	  wlarc='${wl}'
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+-	  ;;
+-	esac
+-      fi
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      case $host_os in
+-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+-      *)
+-	# The compiler driver will combine and reorder linker options,
+-	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+-	# but is careful enough not to reorder.
+-	# Supported since Solaris 2.6 (maybe 2.5.1?)
+-	if test "$GCC" = yes; then
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+-	else
+-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+-	fi
+-	;;
+-      esac
+-      _LT_TAGVAR(link_all_deplibs, $1)=yes
+-      ;;
+-
+-    sunos4*)
+-      if test "x$host_vendor" = xsequent; then
+-	# Use $CC to link under sequent, because it throws in some extra .o
+-	# files that make .init and .fini sections work.
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+-      fi
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(hardcode_direct, $1)=yes
+-      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    sysv4)
+-      case $host_vendor in
+-	sni)
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+-	;;
+-	siemens)
+-	  ## LD is ld it makes a PLAMLIB
+-	  ## CC just makes a GrossModule.
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+-	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+-	  _LT_TAGVAR(hardcode_direct, $1)=no
+-        ;;
+-	motorola)
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+-	;;
+-      esac
+-      runpath_var='LD_RUN_PATH'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    sysv4.3*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+-      ;;
+-
+-    sysv4*MP*)
+-      if test -d /usr/nec; then
+-	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	runpath_var=LD_RUN_PATH
+-	hardcode_runpath_var=yes
+-	_LT_TAGVAR(ld_shlibs, $1)=yes
+-      fi
+-      ;;
+-
+-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      runpath_var='LD_RUN_PATH'
+-
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-      fi
+-      ;;
+-
+-    sysv5* | sco3.2v5* | sco5v6*)
+-      # Note: We can NOT use -z defs as we might desire, because we do not
+-      # link with -lc, and that would cause any symbols used from libc to
+-      # always be unresolved, which means just about no library would
+-      # ever link correctly.  If we're not using GNU ld we use -z text
+-      # though, which does catch some bad symbols but isn't as heavy-handed
+-      # as -z defs.
+-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+-      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+-      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+-      _LT_TAGVAR(link_all_deplibs, $1)=yes
+-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+-      runpath_var='LD_RUN_PATH'
+-
+-      if test "$GCC" = yes; then
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-      else
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-      fi
+-      ;;
+-
+-    uts4*)
+-      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      ;;
+-
+-    *)
+-      _LT_TAGVAR(ld_shlibs, $1)=no
+-      ;;
+-    esac
+-
+-    if test x$host_vendor = xsni; then
+-      case $host in
+-      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+-	;;
+-      esac
+-    fi
+-  fi
+-])
+-AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+-test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+-
+-_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+-
+-_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+-_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+-_LT_DECL([], [extract_expsyms_cmds], [2],
+-    [The commands to extract the exported symbol list from a shared archive])
+-
+-#
+-# Do we need to explicitly link libc?
+-#
+-case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+-x|xyes)
+-  # Assume -lc should be added
+-  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-
+-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+-    case $_LT_TAGVAR(archive_cmds, $1) in
+-    *'~'*)
+-      # FIXME: we may have to deal with multi-command sequences.
+-      ;;
+-    '$CC '*)
+-      # Test whether the compiler implicitly links with -lc since on some
+-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+-      # to ld, don't add -lc before -lgcc.
+-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+-      $RM conftest*
+-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+-
+-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+-        soname=conftest
+-        lib=conftest
+-        libobjs=conftest.$ac_objext
+-        deplibs=
+-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+-        compiler_flags=-v
+-        linker_flags=-v
+-        verstring=
+-        output_objdir=.
+-        libname=conftest
+-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+-        _LT_TAGVAR(allow_undefined_flag, $1)=
+-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+-        then
+-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-        else
+-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-        fi
+-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+-      else
+-        cat conftest.err 1>&5
+-      fi
+-      $RM conftest*
+-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+-      ;;
+-    esac
+-  fi
+-  ;;
+-esac
+-
+-_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+-    [Whether or not to add -lc for building shared libraries])
+-_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+-    [enable_shared_with_static_runtimes], [0],
+-    [Whether or not to disallow shared libs when runtime libs are static])
+-_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+-    [Compiler flag to allow reflexive dlopens])
+-_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+-    [Compiler flag to generate shared objects directly from archives])
+-_LT_TAGDECL([], [compiler_needs_object], [1],
+-    [Whether the compiler copes with passing no objects directly])
+-_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+-    [Create an old-style archive from a shared archive])
+-_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+-    [Create a temporary old-style archive to link instead of a shared archive])
+-_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+-_LT_TAGDECL([], [archive_expsym_cmds], [2])
+-_LT_TAGDECL([], [module_cmds], [2],
+-    [Commands used to build a loadable module if different from building
+-    a shared archive.])
+-_LT_TAGDECL([], [module_expsym_cmds], [2])
+-_LT_TAGDECL([], [with_gnu_ld], [1],
+-    [Whether we are building with GNU ld or not])
+-_LT_TAGDECL([], [allow_undefined_flag], [1],
+-    [Flag that allows shared libraries with undefined symbols to be built])
+-_LT_TAGDECL([], [no_undefined_flag], [1],
+-    [Flag that enforces no undefined symbols])
+-_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+-    [Flag to hardcode $libdir into a binary during linking.
+-    This must work even if $libdir does not exist])
+-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+-    [[If ld is used when linking, flag to hardcode $libdir into a binary
+-    during linking.  This must work even if $libdir does not exist]])
+-_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+-    [Whether we need a single "-rpath" flag with a separated argument])
+-_LT_TAGDECL([], [hardcode_direct], [0],
+-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+-    DIR into the resulting binary])
+-_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+-    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+-    DIR into the resulting binary and the resulting library dependency is
+-    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+-    library is relocated])
+-_LT_TAGDECL([], [hardcode_minus_L], [0],
+-    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+-    into the resulting binary])
+-_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+-    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+-    into the resulting binary])
+-_LT_TAGDECL([], [hardcode_automatic], [0],
+-    [Set to "yes" if building a shared library automatically hardcodes DIR
+-    into the library and all subsequent libraries and executables linked
+-    against it])
+-_LT_TAGDECL([], [inherit_rpath], [0],
+-    [Set to yes if linker adds runtime paths of dependent libraries
+-    to runtime path list])
+-_LT_TAGDECL([], [link_all_deplibs], [0],
+-    [Whether libtool must link a program against all its dependency libraries])
+-_LT_TAGDECL([], [fix_srcfile_path], [1],
+-    [Fix the shell variable $srcfile for the compiler])
+-_LT_TAGDECL([], [always_export_symbols], [0],
+-    [Set to "yes" if exported symbols are required])
+-_LT_TAGDECL([], [export_symbols_cmds], [2],
+-    [The commands to list exported symbols])
+-_LT_TAGDECL([], [exclude_expsyms], [1],
+-    [Symbols that should not be listed in the preloaded symbols])
+-_LT_TAGDECL([], [include_expsyms], [1],
+-    [Symbols that must always be exported])
+-_LT_TAGDECL([], [prelink_cmds], [2],
+-    [Commands necessary for linking programs (against libraries) with templates])
+-_LT_TAGDECL([], [file_list_spec], [1],
+-    [Specify filename containing input files])
+-dnl FIXME: Not yet implemented
+-dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+-dnl    [Compiler flag to generate thread safe objects])
+-])# _LT_LINKER_SHLIBS
+-
+-
+-# _LT_LANG_C_CONFIG([TAG])
+-# ------------------------
+-# Ensure that the configuration variables for a C compiler are suitably
+-# defined.  These variables are subsequently used by _LT_CONFIG to write
+-# the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_C_CONFIG],
+-[m4_require([_LT_DECL_EGREP])dnl
+-lt_save_CC="$CC"
+-AC_LANG_PUSH(C)
+-
+-# Source file extension for C test sources.
+-ac_ext=c
+-
+-# Object file extension for compiled C test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code="int some_variable = 0;"
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code='int main(){return(0);}'
+-
+-_LT_TAG_COMPILER
+-# Save the default compiler, since it gets overwritten when the other
+-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+-compiler_DEFAULT=$CC
+-
+-# save warnings/boilerplate of simple test code
+-_LT_COMPILER_BOILERPLATE
+-_LT_LINKER_BOILERPLATE
+-
+-if test -n "$compiler"; then
+-  _LT_COMPILER_NO_RTTI($1)
+-  _LT_COMPILER_PIC($1)
+-  _LT_COMPILER_C_O($1)
+-  _LT_COMPILER_FILE_LOCKS($1)
+-  _LT_LINKER_SHLIBS($1)
+-  _LT_SYS_DYNAMIC_LINKER($1)
+-  _LT_LINKER_HARDCODE_LIBPATH($1)
+-  LT_SYS_DLOPEN_SELF
+-  _LT_CMD_STRIPLIB
+-
+-  # Report which library types will actually be built
+-  AC_MSG_CHECKING([if libtool supports shared libraries])
+-  AC_MSG_RESULT([$can_build_shared])
+-
+-  AC_MSG_CHECKING([whether to build shared libraries])
+-  test "$can_build_shared" = "no" && enable_shared=no
+-
+-  # On AIX, shared libraries and static libraries use the same namespace, and
+-  # are all built from PIC.
+-  case $host_os in
+-  aix3*)
+-    test "$enable_shared" = yes && enable_static=no
+-    if test -n "$RANLIB"; then
+-      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+-      postinstall_cmds='$RANLIB $lib'
+-    fi
+-    ;;
+-
+-  aix[[4-9]]*)
+-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+-      test "$enable_shared" = yes && enable_static=no
+-    fi
+-    ;;
+-  esac
+-  AC_MSG_RESULT([$enable_shared])
+-
+-  AC_MSG_CHECKING([whether to build static libraries])
+-  # Make sure either enable_shared or enable_static is yes.
+-  test "$enable_shared" = yes || enable_static=yes
+-  AC_MSG_RESULT([$enable_static])
+-
+-  _LT_CONFIG($1)
+-fi
+-AC_LANG_POP
+-CC="$lt_save_CC"
+-])# _LT_LANG_C_CONFIG
+-
+-
+-# _LT_PROG_CXX
+-# ------------
+-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+-# compiler, we have our own version here.
+-m4_defun([_LT_PROG_CXX],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+-AC_PROG_CXX
+-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+-    (test "X$CXX" != "Xg++"))) ; then
+-  AC_PROG_CXXCPP
+-else
+-  _lt_caught_CXX_error=yes
+-fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_CXX
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_CXX], [])
+-
+-
+-# _LT_LANG_CXX_CONFIG([TAG])
+-# --------------------------
+-# Ensure that the configuration variables for a C++ compiler are suitably
+-# defined.  These variables are subsequently used by _LT_CONFIG to write
+-# the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_CXX_CONFIG],
+-[AC_REQUIRE([_LT_PROG_CXX])dnl
+-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-m4_require([_LT_DECL_EGREP])dnl
+-
+-AC_LANG_PUSH(C++)
+-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-_LT_TAGVAR(allow_undefined_flag, $1)=
+-_LT_TAGVAR(always_export_symbols, $1)=no
+-_LT_TAGVAR(archive_expsym_cmds, $1)=
+-_LT_TAGVAR(compiler_needs_object, $1)=no
+-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_direct, $1)=no
+-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-_LT_TAGVAR(hardcode_libdir_separator, $1)=
+-_LT_TAGVAR(hardcode_minus_L, $1)=no
+-_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+-_LT_TAGVAR(hardcode_automatic, $1)=no
+-_LT_TAGVAR(inherit_rpath, $1)=no
+-_LT_TAGVAR(module_cmds, $1)=
+-_LT_TAGVAR(module_expsym_cmds, $1)=
+-_LT_TAGVAR(link_all_deplibs, $1)=unknown
+-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-_LT_TAGVAR(no_undefined_flag, $1)=
+-_LT_TAGVAR(whole_archive_flag_spec, $1)=
+-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-
+-# Source file extension for C++ test sources.
+-ac_ext=cpp
+-
+-# Object file extension for compiled C++ test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# No sense in running all these tests if we already determined that
+-# the CXX compiler isn't working.  Some variables (like enable_shared)
+-# are currently assumed to apply to all compilers on this platform,
+-# and will be corrupted by setting them based on a non-working compiler.
+-if test "$_lt_caught_CXX_error" != yes; then
+-  # Code to be used in simple compile tests
+-  lt_simple_compile_test_code="int some_variable = 0;"
+-
+-  # Code to be used in simple link tests
+-  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+-
+-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-  _LT_TAG_COMPILER
+-
+-  # save warnings/boilerplate of simple test code
+-  _LT_COMPILER_BOILERPLATE
+-  _LT_LINKER_BOILERPLATE
+-
+-  # Allow CC to be a program name with arguments.
+-  lt_save_CC=$CC
+-  lt_save_LD=$LD
+-  lt_save_GCC=$GCC
+-  GCC=$GXX
+-  lt_save_with_gnu_ld=$with_gnu_ld
+-  lt_save_path_LD=$lt_cv_path_LD
+-  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+-    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+-  else
+-    $as_unset lt_cv_prog_gnu_ld
+-  fi
+-  if test -n "${lt_cv_path_LDCXX+set}"; then
+-    lt_cv_path_LD=$lt_cv_path_LDCXX
+-  else
+-    $as_unset lt_cv_path_LD
+-  fi
+-  test -z "${LDCXX+set}" || LD=$LDCXX
+-  CC=${CXX-"c++"}
+-  compiler=$CC
+-  _LT_TAGVAR(compiler, $1)=$CC
+-  _LT_CC_BASENAME([$compiler])
+-
+-  if test -n "$compiler"; then
+-    # We don't want -fno-exception when compiling C++ code, so set the
+-    # no_builtin_flag separately
+-    if test "$GXX" = yes; then
+-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+-    else
+-      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+-    fi
+-
+-    if test "$GXX" = yes; then
+-      # Set up default GNU C++ configuration
+-
+-      LT_PATH_LD
+-
+-      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+-      # archiving commands below assume that GNU ld is being used.
+-      if test "$with_gnu_ld" = yes; then
+-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-
+-        # If archive_cmds runs LD, not CC, wlarc should be empty
+-        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+-        #     investigate it a little bit more. (MM)
+-        wlarc='${wl}'
+-
+-        # ancient GNU ld didn't support --whole-archive et. al.
+-        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+-	  $GREP 'no-whole-archive' > /dev/null; then
+-          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+-        else
+-          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+-        fi
+-      else
+-        with_gnu_ld=no
+-        wlarc=
+-
+-        # A generic and very simple default shared library creation
+-        # command for GNU C++ for the case where it uses the native
+-        # linker, instead of GNU ld.  If possible, this setting should
+-        # overridden to take advantage of the native linker features on
+-        # the platform it is being used on.
+-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+-      fi
+-
+-      # Commands to make compiler produce verbose output that lists
+-      # what "hidden" libraries, object files and flags are used when
+-      # linking a shared library.
+-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+-
+-    else
+-      GXX=no
+-      with_gnu_ld=no
+-      wlarc=
+-    fi
+-
+-    # PORTME: fill in a description of your system's C++ link characteristics
+-    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+-    _LT_TAGVAR(ld_shlibs, $1)=yes
+-    case $host_os in
+-      aix3*)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-      aix[[4-9]]*)
+-        if test "$host_cpu" = ia64; then
+-          # On IA64, the linker does run time linking by default, so we don't
+-          # have to do anything special.
+-          aix_use_runtimelinking=no
+-          exp_sym_flag='-Bexport'
+-          no_entry_flag=""
+-        else
+-          aix_use_runtimelinking=no
+-
+-          # Test if we are trying to use run time linking or normal
+-          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+-          # need to do runtime linking.
+-          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+-	    for ld_flag in $LDFLAGS; do
+-	      case $ld_flag in
+-	      *-brtl*)
+-	        aix_use_runtimelinking=yes
+-	        break
+-	        ;;
+-	      esac
+-	    done
+-	    ;;
+-          esac
+-
+-          exp_sym_flag='-bexport'
+-          no_entry_flag='-bnoentry'
+-        fi
+-
+-        # When large executables or shared objects are built, AIX ld can
+-        # have problems creating the table of contents.  If linking a library
+-        # or program results in "error TOC overflow" add -mminimal-toc to
+-        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+-        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+-
+-        _LT_TAGVAR(archive_cmds, $1)=''
+-        _LT_TAGVAR(hardcode_direct, $1)=yes
+-        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+-        _LT_TAGVAR(link_all_deplibs, $1)=yes
+-        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+-
+-        if test "$GXX" = yes; then
+-          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+-          # We only want to do this on AIX 4.2 and lower, the check
+-          # below for broken collect2 doesn't work under 4.3+
+-	  collect2name=`${CC} -print-prog-name=collect2`
+-	  if test -f "$collect2name" &&
+-	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+-	  then
+-	    # We have reworked collect2
+-	    :
+-	  else
+-	    # We have old collect2
+-	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+-	    # It fails to find uninstalled libraries when the uninstalled
+-	    # path is not listed in the libpath.  Setting hardcode_minus_L
+-	    # to unsupported forces relinking
+-	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+-	  fi
+-          esac
+-          shared_flag='-shared'
+-	  if test "$aix_use_runtimelinking" = yes; then
+-	    shared_flag="$shared_flag "'${wl}-G'
+-	  fi
+-        else
+-          # not using gcc
+-          if test "$host_cpu" = ia64; then
+-	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+-	  # chokes on -Wl,-G. The following line is correct:
+-	  shared_flag='-G'
+-          else
+-	    if test "$aix_use_runtimelinking" = yes; then
+-	      shared_flag='${wl}-G'
+-	    else
+-	      shared_flag='${wl}-bM:SRE'
+-	    fi
+-          fi
+-        fi
+-
+-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+-        # It seems that -bexpall does not export symbols beginning with
+-        # underscore (_), so it is better to generate a list of symbols to
+-	# export.
+-        _LT_TAGVAR(always_export_symbols, $1)=yes
+-        if test "$aix_use_runtimelinking" = yes; then
+-          # Warning - without using the other runtime loading flags (-brtl),
+-          # -berok will link without error, but may produce a broken library.
+-          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+-          # Determine the default libpath from the value encoded in an empty
+-          # executable.
+-          _LT_SYS_MODULE_PATH_AIX
+-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+-        else
+-          if test "$host_cpu" = ia64; then
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+-	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+-          else
+-	    # Determine the default libpath from the value encoded in an
+-	    # empty executable.
+-	    _LT_SYS_MODULE_PATH_AIX
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+-	    # Warning - without using the other run time loading flags,
+-	    # -berok will link without error, but may produce a broken library.
+-	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+-	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+-	    # Exported symbols can be pulled into shared objects from archives
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+-	    # This is similar to how AIX traditionally builds its shared
+-	    # libraries.
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+-          fi
+-        fi
+-        ;;
+-
+-      beos*)
+-	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+-	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+-	  # support --undefined.  This deserves some investigation.  FIXME
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	else
+-	  _LT_TAGVAR(ld_shlibs, $1)=no
+-	fi
+-	;;
+-
+-      chorus*)
+-        case $cc_basename in
+-          *)
+-	  # FIXME: insert proper C++ library support
+-	  _LT_TAGVAR(ld_shlibs, $1)=no
+-	  ;;
+-        esac
+-        ;;
+-
+-      cygwin* | mingw* | pw32* | cegcc*)
+-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+-        # as there is no search path for DLLs.
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+-        _LT_TAGVAR(always_export_symbols, $1)=no
+-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+-
+-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-          # If the export-symbols file already is a .def file (1st line
+-          # is EXPORTS), use it as is; otherwise, prepend...
+-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+-	    cp $export_symbols $output_objdir/$soname.def;
+-          else
+-	    echo EXPORTS > $output_objdir/$soname.def;
+-	    cat $export_symbols >> $output_objdir/$soname.def;
+-          fi~
+-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+-        else
+-          _LT_TAGVAR(ld_shlibs, $1)=no
+-        fi
+-        ;;
+-      darwin* | rhapsody*)
+-        _LT_DARWIN_LINKER_FEATURES($1)
+-	;;
+-
+-      dgux*)
+-        case $cc_basename in
+-          ec++*)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          ghcx*)
+-	    # Green Hills C++ Compiler
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          *)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-        esac
+-        ;;
+-
+-      freebsd[[12]]*)
+-        # C++ shared libraries reported to be fairly broken before
+-	# switch to ELF
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-
+-      freebsd-elf*)
+-        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-        ;;
+-
+-      freebsd* | dragonfly*)
+-        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+-        # conventions
+-        _LT_TAGVAR(ld_shlibs, $1)=yes
+-        ;;
+-
+-      gnu*)
+-        ;;
+-
+-      hpux9*)
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-        _LT_TAGVAR(hardcode_direct, $1)=yes
+-        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+-				             # but as the default
+-				             # location of the library.
+-
+-        case $cc_basename in
+-          CC*)
+-            # FIXME: insert proper C++ library support
+-            _LT_TAGVAR(ld_shlibs, $1)=no
+-            ;;
+-          aCC*)
+-            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+-            # Commands to make compiler produce verbose output that lists
+-            # what "hidden" libraries, object files and flags are used when
+-            # linking a shared library.
+-            #
+-            # There doesn't appear to be a way to prevent this compiler from
+-            # explicitly linking system object files so we need to strip them
+-            # from the output so that they don't get included in the library
+-            # dependencies.
+-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-            ;;
+-          *)
+-            if test "$GXX" = yes; then
+-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+-            else
+-              # FIXME: insert proper C++ library support
+-              _LT_TAGVAR(ld_shlibs, $1)=no
+-            fi
+-            ;;
+-        esac
+-        ;;
+-
+-      hpux10*|hpux11*)
+-        if test $with_gnu_ld = no; then
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+-	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-          case $host_cpu in
+-            hppa*64*|ia64*)
+-              ;;
+-            *)
+-	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-              ;;
+-          esac
+-        fi
+-        case $host_cpu in
+-          hppa*64*|ia64*)
+-            _LT_TAGVAR(hardcode_direct, $1)=no
+-            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-            ;;
+-          *)
+-            _LT_TAGVAR(hardcode_direct, $1)=yes
+-            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+-					         # but as the default
+-					         # location of the library.
+-            ;;
+-        esac
+-
+-        case $cc_basename in
+-          CC*)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          aCC*)
+-	    case $host_cpu in
+-	      hppa*64*)
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	        ;;
+-	      ia64*)
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	        ;;
+-	      *)
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	        ;;
+-	    esac
+-	    # Commands to make compiler produce verbose output that lists
+-	    # what "hidden" libraries, object files and flags are used when
+-	    # linking a shared library.
+-	    #
+-	    # There doesn't appear to be a way to prevent this compiler from
+-	    # explicitly linking system object files so we need to strip them
+-	    # from the output so that they don't get included in the library
+-	    # dependencies.
+-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-	    ;;
+-          *)
+-	    if test "$GXX" = yes; then
+-	      if test $with_gnu_ld = no; then
+-	        case $host_cpu in
+-	          hppa*64*)
+-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	            ;;
+-	          ia64*)
+-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	            ;;
+-	          *)
+-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	            ;;
+-	        esac
+-	      fi
+-	    else
+-	      # FIXME: insert proper C++ library support
+-	      _LT_TAGVAR(ld_shlibs, $1)=no
+-	    fi
+-	    ;;
+-        esac
+-        ;;
+-
+-      interix[[3-9]]*)
+-	_LT_TAGVAR(hardcode_direct, $1)=no
+-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+-	# Instead, shared libraries are loaded at an image base (0x10000000 by
+-	# default) and relocated if they conflict, which is a slow very memory
+-	# consuming and fragmenting process.  To avoid this, we pick a random,
+-	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+-	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+-	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+-	;;
+-      irix5* | irix6*)
+-        case $cc_basename in
+-          CC*)
+-	    # SGI C++
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-
+-	    # Archives containing C++ object files must be created using
+-	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+-	    # necessary to make sure instantiated templates are included
+-	    # in the archive.
+-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+-	    ;;
+-          *)
+-	    if test "$GXX" = yes; then
+-	      if test "$with_gnu_ld" = no; then
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-	      else
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+-	      fi
+-	    fi
+-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+-	    ;;
+-        esac
+-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-        _LT_TAGVAR(inherit_rpath, $1)=yes
+-        ;;
+-
+-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+-        case $cc_basename in
+-          KCC*)
+-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+-
+-	    # KCC will only create a shared library if the output file
+-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+-	    # to its proper name (with version) after linking.
+-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+-	    # Commands to make compiler produce verbose output that lists
+-	    # what "hidden" libraries, object files and flags are used when
+-	    # linking a shared library.
+-	    #
+-	    # There doesn't appear to be a way to prevent this compiler from
+-	    # explicitly linking system object files so we need to strip them
+-	    # from the output so that they don't get included in the library
+-	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-
+-	    # Archives containing C++ object files must be created using
+-	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+-	    ;;
+-	  icpc* | ecpc* )
+-	    # Intel C++
+-	    with_gnu_ld=yes
+-	    # version 8.0 and above of icpc choke on multiply defined symbols
+-	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+-	    # earlier do not add the objects themselves.
+-	    case `$CC -V 2>&1` in
+-	      *"Version 7."*)
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-		;;
+-	      *)  # Version 8.0 or newer
+-	        tmp_idyn=
+-	        case $host_cpu in
+-		  ia64*) tmp_idyn=' -i_dynamic';;
+-		esac
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+-		;;
+-	    esac
+-	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+-	    ;;
+-          pgCC* | pgcpp*)
+-            # Portland Group C++ compiler
+-	    case `$CC -V` in
+-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+-	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+-		rm -rf $tpldir~
+-		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+-	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+-		rm -rf $tpldir~
+-		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+-		$RANLIB $oldlib'
+-	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+-		rm -rf $tpldir~
+-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+-	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+-		rm -rf $tpldir~
+-		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+-	      ;;
+-	    *) # Version 6 will use weak symbols
+-	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+-	      ;;
+-	    esac
+-
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-            ;;
+-	  cxx*)
+-	    # Compaq C++
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+-
+-	    runpath_var=LD_RUN_PATH
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	    # Commands to make compiler produce verbose output that lists
+-	    # what "hidden" libraries, object files and flags are used when
+-	    # linking a shared library.
+-	    #
+-	    # There doesn't appear to be a way to prevent this compiler from
+-	    # explicitly linking system object files so we need to strip them
+-	    # from the output so that they don't get included in the library
+-	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-	    ;;
+-	  xl*)
+-	    # IBM XL 8.0 on PPC, with GNU ld
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+-	    if test "x$supports_anon_versioning" = xyes; then
+-	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+-		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+-		echo "local: *; };" >> $output_objdir/$libname.ver~
+-		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+-	    fi
+-	    ;;
+-	  *)
+-	    case `$CC -V 2>&1 | sed 5q` in
+-	    *Sun\ C*)
+-	      # Sun C++ 5.9
+-	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+-	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+-	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+-
+-	      # Not sure whether something based on
+-	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+-	      # would be better.
+-	      output_verbose_link_cmd='echo'
+-
+-	      # Archives containing C++ object files must be created using
+-	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+-	      # necessary to make sure instantiated templates are included
+-	      # in the archive.
+-	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+-	      ;;
+-	    esac
+-	    ;;
+-	esac
+-	;;
+-
+-      lynxos*)
+-        # FIXME: insert proper C++ library support
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	;;
+-
+-      m88k*)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-	;;
+-
+-      mvs*)
+-        case $cc_basename in
+-          cxx*)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-	  *)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-	esac
+-	;;
+-
+-      netbsd*)
+-        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+-	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+-	  wlarc=
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	  _LT_TAGVAR(hardcode_direct, $1)=yes
+-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	fi
+-	# Workaround some broken pre-1.5 toolchains
+-	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+-	;;
+-
+-      *nto* | *qnx*)
+-        _LT_TAGVAR(ld_shlibs, $1)=yes
+-	;;
+-
+-      openbsd2*)
+-        # C++ shared libraries are fairly broken
+-	_LT_TAGVAR(ld_shlibs, $1)=no
+-	;;
+-
+-      openbsd*)
+-	if test -f /usr/libexec/ld.so; then
+-	  _LT_TAGVAR(hardcode_direct, $1)=yes
+-	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+-	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+-	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+-	  fi
+-	  output_verbose_link_cmd=echo
+-	else
+-	  _LT_TAGVAR(ld_shlibs, $1)=no
+-	fi
+-	;;
+-
+-      osf3* | osf4* | osf5*)
+-        case $cc_basename in
+-          KCC*)
+-	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+-
+-	    # KCC will only create a shared library if the output file
+-	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+-	    # to its proper name (with version) after linking.
+-	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+-
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	    # Archives containing C++ object files must be created using
+-	    # the KAI C++ compiler.
+-	    case $host in
+-	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+-	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+-	    esac
+-	    ;;
+-          RCC*)
+-	    # Rational C++ 2.4.1
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          cxx*)
+-	    case $host in
+-	      osf3*)
+-	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-		;;
+-	      *)
+-	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+-	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+-	          echo "-hidden">> $lib.exp~
+-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+-	          $RM $lib.exp'
+-	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+-		;;
+-	    esac
+-
+-	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	    # Commands to make compiler produce verbose output that lists
+-	    # what "hidden" libraries, object files and flags are used when
+-	    # linking a shared library.
+-	    #
+-	    # There doesn't appear to be a way to prevent this compiler from
+-	    # explicitly linking system object files so we need to strip them
+-	    # from the output so that they don't get included in the library
+-	    # dependencies.
+-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+-	    ;;
+-	  *)
+-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+-	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+-	      case $host in
+-	        osf3*)
+-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-		  ;;
+-	        *)
+-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+-		  ;;
+-	      esac
+-
+-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+-	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+-
+-	      # Commands to make compiler produce verbose output that lists
+-	      # what "hidden" libraries, object files and flags are used when
+-	      # linking a shared library.
+-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+-
+-	    else
+-	      # FIXME: insert proper C++ library support
+-	      _LT_TAGVAR(ld_shlibs, $1)=no
+-	    fi
+-	    ;;
+-        esac
+-        ;;
+-
+-      psos*)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-
+-      sunos4*)
+-        case $cc_basename in
+-          CC*)
+-	    # Sun C++ 4.x
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          lcc*)
+-	    # Lucid
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          *)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-        esac
+-        ;;
+-
+-      solaris*)
+-        case $cc_basename in
+-          CC*)
+-	    # Sun C++ 4.2, 5.x and Centerline C++
+-            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+-	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+-
+-	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+-	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	    case $host_os in
+-	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+-	      *)
+-		# The compiler driver will combine and reorder linker options,
+-		# but understands `-z linker_flag'.
+-	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+-		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+-	        ;;
+-	    esac
+-	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+-
+-	    output_verbose_link_cmd='echo'
+-
+-	    # Archives containing C++ object files must be created using
+-	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+-	    # necessary to make sure instantiated templates are included
+-	    # in the archive.
+-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+-	    ;;
+-          gcx*)
+-	    # Green Hills C++ Compiler
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+-
+-	    # The C++ compiler must be used to create the archive.
+-	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+-	    ;;
+-          *)
+-	    # GNU C++ compiler with Solaris linker
+-	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+-	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+-	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+-
+-	        # Commands to make compiler produce verbose output that lists
+-	        # what "hidden" libraries, object files and flags are used when
+-	        # linking a shared library.
+-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+-	      else
+-	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+-	        # platform.
+-	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+-	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+-		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+-
+-	        # Commands to make compiler produce verbose output that lists
+-	        # what "hidden" libraries, object files and flags are used when
+-	        # linking a shared library.
+-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+-	      fi
+-
+-	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+-	      case $host_os in
+-		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+-		*)
+-		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+-		  ;;
+-	      esac
+-	    fi
+-	    ;;
+-        esac
+-        ;;
+-
+-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+-      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-      runpath_var='LD_RUN_PATH'
+-
+-      case $cc_basename in
+-        CC*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-	*)
+-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	  ;;
+-      esac
+-      ;;
+-
+-      sysv5* | sco3.2v5* | sco5v6*)
+-	# Note: We can NOT use -z defs as we might desire, because we do not
+-	# link with -lc, and that would cause any symbols used from libc to
+-	# always be unresolved, which means just about no library would
+-	# ever link correctly.  If we're not using GNU ld we use -z text
+-	# though, which does catch some bad symbols but isn't as heavy-handed
+-	# as -z defs.
+-	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+-	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+-	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+-	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+-	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+-	_LT_TAGVAR(link_all_deplibs, $1)=yes
+-	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+-	runpath_var='LD_RUN_PATH'
+-
+-	case $cc_basename in
+-          CC*)
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	    ;;
+-	  *)
+-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+-	    ;;
+-	esac
+-      ;;
+-
+-      tandem*)
+-        case $cc_basename in
+-          NCC*)
+-	    # NonStop-UX NCC 3.20
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-          *)
+-	    # FIXME: insert proper C++ library support
+-	    _LT_TAGVAR(ld_shlibs, $1)=no
+-	    ;;
+-        esac
+-        ;;
+-
+-      vxworks*)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-
+-      *)
+-        # FIXME: insert proper C++ library support
+-        _LT_TAGVAR(ld_shlibs, $1)=no
+-        ;;
+-    esac
+-
+-    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+-
+-    _LT_TAGVAR(GCC, $1)="$GXX"
+-    _LT_TAGVAR(LD, $1)="$LD"
+-
+-    ## CAVEAT EMPTOR:
+-    ## There is no encapsulation within the following macros, do not change
+-    ## the running order or otherwise move them around unless you know exactly
+-    ## what you are doing...
+-    _LT_SYS_HIDDEN_LIBDEPS($1)
+-    _LT_COMPILER_PIC($1)
+-    _LT_COMPILER_C_O($1)
+-    _LT_COMPILER_FILE_LOCKS($1)
+-    _LT_LINKER_SHLIBS($1)
+-    _LT_SYS_DYNAMIC_LINKER($1)
+-    _LT_LINKER_HARDCODE_LIBPATH($1)
+-
+-    _LT_CONFIG($1)
+-  fi # test -n "$compiler"
+-
+-  CC=$lt_save_CC
+-  LDCXX=$LD
+-  LD=$lt_save_LD
+-  GCC=$lt_save_GCC
+-  with_gnu_ld=$lt_save_with_gnu_ld
+-  lt_cv_path_LDCXX=$lt_cv_path_LD
+-  lt_cv_path_LD=$lt_save_path_LD
+-  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+-  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+-fi # test "$_lt_caught_CXX_error" != yes
+-
+-AC_LANG_POP
+-])# _LT_LANG_CXX_CONFIG
+-
+-
+-# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+-# ---------------------------------
+-# Figure out "hidden" library dependencies from verbose
+-# compiler output when linking a shared library.
+-# Parse the compiler output and extract the necessary
+-# objects, libraries and library flags.
+-m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+-[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+-# Dependencies to place before and after the object being linked:
+-_LT_TAGVAR(predep_objects, $1)=
+-_LT_TAGVAR(postdep_objects, $1)=
+-_LT_TAGVAR(predeps, $1)=
+-_LT_TAGVAR(postdeps, $1)=
+-_LT_TAGVAR(compiler_lib_search_path, $1)=
+-
+-dnl we can't use the lt_simple_compile_test_code here,
+-dnl because it contains code intended for an executable,
+-dnl not a library.  It's possible we should let each
+-dnl tag define a new lt_????_link_test_code variable,
+-dnl but it's only used here...
+-m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+-int a;
+-void foo (void) { a = 0; }
+-_LT_EOF
+-], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+-class Foo
+-{
+-public:
+-  Foo (void) { a = 0; }
+-private:
+-  int a;
+-};
+-_LT_EOF
+-], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+-      subroutine foo
+-      implicit none
+-      integer*4 a
+-      a=0
+-      return
+-      end
+-_LT_EOF
+-], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+-      subroutine foo
+-      implicit none
+-      integer a
+-      a=0
+-      return
+-      end
+-_LT_EOF
+-], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+-public class foo {
+-  private int a;
+-  public void bar (void) {
+-    a = 0;
+-  }
+-};
+-_LT_EOF
+-])
+-dnl Parse the compiler output and extract the necessary
+-dnl objects, libraries and library flags.
+-if AC_TRY_EVAL(ac_compile); then
+-  # Parse the compiler output and extract the necessary
+-  # objects, libraries and library flags.
+-
+-  # Sentinel used to keep track of whether or not we are before
+-  # the conftest object file.
+-  pre_test_object_deps_done=no
+-
+-  for p in `eval "$output_verbose_link_cmd"`; do
+-    case $p in
+-
+-    -L* | -R* | -l*)
+-       # Some compilers place space between "-{L,R}" and the path.
+-       # Remove the space.
+-       if test $p = "-L" ||
+-          test $p = "-R"; then
+-	 prev=$p
+-	 continue
+-       else
+-	 prev=
+-       fi
+-
+-       if test "$pre_test_object_deps_done" = no; then
+-	 case $p in
+-	 -L* | -R*)
+-	   # Internal compiler library paths should come after those
+-	   # provided the user.  The postdeps already come after the
+-	   # user supplied libs so there is no need to process them.
+-	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+-	   else
+-	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+-	   fi
+-	   ;;
+-	 # The "-l" case would never come before the object being
+-	 # linked, so don't bother handling this case.
+-	 esac
+-       else
+-	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+-	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+-	 else
+-	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+-	 fi
+-       fi
+-       ;;
+-
+-    *.$objext)
+-       # This assumes that the test object file only shows up
+-       # once in the compiler output.
+-       if test "$p" = "conftest.$objext"; then
+-	 pre_test_object_deps_done=yes
+-	 continue
+-       fi
+-
+-       if test "$pre_test_object_deps_done" = no; then
+-	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+-	   _LT_TAGVAR(predep_objects, $1)="$p"
+-	 else
+-	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+-	 fi
+-       else
+-	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+-	   _LT_TAGVAR(postdep_objects, $1)="$p"
+-	 else
+-	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+-	 fi
+-       fi
+-       ;;
+-
+-    *) ;; # Ignore the rest.
+-
+-    esac
+-  done
+-
+-  # Clean up.
+-  rm -f a.out a.exe
+-else
+-  echo "libtool.m4: error: problem compiling $1 test program"
+-fi
+-
+-$RM -f confest.$objext
+-
+-# PORTME: override above test on systems where it is broken
+-m4_if([$1], [CXX],
+-[case $host_os in
+-interix[[3-9]]*)
+-  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+-  # hack all around it, let's just trust "g++" to DTRT.
+-  _LT_TAGVAR(predep_objects,$1)=
+-  _LT_TAGVAR(postdep_objects,$1)=
+-  _LT_TAGVAR(postdeps,$1)=
+-  ;;
+-
+-linux*)
+-  case `$CC -V 2>&1 | sed 5q` in
+-  *Sun\ C*)
+-    # Sun C++ 5.9
+-
+-    # The more standards-conforming stlport4 library is
+-    # incompatible with the Cstd library. Avoid specifying
+-    # it if it's in CXXFLAGS. Ignore libCrun as
+-    # -library=stlport4 depends on it.
+-    case " $CXX $CXXFLAGS " in
+-    *" -library=stlport4 "*)
+-      solaris_use_stlport4=yes
+-      ;;
+-    esac
+-
+-    if test "$solaris_use_stlport4" != yes; then
+-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+-    fi
+-    ;;
+-  esac
+-  ;;
+-
+-solaris*)
+-  case $cc_basename in
+-  CC*)
+-    # The more standards-conforming stlport4 library is
+-    # incompatible with the Cstd library. Avoid specifying
+-    # it if it's in CXXFLAGS. Ignore libCrun as
+-    # -library=stlport4 depends on it.
+-    case " $CXX $CXXFLAGS " in
+-    *" -library=stlport4 "*)
+-      solaris_use_stlport4=yes
+-      ;;
+-    esac
+-
+-    # Adding this requires a known-good setup of shared libraries for
+-    # Sun compiler versions before 5.6, else PIC objects from an old
+-    # archive will be linked into the output, leading to subtle bugs.
+-    if test "$solaris_use_stlport4" != yes; then
+-      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+-    fi
+-    ;;
+-  esac
+-  ;;
+-esac
+-])
+-
+-case " $_LT_TAGVAR(postdeps, $1) " in
+-*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+-esac
+- _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+-if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+- _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+-fi
+-_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+-    [The directories searched by this compiler when creating a shared library])
+-_LT_TAGDECL([], [predep_objects], [1],
+-    [Dependencies to place before and after the objects being linked to
+-    create a shared library])
+-_LT_TAGDECL([], [postdep_objects], [1])
+-_LT_TAGDECL([], [predeps], [1])
+-_LT_TAGDECL([], [postdeps], [1])
+-_LT_TAGDECL([], [compiler_lib_search_path], [1],
+-    [The library search path used internally by the compiler when linking
+-    a shared library])
+-])# _LT_SYS_HIDDEN_LIBDEPS
+-
+-
+-# _LT_PROG_F77
+-# ------------
+-# Since AC_PROG_F77 is broken, in that it returns the empty string
+-# if there is no fortran compiler, we have our own version here.
+-m4_defun([_LT_PROG_F77],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+-AC_PROG_F77
+-if test -z "$F77" || test "X$F77" = "Xno"; then
+-  _lt_disable_F77=yes
+-fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_F77
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_F77], [])
+-
+-
+-# _LT_LANG_F77_CONFIG([TAG])
+-# --------------------------
+-# Ensure that the configuration variables for a Fortran 77 compiler are
+-# suitably defined.  These variables are subsequently used by _LT_CONFIG
+-# to write the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_F77_CONFIG],
+-[AC_REQUIRE([_LT_PROG_F77])dnl
+-AC_LANG_PUSH(Fortran 77)
+-
+-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-_LT_TAGVAR(allow_undefined_flag, $1)=
+-_LT_TAGVAR(always_export_symbols, $1)=no
+-_LT_TAGVAR(archive_expsym_cmds, $1)=
+-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_direct, $1)=no
+-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-_LT_TAGVAR(hardcode_libdir_separator, $1)=
+-_LT_TAGVAR(hardcode_minus_L, $1)=no
+-_LT_TAGVAR(hardcode_automatic, $1)=no
+-_LT_TAGVAR(inherit_rpath, $1)=no
+-_LT_TAGVAR(module_cmds, $1)=
+-_LT_TAGVAR(module_expsym_cmds, $1)=
+-_LT_TAGVAR(link_all_deplibs, $1)=unknown
+-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-_LT_TAGVAR(no_undefined_flag, $1)=
+-_LT_TAGVAR(whole_archive_flag_spec, $1)=
+-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-
+-# Source file extension for f77 test sources.
+-ac_ext=f
+-
+-# Object file extension for compiled f77 test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# No sense in running all these tests if we already determined that
+-# the F77 compiler isn't working.  Some variables (like enable_shared)
+-# are currently assumed to apply to all compilers on this platform,
+-# and will be corrupted by setting them based on a non-working compiler.
+-if test "$_lt_disable_F77" != yes; then
+-  # Code to be used in simple compile tests
+-  lt_simple_compile_test_code="\
+-      subroutine t
+-      return
+-      end
+-"
+-
+-  # Code to be used in simple link tests
+-  lt_simple_link_test_code="\
+-      program t
+-      end
+-"
+-
+-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-  _LT_TAG_COMPILER
+-
+-  # save warnings/boilerplate of simple test code
+-  _LT_COMPILER_BOILERPLATE
+-  _LT_LINKER_BOILERPLATE
+-
+-  # Allow CC to be a program name with arguments.
+-  lt_save_CC="$CC"
+-  lt_save_GCC=$GCC
+-  CC=${F77-"f77"}
+-  compiler=$CC
+-  _LT_TAGVAR(compiler, $1)=$CC
+-  _LT_CC_BASENAME([$compiler])
+-  GCC=$G77
+-  if test -n "$compiler"; then
+-    AC_MSG_CHECKING([if libtool supports shared libraries])
+-    AC_MSG_RESULT([$can_build_shared])
+-
+-    AC_MSG_CHECKING([whether to build shared libraries])
+-    test "$can_build_shared" = "no" && enable_shared=no
+-
+-    # On AIX, shared libraries and static libraries use the same namespace, and
+-    # are all built from PIC.
+-    case $host_os in
+-      aix3*)
+-        test "$enable_shared" = yes && enable_static=no
+-        if test -n "$RANLIB"; then
+-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+-          postinstall_cmds='$RANLIB $lib'
+-        fi
+-        ;;
+-      aix[[4-9]]*)
+-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+-	  test "$enable_shared" = yes && enable_static=no
+-	fi
+-        ;;
+-    esac
+-    AC_MSG_RESULT([$enable_shared])
+-
+-    AC_MSG_CHECKING([whether to build static libraries])
+-    # Make sure either enable_shared or enable_static is yes.
+-    test "$enable_shared" = yes || enable_static=yes
+-    AC_MSG_RESULT([$enable_static])
+-
+-    _LT_TAGVAR(GCC, $1)="$G77"
+-    _LT_TAGVAR(LD, $1)="$LD"
+-
+-    ## CAVEAT EMPTOR:
+-    ## There is no encapsulation within the following macros, do not change
+-    ## the running order or otherwise move them around unless you know exactly
+-    ## what you are doing...
+-    _LT_COMPILER_PIC($1)
+-    _LT_COMPILER_C_O($1)
+-    _LT_COMPILER_FILE_LOCKS($1)
+-    _LT_LINKER_SHLIBS($1)
+-    _LT_SYS_DYNAMIC_LINKER($1)
+-    _LT_LINKER_HARDCODE_LIBPATH($1)
+-
+-    _LT_CONFIG($1)
+-  fi # test -n "$compiler"
+-
+-  GCC=$lt_save_GCC
+-  CC="$lt_save_CC"
+-fi # test "$_lt_disable_F77" != yes
+-
+-AC_LANG_POP
+-])# _LT_LANG_F77_CONFIG
+-
+-
+-# _LT_PROG_FC
+-# -----------
+-# Since AC_PROG_FC is broken, in that it returns the empty string
+-# if there is no fortran compiler, we have our own version here.
+-m4_defun([_LT_PROG_FC],
+-[
+-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+-AC_PROG_FC
+-if test -z "$FC" || test "X$FC" = "Xno"; then
+-  _lt_disable_FC=yes
+-fi
+-popdef([AC_MSG_ERROR])
+-])# _LT_PROG_FC
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([_LT_PROG_FC], [])
+-
+-
+-# _LT_LANG_FC_CONFIG([TAG])
+-# -------------------------
+-# Ensure that the configuration variables for a Fortran compiler are
+-# suitably defined.  These variables are subsequently used by _LT_CONFIG
+-# to write the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_FC_CONFIG],
+-[AC_REQUIRE([_LT_PROG_FC])dnl
+-AC_LANG_PUSH(Fortran)
+-
+-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-_LT_TAGVAR(allow_undefined_flag, $1)=
+-_LT_TAGVAR(always_export_symbols, $1)=no
+-_LT_TAGVAR(archive_expsym_cmds, $1)=
+-_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_direct, $1)=no
+-_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+-_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+-_LT_TAGVAR(hardcode_libdir_separator, $1)=
+-_LT_TAGVAR(hardcode_minus_L, $1)=no
+-_LT_TAGVAR(hardcode_automatic, $1)=no
+-_LT_TAGVAR(inherit_rpath, $1)=no
+-_LT_TAGVAR(module_cmds, $1)=
+-_LT_TAGVAR(module_expsym_cmds, $1)=
+-_LT_TAGVAR(link_all_deplibs, $1)=unknown
+-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-_LT_TAGVAR(no_undefined_flag, $1)=
+-_LT_TAGVAR(whole_archive_flag_spec, $1)=
+-_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+-
+-# Source file extension for fc test sources.
+-ac_ext=${ac_fc_srcext-f}
+-
+-# Object file extension for compiled fc test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# No sense in running all these tests if we already determined that
+-# the FC compiler isn't working.  Some variables (like enable_shared)
+-# are currently assumed to apply to all compilers on this platform,
+-# and will be corrupted by setting them based on a non-working compiler.
+-if test "$_lt_disable_FC" != yes; then
+-  # Code to be used in simple compile tests
+-  lt_simple_compile_test_code="\
+-      subroutine t
+-      return
+-      end
+-"
+-
+-  # Code to be used in simple link tests
+-  lt_simple_link_test_code="\
+-      program t
+-      end
+-"
+-
+-  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-  _LT_TAG_COMPILER
+-
+-  # save warnings/boilerplate of simple test code
+-  _LT_COMPILER_BOILERPLATE
+-  _LT_LINKER_BOILERPLATE
+-
+-  # Allow CC to be a program name with arguments.
+-  lt_save_CC="$CC"
+-  lt_save_GCC=$GCC
+-  CC=${FC-"f95"}
+-  compiler=$CC
+-  GCC=$ac_cv_fc_compiler_gnu
+-
+-  _LT_TAGVAR(compiler, $1)=$CC
+-  _LT_CC_BASENAME([$compiler])
+-
+-  if test -n "$compiler"; then
+-    AC_MSG_CHECKING([if libtool supports shared libraries])
+-    AC_MSG_RESULT([$can_build_shared])
+-
+-    AC_MSG_CHECKING([whether to build shared libraries])
+-    test "$can_build_shared" = "no" && enable_shared=no
+-
+-    # On AIX, shared libraries and static libraries use the same namespace, and
+-    # are all built from PIC.
+-    case $host_os in
+-      aix3*)
+-        test "$enable_shared" = yes && enable_static=no
+-        if test -n "$RANLIB"; then
+-          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+-          postinstall_cmds='$RANLIB $lib'
+-        fi
+-        ;;
+-      aix[[4-9]]*)
+-	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+-	  test "$enable_shared" = yes && enable_static=no
+-	fi
+-        ;;
+-    esac
+-    AC_MSG_RESULT([$enable_shared])
+-
+-    AC_MSG_CHECKING([whether to build static libraries])
+-    # Make sure either enable_shared or enable_static is yes.
+-    test "$enable_shared" = yes || enable_static=yes
+-    AC_MSG_RESULT([$enable_static])
+-
+-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+-    _LT_TAGVAR(LD, $1)="$LD"
+-
+-    ## CAVEAT EMPTOR:
+-    ## There is no encapsulation within the following macros, do not change
+-    ## the running order or otherwise move them around unless you know exactly
+-    ## what you are doing...
+-    _LT_SYS_HIDDEN_LIBDEPS($1)
+-    _LT_COMPILER_PIC($1)
+-    _LT_COMPILER_C_O($1)
+-    _LT_COMPILER_FILE_LOCKS($1)
+-    _LT_LINKER_SHLIBS($1)
+-    _LT_SYS_DYNAMIC_LINKER($1)
+-    _LT_LINKER_HARDCODE_LIBPATH($1)
+-
+-    _LT_CONFIG($1)
+-  fi # test -n "$compiler"
+-
+-  GCC=$lt_save_GCC
+-  CC="$lt_save_CC"
+-fi # test "$_lt_disable_FC" != yes
+-
+-AC_LANG_POP
+-])# _LT_LANG_FC_CONFIG
+-
+-
+-# _LT_LANG_GCJ_CONFIG([TAG])
+-# --------------------------
+-# Ensure that the configuration variables for the GNU Java Compiler compiler
+-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+-# to write the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_GCJ_CONFIG],
+-[AC_REQUIRE([LT_PROG_GCJ])dnl
+-AC_LANG_SAVE
+-
+-# Source file extension for Java test sources.
+-ac_ext=java
+-
+-# Object file extension for compiled Java test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code="class foo {}"
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+-
+-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-_LT_TAG_COMPILER
+-
+-# save warnings/boilerplate of simple test code
+-_LT_COMPILER_BOILERPLATE
+-_LT_LINKER_BOILERPLATE
+-
+-# Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
+-lt_save_GCC=$GCC
+-GCC=yes
+-CC=${GCJ-"gcj"}
+-compiler=$CC
+-_LT_TAGVAR(compiler, $1)=$CC
+-_LT_TAGVAR(LD, $1)="$LD"
+-_LT_CC_BASENAME([$compiler])
+-
+-# GCJ did not exist at the time GCC didn't implicitly link libc in.
+-_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+-
+-_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+-
+-if test -n "$compiler"; then
+-  _LT_COMPILER_NO_RTTI($1)
+-  _LT_COMPILER_PIC($1)
+-  _LT_COMPILER_C_O($1)
+-  _LT_COMPILER_FILE_LOCKS($1)
+-  _LT_LINKER_SHLIBS($1)
+-  _LT_LINKER_HARDCODE_LIBPATH($1)
+-
+-  _LT_CONFIG($1)
+-fi
+-
+-AC_LANG_RESTORE
+-
+-GCC=$lt_save_GCC
+-CC="$lt_save_CC"
+-])# _LT_LANG_GCJ_CONFIG
+-
+-
+-# _LT_LANG_RC_CONFIG([TAG])
+-# -------------------------
+-# Ensure that the configuration variables for the Windows resource compiler
+-# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+-# to write the compiler configuration to `libtool'.
+-m4_defun([_LT_LANG_RC_CONFIG],
+-[AC_REQUIRE([LT_PROG_RC])dnl
+-AC_LANG_SAVE
+-
+-# Source file extension for RC test sources.
+-ac_ext=rc
+-
+-# Object file extension for compiled RC test sources.
+-objext=o
+-_LT_TAGVAR(objext, $1)=$objext
+-
+-# Code to be used in simple compile tests
+-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+-
+-# Code to be used in simple link tests
+-lt_simple_link_test_code="$lt_simple_compile_test_code"
+-
+-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+-_LT_TAG_COMPILER
+-
+-# save warnings/boilerplate of simple test code
+-_LT_COMPILER_BOILERPLATE
+-_LT_LINKER_BOILERPLATE
+-
+-# Allow CC to be a program name with arguments.
+-lt_save_CC="$CC"
+-lt_save_GCC=$GCC
+-GCC=
+-CC=${RC-"windres"}
+-compiler=$CC
+-_LT_TAGVAR(compiler, $1)=$CC
+-_LT_CC_BASENAME([$compiler])
+-_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+-
+-if test -n "$compiler"; then
+-  :
+-  _LT_CONFIG($1)
+-fi
+-
+-GCC=$lt_save_GCC
+-AC_LANG_RESTORE
+-CC="$lt_save_CC"
+-])# _LT_LANG_RC_CONFIG
+-
+-
+-# LT_PROG_GCJ
+-# -----------
+-AC_DEFUN([LT_PROG_GCJ],
+-[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+-  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+-    [AC_CHECK_TOOL(GCJ, gcj,)
+-      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+-      AC_SUBST(GCJFLAGS)])])[]dnl
+-])
+-
+-# Old name:
+-AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+-
+-
+-# LT_PROG_RC
+-# ----------
+-AC_DEFUN([LT_PROG_RC],
+-[AC_CHECK_TOOL(RC, windres,)
+-])
+-
+-# Old name:
+-AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([LT_AC_PROG_RC], [])
+-
+-
+-# _LT_DECL_EGREP
+-# --------------
+-# If we don't have a new enough Autoconf to choose the best grep
+-# available, choose the one first in the user's PATH.
+-m4_defun([_LT_DECL_EGREP],
+-[AC_REQUIRE([AC_PROG_EGREP])dnl
+-AC_REQUIRE([AC_PROG_FGREP])dnl
+-test -z "$GREP" && GREP=grep
+-_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+-_LT_DECL([], [EGREP], [1], [An ERE matcher])
+-_LT_DECL([], [FGREP], [1], [A literal string matcher])
+-dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+-AC_SUBST([GREP])
+-])
+-
+-
+-# _LT_DECL_OBJDUMP
+-# --------------
+-# If we don't have a new enough Autoconf to choose the best objdump
+-# available, choose the one first in the user's PATH.
+-m4_defun([_LT_DECL_OBJDUMP],
+-[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+-test -z "$OBJDUMP" && OBJDUMP=objdump
+-_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+-AC_SUBST([OBJDUMP])
+-])
+-
+-
+-# _LT_DECL_SED
+-# ------------
+-# Check for a fully-functional sed program, that truncates
+-# as few characters as possible.  Prefer GNU sed if found.
+-m4_defun([_LT_DECL_SED],
+-[AC_PROG_SED
+-test -z "$SED" && SED=sed
+-Xsed="$SED -e 1s/^X//"
+-_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+-_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+-    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+-])# _LT_DECL_SED
+-
+-m4_ifndef([AC_PROG_SED], [
+-# NOTE: This macro has been submitted for inclusion into   #
+-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+-#  a released version of Autoconf we should remove this    #
+-#  macro and use it instead.                               #
+-
+-m4_defun([AC_PROG_SED],
+-[AC_MSG_CHECKING([for a sed that does not truncate output])
+-AC_CACHE_VAL(lt_cv_path_SED,
+-[# Loop through the user's path and test for sed and gsed.
+-# Then use that list of sed's as ones to test for truncation.
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+-  IFS=$as_save_IFS
+-  test -z "$as_dir" && as_dir=.
+-  for lt_ac_prog in sed gsed; do
+-    for ac_exec_ext in '' $ac_executable_extensions; do
+-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+-      fi
+-    done
+-  done
+-done
+-IFS=$as_save_IFS
+-lt_ac_max=0
+-lt_ac_count=0
+-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+-# along with /bin/sed that truncates output.
+-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+-  test ! -f $lt_ac_sed && continue
+-  cat /dev/null > conftest.in
+-  lt_ac_count=0
+-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+-  # Check for GNU sed and select it if it is found.
+-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+-    lt_cv_path_SED=$lt_ac_sed
+-    break
+-  fi
+-  while true; do
+-    cat conftest.in conftest.in >conftest.tmp
+-    mv conftest.tmp conftest.in
+-    cp conftest.in conftest.nl
+-    echo >>conftest.nl
+-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+-    cmp -s conftest.out conftest.nl || break
+-    # 10000 chars as input seems more than enough
+-    test $lt_ac_count -gt 10 && break
+-    lt_ac_count=`expr $lt_ac_count + 1`
+-    if test $lt_ac_count -gt $lt_ac_max; then
+-      lt_ac_max=$lt_ac_count
+-      lt_cv_path_SED=$lt_ac_sed
+-    fi
+-  done
+-done
+-])
+-SED=$lt_cv_path_SED
+-AC_SUBST([SED])
+-AC_MSG_RESULT([$SED])
+-])#AC_PROG_SED
+-])#m4_ifndef
+-
+-# Old name:
+-AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([LT_AC_PROG_SED], [])
+-
+-
+-# _LT_CHECK_SHELL_FEATURES
+-# ------------------------
+-# Find out whether the shell is Bourne or XSI compatible,
+-# or has some other useful features.
+-m4_defun([_LT_CHECK_SHELL_FEATURES],
+-[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+-# Try some XSI features
+-xsi_shell=no
+-( _lt_dummy="a/b/c"
+-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+-      = c,a/b,, \
+-    && eval 'test $(( 1 + 1 )) -eq 2 \
+-    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+-  && xsi_shell=yes
+-AC_MSG_RESULT([$xsi_shell])
+-_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+-
+-AC_MSG_CHECKING([whether the shell understands "+="])
+-lt_shell_append=no
+-( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+-    >/dev/null 2>&1 \
+-  && lt_shell_append=yes
+-AC_MSG_RESULT([$lt_shell_append])
+-_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+-
+-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+-  lt_unset=unset
+-else
+-  lt_unset=false
+-fi
+-_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+-
+-# test EBCDIC or ASCII
+-case `echo X|tr X '\101'` in
+- A) # ASCII based system
+-    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+-  lt_SP2NL='tr \040 \012'
+-  lt_NL2SP='tr \015\012 \040\040'
+-  ;;
+- *) # EBCDIC based system
+-  lt_SP2NL='tr \100 \n'
+-  lt_NL2SP='tr \r\n \100\100'
+-  ;;
+-esac
+-_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+-_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+-])# _LT_CHECK_SHELL_FEATURES
+-
+-
+-# _LT_PROG_XSI_SHELLFNS
+-# ---------------------
+-# Bourne and XSI compatible variants of some useful shell functions.
+-m4_defun([_LT_PROG_XSI_SHELLFNS],
+-[case $xsi_shell in
+-  yes)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+-  case ${1} in
+-    */*) func_dirname_result="${1%/*}${2}" ;;
+-    *  ) func_dirname_result="${3}" ;;
+-  esac
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+-  func_basename_result="${1##*/}"
+-}
+-
+-# func_dirname_and_basename file append nondir_replacement
+-# perform func_basename and func_dirname in a single function
+-# call:
+-#   dirname:  Compute the dirname of FILE.  If nonempty,
+-#             add APPEND to the result, otherwise set result
+-#             to NONDIR_REPLACEMENT.
+-#             value returned in "$func_dirname_result"
+-#   basename: Compute filename of FILE.
+-#             value retuned in "$func_basename_result"
+-# Implementation must be kept synchronized with func_dirname
+-# and func_basename. For efficiency, we do not delegate to
+-# those functions but instead duplicate the functionality here.
+-func_dirname_and_basename ()
+-{
+-  case ${1} in
+-    */*) func_dirname_result="${1%/*}${2}" ;;
+-    *  ) func_dirname_result="${3}" ;;
+-  esac
+-  func_basename_result="${1##*/}"
+-}
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-func_stripname ()
+-{
+-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+-  # positional parameters, so assign one to ordinary parameter first.
+-  func_stripname_result=${3}
+-  func_stripname_result=${func_stripname_result#"${1}"}
+-  func_stripname_result=${func_stripname_result%"${2}"}
+-}
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+-  func_opt_split_opt=${1%%=*}
+-  func_opt_split_arg=${1#*=}
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+-  case ${1} in
+-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+-    *)    func_lo2o_result=${1} ;;
+-  esac
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+-  func_xform_result=${1%.*}.lo
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+-  func_arith_result=$(( $[*] ))
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+-  func_len_result=${#1}
+-}
+-
+-_LT_EOF
+-    ;;
+-  *) # Bourne compatible functions.
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_dirname file append nondir_replacement
+-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+-# otherwise set result to NONDIR_REPLACEMENT.
+-func_dirname ()
+-{
+-  # Extract subdirectory from the argument.
+-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+-  if test "X$func_dirname_result" = "X${1}"; then
+-    func_dirname_result="${3}"
+-  else
+-    func_dirname_result="$func_dirname_result${2}"
+-  fi
+-}
+-
+-# func_basename file
+-func_basename ()
+-{
+-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+-}
+-
+-dnl func_dirname_and_basename
+-dnl A portable version of this function is already defined in general.m4sh
+-dnl so there is no need for it here.
+-
+-# func_stripname prefix suffix name
+-# strip PREFIX and SUFFIX off of NAME.
+-# PREFIX and SUFFIX must not contain globbing or regex special
+-# characters, hashes, percent signs, but SUFFIX may contain a leading
+-# dot (in which case that matches only a dot).
+-# func_strip_suffix prefix name
+-func_stripname ()
+-{
+-  case ${2} in
+-    .*) func_stripname_result=`$ECHO "X${3}" \
+-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+-    *)  func_stripname_result=`$ECHO "X${3}" \
+-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+-  esac
+-}
+-
+-# sed scripts:
+-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+-my_sed_long_arg='1s/^-[[^=]]*=//'
+-
+-# func_opt_split
+-func_opt_split ()
+-{
+-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+-}
+-
+-# func_lo2o object
+-func_lo2o ()
+-{
+-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+-}
+-
+-# func_xform libobj-or-source
+-func_xform ()
+-{
+-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+-}
+-
+-# func_arith arithmetic-term...
+-func_arith ()
+-{
+-  func_arith_result=`expr "$[@]"`
+-}
+-
+-# func_len string
+-# STRING may not start with a hyphen.
+-func_len ()
+-{
+-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+-}
+-
+-_LT_EOF
+-esac
+-
+-case $lt_shell_append in
+-  yes)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+-  eval "$[1]+=\$[2]"
+-}
+-_LT_EOF
+-    ;;
+-  *)
+-    cat << \_LT_EOF >> "$cfgfile"
+-
+-# func_append var value
+-# Append VALUE to the end of shell variable VAR.
+-func_append ()
+-{
+-  eval "$[1]=\$$[1]\$[2]"
+-}
+-
+-_LT_EOF
+-    ;;
+-  esac
+-])
+-
+-# Helper functions for option handling.                    -*- Autoconf -*-
+-#
+-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+-#   Written by Gary V. Vaughan, 2004
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-# serial 6 ltoptions.m4
+-
+-# This is to help aclocal find these macros, as it can't see m4_define.
+-AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+-
+-
+-# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+-# ------------------------------------------
+-m4_define([_LT_MANGLE_OPTION],
+-[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+-
+-
+-# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+-# ---------------------------------------
+-# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+-# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+-# saved as a flag.
+-m4_define([_LT_SET_OPTION],
+-[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+-m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+-        _LT_MANGLE_DEFUN([$1], [$2]),
+-    [m4_warning([Unknown $1 option `$2'])])[]dnl
+-])
+-
+-
+-# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+-# ------------------------------------------------------------
+-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+-m4_define([_LT_IF_OPTION],
+-[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+-
+-
+-# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+-# -------------------------------------------------------
+-# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+-# are set.
+-m4_define([_LT_UNLESS_OPTIONS],
+-[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+-	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+-		      [m4_define([$0_found])])])[]dnl
+-m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+-])[]dnl
+-])
+-
+-
+-# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+-# ----------------------------------------
+-# OPTION-LIST is a space-separated list of Libtool options associated
+-# with MACRO-NAME.  If any OPTION has a matching handler declared with
+-# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+-# the unknown option and exit.
+-m4_defun([_LT_SET_OPTIONS],
+-[# Set options
+-m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+-    [_LT_SET_OPTION([$1], _LT_Option)])
+-
+-m4_if([$1],[LT_INIT],[
+-  dnl
+-  dnl Simply set some default values (i.e off) if boolean options were not
+-  dnl specified:
+-  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+-  ])
+-  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+-  ])
+-  dnl
+-  dnl If no reference was made to various pairs of opposing options, then
+-  dnl we run the default mode handler for the pair.  For example, if neither
+-  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+-  dnl archives by default:
+-  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+-  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+-  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+-  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+-  		   [_LT_ENABLE_FAST_INSTALL])
+-  ])
+-])# _LT_SET_OPTIONS
+-
+-
+-
+-# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+-# -----------------------------------------
+-m4_define([_LT_MANGLE_DEFUN],
+-[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+-
+-
+-# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+-# -----------------------------------------------
+-m4_define([LT_OPTION_DEFINE],
+-[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+-])# LT_OPTION_DEFINE
+-
+-
+-# dlopen
+-# ------
+-LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+-])
+-
+-AU_DEFUN([AC_LIBTOOL_DLOPEN],
+-[_LT_SET_OPTION([LT_INIT], [dlopen])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you
+-put the `dlopen' option into LT_INIT's first parameter.])
+-])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+-
+-
+-# win32-dll
+-# ---------
+-# Declare package support for building win32 dll's.
+-LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+-[enable_win32_dll=yes
+-
+-case $host in
+-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+-  AC_CHECK_TOOL(AS, as, false)
+-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+-  ;;
+-esac
+-
+-test -z "$AS" && AS=as
+-_LT_DECL([], [AS],      [0], [Assembler program])dnl
+-
+-test -z "$DLLTOOL" && DLLTOOL=dlltool
+-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+-
+-test -z "$OBJDUMP" && OBJDUMP=objdump
+-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+-])# win32-dll
+-
+-AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+-_LT_SET_OPTION([LT_INIT], [win32-dll])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you
+-put the `win32-dll' option into LT_INIT's first parameter.])
+-])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+-
+-
+-# _LT_ENABLE_SHARED([DEFAULT])
+-# ----------------------------
+-# implement the --enable-shared flag, and supports the `shared' and
+-# `disable-shared' LT_INIT options.
+-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+-m4_define([_LT_ENABLE_SHARED],
+-[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+-AC_ARG_ENABLE([shared],
+-    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+-	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+-    [p=${PACKAGE-default}
+-    case $enableval in
+-    yes) enable_shared=yes ;;
+-    no) enable_shared=no ;;
+-    *)
+-      enable_shared=no
+-      # Look at the argument we got.  We use all the common list separators.
+-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+-      for pkg in $enableval; do
+-	IFS="$lt_save_ifs"
+-	if test "X$pkg" = "X$p"; then
+-	  enable_shared=yes
+-	fi
+-      done
+-      IFS="$lt_save_ifs"
+-      ;;
+-    esac],
+-    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+-
+-    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+-	[Whether or not to build shared libraries])
+-])# _LT_ENABLE_SHARED
+-
+-LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+-LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+-
+-# Old names:
+-AC_DEFUN([AC_ENABLE_SHARED],
+-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+-])
+-
+-AC_DEFUN([AC_DISABLE_SHARED],
+-[_LT_SET_OPTION([LT_INIT], [disable-shared])
+-])
+-
+-AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+-AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+-dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+-
+-
+-
+-# _LT_ENABLE_STATIC([DEFAULT])
+-# ----------------------------
+-# implement the --enable-static flag, and support the `static' and
+-# `disable-static' LT_INIT options.
+-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+-m4_define([_LT_ENABLE_STATIC],
+-[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+-AC_ARG_ENABLE([static],
+-    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+-	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+-    [p=${PACKAGE-default}
+-    case $enableval in
+-    yes) enable_static=yes ;;
+-    no) enable_static=no ;;
+-    *)
+-     enable_static=no
+-      # Look at the argument we got.  We use all the common list separators.
+-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+-      for pkg in $enableval; do
+-	IFS="$lt_save_ifs"
+-	if test "X$pkg" = "X$p"; then
+-	  enable_static=yes
+-	fi
+-      done
+-      IFS="$lt_save_ifs"
+-      ;;
+-    esac],
+-    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+-
+-    _LT_DECL([build_old_libs], [enable_static], [0],
+-	[Whether or not to build static libraries])
+-])# _LT_ENABLE_STATIC
+-
+-LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+-LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+-
+-# Old names:
+-AC_DEFUN([AC_ENABLE_STATIC],
+-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+-])
+-
+-AC_DEFUN([AC_DISABLE_STATIC],
+-[_LT_SET_OPTION([LT_INIT], [disable-static])
+-])
+-
+-AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+-AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+-dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+-
+-
+-
+-# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+-# ----------------------------------
+-# implement the --enable-fast-install flag, and support the `fast-install'
+-# and `disable-fast-install' LT_INIT options.
+-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+-m4_define([_LT_ENABLE_FAST_INSTALL],
+-[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+-AC_ARG_ENABLE([fast-install],
+-    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+-    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+-    [p=${PACKAGE-default}
+-    case $enableval in
+-    yes) enable_fast_install=yes ;;
+-    no) enable_fast_install=no ;;
+-    *)
+-      enable_fast_install=no
+-      # Look at the argument we got.  We use all the common list separators.
+-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+-      for pkg in $enableval; do
+-	IFS="$lt_save_ifs"
+-	if test "X$pkg" = "X$p"; then
+-	  enable_fast_install=yes
+-	fi
+-      done
+-      IFS="$lt_save_ifs"
+-      ;;
+-    esac],
+-    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+-
+-_LT_DECL([fast_install], [enable_fast_install], [0],
+-	 [Whether or not to optimize for fast installation])dnl
+-])# _LT_ENABLE_FAST_INSTALL
+-
+-LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+-LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+-
+-# Old names:
+-AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+-[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+-the `fast-install' option into LT_INIT's first parameter.])
+-])
+-
+-AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+-[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+-the `disable-fast-install' option into LT_INIT's first parameter.])
+-])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+-dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+-
+-
+-# _LT_WITH_PIC([MODE])
+-# --------------------
+-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+-# LT_INIT options.
+-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+-m4_define([_LT_WITH_PIC],
+-[AC_ARG_WITH([pic],
+-    [AS_HELP_STRING([--with-pic],
+-	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+-    [pic_mode="$withval"],
+-    [pic_mode=default])
+-
+-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+-
+-_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+-])# _LT_WITH_PIC
+-
+-LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+-LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+-
+-# Old name:
+-AU_DEFUN([AC_LIBTOOL_PICMODE],
+-[_LT_SET_OPTION([LT_INIT], [pic-only])
+-AC_DIAGNOSE([obsolete],
+-[$0: Remove this warning and the call to _LT_SET_OPTION when you
+-put the `pic-only' option into LT_INIT's first parameter.])
+-])
+-
+-dnl aclocal-1.4 backwards compatibility:
+-dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+-
+-
+-m4_define([_LTDL_MODE], [])
+-LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+-		 [m4_define([_LTDL_MODE], [nonrecursive])])
+-LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+-		 [m4_define([_LTDL_MODE], [recursive])])
+-LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+-		 [m4_define([_LTDL_MODE], [subproject])])
+-
+-m4_define([_LTDL_TYPE], [])
+-LT_OPTION_DEFINE([LTDL_INIT], [installable],
+-		 [m4_define([_LTDL_TYPE], [installable])])
+-LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+-		 [m4_define([_LTDL_TYPE], [convenience])])
+-
+-# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+-#
+-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+-# Written by Gary V. Vaughan, 2004
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-# serial 6 ltsugar.m4
+-
+-# This is to help aclocal find these macros, as it can't see m4_define.
+-AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+-
+-
+-# lt_join(SEP, ARG1, [ARG2...])
+-# -----------------------------
+-# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+-# associated separator.
+-# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+-# versions in m4sugar had bugs.
+-m4_define([lt_join],
+-[m4_if([$#], [1], [],
+-       [$#], [2], [[$2]],
+-       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+-m4_define([_lt_join],
+-[m4_if([$#$2], [2], [],
+-       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+-
+-
+-# lt_car(LIST)
+-# lt_cdr(LIST)
+-# ------------
+-# Manipulate m4 lists.
+-# These macros are necessary as long as will still need to support
+-# Autoconf-2.59 which quotes differently.
+-m4_define([lt_car], [[$1]])
+-m4_define([lt_cdr],
+-[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+-       [$#], 1, [],
+-       [m4_dquote(m4_shift($@))])])
+-m4_define([lt_unquote], $1)
+-
+-
+-# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+-# ------------------------------------------
+-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+-# Note that neither SEPARATOR nor STRING are expanded; they are appended
+-# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+-# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+-# than defined and empty).
+-#
+-# This macro is needed until we can rely on Autoconf 2.62, since earlier
+-# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+-m4_define([lt_append],
+-[m4_define([$1],
+-	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+-
+-
+-
+-# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+-# ----------------------------------------------------------
+-# Produce a SEP delimited list of all paired combinations of elements of
+-# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+-# has the form PREFIXmINFIXSUFFIXn.
+-# Needed until we can rely on m4_combine added in Autoconf 2.62.
+-m4_define([lt_combine],
+-[m4_if(m4_eval([$# > 3]), [1],
+-       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+-[[m4_foreach([_Lt_prefix], [$2],
+-	     [m4_foreach([_Lt_suffix],
+-		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+-	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+-
+-
+-# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+-# -----------------------------------------------------------------------
+-# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+-# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+-m4_define([lt_if_append_uniq],
+-[m4_ifdef([$1],
+-	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+-		 [lt_append([$1], [$2], [$3])$4],
+-		 [$5])],
+-	  [lt_append([$1], [$2], [$3])$4])])
+-
+-
+-# lt_dict_add(DICT, KEY, VALUE)
+-# -----------------------------
+-m4_define([lt_dict_add],
+-[m4_define([$1($2)], [$3])])
+-
+-
+-# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+-# --------------------------------------------
+-m4_define([lt_dict_add_subkey],
+-[m4_define([$1($2:$3)], [$4])])
+-
+-
+-# lt_dict_fetch(DICT, KEY, [SUBKEY])
+-# ----------------------------------
+-m4_define([lt_dict_fetch],
+-[m4_ifval([$3],
+-	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+-    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+-
+-
+-# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+-# -----------------------------------------------------------------
+-m4_define([lt_if_dict_fetch],
+-[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+-	[$5],
+-    [$6])])
+-
+-
+-# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+-# --------------------------------------------------------------
+-m4_define([lt_dict_filter],
+-[m4_if([$5], [], [],
+-  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+-           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+-		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+-])
+-
+-# ltversion.m4 -- version numbers			-*- Autoconf -*-
+-#
+-#   Copyright (C) 2004 Free Software Foundation, Inc.
+-#   Written by Scott James Remnant, 2004
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-# Generated from ltversion.in.
+-
+-# serial 3017 ltversion.m4
+-# This file is part of GNU Libtool
+-
+-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+-m4_define([LT_PACKAGE_REVISION], [1.3017])
+-
+-AC_DEFUN([LTVERSION_VERSION],
+-[macro_version='2.2.6b'
+-macro_revision='1.3017'
+-_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+-_LT_DECL(, macro_revision, 0)
+-])
+-
+-# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+-#
+-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+-#   Written by Scott James Remnant, 2004.
+-#
+-# This file is free software; the Free Software Foundation gives
+-# unlimited permission to copy and/or distribute it, with or without
+-# modifications, as long as this notice is preserved.
+-
+-# serial 4 lt~obsolete.m4
+-
+-# These exist entirely to fool aclocal when bootstrapping libtool.
+-#
+-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+-# which have later been changed to m4_define as they aren't part of the
+-# exported API, or moved to Autoconf or Automake where they belong.
+-#
+-# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+-# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+-# using a macro with the same name in our local m4/libtool.m4 it'll
+-# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+-# and doesn't know about Autoconf macros at all.)
+-#
+-# So we provide this file, which has a silly filename so it's always
+-# included after everything else.  This provides aclocal with the
+-# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+-# because those macros already exist, or will be overwritten later.
+-# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+-#
+-# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+-# Yes, that means every name once taken will need to remain here until
+-# we give up compatibility with versions before 1.7, at which point
+-# we need to keep only those names which we still refer to.
+-
+-# This is to help aclocal find these macros, as it can't see m4_define.
+-AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+-
+-m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+-m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+-m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+-m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+-m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+-m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+-m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+-m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+-m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+-m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+-m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+-m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+-m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+-m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+-m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+-m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+-m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+-m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+-m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+-m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+-m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+-m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+-m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+-m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+-m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+-m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+-m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+-m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+-m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+-m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+-m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+-m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+-m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+-m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+-m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+-m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+-m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+-m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+-m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+-m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+-m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
+-m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+-m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+-m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+-m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+-
+ # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+@@ -9121,3 +1155,8 @@ AC_SUBST([am__untar])
+ ]) # _AM_PROG_TAR
+ 
+ m4_include([config/autotroll.m4])
++m4_include([config/libtool.m4])
++m4_include([config/ltoptions.m4])
++m4_include([config/ltsugar.m4])
++m4_include([config/ltversion.m4])
++m4_include([config/lt~obsolete.m4])
+--- /dev/null
++++ mathgl-1.11/config.log
+@@ -0,0 +1,1157 @@
++This file contains any messages produced by compilers while
++running configure, to aid debugging if configure makes a mistake.
++
++It was created by mathgl configure 1.10, which was
++generated by GNU Autoconf 2.67.  Invocation command line was
++
++  $ ./configure --prefix=/usr --mandir=${prefix}/share/man --infodir=${prefix}/share/info --host=x86_64-linux-gnu --build=x86_64-linux-gnu --enable-all --enable-octave --enable-python
++
++## --------- ##
++## Platform. ##
++## --------- ##
++
++hostname = filippos
++uname -m = x86_64
++uname -r = 2.6.36-trunk-amd64
++uname -s = Linux
++uname -v = #1 SMP Wed Oct 27 14:28:29 UTC 2010
++
++/usr/bin/uname -p = unknown
++/bin/uname -X     = unknown
++
++/bin/arch              = unknown
++/usr/bin/arch -k       = unknown
++/usr/convex/getsysinfo = unknown
++/usr/bin/hostinfo      = unknown
++/bin/machine           = unknown
++/usr/bin/oslevel       = unknown
++/bin/universe          = unknown
++
++PATH: /usr/sbin
++PATH: /usr/bin
++PATH: /sbin
++PATH: /bin
++PATH: /usr/bin/X11
++
++
++## ----------- ##
++## Core tests. ##
++## ----------- ##
++
++configure:2691: checking for a BSD-compatible install
++configure:2759: result: /usr/bin/install -c
++configure:2770: checking whether build environment is sane
++configure:2820: result: yes
++configure:2961: checking for a thread-safe mkdir -p
++configure:3000: result: /bin/mkdir -p
++configure:3013: checking for gawk
++configure:3029: found /usr/bin/gawk
++configure:3040: result: gawk
++configure:3051: checking whether make sets $(MAKE)
++configure:3073: result: yes
++configure:3162: checking for x86_64-linux-gnu-gcc
++configure:3178: found /usr/bin/x86_64-linux-gnu-gcc
++configure:3189: result: x86_64-linux-gnu-gcc
++configure:3458: checking for C compiler version
++configure:3467: x86_64-linux-gnu-gcc --version >&5
++x86_64-linux-gnu-gcc (Debian 4.4.5-6) 4.4.5
++Copyright (C) 2010 Free Software Foundation, Inc.
++This is free software; see the source for copying conditions.  There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++configure:3478: $? = 0
++configure:3467: x86_64-linux-gnu-gcc -v >&5
++Using built-in specs.
++Target: x86_64-linux-gnu
++Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-6' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
++Thread model: posix
++gcc version 4.4.5 (Debian 4.4.5-6) 
++configure:3478: $? = 0
++configure:3467: x86_64-linux-gnu-gcc -V >&5
++x86_64-linux-gnu-gcc: '-V' option must have argument
++configure:3478: $? = 1
++configure:3467: x86_64-linux-gnu-gcc -qversion >&5
++x86_64-linux-gnu-gcc: unrecognized option '-qversion'
++x86_64-linux-gnu-gcc: no input files
++configure:3478: $? = 1
++configure:3498: checking whether the C compiler works
++configure:3520: x86_64-linux-gnu-gcc -Wall -g -O2   conftest.c  >&5
++configure:3524: $? = 0
++configure:3572: result: yes
++configure:3575: checking for C compiler default output file name
++configure:3577: result: a.out
++configure:3583: checking for suffix of executables
++configure:3590: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
++configure:3594: $? = 0
++configure:3616: result: 
++configure:3638: checking whether we are cross compiling
++configure:3646: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
++configure:3650: $? = 0
++configure:3657: ./conftest
++configure:3661: $? = 0
++configure:3676: result: no
++configure:3681: checking for suffix of object files
++configure:3703: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:3707: $? = 0
++configure:3728: result: o
++configure:3732: checking whether we are using the GNU C compiler
++configure:3751: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:3751: $? = 0
++configure:3760: result: yes
++configure:3769: checking whether x86_64-linux-gnu-gcc accepts -g
++configure:3789: x86_64-linux-gnu-gcc -c -g  conftest.c >&5
++configure:3789: $? = 0
++configure:3830: result: yes
++configure:3847: checking for x86_64-linux-gnu-gcc option to accept ISO C89
++configure:3911: x86_64-linux-gnu-gcc  -c -Wall -g -O2  conftest.c >&5
++configure:3911: $? = 0
++configure:3924: result: none needed
++configure:3955: checking for style of include used by make
++configure:3983: result: GNU
++configure:4008: checking dependency style of x86_64-linux-gnu-gcc
++configure:4118: result: gcc3
++configure:4147: checking for x86_64-linux-gnu-g++
++configure:4163: found /usr/bin/x86_64-linux-gnu-g++
++configure:4174: result: x86_64-linux-gnu-g++
++configure:4245: checking for C++ compiler version
++configure:4254: x86_64-linux-gnu-g++ --version >&5
++x86_64-linux-gnu-g++ (Debian 4.4.5-6) 4.4.5
++Copyright (C) 2010 Free Software Foundation, Inc.
++This is free software; see the source for copying conditions.  There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++configure:4265: $? = 0
++configure:4254: x86_64-linux-gnu-g++ -v >&5
++Using built-in specs.
++Target: x86_64-linux-gnu
++Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-6' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
++Thread model: posix
++gcc version 4.4.5 (Debian 4.4.5-6) 
++configure:4265: $? = 0
++configure:4254: x86_64-linux-gnu-g++ -V >&5
++x86_64-linux-gnu-g++: '-V' option must have argument
++configure:4265: $? = 1
++configure:4254: x86_64-linux-gnu-g++ -qversion >&5
++x86_64-linux-gnu-g++: unrecognized option '-qversion'
++x86_64-linux-gnu-g++: no input files
++configure:4265: $? = 1
++configure:4269: checking whether we are using the GNU C++ compiler
++configure:4288: x86_64-linux-gnu-g++ -c -g -O2  conftest.cpp >&5
++configure:4288: $? = 0
++configure:4297: result: yes
++configure:4306: checking whether x86_64-linux-gnu-g++ accepts -g
++configure:4326: x86_64-linux-gnu-g++ -c -g  conftest.cpp >&5
++configure:4326: $? = 0
++configure:4367: result: yes
++configure:4392: checking dependency style of x86_64-linux-gnu-g++
++configure:4502: result: gcc3
++configure:4523: checking build system type
++configure:4537: result: x86_64-pc-linux-gnu
++configure:4557: checking host system type
++configure:4570: result: x86_64-pc-linux-gnu
++configure:4922: checking for a sed that does not truncate output
++configure:4986: result: /bin/sed
++configure:5004: checking for grep that handles long lines and -e
++configure:5062: result: /bin/grep
++configure:5067: checking for egrep
++configure:5129: result: /bin/grep -E
++configure:5134: checking for fgrep
++configure:5196: result: /bin/grep -F
++configure:5231: checking for ld used by x86_64-linux-gnu-gcc
++configure:5298: result: /usr/bin/ld
++configure:5305: checking if the linker (/usr/bin/ld) is GNU ld
++configure:5320: result: yes
++configure:5332: checking for BSD- or MS-compatible name lister (nm)
++configure:5381: result: /usr/bin/nm -B
++configure:5499: checking the name lister (/usr/bin/nm -B) interface
++configure:5506: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:5509: /usr/bin/nm -B "conftest.o"
++configure:5512: output
++0000000000000000 B some_variable
++configure:5519: result: BSD nm
++configure:5522: checking whether ln -s works
++configure:5526: result: yes
++configure:5534: checking the maximum length of command line arguments
++configure:5654: result: 3458764513820540925
++configure:5671: checking whether the shell understands some XSI constructs
++configure:5681: result: yes
++configure:5685: checking whether the shell understands "+="
++configure:5691: result: yes
++configure:5726: checking for /usr/bin/ld option to reload object files
++configure:5733: result: -r
++configure:5762: checking for x86_64-linux-gnu-objdump
++configure:5789: result: objdump
++configure:5858: checking how to recognize dependent libraries
++configure:6054: result: pass_all
++configure:6074: checking for x86_64-linux-gnu-ar
++configure:6104: result: no
++configure:6114: checking for ar
++configure:6130: found /usr/bin/ar
++configure:6141: result: ar
++configure:6179: checking for x86_64-linux-gnu-strip
++configure:6209: result: no
++configure:6219: checking for strip
++configure:6235: found /usr/bin/strip
++configure:6246: result: strip
++configure:6278: checking for x86_64-linux-gnu-ranlib
++configure:6308: result: no
++configure:6318: checking for ranlib
++configure:6334: found /usr/bin/ranlib
++configure:6345: result: ranlib
++configure:6435: checking command to parse /usr/bin/nm -B output from x86_64-linux-gnu-gcc object
++configure:6553: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:6556: $? = 0
++configure:6560: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[	 ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[	 ][	 ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' \> conftest.nm
++configure:6563: $? = 0
++configure:6617: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c conftstm.o >&5
++configure:6620: $? = 0
++configure:6658: result: ok
++configure:6754: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:6757: $? = 0
++configure:7467: checking how to run the C preprocessor
++configure:7498: x86_64-linux-gnu-gcc -E  conftest.c
++configure:7498: $? = 0
++configure:7512: x86_64-linux-gnu-gcc -E  conftest.c
++conftest.c:11:28: error: ac_nonexistent.h: No such file or directory
++configure:7512: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| /* end confdefs.h.  */
++| #include <ac_nonexistent.h>
++configure:7537: result: x86_64-linux-gnu-gcc -E
++configure:7557: x86_64-linux-gnu-gcc -E  conftest.c
++configure:7557: $? = 0
++configure:7571: x86_64-linux-gnu-gcc -E  conftest.c
++conftest.c:11:28: error: ac_nonexistent.h: No such file or directory
++configure:7571: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| /* end confdefs.h.  */
++| #include <ac_nonexistent.h>
++configure:7600: checking for ANSI C header files
++configure:7620: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7620: $? = 0
++configure:7693: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
++configure:7693: $? = 0
++configure:7693: ./conftest
++configure:7693: $? = 0
++configure:7704: result: yes
++configure:7717: checking for sys/types.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7717: checking for sys/stat.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7717: checking for stdlib.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7717: checking for string.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7717: checking for memory.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7717: checking for strings.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7717: checking for inttypes.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7717: checking for stdint.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7717: checking for unistd.h
++configure:7717: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7717: $? = 0
++configure:7717: result: yes
++configure:7731: checking for dlfcn.h
++configure:7731: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:7731: $? = 0
++configure:7731: result: yes
++configure:7856: checking for C++ compiler version
++configure:7865: x86_64-linux-gnu-g++ --version >&5
++x86_64-linux-gnu-g++ (Debian 4.4.5-6) 4.4.5
++Copyright (C) 2010 Free Software Foundation, Inc.
++This is free software; see the source for copying conditions.  There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++configure:7876: $? = 0
++configure:7865: x86_64-linux-gnu-g++ -v >&5
++Using built-in specs.
++Target: x86_64-linux-gnu
++Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-6' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
++Thread model: posix
++gcc version 4.4.5 (Debian 4.4.5-6) 
++configure:7876: $? = 0
++configure:7865: x86_64-linux-gnu-g++ -V >&5
++x86_64-linux-gnu-g++: '-V' option must have argument
++configure:7876: $? = 1
++configure:7865: x86_64-linux-gnu-g++ -qversion >&5
++x86_64-linux-gnu-g++: unrecognized option '-qversion'
++x86_64-linux-gnu-g++: no input files
++configure:7876: $? = 1
++configure:7880: checking whether we are using the GNU C++ compiler
++configure:7908: result: yes
++configure:7917: checking whether x86_64-linux-gnu-g++ accepts -g
++configure:7978: result: yes
++configure:8003: checking dependency style of x86_64-linux-gnu-g++
++configure:8113: result: gcc3
++configure:8136: checking how to run the C++ preprocessor
++configure:8163: x86_64-linux-gnu-g++ -E  conftest.cpp
++configure:8163: $? = 0
++configure:8177: x86_64-linux-gnu-g++ -E  conftest.cpp
++conftest.cpp:22:28: error: ac_nonexistent.h: No such file or directory
++configure:8177: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_DLFCN_H 1
++| /* end confdefs.h.  */
++| #include <ac_nonexistent.h>
++configure:8202: result: x86_64-linux-gnu-g++ -E
++configure:8222: x86_64-linux-gnu-g++ -E  conftest.cpp
++configure:8222: $? = 0
++configure:8236: x86_64-linux-gnu-g++ -E  conftest.cpp
++conftest.cpp:22:28: error: ac_nonexistent.h: No such file or directory
++configure:8236: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_DLFCN_H 1
++| /* end confdefs.h.  */
++| #include <ac_nonexistent.h>
++configure:8438: checking for objdir
++configure:8453: result: .libs
++configure:8749: checking if x86_64-linux-gnu-gcc supports -fno-rtti -fno-exceptions
++configure:8767: x86_64-linux-gnu-gcc -c -Wall -g -O2  -fno-rtti -fno-exceptions conftest.c >&5
++cc1: warning: command line option "-fno-rtti" is valid for C++/ObjC++ but not for C
++configure:8771: $? = 0
++configure:8784: result: no
++configure:8804: checking for x86_64-linux-gnu-gcc option to produce PIC
++configure:9076: result: -fPIC -DPIC
++configure:9088: checking if x86_64-linux-gnu-gcc PIC flag -fPIC -DPIC works
++configure:9106: x86_64-linux-gnu-gcc -c -Wall -g -O2  -fPIC -DPIC -DPIC conftest.c >&5
++configure:9110: $? = 0
++configure:9123: result: yes
++configure:9147: checking if x86_64-linux-gnu-gcc static flag -static works
++configure:9175: result: yes
++configure:9190: checking if x86_64-linux-gnu-gcc supports -c -o file.o
++configure:9211: x86_64-linux-gnu-gcc -c -Wall -g -O2  -o out/conftest2.o conftest.c >&5
++configure:9215: $? = 0
++configure:9237: result: yes
++configure:9245: checking if x86_64-linux-gnu-gcc supports -c -o file.o
++configure:9292: result: yes
++configure:9325: checking whether the x86_64-linux-gnu-gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
++configure:10316: result: yes
++configure:10353: checking whether -lc should be explicitly linked in
++configure:10358: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:10361: $? = 0
++configure:10376: x86_64-linux-gnu-gcc -shared conftest.o  -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep  -lc  \>/dev/null 2\>\&1
++configure:10379: $? = 0
++configure:10391: result: no
++configure:10555: checking dynamic linker characteristics
++configure:10988: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   -Wl,-rpath -Wl,/foo conftest.c  >&5
++configure:10988: $? = 0
++configure:11218: result: GNU/Linux ld.so
++configure:11320: checking how to hardcode library paths into programs
++configure:11345: result: immediate
++configure:11439: checking for shl_load
++configure:11439: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
++/tmp/ccvPT5V8.o: In function `main':
++/home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/conftest.c:57: undefined reference to `shl_load'
++collect2: ld returned 1 exit status
++configure:11439: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_DLFCN_H 1
++| #define LT_OBJDIR ".libs/"
++| /* end confdefs.h.  */
++| /* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
++|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++| #define shl_load innocuous_shl_load
++| 
++| /* System header to define __stub macros and hopefully few prototypes,
++|     which can conflict with char shl_load (); below.
++|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++|     <limits.h> exists even on freestanding compilers.  */
++| 
++| #ifdef __STDC__
++| # include <limits.h>
++| #else
++| # include <assert.h>
++| #endif
++| 
++| #undef shl_load
++| 
++| /* Override any GCC internal prototype to avoid an error.
++|    Use char because int might match the return type of a GCC
++|    builtin and then its argument prototype would still apply.  */
++| #ifdef __cplusplus
++| extern "C"
++| #endif
++| char shl_load ();
++| /* The GNU C library defines this for functions which it implements
++|     to always fail with ENOSYS.  Some functions are actually named
++|     something starting with __ and the normal name is an alias.  */
++| #if defined __stub_shl_load || defined __stub___shl_load
++| choke me
++| #endif
++| 
++| int
++| main ()
++| {
++| return shl_load ();
++|   ;
++|   return 0;
++| }
++configure:11439: result: no
++configure:11443: checking for shl_load in -ldld
++configure:11468: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -ldld   >&5
++/usr/bin/ld: cannot find -ldld
++collect2: ld returned 1 exit status
++configure:11468: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_DLFCN_H 1
++| #define LT_OBJDIR ".libs/"
++| /* end confdefs.h.  */
++| 
++| /* Override any GCC internal prototype to avoid an error.
++|    Use char because int might match the return type of a GCC
++|    builtin and then its argument prototype would still apply.  */
++| #ifdef __cplusplus
++| extern "C"
++| #endif
++| char shl_load ();
++| int
++| main ()
++| {
++| return shl_load ();
++|   ;
++|   return 0;
++| }
++configure:11477: result: no
++configure:11482: checking for dlopen
++configure:11482: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c  >&5
++/tmp/ccMlv6xg.o: In function `main':
++/home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/conftest.c:57: undefined reference to `dlopen'
++collect2: ld returned 1 exit status
++configure:11482: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_DLFCN_H 1
++| #define LT_OBJDIR ".libs/"
++| /* end confdefs.h.  */
++| /* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
++|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++| #define dlopen innocuous_dlopen
++| 
++| /* System header to define __stub macros and hopefully few prototypes,
++|     which can conflict with char dlopen (); below.
++|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++|     <limits.h> exists even on freestanding compilers.  */
++| 
++| #ifdef __STDC__
++| # include <limits.h>
++| #else
++| # include <assert.h>
++| #endif
++| 
++| #undef dlopen
++| 
++| /* Override any GCC internal prototype to avoid an error.
++|    Use char because int might match the return type of a GCC
++|    builtin and then its argument prototype would still apply.  */
++| #ifdef __cplusplus
++| extern "C"
++| #endif
++| char dlopen ();
++| /* The GNU C library defines this for functions which it implements
++|     to always fail with ENOSYS.  Some functions are actually named
++|     something starting with __ and the normal name is an alias.  */
++| #if defined __stub_dlopen || defined __stub___dlopen
++| choke me
++| #endif
++| 
++| int
++| main ()
++| {
++| return dlopen ();
++|   ;
++|   return 0;
++| }
++configure:11482: result: no
++configure:11486: checking for dlopen in -ldl
++configure:11511: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -ldl   >&5
++configure:11511: $? = 0
++configure:11520: result: yes
++configure:11639: checking whether a program can dlopen itself
++configure:11709: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2  -DHAVE_DLFCN_H  -Wl,--export-dynamic conftest.c -ldl  >&5
++configure: In function 'fnord':
++configure:11690: warning: unused variable 'i'
++configure:11712: $? = 0
++configure:11730: result: yes
++configure:11735: checking whether a statically linked program can dlopen itself
++configure:11805: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2  -DHAVE_DLFCN_H  -Wl,--export-dynamic -static conftest.c -ldl  >&5
++configure: In function 'fnord':
++configure:11786: warning: unused variable 'i'
++/tmp/ccCHkhJq.o: In function `main':
++/home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/configure:11789: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
++/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie
++collect2: ld returned 1 exit status
++configure:11808: $? = 1
++configure:11826: result: no
++configure:11865: checking whether stripping libraries is possible
++configure:11870: result: yes
++configure:11905: checking if libtool supports shared libraries
++configure:11907: result: yes
++configure:11910: checking whether to build shared libraries
++configure:11931: result: yes
++configure:11934: checking whether to build static libraries
++configure:11938: result: yes
++configure:12088: checking for ld used by x86_64-linux-gnu-g++
++configure:12155: result: /usr/bin/ld -m elf_x86_64
++configure:12162: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld
++configure:12177: result: yes
++configure:12232: checking whether the x86_64-linux-gnu-g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
++configure:13145: result: yes
++configure:13173: x86_64-linux-gnu-g++ -c -g -O2  conftest.cpp >&5
++configure:13176: $? = 0
++configure:13358: checking for x86_64-linux-gnu-g++ option to produce PIC
++configure:13675: result: -fPIC -DPIC
++configure:13684: checking if x86_64-linux-gnu-g++ PIC flag -fPIC -DPIC works
++configure:13702: x86_64-linux-gnu-g++ -c -g -O2  -fPIC -DPIC -DPIC conftest.cpp >&5
++configure:13706: $? = 0
++configure:13719: result: yes
++configure:13740: checking if x86_64-linux-gnu-g++ static flag -static works
++configure:13768: result: yes
++configure:13780: checking if x86_64-linux-gnu-g++ supports -c -o file.o
++configure:13801: x86_64-linux-gnu-g++ -c -g -O2  -o out/conftest2.o conftest.cpp >&5
++configure:13805: $? = 0
++configure:13827: result: yes
++configure:13832: checking if x86_64-linux-gnu-g++ supports -c -o file.o
++configure:13879: result: yes
++configure:13909: checking whether the x86_64-linux-gnu-g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
++configure:13938: result: yes
++configure:14075: checking dynamic linker characteristics
++configure:14456: x86_64-linux-gnu-g++ -o conftest -g -O2   -Wl,-rpath -Wl,/foo conftest.cpp  >&5
++configure:14456: $? = 0
++configure:14686: result: GNU/Linux ld.so
++configure:14737: checking how to hardcode library paths into programs
++configure:14762: result: immediate
++configure:14878: checking pthread.h usability
++configure:14878: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:14878: $? = 0
++configure:14878: result: yes
++configure:14878: checking pthread.h presence
++configure:14878: x86_64-linux-gnu-gcc -E  conftest.c
++configure:14878: $? = 0
++configure:14878: result: yes
++configure:14878: checking for pthread.h
++configure:14878: result: yes
++configure:14887: checking for main in -lpthread
++configure:14906: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -lpthread   >&5
++configure:14906: $? = 0
++configure:14915: result: yes
++configure:14948: checking for gsl-config
++configure:14964: found /usr/bin/gsl-config
++configure:14975: result: -I/usr/include
++configure:14985: checking for gsl-config
++configure:15001: found /usr/bin/gsl-config
++configure:15012: result: -L/usr/lib -lgsl -lgslcblas -lm
++configure:15161: checking GL/gl.h usability
++configure:15161: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:15161: $? = 0
++configure:15161: result: yes
++configure:15161: checking GL/gl.h presence
++configure:15161: x86_64-linux-gnu-gcc -E  conftest.c
++configure:15161: $? = 0
++configure:15161: result: yes
++configure:15161: checking for GL/gl.h
++configure:15161: result: yes
++configure:15170: checking for main in -lGL
++configure:15189: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -lGL   >&5
++configure:15189: $? = 0
++configure:15199: result: yes
++configure:15208: checking GL/glut.h usability
++configure:15208: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:15208: $? = 0
++configure:15208: result: yes
++configure:15208: checking GL/glut.h presence
++configure:15208: x86_64-linux-gnu-gcc -E  conftest.c
++configure:15208: $? = 0
++configure:15208: result: yes
++configure:15208: checking for GL/glut.h
++configure:15208: result: yes
++configure:15217: checking for main in -lglut
++configure:15236: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -lglut   >&5
++configure:15236: $? = 0
++configure:15246: result: yes
++configure:15298: checking hdf5.h usability
++configure:15298: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++configure:15298: $? = 0
++configure:15298: result: yes
++configure:15298: checking hdf5.h presence
++configure:15298: x86_64-linux-gnu-gcc -E  conftest.c
++configure:15298: $? = 0
++configure:15298: result: yes
++configure:15298: checking for hdf5.h
++configure:15298: result: yes
++configure:15310: checking for main in -lhdf5
++configure:15329: x86_64-linux-gnu-gcc -o conftest -Wall -g -O2   conftest.c -lhdf5   >&5
++configure:15329: $? = 0
++configure:15338: result: yes
++configure:15367: checking hdf/mfhdf.h usability
++configure:15367: x86_64-linux-gnu-gcc -c -Wall -g -O2  conftest.c >&5
++conftest.c:57:23: error: hdf/mfhdf.h: No such file or directory
++configure:15367: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_DLFCN_H 1
++| #define LT_OBJDIR ".libs/"
++| #define MGL_USE_DOUBLE 0
++| /* end confdefs.h.  */
++| #include <stdio.h>
++| #ifdef HAVE_SYS_TYPES_H
++| # include <sys/types.h>
++| #endif
++| #ifdef HAVE_SYS_STAT_H
++| # include <sys/stat.h>
++| #endif
++| #ifdef STDC_HEADERS
++| # include <stdlib.h>
++| # include <stddef.h>
++| #else
++| # ifdef HAVE_STDLIB_H
++| #  include <stdlib.h>
++| # endif
++| #endif
++| #ifdef HAVE_STRING_H
++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
++| #  include <memory.h>
++| # endif
++| # include <string.h>
++| #endif
++| #ifdef HAVE_STRINGS_H
++| # include <strings.h>
++| #endif
++| #ifdef HAVE_INTTYPES_H
++| # include <inttypes.h>
++| #endif
++| #ifdef HAVE_STDINT_H
++| # include <stdint.h>
++| #endif
++| #ifdef HAVE_UNISTD_H
++| # include <unistd.h>
++| #endif
++| #include <hdf/mfhdf.h>
++configure:15367: result: no
++configure:15367: checking hdf/mfhdf.h presence
++configure:15367: x86_64-linux-gnu-gcc -E  conftest.c
++conftest.c:24:23: error: hdf/mfhdf.h: No such file or directory
++configure:15367: $? = 1
++configure: failed program was:
++| /* confdefs.h */
++| #define PACKAGE_NAME "mathgl"
++| #define PACKAGE_TARNAME "mathgl"
++| #define PACKAGE_VERSION "1.10"
++| #define PACKAGE_STRING "mathgl 1.10"
++| #define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++| #define PACKAGE_URL ""
++| #define PACKAGE "mathgl"
++| #define VERSION "1.10"
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_DLFCN_H 1
++| #define LT_OBJDIR ".libs/"
++| #define MGL_USE_DOUBLE 0
++| /* end confdefs.h.  */
++| #include <hdf/mfhdf.h>
++configure:15367: result: no
++configure:15367: checking for hdf/mfhdf.h
++configure:15367: result: no
++
++## ---------------- ##
++## Cache variables. ##
++## ---------------- ##
++
++ac_cv_build=x86_64-pc-linux-gnu
++ac_cv_c_compiler_gnu=yes
++ac_cv_cxx_compiler_gnu=yes
++ac_cv_env_CCC_set=
++ac_cv_env_CCC_value=
++ac_cv_env_CC_set=
++ac_cv_env_CC_value=
++ac_cv_env_CFLAGS_set=set
++ac_cv_env_CFLAGS_value='-Wall -g -O2'
++ac_cv_env_CPPFLAGS_set=set
++ac_cv_env_CPPFLAGS_value=
++ac_cv_env_CPP_set=
++ac_cv_env_CPP_value=
++ac_cv_env_CXXCPP_set=
++ac_cv_env_CXXCPP_value=
++ac_cv_env_CXXFLAGS_set=set
++ac_cv_env_CXXFLAGS_value='-g -O2'
++ac_cv_env_CXX_set=
++ac_cv_env_CXX_value=
++ac_cv_env_LDFLAGS_set=set
++ac_cv_env_LDFLAGS_value=
++ac_cv_env_LIBS_set=
++ac_cv_env_LIBS_value=
++ac_cv_env_TMPDIR_set=
++ac_cv_env_TMPDIR_value=
++ac_cv_env_build_alias_set=set
++ac_cv_env_build_alias_value=x86_64-linux-gnu
++ac_cv_env_host_alias_set=set
++ac_cv_env_host_alias_value=x86_64-linux-gnu
++ac_cv_env_target_alias_set=
++ac_cv_env_target_alias_value=
++ac_cv_func_dlopen=no
++ac_cv_func_shl_load=no
++ac_cv_header_GL_gl_h=yes
++ac_cv_header_GL_glut_h=yes
++ac_cv_header_dlfcn_h=yes
++ac_cv_header_hdf5_h=yes
++ac_cv_header_hdf_mfhdf_h=no
++ac_cv_header_inttypes_h=yes
++ac_cv_header_memory_h=yes
++ac_cv_header_pthread_h=yes
++ac_cv_header_stdc=yes
++ac_cv_header_stdint_h=yes
++ac_cv_header_stdlib_h=yes
++ac_cv_header_string_h=yes
++ac_cv_header_strings_h=yes
++ac_cv_header_sys_stat_h=yes
++ac_cv_header_sys_types_h=yes
++ac_cv_header_unistd_h=yes
++ac_cv_host=x86_64-pc-linux-gnu
++ac_cv_lib_GL___main=yes
++ac_cv_lib_dl_dlopen=yes
++ac_cv_lib_dld_shl_load=no
++ac_cv_lib_glut___main=yes
++ac_cv_lib_hdf5_main=yes
++ac_cv_lib_pthread_main=yes
++ac_cv_objext=o
++ac_cv_path_EGREP='/bin/grep -E'
++ac_cv_path_FGREP='/bin/grep -F'
++ac_cv_path_GREP=/bin/grep
++ac_cv_path_SED=/bin/sed
++ac_cv_path_install='/usr/bin/install -c'
++ac_cv_path_mkdir=/bin/mkdir
++ac_cv_prog_AWK=gawk
++ac_cv_prog_CC=x86_64-linux-gnu-gcc
++ac_cv_prog_CPP='x86_64-linux-gnu-gcc -E'
++ac_cv_prog_CXX=x86_64-linux-gnu-g++
++ac_cv_prog_CXXCPP='x86_64-linux-gnu-g++ -E'
++ac_cv_prog_GSL_FLAGS=-I/usr/include
++ac_cv_prog_GSL_LIBS='-L/usr/lib -lgsl -lgslcblas -lm'
++ac_cv_prog_OBJDUMP=objdump
++ac_cv_prog_ac_ct_AR=ar
++ac_cv_prog_ac_ct_RANLIB=ranlib
++ac_cv_prog_ac_ct_STRIP=strip
++ac_cv_prog_cc_c89=
++ac_cv_prog_cc_g=yes
++ac_cv_prog_cxx_g=yes
++ac_cv_prog_make_make_set=yes
++am_cv_CC_dependencies_compiler_type=gcc3
++am_cv_CXX_dependencies_compiler_type=gcc3
++lt_cv_deplibs_check_method=pass_all
++lt_cv_dlopen=dlopen
++lt_cv_dlopen_libs=-ldl
++lt_cv_dlopen_self=yes
++lt_cv_dlopen_self_static=no
++lt_cv_file_magic_cmd='$MAGIC_CMD'
++lt_cv_file_magic_test_file=
++lt_cv_ld_reload_flag=-r
++lt_cv_nm_interface='BSD nm'
++lt_cv_objdir=.libs
++lt_cv_path_LD=/usr/bin/ld
++lt_cv_path_LDCXX='/usr/bin/ld -m elf_x86_64'
++lt_cv_path_NM='/usr/bin/nm -B'
++lt_cv_prog_compiler_c_o=yes
++lt_cv_prog_compiler_c_o_CXX=yes
++lt_cv_prog_compiler_pic_works=yes
++lt_cv_prog_compiler_pic_works_CXX=yes
++lt_cv_prog_compiler_rtti_exceptions=no
++lt_cv_prog_compiler_static_works=yes
++lt_cv_prog_compiler_static_works_CXX=yes
++lt_cv_prog_gnu_ld=yes
++lt_cv_prog_gnu_ldcxx=yes
++lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[	 ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[	 ][	 ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'''
++lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/  {"\2", (void *) \&\2},/p'\'''
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/  {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/  {"lib\2", (void *) \&\2},/p'\'''
++lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\'''
++lt_cv_sys_max_cmd_len=3458764513820540925
++
++## ----------------- ##
++## Output variables. ##
++## ----------------- ##
++
++ACLOCAL='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run aclocal-1.11'
++AMDEPBACKSLASH='\'
++AMDEP_FALSE='#'
++AMDEP_TRUE=''
++AMTAR='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run tar'
++AM_CXXFLAGS=''
++AR='ar'
++AS='as'
++AUTOCONF='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run autoconf'
++AUTOHEADER='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run autoheader'
++AUTOMAKE='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run automake-1.11'
++AWK='gawk'
++CC='x86_64-linux-gnu-gcc'
++CCDEPMODE='depmode=gcc3'
++CFLAGS='-Wall -g -O2'
++CPP='x86_64-linux-gnu-gcc -E'
++CPPFLAGS=''
++CXX='x86_64-linux-gnu-g++'
++CXXCPP='x86_64-linux-gnu-g++ -E'
++CXXDEPMODE='depmode=gcc3'
++CXXFLAGS='-g -O2'
++CYGPATH_W='echo'
++DEFS=''
++DEPDIR='.deps'
++DLLTOOL='dlltool'
++DSYMUTIL=''
++DUMPBIN=''
++ECHO_C=''
++ECHO_N='-n'
++ECHO_T=''
++EGREP='/bin/grep -E'
++EXEEXT=''
++FGREP='/bin/grep -F'
++FLTK_FLAGS=''
++FLTK_LIBS=''
++GIF_FLAGS=''
++GIF_LIBS=''
++GLUT_FLAGS='-DHAVE_GLUT'
++GLUT_LIBS='-lglut'
++GL_LIBS='-lGL'
++GREP='/bin/grep'
++GSL_FLAGS='-I/usr/include'
++GSL_LIBS='-L/usr/lib -lgsl -lgslcblas -lm'
++HAVE_SWIG=''
++HDF4_FLAGS=''
++HDF4_LIBS=''
++HDF5_FLAGS='-DHAVE_HDF5 -DH5_USE_16_API'
++HDF5_LIBS='-lhdf5'
++INSTALL_DATA='${INSTALL} -m 644'
++INSTALL_PROGRAM='${INSTALL}'
++INSTALL_SCRIPT='${INSTALL}'
++INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
++JPEG_FLAGS=''
++JPEG_LIBS=''
++LD='/usr/bin/ld -m elf_x86_64'
++LDFLAGS=''
++LIBOBJS=''
++LIBS=''
++LIBTOOL='$(SHELL) $(top_builddir)/libtool'
++LIPO=''
++LN_S='ln -s'
++LTLIBOBJS=''
++MAKEINFO='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/missing --run makeinfo'
++MGL_AGE='0'
++MGL_CURRENT='5'
++MGL_RELEASE='1.10'
++MGL_REVISION='0'
++MKDIR_P='/bin/mkdir -p'
++MOC=''
++NM='/usr/bin/nm -B'
++NMEDIT=''
++OBJDUMP='objdump'
++OBJEXT='o'
++OCTAVE=''
++OCTAVE_ARCH=''
++OCTAVE_INCFLAGS=''
++OTOOL64=''
++OTOOL=''
++PACKAGE='mathgl'
++PACKAGE_BUGREPORT='mathgl.abalakin at gmail.com'
++PACKAGE_NAME='mathgl'
++PACKAGE_STRING='mathgl 1.10'
++PACKAGE_TARNAME='mathgl'
++PACKAGE_URL=''
++PACKAGE_VERSION='1.10'
++PATH_SEPARATOR=':'
++PNG_LIBS=''
++PTHREAD_FLAGS='-DHAVE_PTHREAD'
++PTHREAD_LIBS='-lpthread'
++PYTHON=''
++PYTHON_EXEC_PREFIX=''
++PYTHON_HEADERS=''
++PYTHON_PLATFORM=''
++PYTHON_PREFIX=''
++PYTHON_VERSION=''
++QMAKE=''
++QT_CFLAGS=''
++QT_CPPFLAGS=''
++QT_CXXFLAGS=''
++QT_DEFINES=''
++QT_INCPATH=''
++QT_LDFLAGS=''
++QT_LFLAGS=''
++QT_LIBS=''
++QT_PATH=''
++QT_VERSION=''
++QT_VERSION_MAJOR=''
++RANLIB='ranlib'
++RCC=''
++SED='/bin/sed'
++SET_MAKE=''
++SHELL='/bin/bash'
++STRIP='strip'
++TMPDIR=''
++UIC=''
++USE_DOCS_FALSE=''
++USE_DOCS_TRUE=''
++USE_FLTK_FALSE=''
++USE_FLTK_TRUE=''
++USE_GIF_FALSE=''
++USE_GIF_TRUE=''
++USE_GLUT_FALSE='#'
++USE_GLUT_TRUE=''
++USE_GSL_FALSE='#'
++USE_GSL_TRUE=''
++USE_HDF4_FALSE=''
++USE_HDF4_TRUE=''
++USE_HDF5_FALSE='#'
++USE_HDF5_TRUE=''
++USE_JPEG_FALSE=''
++USE_JPEG_TRUE=''
++USE_OCTAVE_FALSE=''
++USE_OCTAVE_TRUE=''
++USE_PTHREAD_FALSE='#'
++USE_PTHREAD_TRUE=''
++USE_PYTHON_FALSE=''
++USE_PYTHON_TRUE=''
++USE_QT_FALSE=''
++USE_QT_TRUE=''
++USE_TESTIO_FALSE=''
++USE_TESTIO_TRUE=''
++USE_WX_FALSE=''
++USE_WX_TRUE=''
++VERSION='1.10'
++WX_FLAGS=''
++WX_LIBS=''
++ac_ct_CC=''
++ac_ct_CXX=''
++ac_ct_DUMPBIN=''
++am__EXEEXT_FALSE=''
++am__EXEEXT_TRUE=''
++am__fastdepCC_FALSE='#'
++am__fastdepCC_TRUE=''
++am__fastdepCXX_FALSE='#'
++am__fastdepCXX_TRUE=''
++am__include='include'
++am__isrc=''
++am__leading_dot='.'
++am__quote=''
++am__tar='${AMTAR} chof - "$$tardir"'
++am__untar='${AMTAR} xf -'
++bindir='${exec_prefix}/bin'
++build='x86_64-pc-linux-gnu'
++build_alias='x86_64-linux-gnu'
++build_cpu='x86_64'
++build_os='linux-gnu'
++build_vendor='pc'
++datadir='${datarootdir}'
++datarootdir='${prefix}/share'
++docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
++dvidir='${docdir}'
++exec_prefix='NONE'
++host='x86_64-pc-linux-gnu'
++host_alias='x86_64-linux-gnu'
++host_cpu='x86_64'
++host_os='linux-gnu'
++host_vendor='pc'
++htmldir='${docdir}'
++includedir='${prefix}/include'
++infodir='${prefix}/share/info'
++install_sh='${SHELL} /home/eftaxiop/Αρχεία/Γενικά/Λογισμικό/mathgl/mathgl-1.11/config/install-sh'
++libdir='${exec_prefix}/lib'
++libexecdir='${exec_prefix}/libexec'
++localedir='${datarootdir}/locale'
++localstatedir='${prefix}/var'
++lt_ECHO='echo'
++mandir='${prefix}/share/man'
++mkdir_p='/bin/mkdir -p'
++oldincludedir='/usr/include'
++pdfdir='${docdir}'
++pkgpyexecdir=''
++pkgpythondir=''
++prefix='/usr'
++program_transform_name='s,x,x,'
++psdir='${docdir}'
++pyexecdir=''
++pythondir=''
++sbindir='${exec_prefix}/sbin'
++sharedstatedir='${prefix}/com'
++sysconfdir='${prefix}/etc'
++target_alias=''
++
++## ----------- ##
++## confdefs.h. ##
++## ----------- ##
++
++/* confdefs.h */
++#define PACKAGE_NAME "mathgl"
++#define PACKAGE_TARNAME "mathgl"
++#define PACKAGE_VERSION "1.10"
++#define PACKAGE_STRING "mathgl 1.10"
++#define PACKAGE_BUGREPORT "mathgl.abalakin at gmail.com"
++#define PACKAGE_URL ""
++#define PACKAGE "mathgl"
++#define VERSION "1.10"
++#define STDC_HEADERS 1
++#define HAVE_SYS_TYPES_H 1
++#define HAVE_SYS_STAT_H 1
++#define HAVE_STDLIB_H 1
++#define HAVE_STRING_H 1
++#define HAVE_MEMORY_H 1
++#define HAVE_STRINGS_H 1
++#define HAVE_INTTYPES_H 1
++#define HAVE_STDINT_H 1
++#define HAVE_UNISTD_H 1
++#define HAVE_DLFCN_H 1
++#define LT_OBJDIR ".libs/"
++#define MGL_USE_DOUBLE 0
++
++configure: exit 0
+--- mathgl-1.11.orig/configure
++++ mathgl-1.11/configure
+@@ -8735,6 +8735,10 @@ _lt_linker_boilerplate=`cat conftest.err
+ $RM -r conftest*
+ 
+ 
++## CAVEAT EMPTOR:
++## There is no encapsulation within the following macros, do not change
++## the running order or otherwise move them around unless you know exactly
++## what you are doing...
+ if test -n "$compiler"; then
+ 
+ lt_prog_compiler_no_builtin_flag=
+@@ -8760,11 +8764,11 @@ else
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:8763: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:8767: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:8767: \$? = $ac_status" >&5
++   echo "$as_me:8771: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -9099,11 +9103,11 @@ else
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:9102: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:9106: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:9106: \$? = $ac_status" >&5
++   echo "$as_me:9110: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -9204,11 +9208,11 @@ else
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:9207: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:9211: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:9211: \$? = $ac_status" >&5
++   echo "$as_me:9215: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -9259,11 +9263,11 @@ else
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:9262: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:9266: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:9266: \$? = $ac_status" >&5
++   echo "$as_me:9270: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -11643,7 +11647,7 @@ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 11646 "configure"
++#line 11650 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -11739,7 +11743,7 @@ else
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 11742 "configure"
++#line 11746 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -13695,11 +13699,11 @@ else
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:13698: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:13702: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>conftest.err)
+    ac_status=$?
+    cat conftest.err >&5
+-   echo "$as_me:13702: \$? = $ac_status" >&5
++   echo "$as_me:13706: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s "$ac_outfile"; then
+      # The compiler can only warn and ignore the option if not recognized
+      # So say no if there are warnings other than the usual output.
+@@ -13794,11 +13798,11 @@ else
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:13797: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:13801: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:13801: \$? = $ac_status" >&5
++   echo "$as_me:13805: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+@@ -13846,11 +13850,11 @@ else
+    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+    -e 's:$: $lt_compiler_flag:'`
+-   (eval echo "\"\$as_me:13849: $lt_compile\"" >&5)
++   (eval echo "\"\$as_me:13853: $lt_compile\"" >&5)
+    (eval "$lt_compile" 2>out/conftest.err)
+    ac_status=$?
+    cat out/conftest.err >&5
+-   echo "$as_me:13853: \$? = $ac_status" >&5
++   echo "$as_me:13857: \$? = $ac_status" >&5
+    if (exit $ac_status) && test -s out/conftest2.$ac_objext
+    then
+      # The compiler can only warn and ignore the option if not recognized
+--- mathgl-1.11.orig/widgets/Makefile.in
++++ mathgl-1.11/widgets/Makefile.in
+@@ -62,7 +62,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(sr
+ subdir = widgets
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+--- mathgl-1.11.orig/texinfo/Makefile.in
++++ mathgl-1.11/texinfo/Makefile.in
+@@ -39,7 +39,11 @@ DIST_COMMON = $(mathgl_en_TEXINFOS) $(ma
+ 	$(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+--- mathgl-1.11.orig/texinfo/png/Makefile.in
++++ mathgl-1.11/texinfo/png/Makefile.in
+@@ -38,7 +38,11 @@ subdir = texinfo/png
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+--- mathgl-1.11.orig/include/Makefile.in
++++ mathgl-1.11/include/Makefile.in
+@@ -39,7 +39,11 @@ DIST_COMMON = $(am__nobase_include_HEADE
+ 	$(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+--- mathgl-1.11.orig/lang/Makefile.in
++++ mathgl-1.11/lang/Makefile.in
+@@ -45,7 +45,11 @@ DIST_COMMON = $(am__dist_octave_DATA_DIS
+ 	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+--- mathgl-1.11.orig/examples/Makefile.in
++++ mathgl-1.11/examples/Makefile.in
+@@ -66,7 +66,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(sr
+ subdir = examples
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+--- mathgl-1.11.orig/mgl/Makefile.in
++++ mathgl-1.11/mgl/Makefile.in
+@@ -48,7 +48,11 @@ subdir = mgl
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
+--- mathgl-1.11.orig/utils/Makefile.in
++++ mathgl-1.11/utils/Makefile.in
+@@ -42,7 +42,11 @@ subdir = utils
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
+-	$(top_srcdir)/configure.ac
++	$(top_srcdir)/config/libtool.m4 \
++	$(top_srcdir)/config/ltoptions.m4 \
++	$(top_srcdir)/config/ltsugar.m4 \
++	$(top_srcdir)/config/ltversion.m4 \
++	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
+ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ 	$(ACLOCAL_M4)
+ mkinstalldirs = $(install_sh) -d
diff --git a/debian/patches/series b/debian/patches/series
index b9acfe6..2c29cd5 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,6 +1,7 @@
-debian-changes-1.10.2.1-3
-examples-ldflags.patch
-mglview-ldflags.patch
-upstream-mgl-memleak.patch
-upstream-svg-namespace.patch
+#debian-changes-1.10.2.1-3
+#examples-ldflags.patch
+#mglview-ldflags.patch
+#upstream-mgl-memleak.patch
+#upstream-svg-namespace.patch
 #00_add_info_section.diff
+debian-changes-1.11-1
diff --git a/debian/rules b/debian/rules
index d53078c..0164557 100755
--- a/debian/rules
+++ b/debian/rules
@@ -52,8 +52,6 @@ install: build
 	rm -f debian/tmp/usr/bin/*_example
 	rm -f debian/tmp/usr/share/info/dir
 	find debian \( -name mathgl.pyc -o -name mathgl.pyo \) -print0 | xargs -0 -r rm -f \;
-	mkdir -p debian/tmp/usr/share/doc/mathgl/pdf_u3d
-	mogrify -path debian/tmp/usr/share/doc/mathgl/pdf_u3d -format pdf debian/tmp/usr/share/doc/mathgl/png/*.png
 
 binary-indep: build install
 
@@ -63,12 +61,9 @@ binary-arch: build install
 	dh_installchangelogs ChangeLog.txt
 	dh_installdocs
 	dh_install --fail-missing
-#	rm -f debian/mathgl-doc/usr/share/doc/mathgl-doc/png/all.png
-#	rm -f debian/mathgl-doc/usr/share/doc/mathgl-doc/en/mathgl_en.html/pdf_u3d/*pdf.gz
 	dh_link
 	dh_strip
 	dh_compress
-	gunzip -r debian/mathgl-doc/usr/share/doc/mathgl-doc/en/mathgl_en.html/pdf_u3d
 	dh_fixperms
 	dh_makeshlibs
 	dh_installdeb
diff --git a/lang/INDEX b/debian/stamp-patched
similarity index 100%
copy from lang/INDEX
copy to debian/stamp-patched
diff --git a/emblem.mgl b/emblem.mgl
new file mode 100644
index 0000000..dcc45ad
--- /dev/null
+++ b/emblem.mgl
@@ -0,0 +1,39 @@
+setsize 1000 500
+text 0.75 0.8 'MathGL' 'ia' -5
+text 0.05 0.15 'library\n for scientific graphics' 'Lia' -3
+#rect 0.05 0.9 2 1.5 1.34 2 'w'
+xtick -3:ytick -3:ztick -3
+
+stickplot 3 0 60 20:box
+new y 50: fill y '-cos(pi*x-pi/4)'
+new x 50: fill x '-sin(pi*x-pi/4)'
+new z 50: fill z '2*x^2-1'
+
+area x y z 'lG'
+plot x y z 'B2s'
+
+stickplot 3 1 60 20:box
+
+new aa 50 40
+modify aa '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+mirror aa 'y'
+light on :alpha on
+surf aa 'BbcyrR';alpha 0.8
+cont aa 'y'
+
+stickplot 3 2 60 20:box
+rotate 0 20
+
+new a 61 51 40
+modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
+
+alpha on:light off
+cloud a 'wyrRk'
+
+stop
+cut 0 -1 -1 1 0 1.1
+surf3 a -1 'BbcyrR'
+contf3 a 'x' -1
+contf3 a 'y' -1
+contf3 a 'z' 0
+contf3 a 'z' 39
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 30a9608..1385c30 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -8,24 +8,24 @@ mgl_example_LDADD = $(top_builddir)/mgl/libmgl.la
 if USE_FLTK
 bin_PROGRAMS += mgl_fltk_example
 mgl_fltk_example_SOURCES = wnd_samples.cpp fltk_example.cpp
-mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la
+mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la
 mgl_fltk_example_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 
 check_PROGRAMS += test
 test_SOURCES = wnd_samples.cpp main.cpp
-test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la
+test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la
 test_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 endif
 
 if USE_GLUT
 bin_PROGRAMS += mgl_glut_example
 mgl_glut_example_SOURCES = wnd_samples.cpp glut_example.cpp
-mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la
+mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la $(top_builddir)/mgl/libmgl.la
 endif
 
 if USE_WX
 bin_PROGRAMS += mgl_wx_example
-mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la
+mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la $(top_builddir)/mgl/libmgl.la
 mgl_wx_example_CXXFLAGS = $(WX_FLAGS) $(AM_CXXFLAGS)
 mgl_wx_example_SOURCES = wnd_samples.cpp wx_example.cpp
 endif
@@ -36,7 +36,7 @@ ACLOCAL_AMFLAGS = -I $(top_srcdir)/config/
 
 bin_PROGRAMS += mgl_qt_example
 mgl_qt_example_SOURCES = wnd_samples.cpp $(top_builddir)/include/mgl/mgl_qt.moc.cpp $(top_srcdir)/include/mgl/mgl_qt.h qt_example.cpp
-mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la
+mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la $(top_builddir)/mgl/libmgl.la
 mgl_qt_example_LDFLAGS = $(QT_LDFLAGS)
 mgl_qt_example_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)
 mgl_qt_example_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 719f08a..b20c278 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -66,7 +66,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 subdir = examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -90,7 +94,8 @@ am__mgl_fltk_example_SOURCES_DIST = wnd_samples.cpp fltk_example.cpp
 mgl_fltk_example_OBJECTS = $(am_mgl_fltk_example_OBJECTS)
 am__DEPENDENCIES_1 =
 @USE_FLTK_TRUE at mgl_fltk_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la \
+ at USE_FLTK_TRUE@	$(top_builddir)/mgl/libmgl.la
 mgl_fltk_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(mgl_fltk_example_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -100,7 +105,8 @@ am__mgl_glut_example_SOURCES_DIST = wnd_samples.cpp glut_example.cpp
 @USE_GLUT_TRUE@	glut_example.$(OBJEXT)
 mgl_glut_example_OBJECTS = $(am_mgl_glut_example_OBJECTS)
 @USE_GLUT_TRUE at mgl_glut_example_DEPENDENCIES =  \
- at USE_GLUT_TRUE@	$(top_builddir)/widgets/libmgl-glut.la
+ at USE_GLUT_TRUE@	$(top_builddir)/widgets/libmgl-glut.la \
+ at USE_GLUT_TRUE@	$(top_builddir)/mgl/libmgl.la
 am__mgl_qt_example_SOURCES_DIST = wnd_samples.cpp \
 	$(top_builddir)/include/mgl/mgl_qt.moc.cpp \
 	$(top_srcdir)/include/mgl/mgl_qt.h qt_example.cpp
@@ -110,7 +116,8 @@ am__mgl_qt_example_SOURCES_DIST = wnd_samples.cpp \
 @USE_QT_TRUE@	mgl_qt_example-qt_example.$(OBJEXT)
 mgl_qt_example_OBJECTS = $(am_mgl_qt_example_OBJECTS)
 @USE_QT_TRUE at mgl_qt_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- at USE_QT_TRUE@	$(top_builddir)/widgets/libmgl-qt.la
+ at USE_QT_TRUE@	$(top_builddir)/widgets/libmgl-qt.la \
+ at USE_QT_TRUE@	$(top_builddir)/mgl/libmgl.la
 mgl_qt_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(mgl_qt_example_CXXFLAGS) $(CXXFLAGS) \
@@ -121,7 +128,8 @@ am__mgl_wx_example_SOURCES_DIST = wnd_samples.cpp wx_example.cpp
 @USE_WX_TRUE@	mgl_wx_example-wx_example.$(OBJEXT)
 mgl_wx_example_OBJECTS = $(am_mgl_wx_example_OBJECTS)
 @USE_WX_TRUE at mgl_wx_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- at USE_WX_TRUE@	$(top_builddir)/widgets/libmgl-wx.la
+ at USE_WX_TRUE@	$(top_builddir)/widgets/libmgl-wx.la \
+ at USE_WX_TRUE@	$(top_builddir)/mgl/libmgl.la
 mgl_wx_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CXXLD) \
 	$(mgl_wx_example_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -131,7 +139,8 @@ am__test_SOURCES_DIST = wnd_samples.cpp main.cpp
 @USE_FLTK_TRUE@	test-main.$(OBJEXT)
 test_OBJECTS = $(am_test_OBJECTS)
 @USE_FLTK_TRUE at test_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la \
+ at USE_FLTK_TRUE@	$(top_builddir)/mgl/libmgl.la
 test_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CXXLD) $(test_CXXFLAGS) $(CXXFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -210,6 +219,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -230,6 +241,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -342,14 +354,14 @@ top_srcdir = @top_srcdir@
 mgl_example_SOURCES = wnd_samples.cpp full_test.cpp
 mgl_example_LDADD = $(top_builddir)/mgl/libmgl.la
 @USE_FLTK_TRUE at mgl_fltk_example_SOURCES = wnd_samples.cpp fltk_example.cpp
- at USE_FLTK_TRUE@mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la
 @USE_FLTK_TRUE at mgl_fltk_example_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 @USE_FLTK_TRUE at test_SOURCES = wnd_samples.cpp main.cpp
- at USE_FLTK_TRUE@test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la
 @USE_FLTK_TRUE at test_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 @USE_GLUT_TRUE at mgl_glut_example_SOURCES = wnd_samples.cpp glut_example.cpp
- at USE_GLUT_TRUE@mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la
- at USE_WX_TRUE@mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la
+ at USE_GLUT_TRUE@mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la $(top_builddir)/mgl/libmgl.la
+ at USE_WX_TRUE@mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la $(top_builddir)/mgl/libmgl.la
 @USE_WX_TRUE at mgl_wx_example_CXXFLAGS = $(WX_FLAGS) $(AM_CXXFLAGS)
 @USE_WX_TRUE at mgl_wx_example_SOURCES = wnd_samples.cpp wx_example.cpp
 
@@ -361,7 +373,7 @@ mgl_example_LDADD = $(top_builddir)/mgl/libmgl.la
 @USE_QT_TRUE at DISTCLEANFILES = $(BUILT_SOURCES)
 @USE_QT_TRUE at ACLOCAL_AMFLAGS = -I $(top_srcdir)/config/
 @USE_QT_TRUE at mgl_qt_example_SOURCES = wnd_samples.cpp $(top_builddir)/include/mgl/mgl_qt.moc.cpp $(top_srcdir)/include/mgl/mgl_qt.h qt_example.cpp
- at USE_QT_TRUE@mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la
+ at USE_QT_TRUE@mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la $(top_builddir)/mgl/libmgl.la
 @USE_QT_TRUE at mgl_qt_example_LDFLAGS = $(QT_LDFLAGS)
 @USE_QT_TRUE at mgl_qt_example_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS)
 @USE_QT_TRUE at mgl_qt_example_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS)
diff --git a/examples/fltk_example.cpp b/examples/fltk_example.cpp
index 53a6686..9a54ac7 100644
--- a/examples/fltk_example.cpp
+++ b/examples/fltk_example.cpp
@@ -27,8 +27,32 @@ int sample_2(mglGraph *gr, void *);
 int sample_3(mglGraph *gr, void *);
 int sample_d(mglGraph *gr, void *);
 //-----------------------------------------------------------------------------
+#include <pthread.h>
+#include <unistd.h>
+mglPoint pnt;  // some global variable for changable data
+void *mgl_fltk_tmp(void *)	{	mglFlRun();	return 0;	}
+//-----------------------------------------------------------------------------
 int main(int argc,char **argv)
-{
+{
+#ifdef PTHREAD_SAMPLE
+	mglGraphFLTK gr;
+	gr.Window(argc,argv,NULL,"test",0,0);  // create window
+	gr.ClfOnUpdate = false;
+	static pthread_t tmp;
+	pthread_create(&tmp, 0, mgl_fltk_tmp, 0);
+	pthread_detach(tmp);    // run window handling in the separate thread
+	for(int i=0;i<10;i++)   // do calculation
+	{
+		sleep(2);             // which can be very long
+		pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);
+		gr.Clf();             // make new drawing
+		gr.Line(mglPoint(),pnt,"Ar2");
+		char str[10] = "i=0";	str[3] = '0'+i;
+		gr.Text(mglPoint(),"");
+		gr.Update();       // update window
+	}
+	return 0;   // finish calculations and close the window*/
+#else
 	mglGraphFLTK gr;
 	char key = 0;
 	if(argc>1 && argv[1][0]!='-')	key = argv[1][0];
@@ -42,6 +66,7 @@ int main(int argc,char **argv)
 	case 't':	gr.Window(argc,argv,test,"Testing");	break;
 	default:	gr.Window(argc,argv,sample,"Example of molecules");	break;
 	}
-	return mglFlRun();
+	return mglFlRun();
+#endif
 }
 //-----------------------------------------------------------------------------
diff --git a/examples/full_test.cpp b/examples/full_test.cpp
index 14c225a..6fb97d5 100644
--- a/examples/full_test.cpp
+++ b/examples/full_test.cpp
@@ -17,6 +17,7 @@
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
+#include <wchar.h>
 #include <time.h>
 #include <locale.h>
 #include <string.h>
@@ -29,12 +30,141 @@
 //#include <mgl/mgl_w.h>
 //-----------------------------------------------------------------------------
 #include "mgl/mgl_parse.h"
+extern mglTeXsymb mgl_tex_symb[];
 int test(mglGraphAB *gr)
 {
+  int N[5] = {0, 28, 52, 73, 85};
+  char text[256];	
+  float tmin = -900, tmax = -400, dt = 100;
+  double amp[5] = {1., 1.62, 3.98, 5.53, 8.54};
+  double z0 = 0.031;//0.063
+  gr->SetSize(2400,800);
+  gr->Clf();		gr->RotatedText = false;	gr->TuneTicks = false;
+  gr->InPlot(0,0.3,0.15,1);
+  gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0));
+  gr->CAxis(0,1);		gr->Light(true);		gr->Alpha(true);	gr->AlphaDef = 0.6;
+  gr->Rotate(75-7*1*0-5*1,365);	
+  sprintf(text,"\\i z = %g z_R",N[0]*z0);
+  gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC");
+  sprintf(text,"\\i I_{max}=%g",amp[0]);
+  gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC");
+  gr->Light(false);	gr->Alpha(false);
+  gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5");
+  gr->dz = 0.2;	gr->dx = dt;
+  gr->Min.z = 0;
+  //gr->Axis("_yz");
+  float size = gr->FontSize;			gr->FontSize = 4;
+  gr->Axis("_y");		gr->Axis("z");
+  gr->Org = mglPoint(tmin,-1,0);		gr->Axis("x");	gr->FontSize = size;
+  gr->Min.z = -0.65;
+  gr->Org = mglPoint(tmin,0,-0.65);	gr->Axis("_xy");
+  //------------------------------------------------------------------------------------
+  //-----------------------------Второй график-----------------------------------------
+  gr->InPlot(0.172,0.472,0.135,0.985);
+  gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0));
+  gr->CAxis(0,1);		gr->Light(true);		gr->Alpha(true);	gr->AlphaDef = 0.6;
+  gr->Rotate(75-7*1*0-5*1,365);	
+  sprintf(text,"\\i z = %g z_R",N[1]*z0);
+  gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC");
+  sprintf(text,"\\i I_{max}=%g",amp[1]);
+  gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC");
+  gr->Light(false);	gr->Alpha(false);
+  gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5");
+  gr->Min.z = 0;
+  gr->Axis("_xyz");
+  gr->Min.z = -0.65;
+  gr->Org = mglPoint(tmin,0,-0.65);			gr->Axis("_xy");
+/*  //------------------------------------------------------------------------------------
+  //-----------------------------Третий график-----------------------------------------
+  u->ReadHDF(_sprintf("%d.h5",N[2]),"/Real(E)");	u->Transpose();
+  intensity( Nt, Nr, k, w0, u->a );		(V+2)->Set(u->a,Nt,Nr);	
+  std::cout<<"Max = "<<V[2].Maximal()/max<<std::endl;
+  (V+2)->Norm(0,1);	(V+5)->Set((V+2)->a,Nt,1);
+  gr->InPlot(0.344,0.644,0.12,0.97);
+  gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0));
+  gr->CAxis(0,1);		gr->Light(true);		gr->Alpha(true);	gr->AlphaDef = 0.6;
+  gr->Rotate(75-7*1*0-5*1,365);	
+  sprintf(text,"\\i z = %g z_R",N[2]*z0);
+  gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC");
+  sprintf(text,"\\i I_{max}=%g",amp[2]);
+  gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC");
+  gr->Surf(V[0],V[1],V[2],"wyrRk");			gr->Surf(V[0],V[3],V[2],"wyrRk");
+  gr->Plot(V[0],V[4],V[5],"b3");
+  gr->Cont(V[0],V[1],V[2],"wyrRk",20);		gr->Cont(V[0],V[3],V[2],"wyrRk",20);
+  gr->Light(false);	gr->Alpha(false);
+  (V+2)->Norm(0,1);
+  gr->Dens(V[0],V[1],V[2],"wyrRk");			gr->Dens(V[0],V[3],V[2],"wyrRk");
+  gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5");
+  gr->Min.z = 0;
+  gr->Axis("_xyz");
+  gr->Min.z = -0.65;
+  gr->Org = mglPoint(tmin,0,-0.65);			gr->Axis("_xy");
+  //------------------------------------------------------------------------------------
+  //-----------------------------Четвертый график-----------------------------------------
+  u->ReadHDF(_sprintf("%d.h5",N[3]),"/Real(E)");	u->Transpose();
+  intensity( Nt, Nr, k, w0, u->a );		(V+2)->Set(u->a,Nt,Nr);	
+  std::cout<<"Max = "<<V[2].Maximal()/max<<std::endl;
+  (V+2)->Norm(0,1);	(V+5)->Set((V+2)->a,Nt,1);
+  gr->InPlot(0.516,0.816,0.105,0.955);
+  gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0));
+  gr->CAxis(0,1);		gr->Light(true);		gr->Alpha(true);	gr->AlphaDef = 0.6;
+  gr->Rotate(75-7*1*0-5*1,365);	
+  sprintf(text,"\\i z = %g z_R",N[3]*z0);
+  gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC");
+  sprintf(text,"\\i I_{max}=%g",amp[3]);
+  gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC");
+  gr->Surf(V[0],V[1],V[2],"wyrRk");			gr->Surf(V[0],V[3],V[2],"wyrRk");
+  gr->Plot(V[0],V[4],V[5],"b3");
+  gr->Cont(V[0],V[1],V[2],"wyrRk",20);		gr->Cont(V[0],V[3],V[2],"wyrRk",20);
+  gr->Light(false);	gr->Alpha(false);
+  (V+2)->Norm(0,1);
+  gr->Dens(V[0],V[1],V[2],"wyrRk");			gr->Dens(V[0],V[3],V[2],"wyrRk");
+  gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5");
+  gr->Min.z = 0;
+  gr->Axis("_xyz");
+  gr->Min.z = -0.65;
+  gr->Org = mglPoint(tmin,0,-0.65);			gr->Axis("_xy");
+  //------------------------------------------------------------------------------------
+  //-----------------------------Пятый график-----------------------------------------
+  u->ReadHDF(_sprintf("%d.h5",N[4]),"/Real(E)");	u->Transpose();
+  intensity( Nt, Nr, k, w0, u->a );		(V+2)->Set(u->a,Nt,Nr);	
+  std::cout<<"Max = "<<V[2].Maximal()/max<<std::endl;
+  (V+2)->Norm(0,1);	(V+5)->Set((V+2)->a,Nt,1);
+  gr->InPlot(0.688,0.988,0.09,0.94);
+  gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0));
+  gr->CAxis(0,1);		gr->Light(true);		gr->Alpha(true);	gr->AlphaDef = 0.6;
+  gr->Rotate(75-7*1*0-5*1,365);	
+  sprintf(text,"\\i z = %g z_R",N[4]*z0);
+  gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC");
+  sprintf(text,"\\i I_{max}=%g",amp[4]);
+  gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC");
+  gr->Surf(V[0],V[1],V[2],"wyrRk");			gr->Surf(V[0],V[3],V[2],"wyrRk");
+  gr->Plot(V[0],V[4],V[5],"b3");
+  gr->Cont(V[0],V[1],V[2],"wyrRk",20);		gr->Cont(V[0],V[3],V[2],"wyrRk",20);
+  gr->Light(false);	gr->Alpha(false);
+  (V+2)->Norm(0,1);
+  gr->Dens(V[0],V[1],V[2],"wyrRk");			gr->Dens(V[0],V[3],V[2],"wyrRk");
+  gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5A");
+  gr->Puts(mglPoint(1.1*tmax,-1,-0.15),"\\tau","rR",-1.6);
+  gr->Puts(mglPoint(0.9*tmax,0,-0.1),"\\rho","rR",-1.6);
+  gr->Min.z = 0;
+  gr->Axis("_xyz");
+  gr->Min.z = -0.65;
+  gr->Org = mglPoint(tmin,0,-0.65);			gr->Axis("_xy");
+*/
+	return 0;
+
+
+
+
+
+
+
+
 	mglParse par;
 	par.AllowSetSize = true;
 	FILE *fp=fopen("test.mgl","rt");
-	par.Execute(gr,fp);
+	par.Execute(gr,fp,true);
 	fclose(fp);
 /*	gr->SetDrawReg(2,2,1);
 	gr->Rotate(40,60);
@@ -227,84 +357,95 @@ void smgl_map(mglGraph *gr)	// example of mapping
 	gr->Map(a, b, "brgk", 0, false);
 }
 //-----------------------------------------------------------------------------
+void smgl_color_schemes(mglGraph *gr)	// Color table
+{
+	mglData a(256,2);	a.Fill(-1,1);
+	gr->SubPlot(2,10,0,0.2);	gr->Dens(a,"kw");
+	gr->Puts(mglPoint(-1.4, -0.3), "kw", "C", -8);
+	gr->SubPlot(2,10,1,0.2);	gr->Dens(a,"wk");
+	gr->Puts(mglPoint(-1.4, -0.3), "wk", "C", -8);
+	gr->SubPlot(2,10,2,0.2);	gr->Dens(a,"kHCcw");
+	gr->Puts(mglPoint(-1.4, -0.3), "kHCcw", "C", -8);
+	gr->SubPlot(2,10,3,0.2);	gr->Dens(a,"kBbcw");
+	gr->Puts(mglPoint(-1.4, -0.3), "kBbcw", "C", -8);
+	gr->SubPlot(2,10,4,0.2);	gr->Dens(a,"kRryw");
+	gr->Puts(mglPoint(-1.4, -0.3), "kRryw", "C", -8);
+	gr->SubPlot(2,10,5,0.2);	gr->Dens(a,"kGgew");
+	gr->Puts(mglPoint(-1.4, -0.3), "kGgew", "C", -8);
+	gr->SubPlot(2,10,6,0.2);	gr->Dens(a,"BbwrR");
+	gr->Puts(mglPoint(-1.4, -0.3), "BbwrR", "C", -8);
+	gr->SubPlot(2,10,7,0.2);	gr->Dens(a,"BbwgG");
+	gr->Puts(mglPoint(-1.4, -0.3), "BbwgG", "C", -8);
+	gr->SubPlot(2,10,8,0.2);	gr->Dens(a,"GgwmM");
+	gr->Puts(mglPoint(-1.4, -0.3), "GgwmM", "C", -8);
+	gr->SubPlot(2,10,9,0.2);	gr->Dens(a,"UuwqR");
+	gr->Puts(mglPoint(-1.4, -0.3), "UuwqR", "C", -8);
+	gr->SubPlot(2,10,10,0.2);	gr->Dens(a,"QqwcC");
+	gr->Puts(mglPoint(-1.4, -0.3), "QqwcC", "C", -8);
+	gr->SubPlot(2,10,11,0.2);	gr->Dens(a,"CcwyY");
+	gr->Puts(mglPoint(-1.4, -0.3), "CcwyY", "C", -8);
+	gr->SubPlot(2,10,12,0.2);	gr->Dens(a,"bcwyr");
+	gr->Puts(mglPoint(-1.4, -0.3), "bcwyr", "C", -8);
+	gr->SubPlot(2,10,13,0.2);	gr->Dens(a,"bwr");
+	gr->Puts(mglPoint(-1.4, -0.3), "bwr", "C", -8);
+	gr->SubPlot(2,10,14,0.2);	gr->Dens(a,"BbcyrR");
+	gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR", "C", -8);
+	gr->SubPlot(2,10,15,0.2);	gr->Dens(a,"UbcyqR");
+	gr->Puts(mglPoint(-1.4, -0.3), "UbcyqR", "C", -8);
+	gr->SubPlot(2,10,16,0.2);	gr->Dens(a,"BbcwyrR");
+	gr->Puts(mglPoint(-1.4, -0.3), "BbcwyrR", "C", -8);
+	gr->SubPlot(2,10,17,0.2);	gr->Dens(a,"bcyr");
+	gr->Puts(mglPoint(-1.4, -0.3), "bcyr", "C", -8);
+	gr->SubPlot(2,10,18,0.2);	gr->Dens(a,"BbcyrR|");
+	gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR|", "C", -8);
+	gr->SubPlot(2,10,19,0.2);	gr->Dens(a,"bgr");
+	gr->Puts(mglPoint(-1.4, -0.3), "bgr", "C", -8);
+}
+//-----------------------------------------------------------------------------
 void smgl_colors(mglGraph *gr)	// Color table
 {
-	gr->Face(mglPoint(-1,  -1), mglPoint(-1,  -0.7), mglPoint(-0.6,-1), mglPoint(-0.6,-0.7), "L#");
-	gr->Puts(mglPoint(-0.8,-0.9, 0.01), "L", "C:w", -1.4);
-	gr->Face(mglPoint(-0.6,-1), mglPoint(-0.6,-0.7), mglPoint(-0.2,-1), mglPoint(-0.2,-0.7), "E#");
-	gr->Puts(mglPoint(-0.4,-0.9, 0.01), "E", "C:w", -1.4);
-	gr->Face(mglPoint(-0.2,-1), mglPoint(-0.2,-0.7), mglPoint(0.2,-1), mglPoint(0.2,-0.7), "N#");
-	gr->Puts(mglPoint(0,  -0.9, 0.01), "N", "C:w", -1.4);
-	gr->Face(mglPoint(0.2,-1), mglPoint(0.2,-0.7), mglPoint(0.6,-1), mglPoint(0.6,-0.7), "U#");
-	gr->Puts(mglPoint(0.4,-0.9, 0.01), "U", "C:w", -1.4);
-	gr->Face(mglPoint(0.6,-1), mglPoint(0.6,-0.7), mglPoint(1,  -1), mglPoint(1,  -0.7), "Q#");
-	gr->Puts(mglPoint(0.8,-0.9, 0.01), "Q", "C:w", -1.4);
+	//#LENUQ
+	gr->FaceZ(-1,	-1, 0, 0.4, 0.3, "L#");	gr->Puts(mglPoint(-0.8,-0.9), "L", "C:w", -1.4);
+	gr->FaceZ(-0.6,	-1, 0, 0.4, 0.3, "E#");	gr->Puts(mglPoint(-0.4,-0.9), "E", "C:w", -1.4);
+	gr->FaceZ(-0.2,	-1, 0, 0.4, 0.3, "N#");	gr->Puts(mglPoint(0,  -0.9), "N", "C:w", -1.4);
+	gr->FaceZ(0.2,	-1, 0, 0.4, 0.3, "U#");	gr->Puts(mglPoint(0.4,-0.9), "U", "C:w", -1.4);
+	gr->FaceZ(0.6,	-1, 0, 0.4, 0.3, "Q#");	gr->Puts(mglPoint(0.8,-0.9), "Q", "C:w", -1.4);
 	//#lenuq
-	gr->Face(mglPoint(-1,  -0.7), mglPoint(-1,  -0.4), mglPoint(-0.6,-0.7), mglPoint(-0.6,-0.4), "l#");
-	gr->Puts(mglPoint(-0.8,-0.6, 0.01), "l", "C:k", -1.4);
-	gr->Face(mglPoint(-0.6,-0.7), mglPoint(-0.6,-0.4), mglPoint(-0.2,-0.7), mglPoint(-0.2,-0.4), "e#");
-	gr->Puts(mglPoint(-0.4,-0.6, 0.01), "e", "C:k", -1.4);
-	gr->Face(mglPoint(-0.2,-0.7), mglPoint(-0.2,-0.4), mglPoint(0.2,-0.7), mglPoint(0.2,-0.4), "n#");
-	gr->Puts(mglPoint(0,  -0.6, 0.01), "n", "C:k", -1.4);
-	gr->Face(mglPoint(0.2,-0.7), mglPoint(0.2,-0.4), mglPoint(0.6,-0.7), mglPoint(0.6,-0.4), "u#");
-	gr->Puts(mglPoint(0.4,-0.6, 0.01), "u", "C:k", -1.4);
-	gr->Face(mglPoint(0.6,-0.7), mglPoint(0.6,-0.4), mglPoint(1,  -0.7), mglPoint(1,  -0.4), "q#");
-	gr->Puts(mglPoint(0.8,-0.6, 0.01), "q", "C:k", -1.4);
+	gr->FaceZ(-1,	-0.7, 0, 0.4, 0.3, "l#");	gr->Puts(mglPoint(-0.8,-0.6), "l", "C:k", -1.4);
+	gr->FaceZ(-0.6,	-0.7, 0, 0.4, 0.3, "e#");	gr->Puts(mglPoint(-0.4,-0.6), "e", "C:k", -1.4);
+	gr->FaceZ(-0.2,	-0.7, 0, 0.4, 0.3, "n#");	gr->Puts(mglPoint(0,  -0.6), "n", "C:k", -1.4);
+	gr->FaceZ(0.2,	-0.7, 0, 0.4, 0.3, "u#");	gr->Puts(mglPoint(0.4,-0.6), "u", "C:k", -1.4);
+	gr->FaceZ(0.6,	-0.7, 0, 0.4, 0.3, "q#");	gr->Puts(mglPoint(0.8,-0.6), "q", "C:k", -1.4);
 	//#CMYkP
-	gr->Face(mglPoint(-1,  -0.4), mglPoint(-1,  -0.1), mglPoint(-0.6,-0.4), mglPoint(-0.6,-0.1), "C#");
-	gr->Puts(mglPoint(-0.8,-0.3, 0.01), "C", "C:w", -1.4);
-	gr->Face(mglPoint(-0.6,-0.4), mglPoint(-0.6,-0.1), mglPoint(-0.2,-0.4), mglPoint(-0.2,-0.1), "M#");
-	gr->Puts(mglPoint(-0.4,-0.3, 0.01), "M", "C:w", -1.4);
-	gr->Face(mglPoint(-0.2,-0.4), mglPoint(-0.2,-0.1), mglPoint(0.2,-0.4), mglPoint(0.2,-0.1), "Y#");
-	gr->Puts(mglPoint(0,  -0.3, 0.01), "Y", "C:w", -1.4);
-	gr->Face(mglPoint(0.2,-0.4), mglPoint(0.2,-0.1), mglPoint(0.6,-0.4), mglPoint(0.6,-0.1), "k#");
-	gr->Puts(mglPoint(0.4,-0.3, 0.01), "k", "C:w", -1.4);
-	gr->Face(mglPoint(0.6,-0.4), mglPoint(0.6,-0.1), mglPoint(1,  -0.4), mglPoint(1,  -0.1), "P#");
-	gr->Puts(mglPoint(0.8,-0.3, 0.01), "P", "C:w", -1.4);
+	gr->FaceZ(-1,	-0.4, 0, 0.4, 0.3, "C#");	gr->Puts(mglPoint(-0.8,-0.3), "C", "C:w", -1.4);
+	gr->FaceZ(-0.6,	-0.4, 0, 0.4, 0.3, "M#");	gr->Puts(mglPoint(-0.4,-0.3), "M", "C:w", -1.4);
+	gr->FaceZ(-0.2,	-0.4, 0, 0.4, 0.3, "Y#");	gr->Puts(mglPoint(0,  -0.3), "Y", "C:w", -1.4);
+	gr->FaceZ(0.2,	-0.4, 0, 0.4, 0.3, "k#");	gr->Puts(mglPoint(0.4,-0.3), "k", "C:w", -1.4);
+	gr->FaceZ(0.6,	-0.4, 0, 0.4, 0.3, "P#");	gr->Puts(mglPoint(0.8,-0.3), "P", "C:w", -1.4);
 	//#cmywp
-	gr->Face(mglPoint(-1,  -0.1), mglPoint(-1,   0.2), mglPoint(-0.6,-0.1), mglPoint(-0.6, 0.2), "c#");
-	gr->Puts(mglPoint(-0.8, 0, 0.01), "c", "C:k", -1.4);
-	gr->Face(mglPoint(-0.6,-0.1), mglPoint(-0.6, 0.2), mglPoint(-0.2,-0.1), mglPoint(-0.2, 0.2), "m#");
-	gr->Puts(mglPoint(-0.4, 0, 0.01), "m", "C:k", -1.4);
-	gr->Face(mglPoint(-0.2,-0.1), mglPoint(-0.2, 0.2), mglPoint(0.2,-0.1), mglPoint(0.2, 0.2), "y#");
-	gr->Puts(mglPoint(0,   0, 0.01), "y", "C:k", -1.4);
-	gr->Face(mglPoint(0.2,-0.1), mglPoint(0.2, 0.2), mglPoint(0.6,-0.1), mglPoint(0.6, 0.2), "w#");
-	gr->Puts(mglPoint(0.4, 0, 0.01), "w", "C:k", -1.4);
-	gr->Face(mglPoint(0.6,-0.1), mglPoint(0.6, 0.2), mglPoint(1,  -0.1), mglPoint(1,   0.2), "p#");
-	gr->Puts(mglPoint(0.8, 0, 0.01), "p", "C:k", -1.4);
+	gr->FaceZ(-1,	-0.1, 0, 0.4, 0.3, "c#");	gr->Puts(mglPoint(-0.8, 0), "c", "C:k", -1.4);
+	gr->FaceZ(-0.6,	-0.1, 0, 0.4, 0.3, "m#");	gr->Puts(mglPoint(-0.4, 0), "m", "C:k", -1.4);
+	gr->FaceZ(-0.2,	-0.1, 0, 0.4, 0.3, "y#");	gr->Puts(mglPoint(0,   0), "y", "C:k", -1.4);
+	gr->FaceZ(0.2,	-0.1, 0, 0.4, 0.3, "w#");	gr->Puts(mglPoint(0.4, 0), "w", "C:k", -1.4);
+	gr->FaceZ(0.6,	-0.1, 0, 0.4, 0.3, "p#");	gr->Puts(mglPoint(0.8, 0), "p", "C:k", -1.4);
 	//#BGRHW
-	gr->Face(mglPoint(-1,   0.2), mglPoint(-1,   0.5), mglPoint(-0.6, 0.2), mglPoint(-0.6, 0.5), "B#");
-	gr->Puts(mglPoint(-0.8, 0.3, 0.01), "B", "C:w", -1.4);
-	gr->Face(mglPoint(-0.6, 0.2), mglPoint(-0.6, 0.5), mglPoint(-0.2, 0.2), mglPoint(-0.2, 0.5), "G#");
-	gr->Puts(mglPoint(-0.4, 0.3, 0.01), "G", "C:w", -1.4);
-	gr->Face(mglPoint(-0.2, 0.2), mglPoint(-0.2, 0.5), mglPoint(0.2, 0.2), mglPoint(0.2, 0.5), "R#");
-	gr->Puts(mglPoint(0,   0.3, 0.01), "R", "C:w", -1.4);
-	gr->Face(mglPoint(0.2, 0.2), mglPoint(0.2, 0.5), mglPoint(0.6, 0.2), mglPoint(0.6, 0.5), "H#");
-	gr->Puts(mglPoint(0.4, 0.3, 0.01), "H", "C:w", -1.4);
-	gr->Face(mglPoint(0.6, 0.2), mglPoint(0.6, 0.5), mglPoint(1,   0.2), mglPoint(1,   0.5), "W#");
-	gr->Puts(mglPoint(0.8, 0.3, 0.01), "W", "C:w", -1.4);
+	gr->FaceZ(-1,	0.2, 0, 0.4, 0.3, "B#");	gr->Puts(mglPoint(-0.8, 0.3), "B", "C:w", -1.4);
+	gr->FaceZ(-0.6,	0.2, 0, 0.4, 0.3, "G#");	gr->Puts(mglPoint(-0.4, 0.3), "G", "C:w", -1.4);
+	gr->FaceZ(-0.2,	0.2, 0, 0.4, 0.3, "R#");	gr->Puts(mglPoint(0,   0.3), "R", "C:w", -1.4);
+	gr->FaceZ(0.2,	0.2, 0, 0.4, 0.3, "H#");	gr->Puts(mglPoint(0.4, 0.3), "H", "C:w", -1.4);
+	gr->FaceZ(0.6,	0.2, 0, 0.4, 0.3, "W#");	gr->Puts(mglPoint(0.8, 0.3), "W", "C:w", -1.4);
 	//#bgrhw
-	gr->Face(mglPoint(-1,   0.5), mglPoint(-1,   0.8), mglPoint(-0.6, 0.5), mglPoint(-0.6, 0.8), "b#");
-	gr->Puts(mglPoint(-0.8, 0.6, 0.01), "b", "C:k", -1.4);
-	gr->Face(mglPoint(-0.6, 0.5), mglPoint(-0.6, 0.8), mglPoint(-0.2, 0.5), mglPoint(-0.2, 0.8), "g#");
-	gr->Puts(mglPoint(-0.4, 0.6, 0.01), "g", "C:k", -1.4);
-	gr->Face(mglPoint(-0.2, 0.5), mglPoint(-0.2, 0.8), mglPoint(0.2, 0.5), mglPoint(0.2, 0.8), "r#");
-	gr->Puts(mglPoint(0,   0.6, 0.01), "r", "C:k", -1.4);
-	gr->Face(mglPoint(0.2, 0.5), mglPoint(0.2, 0.8), mglPoint(0.6, 0.5), mglPoint(0.6, 0.8), "h#");
-	gr->Puts(mglPoint(0.4, 0.6, 0.01), "h", "C:k", -1.4);
-	gr->Face(mglPoint(0.6, 0.5), mglPoint(0.6, 0.8), mglPoint(1,   0.5), mglPoint(1,   0.8), "w#");
-	gr->Puts(mglPoint(0.8, 0.6, 0.01), "w", "C:k", -1.4);
+	gr->FaceZ(-1,	0.5, 0, 0.4, 0.3, "b#");	gr->Puts(mglPoint(-0.8, 0.6), "b", "C:k", -1.4);
+	gr->FaceZ(-0.6,	0.5, 0, 0.4, 0.3, "g#");	gr->Puts(mglPoint(-0.4, 0.6), "g", "C:k", -1.4);
+	gr->FaceZ(-0.2,	0.5, 0, 0.4, 0.3, "r#");	gr->Puts(mglPoint(0,   0.6), "r", "C:k", -1.4);
+	gr->FaceZ(0.2,	0.5, 0, 0.4, 0.3, "h#");	gr->Puts(mglPoint(0.4, 0.6), "h", "C:k", -1.4);
+	gr->FaceZ(0.6,	0.5, 0, 0.4, 0.3, "w#");	gr->Puts(mglPoint(0.8, 0.6), "w", "C:k", -1.4);
 	//#brighted
-	gr->Face(mglPoint(-1,   0.8), mglPoint(-1,   1.1), mglPoint(-0.6, 0.8), mglPoint(-0.6, 1.1), "r1#");
-	gr->Puts(mglPoint(-0.8, 0.9, 0.01), "r1", "C:w", -1.4);
-	gr->Face(mglPoint(-0.6, 0.8), mglPoint(-0.6, 1.1), mglPoint(-0.2, 0.8), mglPoint(-0.2, 1.1), "r3#");
-	gr->Puts(mglPoint(-0.4, 0.9, 0.01), "r3", "C:w", -1.4);
-	gr->Face(mglPoint(-0.2, 0.8), mglPoint(-0.2, 1.1), mglPoint(0.2, 0.8), mglPoint(0.2, 1.1), "r5#");
-	gr->Puts(mglPoint(0,   0.9, 0.01), "r5", "C:k", -1.4);
-	gr->Face(mglPoint(0.2, 0.8), mglPoint(0.2, 1.1), mglPoint(0.6, 0.8), mglPoint(0.6, 1.1), "r7#");
-	gr->Puts(mglPoint(0.4, 0.9, 0.01), "r7", "C:k", -1.4);
-	gr->Face(mglPoint(0.6, 0.8), mglPoint(0.6, 1.1), mglPoint(1,   0.8), mglPoint(1,   1.1), "r9#");
-	gr->Puts(mglPoint(0.8, 0.9, 0.01), "r9", "C:k", -1.4);
+	gr->FaceZ(-1,	0.8, 0, 0.4, 0.3, "r1#");	gr->Puts(mglPoint(-0.8, 0.9), "r1", "C:w", -1.4);
+	gr->FaceZ(-0.6,	0.8, 0, 0.4, 0.3, "r3#");	gr->Puts(mglPoint(-0.4, 0.9), "r3", "C:w", -1.4);
+	gr->FaceZ(-0.2,	0.8, 0, 0.4, 0.3, "r5#");	gr->Puts(mglPoint(0,   0.9), "r5", "C:k", -1.4);
+	gr->FaceZ(0.2,	0.8, 0, 0.4, 0.3, "r7#");	gr->Puts(mglPoint(0.4, 0.9), "r7", "C:k", -1.4);
+	gr->FaceZ(0.6,	0.8, 0, 0.4, 0.3, "r9#");	gr->Puts(mglPoint(0.8, 0.9), "r9", "C:k", -1.4);
 }
 //-----------------------------------------------------------------------------
 void smgl_qo2d(mglGraph *gr)
@@ -536,7 +677,7 @@ void smgl_sample8(mglGraph *gr)	// 1d plot
 	mglData x(50);		x.Modify("cos(pi*2*x-pi)");
 	gr->Plot(x,y0,"Y+");
 
-	gr->Plot2(y1,"q|");
+	gr->Plot(y1.SubData(-1,0),y1.SubData(-1,1),"q|");
 
 	gr->SubPlot(2,2,2);	gr->Rotate(60,40);
 	mglData z(50);		z.Modify("2*x-1");
@@ -544,7 +685,7 @@ void smgl_sample8(mglGraph *gr)	// 1d plot
 
 	mglData y2(10,3);	y2.Modify("cos(pi*(2*x-1-y))");
 	y2.Modify("2*x-1",2);
-	gr->Plot3(y2,"bo ");
+	gr->Plot(y2.SubData(-1,0),y2.SubData(-1,1),y2.SubData(-1,2),"bo ");
 
 	gr->SubPlot(2,2,3);	gr->Rotate(60,40);
 	gr->Bars(x,y0,z,"ri");		gr->Box();
@@ -588,23 +729,42 @@ void smgl_sample6(mglGraph *gr)	// differentiate
 void smgl_sample5(mglGraph *gr)	// pen styles
 {
 	if(type==5)	gr->Puts(mglPoint(0,1.2),"line styles not supported","rL");
-	gr->Line(mglPoint(0,1,0),mglPoint(0.3,1,0),"k-");	gr->Puts(mglPoint(0.4,1),"Solid '-'","rL");
-	gr->Line(mglPoint(0,0.7,0),mglPoint(0.3,0.7,0),"k|");	gr->Puts(mglPoint(0.4,0.7),"Dash '|'","rL");
-	gr->Line(mglPoint(0,0.4,0),mglPoint(0.3,0.4,0),"k;");	gr->Puts(mglPoint(0.4,0.4),"Small dash ';'","rL");
-	gr->Line(mglPoint(0,0.1,0),mglPoint(0.3,0.1,0),"kj");	gr->Puts(mglPoint(0.4,0.1),"Dash-dot 'j'","rL");
-	gr->Line(mglPoint(0,-0.2,0),mglPoint(0.3,-0.2,0),"ki");	gr->Puts(mglPoint(0.4,-0.2),"Small dash-dot 'i'","rL");
-	gr->Line(mglPoint(0,-0.5,0),mglPoint(0.3,-0.5,0),"k:");	gr->Puts(mglPoint(0.4,-0.5),"Dots ':'","rL");
-	gr->Line(mglPoint(0,-0.8,0),mglPoint(0.3,-0.8,0),"k ");	gr->Puts(mglPoint(0.4,-0.8),"None ' '","rL");
+	mreal d,x1,x2,x0,y=0.95;
+	d=0.3, x0=0.2, x1=0.5, x2=0.6;
+	gr->Line(mglPoint(x0,1-0*d),mglPoint(x1,1-0*d),"k-");	gr->Puts(mglPoint(x2,y-0*d),"Solid '-'","rL");
+	gr->Line(mglPoint(x0,1-1*d),mglPoint(x1,1-1*d),"k|");	gr->Puts(mglPoint(x2,y-1*d),"Long Dash '|'","rL");
+	gr->Line(mglPoint(x0,1-2*d),mglPoint(x1,1-2*d),"k;");	gr->Puts(mglPoint(x2,y-2*d),"Dash ';'","rL");
+	gr->Line(mglPoint(x0,1-3*d),mglPoint(x1,1-3*d),"k=");	gr->Puts(mglPoint(x2,y-3*d),"Small dash '='","rL");
+	gr->Line(mglPoint(x0,1-4*d),mglPoint(x1,1-4*d),"kj");	gr->Puts(mglPoint(x2,y-4*d),"Dash-dot 'j'","rL");
+	gr->Line(mglPoint(x0,1-5*d),mglPoint(x1,1-5*d),"ki");	gr->Puts(mglPoint(x2,y-5*d),"Small dash-dot 'i'","rL");
+	gr->Line(mglPoint(x0,1-6*d),mglPoint(x1,1-6*d),"k:");	gr->Puts(mglPoint(x2,y-6*d),"Dots ':'","rL");
+	gr->Line(mglPoint(x0,1-7*d),mglPoint(x1,1-7*d),"k ");	gr->Puts(mglPoint(x2,y-7*d),"None ' '","rL");
+
+	d=0.25; x1=-1; x0=-0.8;	y = -0.05;
+	gr->Mark(mglPoint(x1,5*d),'.');		gr->Puts(mglPoint(x0,y+5*d),"'.'","rL");
+	gr->Mark(mglPoint(x1,4*d),'+');		gr->Puts(mglPoint(x0,y+4*d),"'+'","rL");
+	gr->Mark(mglPoint(x1,3*d),'x');		gr->Puts(mglPoint(x0,y+3*d),"'x'","rL");
+	gr->Mark(mglPoint(x1,2*d),'*');		gr->Puts(mglPoint(x0,y+2*d),"'*'","rL");
+	gr->Mark(mglPoint(x1,d),'s');		gr->Puts(mglPoint(x0,y+d),"'s'","rL");
+	gr->Mark(mglPoint(x1,0),'d');		gr->Puts(mglPoint(x0,y),"'d'","rL");
+	gr->Mark(mglPoint(x1,-d,0),'o');	gr->Puts(mglPoint(x0,y-d),"'o'","rL");
+	gr->Mark(mglPoint(x1,-2*d,0),'^');	gr->Puts(mglPoint(x0,y-2*d),"'\\^'","rL");
+	gr->Mark(mglPoint(x1,-3*d,0),'v');	gr->Puts(mglPoint(x0,y-3*d),"'v'","rL");
+	gr->Mark(mglPoint(x1,-4*d,0),'<');	gr->Puts(mglPoint(x0,y-4*d),"'<'","rL");
+	gr->Mark(mglPoint(x1,-5*d,0),'>');	gr->Puts(mglPoint(x0,y-5*d),"'>'","rL");
 
-	gr->Mark(mglPoint(-1,1.2,0),'.');	gr->Puts(mglPoint(-0.7,1.2),"'.'","rL");
-	gr->Mark(mglPoint(-1,0.9,0),'+');	gr->Puts(mglPoint(-0.7,0.9),"'+'","rL");
-	gr->Mark(mglPoint(-1,0.6,0),'x');	gr->Puts(mglPoint(-0.7,0.6),"'x'","rL");
-	gr->Mark(mglPoint(-1,0.3,0),'*');	gr->Puts(mglPoint(-0.7,0.3),"'*'","rL");
-	gr->Mark(mglPoint(-1,0.0,0),'s');	gr->Puts(mglPoint(-0.7,0.0),"'s'","rL");
-	gr->Mark(mglPoint(-1,-0.3,0),'d');	gr->Puts(mglPoint(-0.7,-0.3),"'d'","rL");
-	gr->Mark(mglPoint(-1,-0.6,0),'o');	gr->Puts(mglPoint(-0.7,-0.6),"'o'","rL");
-	gr->Mark(mglPoint(-1,-0.9,0),'^');	gr->Puts(mglPoint(-0.7,-0.9),"'\\^'","rL");
-	gr->Mark(mglPoint(-1,-1.2,0),'v');	gr->Puts(mglPoint(-0.7,-1.2),"'v'","rL");
+	d=0.25; x1=-0.5; x0=-0.3;	y = -0.05;
+	gr->Mark(mglPoint(x1,5*d),'C');		gr->Puts(mglPoint(x0,y+5*d),"'\\#.'","rL");
+	gr->Mark(mglPoint(x1,4*d),'P');		gr->Puts(mglPoint(x0,y+4*d),"'\\#+'","rL");
+	gr->Mark(mglPoint(x1,3*d),'X');		gr->Puts(mglPoint(x0,y+3*d),"'\\#x'","rL");
+	gr->Mark(mglPoint(x1,2*d),'Y');		gr->Puts(mglPoint(x0,y+2*d),"'\\#*'","rL");
+	gr->Mark(mglPoint(x1,d),'S');		gr->Puts(mglPoint(x0,y+d),"'\\#s'","rL");
+	gr->Mark(mglPoint(x1,0),'D');		gr->Puts(mglPoint(x0,y),"'\\#d'","rL");
+	gr->Mark(mglPoint(x1,-d,0),'O');	gr->Puts(mglPoint(x0,y-d),"'\\#o'","rL");
+	gr->Mark(mglPoint(x1,-2*d,0),'T');	gr->Puts(mglPoint(x0,y-2*d),"'\\#\\^'","rL");
+	gr->Mark(mglPoint(x1,-3*d,0),'V');	gr->Puts(mglPoint(x0,y-3*d),"'\\#v'","rL");
+	gr->Mark(mglPoint(x1,-4*d,0),'L');	gr->Puts(mglPoint(x0,y-4*d),"'\\#<'","rL");
+	gr->Mark(mglPoint(x1,-5*d,0),'R');	gr->Puts(mglPoint(x0,y-5*d),"'\\#>'","rL");
 }
 //-----------------------------------------------------------------------------
 void smgl_sample4(mglGraph *gr)	// font features
@@ -707,7 +867,7 @@ void smgl_sample1(mglGraph *gr)	// transformation
 	gr->SubPlot(2,2,0);  // just new axis without rotation and aspects
 	gr->Box();
 	gr->Text(mglPoint(-1,1.1,1),"Just box","rL");
-	gr->InPlot(0.2,0.5,0.7,1);
+	gr->InPlot(0.2,0.5,0.7,1,false);
 	gr->Box();
 	gr->Text(mglPoint(0,1.2,1),"InPlot example");
 	gr->SubPlot(2,2,1);  // new axis with aspect and rotation
@@ -762,6 +922,12 @@ void smgl_area(mglGraph *gr)
 	gr->Org=mglPoint();	gr->Box();	gr->Area(y);
 }
 //-----------------------------------------------------------------------------
+void smgl_area_2(mglGraph *gr)
+{
+	mglData y;	mgls_prepare1d(&y);
+	gr->Org=mglPoint();	gr->Box();	gr->Area(y,"cbgGyr");
+}
+//-----------------------------------------------------------------------------
 void smgl_stem(mglGraph *gr)
 {
 	mglData y;	mgls_prepare1d(&y);
@@ -774,6 +940,24 @@ void smgl_step(mglGraph *gr)
 	gr->Box();	gr->Step(y);
 }
 //-----------------------------------------------------------------------------
+void smgl_bars_2(mglGraph *gr)
+{
+	mglData ys(10,3);	ys.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+	gr->Org=mglPoint();	gr->Box();	gr->Bars(ys,"cbgGyr");
+}
+//-----------------------------------------------------------------------------
+void smgl_bars_a(mglGraph *gr)
+{
+	mglData ys(10,3);	ys.Modify("0.3*sin(pi*(2*x+y/2))+0.1*rnd");
+	gr->Org=mglPoint();	gr->Box();	gr->Bars(ys,"a");
+}
+//-----------------------------------------------------------------------------
+void smgl_bars_f(mglGraph *gr)
+{
+	mglData ys(10,2);	ys.Modify("0.24*sin(pi*(2*x+y/2))+0.06*rnd");
+	gr->Org=mglPoint();	gr->Box();	gr->Bars(ys,"f");
+}
+//-----------------------------------------------------------------------------
 void smgl_bars(mglGraph *gr)
 {
 	mglData ys(10,3);	ys.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
@@ -807,6 +991,13 @@ void smgl_region(mglGraph *gr)
 	gr->Plot(y1,"k2");	gr->Plot(y2,"k2");
 }
 //-----------------------------------------------------------------------------
+void smgl_region_2(mglGraph *gr)
+{
+	mglData y1,y2;	mgls_prepare1d(0, &y1, &y2);
+	gr->Box();	gr->Region(y2,y1,"yr");
+	gr->Plot(y1,"k2");	gr->Plot(y2,"k2");
+}
+//-----------------------------------------------------------------------------
 void smgl_mark(mglGraph *gr)
 {
 	mglData y,y1;	mgls_prepare1d(&y,&y1);
@@ -875,6 +1066,14 @@ void smgl_chart(mglGraph *gr)
 	gr->Box();	gr->Chart(ch,"#");
 }
 //-----------------------------------------------------------------------------
+void smgl_ring_chart(mglGraph *gr)
+{
+	mglData ch(7,2);	for(int i=0;i<7*2;i++)	ch.a[i]=mgl_rnd()+0.1;
+	gr->Light(true);	gr->Rotate(40,60);	gr->VertexColor(false);
+	gr->SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)","");
+	gr->Box();	gr->Chart(ch,"bgr cmy#");
+}
+//-----------------------------------------------------------------------------
 void smgl_pie_chart(mglGraph *gr)
 {
 	mglData ch(7,2);	for(int i=0;i<7*2;i++)	ch.a[i]=mgl_rnd()+0.1;
@@ -897,6 +1096,13 @@ void mgls_prepare2d(mglData *a, mglData *b=0, mglData *v=0)
 	}
 }
 //-----------------------------------------------------------------------------
+void smgl_grad(mglGraph *gr)
+{
+	mglData a;	mgls_prepare2d(&a);
+	gr->Box();	gr->Grad(a);
+	gr->Alpha(true);	gr->Dens(a);
+}
+//-----------------------------------------------------------------------------
 void smgl_contt(mglGraph *gr)
 {
 	mglData a;	mgls_prepare2d(&a);
@@ -935,6 +1141,16 @@ void smgl_surf(mglGraph *gr)
 	gr->Box();	gr->Surf(a);
 }
 //-----------------------------------------------------------------------------
+void smgl_stereo(mglGraph *gr)
+{
+	mglData a;	mgls_prepare2d(&a);
+	gr->Light(true);
+	gr->SubPlot(2,1,0);	gr->Rotate(40,60+3);
+	gr->Box();	gr->Surf(a);
+	gr->SubPlot(2,1,1);	gr->Rotate(40,60-3);
+	gr->Box();	gr->Surf(a);
+}
+//-----------------------------------------------------------------------------
 void smgl_tile(mglGraph *gr)
 {
 	mglData a;	mgls_prepare2d(&a);
@@ -1677,7 +1893,7 @@ int main(int argc,char **argv)
 	else	gr->SetSize(width,height);
 
 	if(dotest)
-	{	test(gr);	gr->WritePNG("test.png","",false);	return 0;	}
+	{	test(gr);	gr->WriteEPS("test.eps");	gr->WritePNG("test.png","",false);	return 0;	}
 
 	if(srnd)	mgl_srnd(1);
 	gr->VertexColor(false);	gr->TextureColor(true);	gr->Compression(false);
@@ -1693,7 +1909,11 @@ int main(int argc,char **argv)
 		int i=0;
 		for(i=0;samp[i].name[0];i++);	// determine the number of samples
 		s = (mglSample *) bsearch(&tst, samp, i, sizeof(mglSample), mgl_cmd_smp);
-		if(s)	{	s->func(gr);	save(gr, s->name, suf);	}
+		if(s)
+		{
+			gr->DefaultPlotParam();	gr->Clf();
+			s->func(gr);	save(gr, s->name, suf);
+		}
 		else	printf("no sample %s\n",name);
 	}
 	printf("\n");	return 0;
@@ -1702,15 +1922,20 @@ int main(int argc,char **argv)
 mglSample samp[] = {
 	{"2_axis", smgl_2_axis},
 	{"area", smgl_area},
+	{"area_2", smgl_area_2},
 	{"axial", smgl_axial},
 	{"barh", smgl_barh},
 	{"bars", smgl_bars},
+	{"bars_2", smgl_bars_2},
+	{"bars_a", smgl_bars_a},
+	{"bars_f", smgl_bars_f},
 	{"belt", smgl_belt},
 	{"boxplot", smgl_boxplot},
 	{"boxs", smgl_boxs},
 	{"chart", smgl_chart},
 	{"cloud", smgl_cloud},
 	{"cloudp", smgl_cloudp},
+	{"color_schemes", smgl_color_schemes},
 	{"colors", smgl_colors},
 	{"column",	smgl_column},
 	{"cont", smgl_cont},
@@ -1739,6 +1964,7 @@ mglSample samp[] = {
 	{"flow3", smgl_flow3},
 	{"flow_dens", smgl_flow_dens},
 	{"fonts", smgl_fonts},
+	{"grad", smgl_grad},
 	{"legend", smgl_legend},
 	{"loglog", smgl_loglog},
 	{"map",		smgl_map},
@@ -1757,6 +1983,8 @@ mglSample samp[] = {
 	{"qo2d", smgl_qo2d},
 	{"radar", smgl_radar},
 	{"region", smgl_region},
+	{"region_2", smgl_region_2},
+	{"ring_chart", smgl_ring_chart},
 	{"sample1", smgl_sample1},
 	{"sample2", smgl_sample2},
 	{"sample3", smgl_sample3},
@@ -1776,6 +2004,7 @@ mglSample samp[] = {
 	{"sew", smgl_sew},
 	{"stem", smgl_stem},
 	{"step", smgl_step},
+	{"stereo", smgl_stereo},
 	{"stfa", smgl_stfa},
 	{"stick", smgl_stick},
 	{"surf", smgl_surf},
diff --git a/examples/qt_example.cpp b/examples/qt_example.cpp
index 6bc5dc1..7233ef8 100644
--- a/examples/qt_example.cpp
+++ b/examples/qt_example.cpp
@@ -27,8 +27,32 @@ int sample_2(mglGraph *gr, void *);
 int sample_3(mglGraph *gr, void *);
 int sample_d(mglGraph *gr, void *);
 //-----------------------------------------------------------------------------
+#include <pthread.h>
+#include <unistd.h>
+mglPoint pnt;  // some global variable for changable data
+void *mgl_qt_tmp(void *)	{	mglQtRun();	return 0;	}
+//-----------------------------------------------------------------------------
 int main(int argc,char **argv)
 {
+#ifdef PTHREAD_SAMPLE
+	mglGraphQT gr;
+	gr.Window(argc,argv,NULL,"test",0,0);  // create window
+	gr.ClfOnUpdate = false;
+	static pthread_t tmp;
+	pthread_create(&tmp, 0, mgl_qt_tmp, 0);
+	pthread_detach(tmp);    // run window handling in the separate thread
+	for(int i=0;i<10;i++)   // do calculation
+	{
+		sleep(2);             // which can be very long
+		pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);
+		gr.Clf();             // make new drawing
+		gr.Line(mglPoint(),pnt,"Ar2");
+		char str[10] = "i=0";	str[3] = '0'+i;
+		gr.Text(mglPoint(),"");
+		gr.Update();       // update window
+	}
+	return 0;   // finish calculations and close the window
+#else
 	mglGraphQT gr;
 	char key = 0;
 	if(argc>1 && argv[1][0]!='-')	key = argv[1][0];
@@ -43,5 +67,6 @@ int main(int argc,char **argv)
 	default:	gr.Window(argc,argv,sample,"Example of molecules");	break;
 	}
 	return mglQtRun();
+#endif
 }
 //-----------------------------------------------------------------------------
diff --git a/examples/test.mgl b/examples/test.mgl
index 3dfe8d9..9fca172 100644
--- a/examples/test.mgl
+++ b/examples/test.mgl
@@ -1 +1,4 @@
-text 0.5 0.5 'A\int 0\nA\int 0' 'A'
+define $b -1
+for $z -1 1 0.1
+line 0 0 $b $z 'b'
+next
diff --git a/examples/wnd_samples.cpp b/examples/wnd_samples.cpp
index 97c3af1..ff0971c 100644
--- a/examples/wnd_samples.cpp
+++ b/examples/wnd_samples.cpp
@@ -220,7 +220,7 @@ int sample_2(mglGraph *gr, void *)
 	gr->Box();	gr->Axis();
 	gr->Text(mglPoint(0,1.2,1),"Density plot");
 	gr->Dens(a,"BbcyrR");
-	gr->InPlot(0.6,1,0.6,1);	// new axis in upper right corner
+	gr->InPlot(0.6,1,0.6,1,false);	// new axis in upper right corner
 	gr->Box();	gr->Axis();
 	gr->Text(mglPoint(0,1.2,1),"... with bicolor");
 	gr->Dens(a,"BbwrR");
diff --git a/examples/wx_example.cpp b/examples/wx_example.cpp
index f3269bc..393366f 100644
--- a/examples/wx_example.cpp
+++ b/examples/wx_example.cpp
@@ -17,6 +17,60 @@
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
-int main(void){
-return 0;
-}
+#include <stdio.h>
+#include <mgl/mgl_wx.h>
+//-----------------------------------------------------------------------------
+#ifdef ENABLE_MGLGRAPHWX
+int test(mglGraph *gr, void *);
+int sample(mglGraph *gr, void *);
+int sample_1(mglGraph *gr, void *);
+int sample_2(mglGraph *gr, void *);
+int sample_3(mglGraph *gr, void *);
+int sample_d(mglGraph *gr, void *);
+//-----------------------------------------------------------------------------
+#include <pthread.h>
+#include <unistd.h>
+mglPoint pnt;  // some global variable for changable data
+void *mgl_wx_tmp(void *)	{	mglWxRun();	return 0;	}
+//-----------------------------------------------------------------------------
+int main(int argc,char **argv)
+{
+#ifdef PTHREAD_SAMPLE
+	mglGraphWX gr;
+	gr.Window(argc,argv,NULL,"test",0,0);  // create window
+	gr.ClfOnUpdate = false;
+	static pthread_t tmp;
+	pthread_create(&tmp, 0, mgl_qt_tmp, 0);
+	pthread_detach(tmp);    // run window handling in the separate thread
+	for(int i=0;i<10;i++)   // do calculation
+	{
+		sleep(2);             // which can be very long
+		pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);
+		gr.Clf();             // make new drawing
+		gr.Line(mglPoint(),pnt,"Ar2");
+		char str[10] = "i=0";	str[3] = '0'+i;
+		gr.Text(mglPoint(),"");
+		gr.Update();       // update window
+	}
+	return 0;   // finish calculations and close the window
+#else
+	mglGraphWX gr;
+	char key = 0;
+	if(argc>1 && argv[1][0]!='-')	key = argv[1][0];
+	else	printf("You may specify argument '1', '2', '3' or 'd' for viewing examples of 1d, 2d, 3d or dual plotting\n");
+	switch(key)
+	{
+	case '1':	gr.Window(argc,argv,sample_1,"1D plots");	break;
+	case '2':	gr.Window(argc,argv,sample_2,"2D plots");	break;
+	case '3':	gr.Window(argc,argv,sample_3,"3D plots");	break;
+	case 'd':	gr.Window(argc,argv,sample_d,"Dual plots");	break;
+	case 't':	gr.Window(argc,argv,test,"Testing");	break;
+	default:	gr.Window(argc,argv,sample,"Example of molecules");	break;
+	}
+	return mglWxRun();
+#endif
+}
+//-----------------------------------------------------------------------------
+#else
+int main(int argc,char **argv)	{	return 0;	}
+#endif
\ No newline at end of file
diff --git a/fonts/STIX.vfm b/fonts/STIX.vfm
new file mode 100644
index 0000000..b07ac2d
Binary files /dev/null and b/fonts/STIX.vfm differ
diff --git a/fonts/STIX_b.vfm b/fonts/STIX_b.vfm
new file mode 100644
index 0000000..6bec32c
Binary files /dev/null and b/fonts/STIX_b.vfm differ
diff --git a/fonts/STIX_bi.vfm b/fonts/STIX_bi.vfm
new file mode 100644
index 0000000..9ce6241
Binary files /dev/null and b/fonts/STIX_bi.vfm differ
diff --git a/fonts/STIX_i.vfm b/fonts/STIX_i.vfm
new file mode 100644
index 0000000..ea51c6c
Binary files /dev/null and b/fonts/STIX_i.vfm differ
diff --git a/include/Makefile.in b/include/Makefile.in
index ca97f93..6010d14 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -39,7 +39,11 @@ DIST_COMMON = $(am__nobase_include_HEADERS_DIST) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -122,6 +126,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -142,6 +148,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
diff --git a/include/mgl/mgl.h b/include/mgl/mgl.h
index 2cb4b08..b9aa8a4 100644
--- a/include/mgl/mgl.h
+++ b/include/mgl/mgl.h
@@ -17,19 +17,16 @@
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_H_
 #define _MGL_H_
 
-#define MGL_VERSION	10.2
-
 #include <wchar.h>
 #include <stdlib.h>
 #include "mgl/mgl_data.h"
 #include "mgl/mgl_font.h"
-
-#ifndef NUM_COLOR
-#define NUM_COLOR	32
-#endif
 //-----------------------------------------------------------------------------
 class mglGraph;
 class mglFormula;
@@ -185,7 +182,7 @@ public:
 	/// Write the frame in file (depending extension, write current frame if fname is empty)
 	void WriteFrame(const char *fname=0, const char *descr=0);
 	/// Show currently produced image by Qt or FLTK library
-	void ShowImage(const char *viewer="kuickshow", bool keep=false);
+	void ShowImage(const char *viewer=0, bool keep=false);
 	//@}
 	/// Create new frame.
 	virtual int NewFrame();
@@ -245,7 +242,7 @@ public:
 	inline void SetPalColor (int n, float r, float g, float b)
 	{	if(n<100)	Pal[n] = mglColor(r,g,b);	};
 	/// Set number of colors in palette
-	inline void SetPalNum(int num)	{	if(num<100)	NumPal = num;	};
+	inline void SetPalNum(int num)	{	if(num<100 && num>0)	NumPal = num;	};
 	/// Set palette
 	inline void SetPalette(const char *colors)
 	{	strcpy(DefPal, colors?colors:MGL_DEF_PAL);	SetPal(colors);	}
@@ -295,24 +292,28 @@ public:
 	  * can be used in any place. */
 	//@{
 	/// Set angle of view indepently from mglGraph::Rotate().
-	virtual void View(mreal tetx,mreal tetz,mreal tety=0);
+	virtual void View(mreal tetx,mreal tetz,mreal tety=0);
+	inline int GetWarn()	{	return WarnCode;	};
 	void DefaultPlotParam();	///< Set default parameter for plotting
 	/// Zoom in or zoom out (if Zoom(0, 0, 1, 1)) a part of picture
 	void Zoom(mreal x1, mreal y1, mreal x2, mreal y2);
 	/// Clear transformation matrix.
 	void Identity(bool rel=false);
-	/// Restore transformation matrix after last InPlot()
-	virtual void RestoreM()=0;
+	/// Push transformation matrix into stack
+	virtual void Push()=0;
+	/// Pop transformation matrix from stack
+	virtual void Pop()=0;
 	/// Clear up the frame
 	virtual void Clf(mglColor Back=WC); //=0
 	/// Put further plotting in some region of whole frame surface.
 	void SubPlot(int nx,int ny,int m, mreal dx=0, mreal dy=0);
+	void SubPlot(int nx,int ny,int m, const char *style);
 	/// Put further plotting in column cell of previous subplot
-	void ColumnPlot(int num, int i);
+	void ColumnPlot(int num, int i, mreal d=0);
 	/// Put further plotting in cell of stick rotated on angles tet, phi
 	virtual void StickPlot(int num, int i, mreal tet, mreal phi)=0;
 	/// Put further plotting in some region of whole frame surface.
-	virtual void InPlot(mreal x1,mreal x2,mreal y1,mreal y2,bool rel=false); //=0
+	virtual void InPlot(mreal x1,mreal x2,mreal y1,mreal y2,bool rel=true); //=0
 	/// Set aspect ratio for further plotting.
 	virtual void Aspect(mreal Ax,mreal Ay,mreal Az)=0;
 	/// Rotate a further plotting.
@@ -370,20 +371,19 @@ public:
 	/// Safetly set the cutting off condition (formula).
 	void CutOff(const char *EqCut);
 	/// Set to draw Ternary axis (triangle like axis, grid and so on)
-	void Ternary(bool tern);
+	void Ternary(int tern);
 	/// Recalculate internal parameter for correct applies transformation rules. \b Must \b be \b called after any direct changes of members mglGraph::Min, mglGraph::Max, mglGraph::fx, mglGraph::fy, mglGraph::fz.
 	void RecalcBorder();
 	/// Draw axises with ticks in directions determined by string parameter \a dir.
 	void Axis(const char *dir="xyzt", bool adjust=false);
 	/// Draw grid lines perpendicular to direction determined by string parameter \a dir.
-	void Grid(const char *dir="xyz",const char *pen="B-");
+	void Grid(const char *dir="xyzt",const char *pen="B-");
 	/// Print the label \a text for axis \a dir.
-	void Label(char dir, const char *text, mreal pos=+1, mreal size=-1.4, mreal shift=0);
+	void Label(char dir, const char *text, mreal pos=0, mreal size=-1.4, mreal shift=0);
+	void Labelw(char dir, const wchar_t *text, mreal pos=0, mreal size=-1.4, mreal shift=0);
 	/// Print the \a text at arbitrary position of the picture \a x, \a y in range [0,1]x[0,1].
 	void Label(mreal x, mreal y, const char *text, const char *fnt=0, mreal size=-1.4, bool rel=false);
 	void Labelw(mreal x, mreal y, const wchar_t *text, const char *fnt=0, mreal size=-1.4, bool rel=false);
-	/// Print the label \a text for axis \a dir.
-	void Labelw(char dir, const wchar_t *text, mreal pos=+1, mreal size=-1.4, mreal shift=0);
 	/// Draw colorbar at edge of axis
 	void Colorbar(const char *sch=0,int where=0);
 	void inline Colorbar(const char *sch, int where, mreal x, mreal y, mreal w, mreal h)	{	SetScheme(sch);	Colorbar(where,x,y,w,h);	};
@@ -554,7 +554,9 @@ public:
 	/// Draw legend of accumulated strings by \a font with \a size
 	void Legend(int n, wchar_t **text, char **style, int where=0x3, const char *font="rL", mreal size=-0.8, mreal llen=0.1);
 	/// Switch on/off box around legend
-	inline void SetLegendBox (bool val)	{	LegendBox=val;	};
+	inline void SetLegendBox(bool val)	{	LegendBox=val;	};
+	/// Number of marks in legend sample
+	inline void SetLegendMarks(int num=1)	{	LegendMarks = num>0?num:1;	};
 	//@}
 	// ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ������� ~~~~~~~~~~~~~~~~~~~~~~~~
 	/// Plot data depending on its dimensions and \a type parameter
@@ -605,9 +607,9 @@ public:
 	/// Draw area plot for points in arrays \a x, \a y, \a z.
 	void Area(const mglData &x, const mglData &y, const mglData &z, const char *pen=0);
 	/// Draw area plot for points in arrays \a x, \a y.
-	void Area(const mglData &x, const mglData &y, const char *pen=0,bool sum=false,mreal zVal=NAN);
+	void Area(const mglData &x, const mglData &y, const char *pen=0, mreal zVal=NAN);
 	/// Draw area plot for points in arrays \a y.
-	void Area(const mglData &y, const char *pen=0,bool sum=false,mreal zVal=NAN);
+	void Area(const mglData &y, const char *pen=0, mreal zVal=NAN);
 
 	/// Draw vertical lines from points in arrays \a x, \a y, \a z to mglGraph::Org.
 	void Stem(const mglData &x, const mglData &y, const mglData &z, const char *pen=0);
@@ -624,17 +626,17 @@ public:
 	void Step(const mglData &y, const char *pen=0,mreal zVal=NAN);
 
 	/// Draw vertical bars from points in arrays \a x, \a y, \a z to mglGraph::Org.
-	void Bars(const mglData &x, const mglData &y, const mglData &z, const char *pen=0, bool above=false);
+	void Bars(const mglData &x, const mglData &y, const mglData &z, const char *pen=0);
 	/// Draw vertical bars from points in arrays \a x, \a y to mglGraph::Org.
-	void Bars(const mglData &x, const mglData &y, const char *pen=0,mreal zVal=NAN, bool above=false);
+	void Bars(const mglData &x, const mglData &y, const char *pen=0,mreal zVal=NAN);
 	/// Draw vertical bars from points in arrays \a y to mglGraph::Org.
-	void Bars(const mglData &y, const char *pen=0,mreal zVal=NAN, bool above=false);
+	void Bars(const mglData &y, const char *pen=0,mreal zVal=NAN);
 
 	/// Draw vertical bars from points in arrays \a x, \a y to mglGraph::Org.
-	void Barh(const mglData &y, const mglData &v, const char *pen=0,mreal zVal=NAN, bool above=false);
+	void Barh(const mglData &y, const mglData &v, const char *pen=0,mreal zVal=NAN);
 	/// Draw vertical bars from points in arrays \a y to mglGraph::Org.
-	void Barh(const mglData &v, const char *pen=0,mreal zVal=NAN, bool above=false);
-
+	void Barh(const mglData &v, const char *pen=0,mreal zVal=NAN);
+
 	/// Draw surface of curve {\a r,\a z} rotatation around Z axis
 	void Torus(const mglData &r, const mglData &z, const char *pen=0);
 	/// Draw surface of curve rotatation around Z axis
@@ -687,29 +689,6 @@ public:
 	/// Draw tube with constant radial sizes \a r for points in arrays \a y.
 	void Tube(const mglData &y, mreal r, const char *pen=0,mreal zVal=NAN);
 
-	/// Draw line plot for points in arrays \a a(0,:),\a a(1,:).
-	void Plot2(const mglData &a, const char *pen=0,mreal zVal=NAN);
-	/// Draw line plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-	void Plot3(const mglData &a, const char *pen=0);
-	/// Draw area plot for points in arrays \a a(0,:),\a a(1,:).
-	void Area2(const mglData &a, const char *pen=0,mreal zVal=NAN);
-	/// Draw area plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-	void Area3(const mglData &a, const char *pen=0);
-	/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org.
-	void Bars2(const mglData &a, const char *pen=0,mreal zVal=NAN, bool above=false);
-	/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org.
-	void Bars3(const mglData &a, const char *pen=0, bool above=false);
-	/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org.
-	void Stem2(const mglData &a, const char *pen=0,mreal zVal=NAN);
-	/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org.
-	void Stem3(const mglData &a, const char *pen=0);
-	/// Draw stairs for points in arrays \a a(0,:),\a a(1,:).
-	void Step2(const mglData &a, const char *pen=0,mreal zVal=NAN);
-	/// Draw stairs for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-	void Step3(const mglData &a, const char *pen=0);
-	/// Draw surface of curve {\a a(0,:),\a a(1,:)} rotatation around Z axis for
-	void Torus2(const mglData &a, const char *pen=0);
-
 	//@}
 	// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 	/** @name 2D plotting functions
@@ -743,12 +722,25 @@ public:
 	void Dots(const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0, mreal alpha=1);
 	/// Draw dots in points \a tr.
 	void Dots(const mglData &tr, const char *sch=0);
+
 	/// Draw triangle mesh for points in arrays \a x, \a y, \a z with specified color \a c.
 	void TriPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &c, const char *sch=0);
 	/// Draw triangle mesh for points in arrays \a x, \a y, \a z.
 	void TriPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0);
 	/// Draw triangle mesh for points in arrays \a x, \a y.
-	void TriPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch=0, mreal zVal=NAN);
+	void TriPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch=0, mreal zVal=NAN);
+	/// Draw quad mesh for points in arrays \a x, \a y, \a z with specified color \a c.
+	void QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &c, const char *sch=0);
+	/// Draw quad mesh for points in arrays \a x, \a y, \a z.
+	void QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0);
+	/// Draw quad mesh for points in arrays \a x, \a y.
+	void QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch=0, mreal zVal=NAN);
+	/// Draw contour lines for triangle mesh for points in arrays \a x, \a y, \a z.
+	void TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0,int num=7,mreal zVal=NAN);
+	void TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0,mreal zVal=NAN);
+	void TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0,int num=7,mreal zVal=NAN);
+	void TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0,mreal zVal=NAN);
+
 	/// Draw grid lines for density plot of 2d data specified parametrically
 	void Grid(const mglData &x, const mglData &y, const mglData &z, const char *stl=0,mreal zVal=NAN);
 	/// Draw grid lines for density plot of 2d data
@@ -897,6 +889,7 @@ public:
 	void Surf3C(const mglData &x, const mglData &y, const mglData &z, const mglData &a, const mglData &b, const char *stl=0, int num=3);
 	/// Draw several isosurface for 3d data \a a with color proportional to \a b
 	void Surf3C(const mglData &a, const mglData &b, const char *stl=0, int num=3);
+
 	/// Plot flows for vector field {ax,ay} parametrically depended on coordinate {x,y} with color proportional to value |a|
 	void Flow(const mglData &x, const mglData &y, const mglData &ax, const mglData &ay, const char *sch=0, int num=5, bool central=true, mreal zVal=NAN);
 	/// Plot flows for vector field {ax,ay} with color proportional to value |a|
@@ -910,6 +903,11 @@ public:
 	void FlowP(mglPoint p0, const mglData &ax, const mglData &ay, const char *sch=0);
 	void FlowP(mglPoint p0, const mglData &x, const mglData &y, const mglData &z, const mglData &ax, const mglData &ay, const mglData &az, const char *sch=0);
 	void FlowP(mglPoint p0, const mglData &ax, const mglData &ay, const mglData &az, const char *sch=0);
+
+	void Grad(const mglData &x, const mglData &y, const mglData &z, const mglData &phi, const char *sch=0, int num=5);
+	void Grad(const mglData &x, const mglData &y, const mglData &phi, const char *sch=0, int num=5, mreal zVal=NAN);
+	void Grad(const mglData &phi, const char *sch=0, int num=5, mreal zVal=NAN);
+
 	/// Plot flow pipes for vector field {ax,ay} parametrically depended on coordinate {x,y} with color proportional to value |a|
 	void Pipe(const mglData &x, const mglData &y, const mglData &ax, const mglData &ay, const char *sch=0, mreal r0=0.05, int num=5, bool central=true, mreal zVal=NAN);
 	/// Plot flow pipes for vector field {ax,ay} with color proportional to value |a|
@@ -1054,7 +1052,7 @@ public:
 	//@}
 	// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 protected:
-	bool TernAxis;				/// Flag that Ternary axis is used
+	int TernAxis;				/// Flag that Ternary axis is used
 	mreal FogDist;				/// Inverse fog distance (fog ~ exp(-FogDist*Z))
 	mreal FogDz;				/// Relative shift of fog
 	int _sx,_sy,_sz,_st;		// sign in shift of axis ticks and labels
@@ -1063,14 +1061,15 @@ protected:
 	mglFont *fnt;				///< Class for printing vector text
 	mreal font_factor;
 	bool UseAlpha;				///< Flag that Alpha is used
-	mglColor cmap[NUM_COLOR];	///< Colors for color scheme
+	mglColor cmap[MGL_CMAP_COLOR];	///< Colors for color scheme
 	char PalNames[101];			///< IDs of colors in the palette
 	char DefPal[101];			///< Default palette
 	int CurrPal;				///< Current index of palette mglGraph::Pal
 	int NumCol;					///< Actual number of colors in color scheme mglGraph::cmap
 	mreal CloudFactor;			///< Factor of transparency in mglGraph::CloudP and mglGraph::CloudQ
 	bool ScalePuts;				///< Enable/disable point positions scaling in puts
-	bool SmoothColorbar;		///< Use color interpolation in colorbar (default is true)
+	bool SmoothColorbar;		///< Use color interpolation in colorbar (default is true)
+	int LegendMarks;			///< Number of marks in the Legend
 
 
 	wchar_t xtt[256];	///< X-tick template (set NULL to use default one ("%.2g" in simplest case))
@@ -1111,6 +1110,7 @@ protected:
 	/// draw mark with different type at position {x,y,z} (no scaling)
 	virtual void Mark(mreal x,mreal y,mreal z,char mark='.')=0;
 
+	void InPlot(mreal x1,mreal x2,mreal y1,mreal y2, const char *style);
 	/// Draw generic colorbar
 	virtual void colorbar(const mglData &v, const mglColor *s, int where, mreal x, mreal y, mreal w, mreal h)=0;
 	/// Draws the point (ball) at position \a p with color \a c.
@@ -1139,12 +1139,14 @@ protected:
 							mreal *pp,mreal *cc,mreal *kk,mreal *nn,bool wire)=0;
 	/// Plot quads depending on positions and colors of vertexes on grid
 	virtual void quads_plot(long n, mreal *pp, mreal *cc, bool *tt)=0;
-	/// Plot quads depending on positions and colors of vertexes on grid
+	/// Plot independent triangles
 	virtual void trigs_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool bytrig=false)=0;
+	/// Plot independent quads
+	virtual void quads_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool byquad)=0;
 	/// Plot series of unconnected lines.
-	virtual void lines_plot(long n, mreal *pp, mreal *cc, bool *tt, bool ball)=0;
+	virtual void lines_plot(long n, mreal *pp, mreal *cc, bool *tt, bool ball, bool grad)=0;
 	/// Plot series of unconnected arrows.
-	virtual void vects_plot(long n, mreal *pp, mreal *cc, bool *tt)=0;
+	virtual void vects_plot(long n, mreal *pp, mreal *cc, bool *tt, bool grad)=0;
 	/// Draw line between points \a p1,\a p2 with color \a c1, \a c2 at edges
 	virtual void line_plot(mreal *p1,mreal *p2,mreal *c1,mreal *c2,bool all=false)=0;
 	/// Draw glyph by peaces
@@ -1165,7 +1167,7 @@ protected:
 	mglColor GetC(mreal x,mreal y,mreal z,bool simple=false);
 	/// add point to contour line chain
 	long add_cpoint(long &pc,mreal **p,mreal **k,bool **t,mreal x,mreal y,mreal z,
-				mreal k1,mreal k2,bool scale);
+				mreal k1,mreal k2,bool scale);
 	/// Draw tick
 	virtual void DrawTick(mreal *pp,bool sub);
 
@@ -1186,7 +1188,9 @@ private:
 	mglColor GetC2(mreal x,mreal y);
 
 	/// Prepare fitted formula
-	void PrepareFitEq(mreal chi, const char *eq, const char *var, mreal *par, bool print);
+	void PrepareFitEq(mreal chi, const char *eq, const char *var, mreal *par, bool print);
+
+	void tricont_line(mreal val, long i, long k0, long k1, long k2, const mglData &x, const mglData &y, const mglData &z, const mglData &a, mreal zVal);
 	/// Print curved text
 	void font_curve(long n,mreal *pp,bool *tt,long *nn,const wchar_t *text,
 					int pos,mreal size);
@@ -1225,13 +1229,13 @@ private:
 	/// Set color depending on it value
 	void Color(mreal a,mreal a1=0,mreal a2=0);	// ���� �����
 	/// Draw x axis
-	void AxisX(bool text);
+	void AxisX(bool text, const char *stl);
 	/// Draw y axis
-	void AxisY(bool text);
+	void AxisY(bool text, const char *stl);
 	/// Draw z axis
-	void AxisZ(bool text);
+	void AxisZ(bool text, const char *stl);
 	/// Draw y,t-axis for Ternary plot
-	void AxisT(bool text);
+	void AxisT(bool text, const char *stl);
 	/// Draw ticks on box
 	void TickBox();
 	/// Draw X,Y,Z grid line
@@ -1248,4 +1252,5 @@ private:
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_ab.h b/include/mgl/mgl_ab.h
index 485d09e..862f52a 100644
--- a/include/mgl/mgl_ab.h
+++ b/include/mgl/mgl_ab.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_AB_H_
 #define _MGL_AB_H_
 #include "mgl/mgl.h"
@@ -51,7 +54,6 @@ using mglGraph::Legend;
 	void Light(int n, bool enable);
 	void Light(int n,mglPoint p, mglColor c=WC, mreal br=0.5, bool infty=true);
 
-	void RestoreM();
 	void InPlot(mreal x1,mreal x2,mreal y1,mreal y2, bool rel=false);
 	void StickPlot(int num, int i, mreal tet, mreal phi);
 	void Aspect(mreal Ax,mreal Ay,mreal Az);
@@ -117,11 +119,11 @@ using mglGraph::Legend;
 						const char *title, void *par=NULL,
 						void (*reload)(int next, void *p)=NULL, bool maximize=false);
 	/// Create a window for plotting based on class mglDraw.
-	void Window(int argc, char **argv, mglDraw *draw, const char *title, bool maximize=false);
+	void Window(int argc, char **argv, const char *title, mglDraw *draw, bool maximize=false);
 	/// Push transformation matrix into stack
-	void Push();
+	virtual void Push();
 	/// Pop transformation matrix from stack
-	void Pop();
+	virtual void Pop();
 	/// Set diagonal matrix and its shift
 	void SetPosScale(mreal xp, mreal yp, mreal zp, mreal scl=1);
 	//@}
@@ -139,7 +141,6 @@ protected:
 	int Depth;			///< Depth of the image
 	mreal B[9];			///< Transformation matrix (used by PostScale() function)
 	mreal B1[12];		///< Transformation matrix for colorbar
-	mreal BL[13];		///< Previous transformation matrix
 	mreal inW, inH;		///< Relative width and height of last InPlot
 	unsigned PDef;		///< Pen bit mask
 	mreal pPos;			///< Current position in pen mask
@@ -221,10 +222,11 @@ protected:
 				bool *tt,mreal Alpha, bool line);
 	void surf3_plot(long n,long m,long *kx1,long *kx2,long *ky1,long *ky2,long *kz,
 							mreal *pp,mreal *cc,mreal *kk,mreal *nn,bool wire);
-	void trigs_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool bytrig=false);
+	void trigs_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool bytrig=false);
+	void quads_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool byquad);
 	void quads_plot(long n, mreal *pp, mreal *cc, bool *tt);
-	void lines_plot(long n, mreal *pp, mreal *cc, bool *tt, bool ball);
-	void vects_plot(long n, mreal *pp, mreal *cc, bool *tt);
+	void lines_plot(long n, mreal *pp, mreal *cc, bool *tt, bool ball, bool grad);
+	void vects_plot(long n, mreal *pp, mreal *cc, bool *tt, bool grad);
 	void glyph_fill(mreal x,mreal y, mreal f, int nt, const short *trig, mreal *c);
 	void glyph_wire(mreal x,mreal y, mreal f, int nl, const short *line, mreal *c);
 	void glyph_line(mreal x,mreal y, mreal f, mreal *c, bool solid);
@@ -239,4 +241,5 @@ private:
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_addon.h b/include/mgl/mgl_addon.h
index 561a616..bd5224c 100644
--- a/include/mgl/mgl_addon.h
+++ b/include/mgl/mgl_addon.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //---------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_ADDON_H_
 #define _MGL_ADDON_H_
 //---------------------------------------------------------------------------
@@ -67,3 +70,4 @@ bool mglDifrAxial(dual *a, int n, dual q, int Border,dual *b, dual *d, int kk, d
 bool mglDifrGrid(dual *a,int n,dual q,int Border,dual *b,dual *d,int kk);
 //---------------------------------------------------------------------------
 #endif
+#endif
diff --git a/include/mgl/mgl_c.h b/include/mgl/mgl_c.h
index 5d428b1..ca8f9ea 100644
--- a/include/mgl/mgl_c.h
+++ b/include/mgl/mgl_c.h
@@ -70,7 +70,23 @@ HMGL mgl_create_graph_glut_dr(HMDR dr, const char *title);
 HMGL mgl_create_graph_fltk_dr(HMDR dr, const char *title);
 HMGL mgl_create_graph_qt_dr(HMDR dr, const char *title);
 void mgl_fltk_run();
-void mgl_qt_run();
+void mgl_qt_run();
+
+void mgl_wnd_set_delay(HMGL gr, mreal dt);
+void mgl_wnd_set_auto_clf(HMGL gr, int val);
+void mgl_wnd_set_show_mouse_pos(HMGL gr, int val);
+void mgl_wnd_set_clf_update(HMGL gr, int val);
+void mgl_wnd_toggle_alpha(HMGL gr);
+void mgl_wnd_toggle_light(HMGL gr);
+void mgl_wnd_toggle_zoom(HMGL gr);
+void mgl_wnd_toggle_rotate(HMGL gr);
+void mgl_wnd_toggle_no(HMGL gr);
+void mgl_wnd_update(HMGL gr);
+void mgl_wnd_reload(HMGL gr, int o);
+void mgl_wnd_adjust(HMGL gr);
+void mgl_wnd_next_frame(HMGL gr);
+void mgl_wnd_prev_frame(HMGL gr);
+void mgl_wnd_animation(HMGL gr);
 #endif
 void mgl_set_show_mouse_pos(HMGL gr, int enable);
 void mgl_get_last_mouse_pos(HMGL gr, mreal *x, mreal *y, mreal *z);
@@ -87,7 +103,8 @@ HMDT mgl_create_data_file(const char *fname);
 void mgl_delete_data(HMDT dat);
 /*****************************************************************************/
 HMPR mgl_create_parser();
-void mgl_delete_parser(HMPR p);
+void mgl_delete_parser(HMPR p);
+void mgl_scan_func(HMPR p, const wchar_t *line);
 void mgl_add_param(HMPR p, int id, const char *str);
 void mgl_add_paramw(HMPR p, int id, const wchar_t *str);
 /*===!!! NOTE !!! You must not delete obtained data arrays !!!===============*/
@@ -128,7 +145,8 @@ void mgl_set_draw_face(HMGL gr, int enable);
 void mgl_set_scheme(HMGL gr, const char *sch);
 void mgl_load_font(HMGL gr, const char *name, const char *path);
 void mgl_copy_font(HMGL gr, HMGL gr_from);
-void mgl_restore_font(HMGL gr);
+void mgl_restore_font(HMGL gr);
+int mgl_get_warn(HMGL gr);
 /*****************************************************************************/
 /*		Export to file or to memory											 */
 /*****************************************************************************/
@@ -167,15 +185,19 @@ void mgl_set_ambbr(HMGL gr, mreal i);
 /*****************************************************************************/
 /*		Scale and rotate													 */
 /*****************************************************************************/
+void mgl_mat_pop(HMGL gr);
+void mgl_mat_push(HMGL gr);
 void mgl_identity(HMGL graph, int rel);
 void mgl_clf(HMGL graph);
 void mgl_flush(HMGL gr);
 void mgl_clf_rgb(HMGL graph, mreal r, mreal g, mreal b);
 void mgl_subplot(HMGL graph, int nx,int ny,int m);
 void mgl_subplot_d(HMGL graph, int nx,int ny,int m, mreal dx, mreal dy);
+void mgl_subplot_s(HMGL graph, int nx,int ny,int m,const char *style);
 void mgl_inplot(HMGL graph, mreal x1,mreal x2,mreal y1,mreal y2);
 void mgl_relplot(HMGL graph, mreal x1,mreal x2,mreal y1,mreal y2);
 void mgl_columnplot(HMGL graph, int num, int ind);
+void mgl_columnplot_d(HMGL graph, int num, int ind, mreal d);
 void mgl_stickplot(HMGL graph, int num, int ind, mreal tet, mreal phi);
 void mgl_aspect(HMGL graph, mreal Ax,mreal Ay,mreal Az);
 void mgl_rotate(HMGL graph, mreal TetX,mreal TetZ,mreal TetY);
@@ -194,6 +216,8 @@ void mgl_set_caxis(HMGL graph, mreal C1,mreal C2);
 void mgl_set_axis(HMGL graph, mreal x1, mreal y1, mreal z1, mreal x2, mreal y2, mreal z2, mreal x0, mreal y0, mreal z0);
 void mgl_set_axis_3d(HMGL graph, mreal x1, mreal y1, mreal z1, mreal x2, mreal y2, mreal z2);
 void mgl_set_axis_2d(HMGL graph, mreal x1, mreal y1, mreal x2, mreal y2);
+inline void mgl_set_ranges(HMGL graph, mreal x1, mreal x2, mreal y1, mreal y2, mreal z1, mreal z2)
+{	mgl_set_axis_3d(graph, x1,y1,z1,x2,y2,z2);	};
 void mgl_set_origin(HMGL graph, mreal x0, mreal y0, mreal z0);
 void mgl_set_tick_origin(HMGL graph, mreal x0, mreal y0, mreal z0);
 void mgl_set_crange(HMGL graph, const HMDT a, int add);
@@ -256,7 +280,8 @@ void mgl_add_legendw(HMGL graph, const wchar_t *text,const char *style);
 void mgl_clear_legend(HMGL graph);
 void mgl_legend_xy(HMGL graph, mreal x, mreal y, const char *font, mreal size, mreal llen);
 void mgl_legend(HMGL graph, int where, const char *font, mreal size, mreal llen);
-void mgl_set_legend_box(HMGL gr, int enable);
+void mgl_set_legend_box(HMGL gr, int enable);
+void mgl_set_legend_marks(HMGL gr, int num);
 /*****************************************************************************/
 /*		1D plotting functions												 */
 /*****************************************************************************/
@@ -265,8 +290,6 @@ void mgl_fplot_xyz(HMGL graph, const char *fx, const char *fy, const char *fz, c
 void mgl_plot_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const char *pen);
 void mgl_plot_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen);
 void mgl_plot(HMGL graph, const HMDT y, const char *pen);
-void mgl_plot_2(HMGL graph, const HMDT a, const char *pen);
-void mgl_plot_3(HMGL graph, const HMDT a, const char *pen);
 void mgl_radar(HMGL graph, const HMDT a, const char *pen, mreal r);
 void mgl_boxplot_xy(HMGL graph, const HMDT x, const HMDT a, const char *pen);
 void mgl_boxplot(HMGL graph, const HMDT a, const char *pen);
@@ -278,33 +301,24 @@ void mgl_area_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen);
 void mgl_area_xys(HMGL graph, const HMDT x, const HMDT y, const char *pen);
 void mgl_area_s(HMGL graph, const HMDT y, const char *pen);
 void mgl_area(HMGL graph, const HMDT y, const char *pen);
-void mgl_area_2(HMGL graph, const HMDT a, const char *pen);
-void mgl_area_3(HMGL graph, const HMDT a, const char *pen);
 void mgl_region_xy(HMGL graph, const HMDT x, const HMDT y1, const HMDT y2, const char *pen, int inside);
 void mgl_region(HMGL graph, const HMDT y1, const HMDT y2, const char *pen, int inside);
 void mgl_mark(HMGL graph, mreal x,mreal y,mreal z,char mark);
 void mgl_stem_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const char *pen);
 void mgl_stem_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen);
 void mgl_stem(HMGL graph, const HMDT y,	const char *pen);
-void mgl_stem_2(HMGL graph, const HMDT a, const char *pen);
-void mgl_stem_3(HMGL graph, const HMDT a, const char *pen);
 void mgl_step_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const char *pen);
 void mgl_step_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen);
 void mgl_step(HMGL graph, const HMDT y,	const char *pen);
-void mgl_step_2(HMGL graph, const HMDT a, const char *pen);
-void mgl_step_3(HMGL graph, const HMDT a, const char *pen);
 void mgl_bars_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const char *pen);
 void mgl_bars_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen);
 void mgl_bars(HMGL graph, const HMDT y,	const char *pen);
-void mgl_bars_2(HMGL graph, const HMDT a, const char *pen);
-void mgl_bars_3(HMGL graph, const HMDT a, const char *pen);
 void mgl_barh_yx(HMGL graph, const HMDT y, const HMDT v, const char *pen);
 void mgl_barh(HMGL graph, const HMDT v,	const char *pen);
 /*****************************************************************************/
 /*		Advanced 1D plotting functions												 */
 /*****************************************************************************/
 void mgl_torus(HMGL graph, const HMDT r, const HMDT z, const char *pen);
-void mgl_torus_2(HMGL graph, const HMDT a, const char *pen);
 void mgl_text_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z,const char *text, const char *font, mreal size);
 void mgl_text_xy(HMGL graph, const HMDT x, const HMDT y, const char *text, const char *font, mreal size);
 void mgl_text_y(HMGL graph, const HMDT y, const char *text, const char *font, mreal size);
@@ -422,6 +436,10 @@ void mgl_pipe_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const HM
 void mgl_pipe_3d(HMGL graph, const HMDT ax, const HMDT ay, const HMDT az, const char *sch, mreal r0, int num, int central);
 void mgl_dew_xy(HMGL gr, const HMDT x, const HMDT y, const HMDT ax, const HMDT ay, const char *sch,mreal zVal);
 void mgl_dew_2d(HMGL gr, const HMDT ax, const HMDT ay, const char *sch,mreal zVal);
+
+void mgl_grad_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const HMDT ph, const char *sch, int num);
+void mgl_grad_xy(HMGL graph, const HMDT x, const HMDT y, const HMDT ph, const char *sch, int num, mreal zVal);
+void mgl_grad(HMGL graph, const HMDT ph, const char *sch, int num, mreal zVal);
 /*****************************************************************************/
 /*		3D plotting functions												 */
 /*****************************************************************************/
@@ -461,6 +479,13 @@ void mgl_beam(HMGL graph, const HMDT tr, const HMDT g1, const HMDT g2, const HMD
 void mgl_triplot_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch);
 void mgl_triplot_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch);
 void mgl_triplot_xy(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const char *sch, mreal zVal);
+void mgl_quadplot_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch);
+void mgl_quadplot_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch);
+void mgl_quadplot_xy(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const char *sch, mreal zVal);
+void mgl_tricont_xyzcv(HMGL gr, const HMDT v, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch, mreal zVal);
+void mgl_tricont_xyzv(HMGL gr, const HMDT v, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch, mreal zVal);
+void mgl_tricont_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch, int n, mreal zVal);
+void mgl_tricont_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch, int n, mreal zVal);
 void mgl_dots(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char *sch);
 void mgl_dots_a(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const HMDT a, const char *sch);
 void mgl_dots_tr(HMGL gr, const HMDT tr, const char *sch);
@@ -557,7 +582,14 @@ void mgl_data_diff(HMDT dat, const char *dir);
 void mgl_data_diff_par(HMDT dat, const HMDT v1, const HMDT v2, const HMDT v3);
 void mgl_data_diff2(HMDT dat, const char *dir);
 void mgl_data_swap(HMDT dat, const char *dir);
+void mgl_data_roll(HMDT dat, char dir, int num);
 void mgl_data_mirror(HMDT dat, const char *dir);
+
+void mgl_data_hankel(HMDT dat, const char *dir);
+void mgl_data_sinfft(HMDT dat, const char *dir);
+void mgl_data_cosfft(HMDT dat, const char *dir);
+void mgl_data_fill_sample(HMDT dat, int num, const char *how);
+
 mreal mgl_data_spline(const HMDT dat, mreal x,mreal y,mreal z);
 mreal mgl_data_spline1(const HMDT dat, mreal x,mreal y,mreal z);
 mreal mgl_data_linear(const HMDT dat, mreal x,mreal y,mreal z);
diff --git a/include/mgl/mgl_data.h b/include/mgl/mgl_data.h
index de9212f..0039db9 100644
--- a/include/mgl/mgl_data.h
+++ b/include/mgl/mgl_data.h
@@ -17,6 +17,9 @@
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_DATA_H_
 #define _MGL_DATA_H_
 //-----------------------------------------------------------------------------
@@ -34,16 +37,6 @@ struct gsl_matrix;
 #endif
 #include "mgl/mgl_define.h"
 //-----------------------------------------------------------------------------
-/// Class for drawing in windows (like, mglGraphFLTK, mglGraphQT and so on)
-/// Make inherited class and redefine Draw() function if you don't want to use function pointers.
-class mglGraph;
-struct mglDraw
-{
-	virtual int Draw(mglGraph *)	{	return 0;	};
-	virtual void Reload(int)	{};
-	virtual ~mglDraw()	{};
-};
-//-----------------------------------------------------------------------------
 /// Class for incapsulating point in space
 struct mglPoint
 {
@@ -79,7 +72,10 @@ inline mreal Norm(const mglPoint &p)
 //-----------------------------------------------------------------------------
 /// Class for working with data array
 class mglData
-{
+{
+protected:
+	/// Read data array from HDF4 file
+	void ReadHDF4(const char *fname,const char *data);
 public:
 
 	long nx;		///< number of points in 1st dimensions ('x' dimension)
@@ -136,10 +132,12 @@ public:
 	/// Rearange data dimensions
 	void Rearrange(int mx, int my=0, int mz=0);
 
-	/// Read data array from HDF file
+	/// Read data array from HDF file (parse HDF4 and HDF5 files)
 	void ReadHDF(const char *fname,const char *data);
 	/// Save data to HDF file
-	void SaveHDF(const char *fname,const char *data,bool rewrite=false) const;
+	void SaveHDF(const char *fname,const char *data,bool rewrite=false) const;
+	/// Put HDF data names into buf as '\t' separated.
+	int DatasHDF(const char *fname, char *buf, long size);
 	/// Read data from tab-separated text file with auto determining size
 	bool Read(const char *fname);
 	/// Read data from text file with specifeid size
@@ -180,7 +178,9 @@ public:
 	/// Modify the data by specified formula assuming x,y,z in range [r1,r2]
 	void Fill(const char *eq, mglPoint r1, mglPoint r2, const mglData *v=0, const mglData *w=0);
 	/// Eqidistantly fill the data to range [x1,x2] in direction \a dir
-	void Fill(mreal x1,mreal x2,char dir='x');
+	void Fill(mreal x1,mreal x2,char dir='x');
+	/// Fill data by 'x'/'k' samples for Hankel ('h') or Fourier ('f') transform
+	void FillSample(int n, const char *how);
 	/// Get column (or slice) of the data filled by formulas of other named columns
 	mglData Column(const char *eq);
 	/// Set names for columns (slices)
@@ -270,8 +270,17 @@ public:
 	void Diff2(const char *dir);
 	/// Swap left and right part of the data in given direction (useful for fourier spectrums)
 	void Swap(const char *dir);
+	/// Roll data along direction \a dir by \a num slices
+	void Roll(char dir, int num);
 	/// Mirror the data in given direction (useful for fourier spectrums)
-	void Mirror(const char *dir);
+	void Mirror(const char *dir);
+
+	/// Hankel transform
+	void Hankel(const char *dir);
+	/// Sin-Fourier transform
+	void SinFFT(const char *dir);
+	/// Cos-Fourier transform
+	void CosFFT(const char *dir);
 
 	/// Interpolate by 5-th order splain the data to given point \a x,\a y,\a z which normalized in range [0, 1] and evaluate its derivatives
 	mreal Spline5(mreal x,mreal y,mreal z,mreal &dx,mreal &dy,mreal &dz) const;
@@ -364,3 +373,4 @@ mglData mglJacobian(const mglData &x, const mglData &y);
 mglData mglJacobian(const mglData &x, const mglData &y, const mglData &z);
 //-----------------------------------------------------------------------------
 #endif
+#endif
diff --git a/include/mgl/mgl_define.h b/include/mgl/mgl_define.h
index 665881b..8b4fcb7 100644
--- a/include/mgl/mgl_define.h
+++ b/include/mgl/mgl_define.h
@@ -26,14 +26,21 @@
 #endif
 
 #include <math.h>
+
+#define MGL_VERSION	11.0
 
-#ifdef WIN32
+//#ifdef WIN32
+#ifdef _MSC_VER
 #include <float.h>
 const unsigned long mgl_nan[2] = {0xffffffff, 0x7fffffff};
 #define NANd	(*(double*)mgl_nan)
 #define NANf	(*(float*)&(mgl_nan[1]))
+#if(MGL_USE_DOUBLE==1)
+#define NAN		NANd
+#else
 #define NAN		NANd
-#if defined(_MSC_VER)
+#endif
+#ifdef _MSC_VER
 #define chdir	_chdir // BORLAND has chdir
 #endif
 #endif
@@ -60,6 +67,14 @@ typedef double mreal;
 typedef float mreal;
 #endif
 //-----------------------------------------------------------------------------
+#ifndef MGL_CMAP_COLOR
+#define MGL_CMAP_COLOR	32
+#endif
+//-----------------------------------------------------------------------------
+#ifndef MGL_DEF_VIEWER
+#define MGL_DEF_VIEWER "evince"
+#endif
+//-----------------------------------------------------------------------------
 #define mgl_min(a,b)	(((a)>(b)) ? (b) : (a))
 #define mgl_max(a,b)	(((a)>(b)) ? (a) : (b))
 //-----------------------------------------------------------------------------
@@ -93,6 +108,7 @@ enum{	// types of predefined curvelinear coordinate systems
 #define MGL_VEC_END	4	// draw vector to point
 #define MGL_VEC_MID	8	// draw vector with point at center
 #define MGL_VEC_DOT	16	// draw dot instead of vector
+#define MGL_VEC_GRD	32	// enable color gradient along vector/dash
 //-----------------------------------------------------------------------------
 enum{	// Codes for warnings/messages
 	mglWarnNone = 0,// Everything OK
@@ -110,6 +126,7 @@ enum{	// Codes for warnings/messages
 	mglWarnLId,		// Light: ID is out of range
 	mglWarnSize,	// Setsize: size(s) is zero or negative
 	mglWarnFmt,		// Format is not supported for that build
+	mglWarnTern,	// Axis ranges are incompatible
 	mglWarnEnd		// Maximal number of warnings (must be last)
 };
 //-----------------------------------------------------------------------------
@@ -139,6 +156,16 @@ mreal mglStartThread(void *(*func)(void *), mreal (*fres)(mreal,mreal), int n, m
 #define MGL_NTH_DEF		1
 #endif
 extern int mglNumThr;		///< Number of thread for plotting and data handling
+//-----------------------------------------------------------------------------
+/// Class for drawing in windows (like, mglGraphFLTK, mglGraphQT and so on)
+/// Make inherited class and redefine Draw() function if you don't want to use function pointers.
+class mglGraph;
+struct mglDraw
+{
+	virtual int Draw(mglGraph *)	{	return 0;	};
+	virtual void Reload(int)	{};
+	virtual ~mglDraw()	{};
+};
 //-----------------------------------------------------------------------------
 #endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_eps.h b/include/mgl/mgl_eps.h
index ccae661..ece353f 100644
--- a/include/mgl/mgl_eps.h
+++ b/include/mgl/mgl_eps.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_PS_H_
 #define _MGL_PS_H_
 #include "mgl/mgl_ab.h"
@@ -33,14 +36,13 @@ struct mglPrim
 	wchar_t m;			///< mark or symbol id (if applicable)
 	int type;			///< type of primitive (0 - point, 1 - line, 2 - trig, 3 - quad, 4 - glyph)
 	int style;			///< style of pen
-	unsigned short dash;///< mreal pen dashing
+//	unsigned short dash;///< mreal pen dashing
 	int id;				///< object id
 	int sid;			///< subplot id
 
 	void Draw(mglGraphPS *gr);
 	void DrawGL();
 	bool IsSame(mreal wp,mreal *cp,int st);
-	void SetStyle(unsigned PDef, int pPos);
 	mglPrim(int t=0)	{	memset(this,0,sizeof(mglPrim));	type = t;	c[3]=1;	};
 //	~mglPrim()	{	if(raw)	delete []raw;	};
 	inline void operator=(mglPrim &a)	{	memcpy(this,&a,sizeof(mglPrim));	};
@@ -86,10 +88,11 @@ protected:
 	void add_light(mreal *c, mreal n1,mreal n2, mreal n3);
 	void pnt_plot(long x,long y,mreal z,unsigned char c[4]);
 private:
-	void put_line(FILE *fp, long i, mreal wp,mreal *cp,int st, const char *ifmt, const char *nfmt, bool neg);
-	void put_desc(FILE *fp, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf);
+	void put_line(void *fp, bool gz, long i, mreal wp,mreal *cp,int st, const char *ifmt, const char *nfmt, bool neg);
+	void put_desc(void *fp, bool gz, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf);
 	void draw_prim(mglPrim *pr, mreal *pp, mreal *c);
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_eval.h b/include/mgl/mgl_eval.h
index d0e28d0..843387e 100644
--- a/include/mgl/mgl_eval.h
+++ b/include/mgl/mgl_eval.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //---------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_EVAL_H_
 #define _MGL_EVAL_H_
 //---------------------------------------------------------------------------
@@ -60,3 +63,4 @@ protected:
 char *mgl_strdup(const char *s);
 //-----------------------------------------------------------------------------
 #endif
+#endif
diff --git a/include/mgl/mgl_evalc.h b/include/mgl/mgl_evalc.h
index 39fc290..3fece5a 100644
--- a/include/mgl/mgl_evalc.h
+++ b/include/mgl/mgl_evalc.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //---------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_EVALC_H_
 #define _MGL_EVALC_H_
 //---------------------------------------------------------------------------
@@ -51,3 +54,4 @@ protected:
 };
 //---------------------------------------------------------------------------
 #endif
+#endif
diff --git a/include/mgl/mgl_f.h b/include/mgl/mgl_f.h
index b128e2f..94c85c4 100644
--- a/include/mgl/mgl_f.h
+++ b/include/mgl/mgl_f.h
@@ -57,6 +57,22 @@ void mgl_calc_xyz_(uintptr_t *gr, int *xs, int *ys, mreal *x, mreal *y, mreal *z
 void mgl_calc_scr_(uintptr_t *gr, mreal *x, mreal *y, mreal *z, int *xs, int *ys);
 //void mgl_fltk_thread_();
 //void mgl_qt_thread_();
+
+void mgl_wnd_set_delay_(uintptr_t *gr, mreal *dt);
+void mgl_wnd_set_auto_clf_(uintptr_t *gr, int *val);
+void mgl_wnd_set_show_mouse_pos_(uintptr_t *gr, int *val);
+void mgl_wnd_set_clf_update_(uintptr_t *gr, int *val);
+void mgl_wnd_toggle_alpha_(uintptr_t *gr);
+void mgl_wnd_toggle_light_(uintptr_t *gr);
+void mgl_wnd_toggle_zoom_(uintptr_t *gr);
+void mgl_wnd_toggle_rotate_(uintptr_t *gr);
+void mgl_wnd_toggle_no_(uintptr_t *gr);
+void mgl_wnd_update_(uintptr_t *gr);
+void mgl_wnd_reload_(uintptr_t *gr, int *o);
+void mgl_wnd_adjust_(uintptr_t *gr);
+void mgl_wnd_next_frame_(uintptr_t *gr);
+void mgl_wnd_prev_frame_(uintptr_t *gr);
+void mgl_wnd_animation_(uintptr_t *gr);
 /*****************************************************************************/
 uintptr_t mgl_create_data_();
 uintptr_t mgl_create_data_size_(int *nx, int *ny, int *nz);
@@ -90,7 +106,8 @@ void mgl_set_draw_face_(uintptr_t *gr, int *enable);
 void mgl_set_scheme_(uintptr_t *gr, char *sch, int);
 void mgl_load_font_(uintptr_t *gr, char *name, char *path, int l, int n);
 void mgl_copy_font_(uintptr_t *gr, uintptr_t *gr_from);
-void mgl_restore_font_(uintptr_t *gr);
+void mgl_restore_font_(uintptr_t *gr);
+int mgl_get_warn_(uintptr_t *gr);
 /*****************************************************************************/
 /*		Export to file or to memory														 */
 /*****************************************************************************/
@@ -130,15 +147,19 @@ void mgl_set_ambbr_(uintptr_t *gr, mreal *i);
 /*****************************************************************************/
 /*		Scale and rotate													 */
 /*****************************************************************************/
+void mgl_mat_push_(uintptr_t *gr);
+void mgl_mat_pop_(uintptr_t *gr);
 void mgl_identity_(uintptr_t *graph, int *rel);
 void mgl_clf_(uintptr_t *graph);
 void mgl_flush_(uintptr_t *gr);
 void mgl_clf_rgb_(uintptr_t *graph, mreal *r, mreal *g, mreal *b);
 void mgl_subplot_(uintptr_t *graph, int *nx,int *ny,int *m);
 void mgl_subplot_d_(uintptr_t *graph, int *nx,int *ny,int *m,mreal *dx,mreal *dy);
+void mgl_subplot_s_(uintptr_t *graph, int *nx,int *ny,int *m, const char *s,int);
 void mgl_inplot_(uintptr_t *graph, mreal *x1,mreal *x2,mreal *y1,mreal *y2);
 void mgl_relplot_(uintptr_t *graph, mreal *x1,mreal *x2,mreal *y1,mreal *y2);
 void mgl_columnplot_(uintptr_t *graph, int *num, int *i);
+void mgl_columnplot_d_(uintptr_t *graph, int *num, int *i, mreal *d);
 void mgl_stickplot_(uintptr_t *graph, int *num, int *i, mreal *tet, mreal *phi);
 void mgl_aspect_(uintptr_t *graph, mreal *Ax,mreal *Ay,mreal *Az);
 void mgl_rotate_(uintptr_t *graph, mreal *TetX,mreal *TetZ,mreal *TetY);
@@ -156,6 +177,8 @@ void mgl_set_caxis_(uintptr_t *graph, mreal *C1,mreal *C2);
 void mgl_set_axis_(uintptr_t *graph, mreal *x1, mreal *y1, mreal *z1, mreal *x2, mreal *y2, mreal *z2, mreal *x0, mreal *y0, mreal *z0);
 void mgl_set_axis_3d_(uintptr_t *graph, mreal *x1, mreal *y1, mreal *z1, mreal *x2, mreal *y2, mreal *z2);
 void mgl_set_axis_2d_(uintptr_t *graph, mreal *x1, mreal *y1, mreal *x2, mreal *y2);
+inline void mgl_set_ranges_(uintptr_t *graph, mreal *x1, mreal *x2, mreal *y1, mreal *y2, mreal *z1, mreal *z2)
+{	mgl_set_axis_3d_(graph, x1,y1,z1,x2,y2,z2);	};
 void mgl_set_origin_(uintptr_t *graph, mreal *x0, mreal *y0, mreal *z0);
 void mgl_set_tick_origin_(uintptr_t *graph, mreal *x0, mreal *y0, mreal *z0);
 void mgl_set_crange_(uintptr_t *graph, uintptr_t *a, int *add);
@@ -208,6 +231,7 @@ void mgl_clear_legend_(uintptr_t *graph);
 void mgl_legend_xy_(uintptr_t *graph, mreal *x, mreal *y, const char *font, mreal *size, mreal *llen,int);
 void mgl_legend_(uintptr_t *graph, int *where, const char *font, mreal *size, mreal *llen,int);
 void mgl_set_legend_box_(uintptr_t *gr, int *enable);
+void mgl_set_legend_marks_(uintptr_t *gr, int *num);
 /*****************************************************************************/
 /*		1D plotting functions												 */
 /*****************************************************************************/
@@ -216,8 +240,6 @@ void mgl_fplot_xyz_(uintptr_t *graph, const char *fx, const char *fy, const char
 void mgl_plot_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int);
 void mgl_plot_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int);
 void mgl_plot_(uintptr_t *graph, uintptr_t *y,	const char *pen,int);
-void mgl_plot_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
-void mgl_plot_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
 void mgl_radar_(uintptr_t *graph, uintptr_t *a,	const char *pen, mreal *r, int);
 void mgl_boxplot_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int);
 void mgl_boxplot_(uintptr_t *graph, uintptr_t *y, const char *pen,int);
@@ -228,33 +250,24 @@ void mgl_area_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, c
 void mgl_area_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int);
 void mgl_area_s_(uintptr_t *graph, uintptr_t *y, const char *pen,int);
 void mgl_area_(uintptr_t *graph, uintptr_t *y, const char *pen,int);
-void mgl_area_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
-void mgl_area_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
 void mgl_region_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y1, uintptr_t *y2, const char *pen, int *inside, int);
 void mgl_region_(uintptr_t *graph, uintptr_t *y1, uintptr_t *y2, const char *pen, int *inside, int);
 void mgl_mark_(uintptr_t *graph, mreal *x,mreal *y,mreal *z,const char *mark,int);
 void mgl_stem_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int);
 void mgl_stem_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int);
 void mgl_stem_(uintptr_t *graph, uintptr_t *y,	const char *pen,int);
-void mgl_stem_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
-void mgl_stem_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
 void mgl_step_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int);
 void mgl_step_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int);
 void mgl_step_(uintptr_t *graph, uintptr_t *y,	const char *pen,int);
-void mgl_step_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
-void mgl_step_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
 void mgl_bars_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int);
 void mgl_bars_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int);
 void mgl_bars_(uintptr_t *graph, uintptr_t *y,	const char *pen,int);
-void mgl_bars_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
-void mgl_bars_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
 void mgl_barh_yx_(uintptr_t *graph, uintptr_t *y, uintptr_t *v, const char *pen,int);
 void mgl_barh_(uintptr_t *graph, uintptr_t *v,	const char *pen,int);
 /*****************************************************************************/
 /*		Advanced 1D plotting functions												 */
 /*****************************************************************************/
 void mgl_torus_(uintptr_t *graph, uintptr_t *r, uintptr_t *z, const char *pen,int);
-void mgl_torus_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int);
 void mgl_text_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z,const char *text, const char *font, mreal *size,int,int);
 void mgl_text_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *text, const char *font, mreal *size,int,int);
 void mgl_text_y_(uintptr_t *graph, uintptr_t *y, const char *text, const char *font, mreal *size,int,int);
@@ -371,6 +384,10 @@ void mgl_pipe_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, u
 void mgl_pipe_3d_(uintptr_t *graph, uintptr_t *ax, uintptr_t *ay, uintptr_t *az, const char *sch, mreal *r0, int *num, int *central,int);
 void mgl_dew_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *ax, uintptr_t *ay, const char *sch, mreal *zVal,int l);
 void mgl_dew_2d_(uintptr_t *gr, uintptr_t *ax, uintptr_t *ay, const char *sch, mreal *zVal,int l);
+
+void mgl_grad_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *ph, const char *sch, int *num, int);
+void mgl_grad_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *ph, const char *sch, int *num, mreal *zVal,int);
+void mgl_grad_(uintptr_t *graph, uintptr_t *ph, const char *sch, int *num, mreal *zVal,int);
 /*****************************************************************************/
 /*		3D plotting functions												 */
 /*****************************************************************************/
@@ -420,6 +437,15 @@ void mgl_beam_(uintptr_t *gr, uintptr_t *tr, uintptr_t *g1, uintptr_t *g2, uintp
 void mgl_triplot_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch,int);
 void mgl_triplot_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int);
 void mgl_triplot_xy_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, const char *sch, mreal *zVal,int);
+void mgl_quadplot_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch,int);
+void mgl_quadplot_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int);
+void mgl_quadplot_xy_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, const char *sch, mreal *zVal,int);
+
+void mgl_tricont_xyzcv_(uintptr_t *gr, uintptr_t *v, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, mreal *zVal,int);
+void mgl_tricont_xyzv_(uintptr_t *gr, uintptr_t *v, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch, mreal *zVal,int);
+void mgl_tricont_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, int *n, mreal *zVal, int);
+void mgl_tricont_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch, int *n, mreal *zVal, int);
+
 void mgl_dots_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int);
 void mgl_dots_a_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch,int);
 void mgl_dots_tr_(uintptr_t *gr, uintptr_t *tr, const char *sch,int);
@@ -514,7 +540,14 @@ void mgl_data_diff_(uintptr_t *dat, const char *dir,int);
 void mgl_data_diff_par_(uintptr_t *dat, uintptr_t *v1, uintptr_t *v2, uintptr_t *v3);
 void mgl_data_diff2_(uintptr_t *dat, const char *dir,int);
 void mgl_data_swap_(uintptr_t *dat, const char *dir,int);
-void mgl_data_mirror_(uintptr_t *dat, const char *dir,int);
+void mgl_data_roll_(uintptr_t *dat, const char *dir, int *num, int);
+void mgl_data_mirror_(uintptr_t *dat, const char *dir,int);
+
+void mgl_data_hankel_(uintptr_t *dat, const char *dir,int);
+void mgl_data_sinfft_(uintptr_t *dat, const char *dir,int);
+void mgl_data_cosfft_(uintptr_t *dat, const char *dir,int);
+void mgl_data_fill_sample_(uintptr_t *dat, int num, const char *how,int);
+
 mreal mgl_data_spline_(uintptr_t *dat, mreal *x,mreal *y,mreal *z);
 mreal mgl_data_spline1_(uintptr_t *dat, mreal *x,mreal *y,mreal *z);
 mreal mgl_data_linear_(uintptr_t *dat, mreal *x,mreal *y,mreal *z);
diff --git a/include/mgl/mgl_fltk.h b/include/mgl/mgl_fltk.h
index 6853003..9cce925 100644
--- a/include/mgl/mgl_fltk.h
+++ b/include/mgl/mgl_fltk.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_FLTK_H_
 #define _MGL_FLTK_H_
 //-----------------------------------------------------------------------------
@@ -138,4 +141,5 @@ protected:
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_font.h b/include/mgl/mgl_font.h
index d14725f..8526283 100644
--- a/include/mgl/mgl_font.h
+++ b/include/mgl/mgl_font.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_FONT_H_
 #define _MGL_FONT_H_
 
@@ -102,7 +105,7 @@ protected:
 	short *numt[4];		///< Number of triangles in glyph description (for solid font)
 	short *numl[4];		///< Number of lines in glyph description (for wire font)
 	short *width[4];	///< Width of glyph for wire font
-	mreal fact[4];		///< Divider for width of glyph
+	float fact[4];		///< Divider for width of glyph
 	unsigned numg;		///< Number of glyphs
 	short *buf;			///< Buffer for glyph descriptions
 	long numb;			///< Buffer size
@@ -123,13 +126,14 @@ protected:
 	unsigned Symbol(char ch);
 private:
 	mreal get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,mreal &w1,mreal &w2, mreal f1, mreal f2, int st);
-	void read_data(FILE *fp, mreal *ff, short *wdt, short *numl, unsigned *posl, short *numt, unsigned *post, unsigned &cur);
+	bool read_data(const char *fname, float *ff, short *wdt, short *numl, unsigned *posl, short *numt, unsigned *post, unsigned &cur);
 	void main_copy();
-	bool read_main(const char *base, const char *path, unsigned &cur);
+	bool read_main(const char *fname, unsigned &cur);
 	void mem_alloc();
 	bool read_def(unsigned &cur);
 	void draw_ouline(mglGraph *gr, int st, mreal x, mreal y, mreal f, mreal g, mreal ww, char ccol);
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_gl.h b/include/mgl/mgl_gl.h
index e2f342d..100b0dd 100644
--- a/include/mgl/mgl_gl.h
+++ b/include/mgl/mgl_gl.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_GL_H_
 #define _MGL_GL_H_
 #ifdef WIN32
@@ -52,6 +55,7 @@ public:
 	void SetSize(int ,int ){};
 
 	void Ball(mreal x,mreal y,mreal z,mglColor col=RC,mreal alpha=1);
+	void Glyph(mreal x, mreal y, mreal f, int style, long icode, char col);
 //	void Glyph(mreal x,mreal y, mreal f, int nt, const short *trig, int nl, const short *line);
 protected:
 	mglColor def_col;
@@ -82,4 +86,5 @@ protected:
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_glut.h b/include/mgl/mgl_glut.h
index 047783b..65c4f48 100644
--- a/include/mgl/mgl_glut.h
+++ b/include/mgl/mgl_glut.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_GLUT_H_
 #define _MGL_GLUT_H_
 #include "mgl/mgl_gl.h"
@@ -54,4 +57,5 @@ private:
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_idtf.h b/include/mgl/mgl_idtf.h
index 417872d..198e8a6 100644
--- a/include/mgl/mgl_idtf.h
+++ b/include/mgl/mgl_idtf.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_IDTF_H_
 #define _MGL_IDTF_H_
 
@@ -372,4 +375,5 @@ protected:
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_parse.h b/include/mgl/mgl_parse.h
index 31444ed..50cb48b 100644
--- a/include/mgl/mgl_parse.h
+++ b/include/mgl/mgl_parse.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_PARSE_H_
 #define _MGL_PARSE_H_
 #include "mgl/mgl.h"
@@ -79,6 +82,24 @@ struct mglNum
 	void MoveAfter(mglNum *var);
 };
 //-----------------------------------------------------------------------------
+/// Structure for function name and position.
+struct mglFunc
+{
+	long pos;
+	int narg;
+	wchar_t func[32];
+	mglFunc *next;
+	mglFunc(long p, const wchar_t *f, mglFunc *prev=0);
+	~mglFunc()	{	if(next)	delete next;	};
+};
+//-----------------------------------------------------------------------------
+/// Structure for stack of functions and its arguments.
+struct mglFnStack
+{
+	long pos;
+	wchar_t *par[9];
+};
+//-----------------------------------------------------------------------------
 /// Structure for the command argument (see mglGraph::Exec()).
 class mglParse
 {
@@ -110,6 +131,10 @@ public:
 	void Execute(mglGraph *gr, const wchar_t *text, void (*error)(int line, int kind, mglGraph *gr)=NULL);
 	/// Execute MGL script text with '\n' separated lines
 	void Execute(mglGraph *gr, const char *text, void (*error)(int line, int kind, mglGraph *gr)=NULL);
+	/// Scan for functions (use NULL for reset)
+	void ScanFunc(const wchar_t *line);
+	/// Check if name is function and return its address (or 0 if no)
+	long IsFunc(const wchar_t *name, int *narg=0);
 	/// Find variable or return 0 if absent
 	mglVar *FindVar(const char *name);
 	/// Find variable or return 0 if absent
@@ -142,18 +167,22 @@ public:
 	void DeleteVar(const wchar_t *name);
 private:
 	long parlen;	///< Length of parameter strings
-	wchar_t *par[10];	///< Parameter for substituting instead of $1, ..., $9
+	wchar_t *par[40];	///< Parameter for substituting instead of $1, ..., $9
 	wchar_t *out;		///< Buffer for writing C++ code (if not NULL)
 	wchar_t leg[128];	///< Buffer for legend
 	bool opt[16];	///< Set on/off optional parameters for command argument
 	mreal val[20];	///< Values for optional parameters
 	bool Once;		///< Flag for command which should be executed only once
 	bool Skip;		///< Flag that commands should be skiped (inside 'once' block)
-	int if_stack[20];	///< Stack for if-else-endif commands
+	int if_stack[40];	///< Stack for if-else-endif commands
 	int if_pos;		///< position in if_stack
-	int if_for[10];		///< position in if_stack for for-cycle start
+	mglFunc *func;	///< function names and position
+	mglFnStack *fn_stack;	///< function calls stack
+	int fn_pos;		///< position in function stack
+	int fn_num;		///< size of function stack
+	int if_for[40];	///< position in if_stack for for-cycle start
 	mglData *fval;	///< Values for for-cycle. Note that nx - number of elements, ny - next element, nz - address (or string number) of first cycle command
-	int for_stack[10];	///< The order of for-variables
+	int for_stack[40];	///< The order of for-variables
 	int for_addr;	///< Flag for saving address in variable (for_addr-1)
 	bool for_br;	///< Break is switched on (skip all comands until 'next')
 
@@ -169,11 +198,14 @@ private:
 	int FlowExec(mglGraph *gr, const wchar_t *com, long n, mglArg *a);
 	/// Parse and execute the unicode string of MGL script
 	int ParseDat(mglGraph *gr, const wchar_t *str, mglData &res);
+	/// Parse $N arguments
+	void PutArg(const wchar_t *string, wchar_t *str, bool def);
 	/// In skip mode
 	bool inline ifskip()	{	return (if_pos>0 && !(if_stack[if_pos-1]&1));	};
 	bool inline skip()		{	return (Skip || ifskip() || for_br);	};
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
 
diff --git a/include/mgl/mgl_qt.h b/include/mgl/mgl_qt.h
index d721b17..cf83eec 100644
--- a/include/mgl/mgl_qt.h
+++ b/include/mgl/mgl_qt.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef MGL_QT_H
 #define MGL_QT_H
 //-----------------------------------------------------------------------------
@@ -55,7 +58,7 @@ using mglGraphAB::Window;
 	/// Create a window for plotting. Now implemeted only for GLUT.
 	void Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p),
 						const char *title,void *par=NULL,
-	  					void (*reload)(int next, void *p)=NULL, bool maximize=false);
+						void (*reload)(int next, void *p)=NULL, bool maximize=false);
 	/// Switch on/off transparency (do not overwrite switches in user drawing function)
 	void ToggleAlpha();
 	/// Switch on/off lighting (do not overwrite switches in user drawing function)
@@ -185,4 +188,5 @@ private:
 void convertFromGraph(QPixmap &pic, mglGraphAB *gr, uchar **buf);
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/include/mgl/mgl_w.h b/include/mgl/mgl_w.h
index c375672..65fbee1 100644
--- a/include/mgl/mgl_w.h
+++ b/include/mgl/mgl_w.h
@@ -20,6 +20,7 @@
 #ifdef _MGL_DATA_H_
 #warning "MathGL wrapper is disabled due to using original MathGL classes"
 #else
+#ifndef _MGL_W_H_
 #define _MGL_W_H_
 
 #ifndef NO_GSL
@@ -152,6 +153,7 @@ public:
 	{	mgl_data_modify_vw(a,eq,v.a, w.a);	};
 	inline void Modify(const char *eq,const mglData &v){	mgl_data_modify_vw(a,eq,v.a, NULL);	};
 	inline void Fill(double x1,double x2,char dir='x')	{	mgl_data_fill(a,x1,x2,dir);	};
+	inline void FillSample(int n, const char *how)	{	mgl_data_fill_sample(a,n,how);	};
 	inline mglData Column(const char *eq)	{	return mglData(mgl_data_column(a,eq));	};
 	inline void SetColumnId(const char *ids)			{	mgl_data_set_id(a,ids);	};
 	inline void Squeeze(int rx,int ry=1,int rz=1,bool smooth=false)
@@ -211,8 +213,13 @@ public:
 	{	mgl_data_diff_par(a,v1.a,v2.a,v3.a);	};
 	inline void Diff2(const char *dir)		{	mgl_data_diff2(a,dir);	};
 	inline void Swap(const char *dir)		{	mgl_data_swap(a,dir);	};
-	inline void Mirror(const char *dir)	{	mgl_data_mirror(a,dir);	};
-
+	inline void Roll(char dir, int num)		{	mgl_data_roll(a,dir,num);	};
+	inline void Mirror(const char *dir)		{	mgl_data_mirror(a,dir);	};
+
+	inline void Hankel(const char *dir)	{	mgl_data_hankel(a,dir);	};
+	inline void SinFFT(const char *dir)	{	mgl_data_sinfft(a,dir);	};
+	inline void CosFFT(const char *dir)	{	mgl_data_cosfft(a,dir);	};
+	
 	inline double Spline(double x,double y=0,double z=0)
 	{	return mgl_data_spline(a,x,y,z);	};
 	inline double Spline1(double x,double y=0,double z=0)
@@ -286,6 +293,7 @@ public:
 	~mglGraph()	{	mgl_delete_graph(self);	};
 	inline HMGL Self()	{	return self;	};
 
+	inline int  GetWarn()	{	return mgl_get_warn(self);	};
 	inline void DefaultPlotParam()	{	mgl_set_def_param(self);	};
 	inline void SetPalColor(int n, float r, float g, float b)
 	{	if(n>=0 && n<100)	mgl_set_pal_color(self, n, r, g, b);	};
@@ -315,12 +323,13 @@ public:
 	inline void SetPlotFactor(float val)	{	mgl_set_plotfactor(self, val);	};
 	inline void SetDrawFace(bool enable)	{	mgl_set_draw_face(self, enable);};
 	inline void SetLegendBox(bool enable)	{	mgl_set_legend_box(self, enable);	};
+	inline void SetLegendMarks(int num)		{	mgl_set_legend_marks(self, num);	};
 	inline void LoadFont(const char *name, const char *path=NULL)
 	{	mgl_load_font(self, name, path);	};
 	inline void CopyFont(mglGraph *gr)		{	mgl_copy_font(self, gr->Self());};
 	inline void RestoreFont()				{	mgl_restore_font(self);	};
 
-	inline void ShowImage(const char *viewer="kuickshow", bool keep=0)
+	inline void ShowImage(const char *viewer=0, bool keep=0)
 	{	mgl_show_image(self, viewer, keep);	};
 	inline void WriteFrame(const char *fname,const char *descr="")
 	{	mgl_write_frame(self, fname, descr);	};
@@ -346,7 +355,7 @@ public:
 	inline void ResetFrames()	{	mgl_reset_frames(self);	};
 	inline void Flush()			{	mgl_flush(self);	};
 
-	void GetRGB(char *imgdata, int imglen)
+	inline void GetRGB(char *imgdata, int imglen)
 	{
 		int w=mgl_get_width(self);
 		int h=mgl_get_height(self);
@@ -414,11 +423,13 @@ public:
 	{	mgl_clf_rgb(self, r, g, b);	};
 	inline void SubPlot(int nx,int ny,int m, float dx=0, float dy=0)
 	{	mgl_subplot_d(self, nx, ny, m, dx, dy);	};
-	inline void InPlot(float x1,float x2,float y1,float y2, bool rel=false)
+	inline void SubPlot(int nx,int ny,int m, const char *style)
+	{	mgl_subplot_s(self, nx, ny, m, style);	};
+	inline void InPlot(float x1,float x2,float y1,float y2, bool rel=true)
 	{	if(rel)	mgl_inplot(self, x1, x2, y1, y2);
 		else	mgl_relplot(self, x1, x2, y1, y2);	};
-	inline void ColumnPlot(int num, int ind)
-	{	mgl_columnplot(self,num,ind);	};
+	inline void ColumnPlot(int num, int ind, float d=0)
+	{	mgl_columnplot_d(self,num,ind,d);	};
 	inline void StickPlot(int num, int i, float tet, float phi)
 	{	mgl_stickplot(self,num,i,tet,phi);	};
 	inline void Aspect(float Ax,float Ay,float Az)
@@ -459,13 +470,13 @@ public:
 
 	inline void Box(const char *col="k", bool ticks=true)
 	{	mgl_box_str(self, col, ticks);	};
-	inline void Axis(const char *dir="xyz", bool adjust=false)
+	inline void Axis(const char *dir="xyzt", bool adjust=false)
 	{	if(adjust)	mgl_adjust_ticks(self,dir);	mgl_axis(self, dir);	};
-	inline void Grid(const char *dir="xyz",const char *pen="B")
+	inline void Grid(const char *dir="xyzt",const char *pen="B")
 	{	mgl_axis_grid(self, dir, pen);	};
 	inline void Label(char dir, const char *text, float pos=+1, float size=-1.4, float shift=0)
 	{	mgl_label_ext(self, dir, text, pos, size, shift);	};
-	inline void Label(char dir, const wchar_t *text, float pos=+1, float size=-1.4, float shift=0)
+	inline void Label(char dir, const wchar_t *text, float pos=0, float size=-1.4, float shift=0)
 	{	mgl_labelw_ext(self, dir, text, pos, size, shift);	};
 	void Label(double x, double y, const char *text, const char *fnt=0, double size=-1.4)
 	{	mgl_label_xy(self,x,y,text,fnt,size);	}
@@ -562,10 +573,10 @@ public:
 	{	mgl_tens(self, y.a, c.a, pen);	};
 	inline void Area(mglData &x, mglData &y, mglData &z, const char *pen="")
 	{	mgl_area_xyz(self, x.a, y.a, z.a, pen);	};
-	inline void Area(mglData &x, mglData &y, const char *pen="", bool sum=false)
-	{	if(sum)	mgl_area_xy(self, x.a, y.a, pen);	else	mgl_area_xys(self, x.a, y.a, pen);	};
-	inline void Area(mglData &y, const char *pen="", bool sum=false)
-	{	if(sum)	mgl_area(self, y.a, pen);	else	mgl_area_s(self, y.a, pen);	};
+	inline void Area(mglData &x, mglData &y, const char *pen="")
+	{	mgl_area_xy(self, x.a, y.a, pen);	};
+	inline void Area(mglData &y, const char *pen="")
+	{	mgl_area(self, y.a, pen);	};
 	inline void Stem(mglData &x, mglData &y, mglData &z, const char *pen="")
 	{	mgl_stem_xyz(self, x.a, y.a, z.a, pen);	};
 	inline void Stem(mglData &x, mglData &y, const char *pen="")
@@ -799,6 +810,13 @@ public:
 	inline void FlowP(float x0, float y0, float z0, mglData &ax, mglData &ay, mglData &az, const char *sch="")
 	{	mgl_flowp_3d(self, x0, y0, z0, ax.a, ay.a, az.a, sch);	};
 
+	inline void Grad(const mglData &x, const mglData &y, const mglData &z, const mglData &phi, const char *sch=0, int num=3)
+	{	mgl_grad_xyz(self,x.a,y.a,z.a,phi.a,sch,num);	}
+	inline void Grad(const mglData &x, const mglData &y, const mglData &phi, const char *sch=0, int num=5, mreal zVal=NAN)
+	{	mgl_grad_xy(self,x.a,y.a,phi.a,sch,num,zVal);	}
+	inline void Grad(const mglData &phi, const char *sch=0, int num=5, mreal zVal=NAN)
+	{	mgl_grad(self,phi.a,sch,num,zVal);	}
+
 	inline void Pipe(mglData &x, mglData &y, mglData &ax, mglData &ay, const char *sch="", float r0=0.05, int num=5, bool central=true, float zVal=NAN)
 	{	mgl_pipe_xy(self, x.a, y.a, ax.a, ay.a, sch, r0, num, central, zVal);	};
 	inline void Pipe(mglData &ax, mglData &ay, const char *sch="", float r0=0.05, int num=5, bool central=true, float zVal=NAN)
@@ -876,6 +894,22 @@ public:
 	{	mgl_triplot_xyz(self, nums.a, x.a, y.a, z.a, sch);	};
 	inline void TriPlot(mglData &nums, mglData &x, mglData &y, const char *sch="", float zVal=NAN)
 	{	mgl_triplot_xy(self, nums.a, x.a, y.a, sch, zVal);	};
+	inline void QuadPlot(mglData &nums, mglData &x, mglData &y, mglData &z, mglData &c, const char *sch="")
+	{	mgl_quadplot_xyzc(self, nums.a, x.a, y.a, z.a, c.a, sch);	};
+	inline void QuadPlot(mglData &nums, mglData &x, mglData &y, mglData &z, const char *sch="")
+	{	mgl_quadplot_xyz(self, nums.a, x.a, y.a, z.a, sch);	};
+	inline void QuadPlot(mglData &nums, mglData &x, mglData &y, const char *sch="", float zVal=NAN)
+	{	mgl_quadplot_xy(self, nums.a, x.a, y.a, sch, zVal);	};
+
+	inline void TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0,int num=7,mreal zVal=NAN)
+	{	mgl_tricont_xyz(self, nums.a, x.a, y.a, z.a, sch, num, zVal);	};
+	inline void TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0,mreal zVal=NAN)
+	{	mgl_tricont_xyzv(self, v.a, nums.a, x.a, y.a, z.a, sch, zVal);	};
+	inline void TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0,int num=7,mreal zVal=NAN)
+	{	mgl_tricont_xyzc(self, nums.a, x.a, y.a, z.a, a.a, sch, num, zVal);	};
+	inline void TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0,mreal zVal=NAN)
+	{	mgl_tricont_xyzcv(self, v.a, nums.a, x.a, y.a, z.a, a.a, sch, zVal);	};
+
 	inline void Dots(mglData &x, mglData &y, mglData &z, const char *sch="")
 	{	mgl_dots(self, x.a, y.a, z.a, sch);	};
 	inline void Dots(mglData &x, mglData &y, mglData &z, mglData &a, const char *sch="")
@@ -990,6 +1024,7 @@ public:
 	{	return mgl_parse(gr->Self(), self, str, pos);	};
 	inline int Parse(mglGraph *gr, const wchar_t *str, int pos)
 	{	return mgl_parsew(gr->Self(), self, str, pos);	};
+	inline void ScanFunc(const wchar_t *line){	mgl_scan_func(self, line);	};
 	inline void Execute(mglGraph *gr, const char *str)
 	{	mgl_parse_text(gr->Self(), self, str);	};
 	inline void Execute(mglGraph *gr, const wchar_t *str)
@@ -999,3 +1034,4 @@ public:
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
diff --git a/include/mgl/mgl_wx.h b/include/mgl/mgl_wx.h
index 940993b..f7ddf66 100644
--- a/include/mgl/mgl_wx.h
+++ b/include/mgl/mgl_wx.h
@@ -23,6 +23,7 @@
 #include <wx/window.h>
 #include <wx/image.h>
 #include <wx/timer.h>
+#include <wx/bitmap.h>
 #include <mgl/mgl_zb.h>
 //-----------------------------------------------------------------------------
 /// Class is Wx widget which display MathGL graphics
diff --git a/include/mgl/mgl_zb.h b/include/mgl/mgl_zb.h
index c4c2c0d..356c632 100644
--- a/include/mgl/mgl_zb.h
+++ b/include/mgl/mgl_zb.h
@@ -18,6 +18,9 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 //-----------------------------------------------------------------------------
+#ifdef _MGL_W_H_
+#warning "MathGL wrapper was enabled. So disable original MathGL classes"
+#else
 #ifndef _MGL_ZB_H_
 #define _MGL_ZB_H_
 #include "mgl/mgl_ab.h"
@@ -55,4 +58,5 @@ protected:
 };
 //-----------------------------------------------------------------------------
 #endif
+#endif
 //-----------------------------------------------------------------------------
diff --git a/lang/Makefile.in b/lang/Makefile.in
index 59616cc..07bed6f 100644
--- a/lang/Makefile.in
+++ b/lang/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -45,7 +45,11 @@ DIST_COMMON = $(am__dist_octave_DATA_DIST) $(am__python_PYTHON_DIST) \
 	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -149,6 +153,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -169,6 +175,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
diff --git a/mgl/CMakeLists.txt b/mgl/CMakeLists.txt
index 31f8a6f..6016ce0 100644
--- a/mgl/CMakeLists.txt
+++ b/mgl/CMakeLists.txt
@@ -53,6 +53,12 @@ if(use_hdf5 OR use_hdf5_18)
 	include_directories(${HDF5_INCLUDE_DIR})
 endif(use_hdf5 OR use_hdf5_18)
 
+if(use_hdf4)
+	target_link_libraries(mgl ${HDF4_LIB})
+	add_definitions(-DHAVE_HDF4)
+	include_directories(${HDF4_INCLUDE_DIR})
+endif(use_hdf4)
+
 if(use_gsl)
 	target_link_libraries(mgl ${GSL_LIB} ${GSL_CBLAS_LIB} )
 	add_definitions(-DHAVE_GSL)
@@ -72,7 +78,7 @@ endif(UNIX)
 
 set_target_properties(mgl PROPERTIES SOVERSION 5.0.0)
 install(
-	TARGETS mgl
+	TARGETS mgl mgl-static
 	RUNTIME DESTINATION bin
 	ARCHIVE DESTINATION lib
 	LIBRARY DESTINATION lib
diff --git a/mgl/Makefile.am b/mgl/Makefile.am
index 46a6086..c2ad4a4 100644
--- a/mgl/Makefile.am
+++ b/mgl/Makefile.am
@@ -20,7 +20,7 @@ libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS) $(LOPENMP)
 libmgl_la_LDFLAGS = -no-undefined -version-info $(MGL_CURRENT):$(MGL_REVISION):$(MGL_AGE)
 
 libmgl_la_CXXFLAGS = $(WIDGETS) -DMGL_FONT_PATH=\"$(datadir)/$(PACKAGE)/fonts/\" \
-    -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \
+    -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(HDF4_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \
     $(TIFF_FLAGS) $(PNG_FLAGS) $(FLTK_FLAGS) $(ADDON_FLAGS) $(AM_CXXFLAGS) \
     $(PTHREAD_FLAGS)
 
@@ -32,6 +32,10 @@ if USE_GSL
 libmgl_la_LIBADD += $(GSL_LIBS)
 endif
 
+if USE_HDF4
+libmgl_la_LIBADD += $(HDF4_LIBS)
+endif
+
 if USE_HDF5
 libmgl_la_LIBADD += $(HDF5_LIBS)
 endif
diff --git a/mgl/Makefile.in b/mgl/Makefile.in
index b5738df..b1acb2b 100644
--- a/mgl/Makefile.in
+++ b/mgl/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -40,14 +40,19 @@ host_triplet = @host@
 @USE_GLUT_TRUE at am__append_4 = -DWITH_GLUT
 @USE_PTHREAD_TRUE at am__append_5 = $(PTHREAD_LIBS)
 @USE_GSL_TRUE at am__append_6 = $(GSL_LIBS)
- at USE_HDF5_TRUE@am__append_7 = $(HDF5_LIBS)
- at USE_GIF_TRUE@am__append_8 = $(GIF_LIBS)
- at USE_JPEG_TRUE@am__append_9 = $(JPEG_LIBS)
+ at USE_HDF4_TRUE@am__append_7 = $(HDF4_LIBS)
+ at USE_HDF5_TRUE@am__append_8 = $(HDF5_LIBS)
+ at USE_GIF_TRUE@am__append_9 = $(GIF_LIBS)
+ at USE_JPEG_TRUE@am__append_10 = $(JPEG_LIBS)
 subdir = mgl
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -80,13 +85,14 @@ LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 @USE_PTHREAD_TRUE at am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
 @USE_GSL_TRUE at am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
- at USE_HDF5_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
- at USE_GIF_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
- at USE_JPEG_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
+ at USE_HDF4_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+ at USE_HDF5_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1)
+ at USE_GIF_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1)
+ at USE_JPEG_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1)
 libmgl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
 	$(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) \
-	$(am__DEPENDENCIES_6)
+	$(am__DEPENDENCIES_6) $(am__DEPENDENCIES_7)
 am_libmgl_la_OBJECTS = libmgl_la-mgl_data_cf.lo libmgl_la-mgl_axis.lo \
 	libmgl_la-mgl_data_png.lo libmgl_la-mgl_zb2.lo \
 	libmgl_la-mgl_c.lo libmgl_la-mgl_eps.lo libmgl_la-mgl_font.lo \
@@ -167,6 +173,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -187,6 +195,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -301,10 +310,10 @@ WIDGETS = $(am__append_1) $(am__append_2) $(am__append_3) \
 	$(am__append_4)
 libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS) $(LOPENMP) $(am__append_5) \
 	$(am__append_6) $(am__append_7) $(am__append_8) \
-	$(am__append_9)
+	$(am__append_9) $(am__append_10)
 libmgl_la_LDFLAGS = -no-undefined -version-info $(MGL_CURRENT):$(MGL_REVISION):$(MGL_AGE)
 libmgl_la_CXXFLAGS = $(WIDGETS) -DMGL_FONT_PATH=\"$(datadir)/$(PACKAGE)/fonts/\" \
-    -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \
+    -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(HDF4_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \
     $(TIFF_FLAGS) $(PNG_FLAGS) $(FLTK_FLAGS) $(ADDON_FLAGS) $(AM_CXXFLAGS) \
     $(PTHREAD_FLAGS)
 
diff --git a/mgl/mgl_1d.cpp b/mgl/mgl_1d.cpp
index 7d31b46..8806b12 100644
--- a/mgl/mgl_1d.cpp
+++ b/mgl/mgl_1d.cpp
@@ -193,7 +193,6 @@ void mglGraph::Plot(const char *eqX, const char *eqY, const char *eqZ, const cha
 	}
 	delete ex;	delete ey;	delete ez;
 
-	// TODO Add s1trong function variation analisys
 	mglData xx,yy,zz;
 	xx.Set(x,n);	yy.Set(y,n);	zz.Set(z,n);
 	free(x);	free(y);	free(z);	free(t);
@@ -250,25 +249,42 @@ void mglGraph::Plot(const mglData &x, const mglData &y, const mglData &z, const
 	if(n<2)					{	SetWarn(mglWarnLow,"Plot");	return;	}
 	static int cgid=1;	StartGroup("Plot",cgid++);
 	m = x.ny > y.ny ? x.ny : y.ny;	m = z.ny > m ? z.ny : m;
-	mreal *pp = new mreal[3*n];
-	bool *tt = new bool[n];
+	mreal *pp = new mreal[6*n];
+	bool *tt = new bool[2*n],inan,onan;
 	if(pen && *pen)	mk=SelectPen(pen);	else	Pen(NC, '-', BaseLineWidth);
 	SetPal(pen);
 	for(j=0;j<m;j++)
 	{
 		Pen(GetPal(),0,0);
 		mx = j<x.ny ? j:0;	my = j<y.ny ? j:0;	mz = j<z.ny ? j:0;
-		register long i,k;
-		for(i=0;i<n;i++)
-		{
-			k = 3*i;
-			pp[k+0] = x.a[i+mx*n];
-			pp[k+1] = y.a[i+my*n];
-			pp[k+2] = z.a[i+mz*n];
-			tt[i] = ScalePoint(pp[k],pp[k+1],pp[k+2]);
-			if(mk && tt[i])	Mark(pp[k],pp[k+1],pp[k+2],mk);
+		register long i,k,jj;
+		inan = onan = false;
+		for(jj=i=0;i<n;i++,jj++)
+		{
+			k = 3*jj;
+			pp[k+0] = x.a[i+mx*n];	pp[k+1] = y.a[i+my*n];	pp[k+2] = z.a[i+mz*n];
+			inan = isnan(pp[k+0]) || isnan(pp[k+1]) || isnan(pp[k+2]);
+			if(jj>0)	onan = isnan(pp[k-3]) || isnan(pp[k-2]) || isnan(pp[k-1]);
+			tt[jj] = ScalePoint(pp[k],pp[k+1],pp[k+2]);
+			if(mk && tt[jj])	Mark(pp[k],pp[k+1],pp[k+2],mk);
+			if(jj>0 && ((tt[jj] && !tt[jj-1] && !onan) || (tt[jj-1] && !tt[jj] && !inan)))	// do smoothing
+			{
+				float i1=0, i2=1, ii;
+				pp[k+3] = pp[k+0];	pp[k+4] = pp[k+1];	// copy current
+				pp[k+5] = pp[k+2];	tt[jj+1] = tt[jj];
+				do {
+					ii = (i1+i2)/2;
+					pp[k+0] = x.a[i+mx*n]*ii+x.a[i-1+mx*n]*(1-ii);
+					pp[k+1] = y.a[i+my*n]*ii+y.a[i-1+my*n]*(1-ii);
+					pp[k+2] = z.a[i+mz*n]*ii+z.a[i-1+mz*n]*(1-ii);
+					tt[jj] = ScalePoint(pp[k],pp[k+1],pp[k+2]);
+					if((tt[jj] && tt[jj+1]) || (tt[jj-1] && !tt[jj]))	i2 = ii;
+					else	i1 = ii;
+				} while(fabs(i2-i1)>1e-3);
+				tt[jj] = true;	jj++;
+			}
 		}
-		curv_plot(n,pp,tt);
+		curv_plot(jj,pp,tt);
 	}
 	SetPal(0);	EndGroup();
 	delete []tt;	delete []pp;
@@ -304,29 +320,43 @@ void mglGraph::Tens(const mglData &x, const mglData &y, const mglData &z, const
 	if(n<2)					{	SetWarn(mglWarnLow,"Tens");	return;	}
 	static int cgid=1;	StartGroup("Tens",cgid++);
 	m = x.ny > y.ny ? x.ny : y.ny;	m = z.ny > m ? z.ny : m;
-	mreal *pp = new mreal[3*n], *cc = new mreal[n];
-	bool *tt = new bool[n];
+	mreal *pp = new mreal[6*n], *cc = new mreal[2*n];
+	bool *tt = new bool[2*n];
 	if(pen && *pen)	{	SetScheme(pen,false);	mk=SelectPen(pen);	}
 	for(j=0;j<m;j++)
 	{
 		mx = j<x.ny ? j:0;	my = j<y.ny ? j:0;
 		mz = j<z.ny ? j:0;	mc = j<c.ny ? j:0;
-		register long i,k;
-		for(i=0;i<n;i++)
+		register long i,jj,k;
+		for(jj=i=0;i<n;i++,jj++)
 		{
-			k = 3*i;
-			pp[k+0] = x.a[i+mx*n];
-			pp[k+1] = y.a[i+my*n];
-			pp[k+2] = z.a[i+mz*n];
-			tt[i] = ScalePoint(pp[k],pp[k+1],pp[k+2]);
-			if(mk && tt[i])
+			k = 3*jj;
+			pp[k+0] = x.a[i+mx*n];	pp[k+1] = y.a[i+my*n];
+			pp[k+2] = z.a[i+mz*n];	cc[jj] = c.a[i+mc*n];
+			tt[jj] = ScalePoint(pp[k],pp[k+1],pp[k+2]);
+			if(mk && tt[jj])
 			{
-				DefColor(GetC(c.a[i+mc*n]));
+				DefColor(GetC(cc[jj]));
 				Mark(pp[k],pp[k+1],pp[k+2],mk);
 			}
+			if(jj>0 && ((tt[jj] && !tt[jj-1]) || (tt[jj-1] && !tt[jj])))	// do smoothing
+			{
+				float i1=0, i2=1, ii;
+				pp[k+3] = pp[k+0];	pp[k+4] = pp[k+1];	// copy current
+				pp[k+5] = pp[k+2];	tt[jj+1] = tt[jj];
+				do {
+					ii = (i1+i2)/2;
+					pp[k+0] = x.a[i+mx*n]*ii+x.a[i-1+mx*n]*(1-ii);
+					pp[k+1] = y.a[i+my*n]*ii+y.a[i-1+my*n]*(1-ii);
+					pp[k+2] = z.a[i+mz*n]*ii+z.a[i-1+mz*n]*(1-ii);
+					tt[jj] = ScalePoint(pp[k],pp[k+1],pp[k+2]);
+					if((tt[jj] && tt[jj+1]) || (tt[jj-1] && !tt[jj]))	i2 = ii;
+					else	i1 = ii;
+				} while(fabs(i2-i1)>1e-3);
+				tt[jj] = true;	jj++;
+			}
 		}
-		memcpy(cc,c.a+mc*n,n*sizeof(mreal));
-		curv_plot(n,pp,cc,tt);
+		curv_plot(jj,pp,cc,tt);
 	}
 	EndGroup();
 	delete []tt;	delete []pp;	delete []cc;
@@ -359,71 +389,80 @@ void mglGraph::Area(const mglData &x, const mglData &y, const mglData &z, const
 	if(n<2)					{	SetWarn(mglWarnLow,"Area");	return;	}
 	static int cgid=1;	StartGroup("Area3",cgid++);
 	m = x.ny > y.ny ? x.ny : y.ny;	m = z.ny > m ? z.ny : m;
-	mreal *pp = new mreal[6*n],z0=GetOrgZ('x');
-	bool *tt = new bool[2*n];
+	mreal *pp = new mreal[6*n], *cc = new mreal[8*n], z0=GetOrgZ('x');
+	bool *tt = new bool[2*n];
+	mglColor c1,c2;
 	SetPal(pen);
 	for(j=0;j<m;j++)
-	{
-		DefColor(GetPal(), -1);
+	{
+		c1 = GetPal();
+		if(NumPal==2*m)	c2 = GetPal();	else	c2 = c1;
 		mx = j<x.ny ? j:0;	my = j<y.ny ? j:0;	mz = j<z.ny ? j:0;
 
 		for(i=0;i<y.nx;i++)
-		{
+		{
+			cc[8*i+3] = cc[8*i+7] = AlphaDef;
+			cc[8*i]   = c2.r;	cc[8*i+1] = c2.g;	cc[8*i+2] = c2.b;
+			cc[8*i+4] = c1.r;	cc[8*i+5] = c1.g;	cc[8*i+6] = c1.b;
 			pp[6*i+3] = pp[6*i+0] = x.a[i+mx*n];
 			pp[6*i+4] = pp[6*i+1] = y.a[i+my*n];
 			pp[6*i+2] = z.a[i+mz*n];
 			tt[2*i] = ScalePoint(pp[6*i+0],pp[6*i+1],pp[6*i+2]);
-//			if(mk && tt[2*i])	Mark(pp[6*i+0],pp[6*i+1],pp[6*i+2],mk);
 			pp[6*i+5] = z0;
 			tt[2*i+1] = ScalePoint(pp[6*i+3],pp[6*i+4],pp[6*i+5]);
 		}
-		surf_plot(2,n,pp,0,tt);
+		surf_plot(2,n,pp,cc,tt);
 	}
 	SetPal(0);	EndGroup();
-	delete []pp;	delete []tt;
+	delete []pp;	delete []tt;	delete []cc;
 }
 //-----------------------------------------------------------------------------
-void mglGraph::Area(const mglData &x, const mglData &y, const char *pen,bool sum,mreal zVal)
+void mglGraph::Area(const mglData &x, const mglData &y, const char *pen, mreal zVal)
 {
 	long i,j,n=y.nx,m=y.ny,mx;
 	if(x.nx!=n)	{	SetWarn(mglWarnDim,"Area");	return;	}
 	if(n<2)		{	SetWarn(mglWarnLow,"Area");	return;	}
 	static int cgid=1;	StartGroup("Curve",cgid++);
-	mreal *pp = new mreal[6*n],y0=GetOrgY('x');
+	mreal *pp = new mreal[6*n], *cc = new mreal[8*n], y0=GetOrgY('x');
 	bool *tt = new bool[2*n], znan = isnan(zVal);
-//	if(isnan(zVal))	zVal = Min.z;
-	mglData f(y);
+	mglColor c1,c2;
+	mglData f(y);
+	bool sum = pen && strchr(pen,'a')!=0;
 	if(sum)	f.CumSum("y");
 
 	SetPal(pen);
 	for(j=0;j<m;j++)
 	{
-		DefColor(GetPal(), -1);
+		c1 = GetPal();
+		if(NumPal==2*m)	c2 = GetPal();	else	c2 = c1;
 		mx = j<x.ny ? j:0;	//my = j<y.ny ? j:0;
 		for(i=0;i<n;i++)
 		{
+			cc[8*i+3] = cc[8*i+7] = AlphaDef;
+			cc[8*i]   = c2.r;	cc[8*i+1] = c2.g;	cc[8*i+2] = c2.b;
+			cc[8*i+4] = c1.r;	cc[8*i+5] = c1.g;	cc[8*i+6] = c1.b;
+
 			pp[6*i+3] = pp[6*i+0] = x.a[i+mx*n];
 			pp[6*i+1] = f.a[i+j*n];
 			// NOTE: I use 'm' (not 'm-1') for placing area plots at z<Max.z
 			pp[6*i+2] = znan ? Min.z + (m-1-j)*(Max.z-Min.z)/m : zVal;
 			tt[2*i+0] = ScalePoint(pp[6*i+0],pp[6*i+1],pp[6*i+2]);
-//			if(mk && tt[2*i])	Mark(pp[6*i+0],pp[6*i+1],pp[6*i+2],mk);
 			pp[6*i+4] = sum && j>0 ? f.a[i+j*n-n] : y0;
 			pp[6*i+5] = znan ? Min.z + (m-1-j)*(Max.z-Min.z)/m : zVal;
 			tt[2*i+1] = ScalePoint(pp[6*i+3],pp[6*i+4],pp[6*i+5]);
 		}
-		surf_plot(2,n,pp,0,tt);
+		surf_plot(2,n,pp,cc,tt);
 	}
 	SetPal(0);	EndGroup();
-	delete []pp;	delete []tt;
+	delete []pp;	delete []tt;	delete []cc;
 }
 //-----------------------------------------------------------------------------
-void mglGraph::Area(const mglData &y, const char *pen,bool sum,mreal zVal)
+void mglGraph::Area(const mglData &y, const char *pen, mreal zVal)
 {
 	if(y.nx<2)		{	SetWarn(mglWarnLow,"Area");	return;	}
 	mglData x(y.nx);
 	x.Fill(Min.x,Max.x);
-	Area(x,y,pen,sum,zVal);
+	Area(x,y,pen,zVal);
 }
 //-----------------------------------------------------------------------------
 //
@@ -437,17 +476,22 @@ void mglGraph::Region(const mglData &x, const mglData &y1, const mglData &y2, co
 	{	SetWarn(mglWarnDim,"Region");	return;	}
 	if(n<2)	{	SetWarn(mglWarnLow,"Region");	return;	}
 	static int cgid=1;	StartGroup("Region",cgid++);
-	mreal *pp = new mreal[6*n], f1,f2;
+	mreal *pp = new mreal[6*n], *cc = new mreal[8*n], f1,f2;
 	bool *tt = new bool[2*n];
 	if(isnan(zVal))	zVal = Min.z;
 
+	mglColor c1,c2;
 	SetPal(pen);
 	for(j=0;j<m;j++)
 	{
-		DefColor(GetPal(), -1);
+		c1 = GetPal();
+		if(NumPal==2*m)	c2 = GetPal();	else	c2 = c1;
 		mx = j<x.ny ? j:0;
 		for(i=0;i<n;i++)
 		{
+			cc[8*i+3] = cc[8*i+7] = AlphaDef;
+			cc[8*i]   = c1.r;	cc[8*i+1] = c1.g;	cc[8*i+2] = c1.b;
+			cc[8*i+4] = c2.r;	cc[8*i+5] = c2.g;	cc[8*i+6] = c2.b;
 			pp[6*i+3] = pp[6*i+0] = x.a[i+mx*n];
 			f1 = y1.a[i+j*n];	f2 = y2.a[i+j*n];
 			pp[6*i+1] = f1;		pp[6*i+2] = zVal;
@@ -456,10 +500,10 @@ void mglGraph::Region(const mglData &x, const mglData &y1, const mglData &y2, co
 			tt[2*i+1] = ScalePoint(pp[6*i+3],pp[6*i+4],pp[6*i+5]);
 			if(f1>f2 && inside)	{	tt[2*i] = tt[2*i+1] = false;	}
 		}
-		surf_plot(2,n,pp,0,tt);
+		surf_plot(2,n,pp,cc,tt);
 	}
 	SetPal(0);	EndGroup();
-	delete []pp;	delete []tt;
+	delete []pp;	delete []tt;	delete []cc;
 }
 //-----------------------------------------------------------------------------
 void mglGraph::Region(const mglData &y1, const mglData &y2, const char *pen, mreal zVal, bool inside)
@@ -647,22 +691,27 @@ void mglGraph::Stem(const mglData &y, const char *pen,mreal zVal)
 //	Bars series
 //
 //-----------------------------------------------------------------------------
-void mglGraph::Bars(const mglData &x, const mglData &y, const mglData &z, const char *pen, bool above)
+void mglGraph::Bars(const mglData &x, const mglData &y, const mglData &z, const char *pen)
 {
 	long i,j,m,mx,my,mz,n=y.nx;
 	if(x.nx!=n || z.nx!=n)	{	SetWarn(mglWarnDim,"Bars");	return;	}
 	if(n<2)					{	SetWarn(mglWarnLow,"Bars");	return;	}
 	static int cgid=1;	StartGroup("Bars3",cgid++);
 	m = x.ny > y.ny ? x.ny : y.ny;	m = z.ny > m ? z.ny : m;
-	mreal *pp = new mreal[12*n],x1,x2,y1,y2,z0=GetOrgZ('x'),zz;
-	bool *tt = new bool[4*n], wire = pen && strchr(pen,'#');
+	mreal *pp = new mreal[12*n],*cc = new mreal[16*n],x1,x2,y1,y2,z0,zz,zp;
+	bool *tt = new bool[4*n], wire = pen && strchr(pen,'#');
+	bool above = pen && strchr(pen,'a')!=0, fall = pen && strchr(pen,'f')!=0;
+	if(above)	fall = false;
 	mglData dd(above ? n : 1);
-
+
+	mglColor c1,c2,c;
 	SetPal(pen);
 	for(j=0;j<m;j++)
-	{
-		DefColor(GetPal(), -1);
-		mx = j<x.ny ? j:0;	my = j<y.ny ? j:0;	mz = j<z.ny ? j:0;
+	{
+		c1 = GetPal();
+		if(NumPal==2*m)	c2 = GetPal();	else	c2 = c1;
+		mx = j<x.ny ? j:0;	my = j<y.ny ? j:0;	mz = j<z.ny ? j:0;
+		zp = z0 = GetOrgZ('x');
 		for(i=0;i<n;i++)
 		{
 			if(i<n-1)
@@ -681,11 +730,18 @@ void mglGraph::Bars(const mglData &x, const mglData &y, const mglData &z, const
 			if(!above)
 			{
 				x2 = (x2-x1)/m;		x1 += j*x2;		x2 += x1;
-				y2 = (y2-y1)/m;		y1 += j*y2;		y2 += y1;
+				y2 = (y2-y1)/m;		y1 += j*y2;		y2 += y1;
 			}
 			else
 			{	z0 = GetOrgZ('x') + dd.a[i];	dd.a[i] += zz;	zz += z0;	}
+			if(fall)	{	z0 = zp;	zz += z0;	zp = zz;	}
 
+			c = (z.a[i+n*mz]<0) ? c1 : c2;
+			cc[16*i]   = cc[16*i+4] = cc[16*i+8] = cc[16*i+12] = c.r;
+			cc[16*i+1] = cc[16*i+5] = cc[16*i+9] = cc[16*i+13] = c.g;
+			cc[16*i+2] = cc[16*i+6] = cc[16*i+10]= cc[16*i+14] = c.b;
+			cc[16*i+3] = cc[16*i+7] = cc[16*i+11]= cc[16*i+15] = AlphaDef;
+
 			pp[12*i+0] = x1;	pp[12*i+1] = y1;	pp[12*i+2] = zz;
 			pp[12*i+3] = x1;	pp[12*i+4] = y1;	pp[12*i+5] = z0;
 			pp[12*i+6] = x2;	pp[12*i+7] = y2;	pp[12*i+8] = z0;
@@ -695,7 +751,7 @@ void mglGraph::Bars(const mglData &x, const mglData &y, const mglData &z, const
 			tt[4*i+2] = ScalePoint(pp[12*i+6],pp[12*i+7],pp[12*i+8]);
 			tt[4*i+3] = ScalePoint(pp[12*i+9],pp[12*i+10],pp[12*i+11]);
 		}
-		quads_plot(n,pp,0,tt);
+		quads_plot(n,pp,cc,tt);
 		if(wire)	for(i=0;i<n;i++)
 		{
 			mreal ct[4]={0,0,0,1}, *pt = pp+12*i;
@@ -706,26 +762,30 @@ void mglGraph::Bars(const mglData &x, const mglData &y, const mglData &z, const
 		}
 	}
 	SetPal(0);	EndGroup();
-	delete []tt;	delete []pp;
+	delete []tt;	delete []pp;	delete []cc;
 }
 //-----------------------------------------------------------------------------
-void mglGraph::Bars(const mglData &x, const mglData &y, const char *pen,mreal zVal, bool above)
+void mglGraph::Bars(const mglData &x, const mglData &y, const char *pen,mreal zVal)
 {
 	long i,j,m,mx,my,n=y.nx;
 	if(x.nx!=n)	{	SetWarn(mglWarnDim,"Bars");	return;	}
 	if(n<2)		{	SetWarn(mglWarnLow,"Bars");	return;	}
 	static int cgid=1;	StartGroup("Bars",cgid++);
 	m = x.ny > y.ny ? x.ny : y.ny;
-	mreal *pp = new mreal[12*n],x1,x2,yy,y0=GetOrgY('x');
+	mreal *pp = new mreal[12*n],*cc = new mreal[16*n],x1,x2,yy,y0,yp;
 	bool *tt = new bool[4*n], wire = pen && strchr(pen,'#');
 	if(isnan(zVal))	zVal = Min.z;
+	bool above = pen && strchr(pen,'a')!=0, fall = pen && strchr(pen,'f')!=0;
+	if(above)	fall = false;
 	mglData dd(above ? n : 1);
 
+	mglColor c1,c2,c;
 	SetPal(pen);
 	for(j=0;j<m;j++)
-	{
-		DefColor(GetPal(), -1);
-		mx = j<x.ny ? j:0;	my = j<y.ny ? j:0;
+	{
+		c1 = GetPal();
+		if(NumPal==2*m)	c2 = GetPal();	else	c2 = c1;
+		mx = j<x.ny ? j:0;	my = j<y.ny ? j:0;	y0 = yp = GetOrgY('x');
 		for(i=0;i<n;i++)
 		{
 			if(i<n-1)	x2 = x.a[i+n*mx] + BarWidth*(x.a[i+1+n*mx]-x.a[i+n*mx])/2;
@@ -737,6 +797,14 @@ void mglGraph::Bars(const mglData &x, const mglData &y, const char *pen,mreal zV
 			{	x2 = (x2-x1)/m;		x1 += j*x2;		x2 += x1;	}
 			else
 			{	y0 = GetOrgY('x') + dd.a[i];	dd.a[i] += yy;	yy += y0;	}
+			if(fall)	{	y0 = yp;	yy += y0;	yp = yy;	}
+
+			c = (y.a[i+n*my]<0) ? c1 : c2;
+			cc[16*i]   = cc[16*i+4] = cc[16*i+8] = cc[16*i+12] = c.r;
+			cc[16*i+1] = cc[16*i+5] = cc[16*i+9] = cc[16*i+13] = c.g;
+			cc[16*i+2] = cc[16*i+6] = cc[16*i+10]= cc[16*i+14] = c.b;
+			cc[16*i+3] = cc[16*i+7] = cc[16*i+11]= cc[16*i+15] = AlphaDef;
+
 			pp[12*i+0] = x1;	pp[12*i+1] = yy;	pp[12*i+2] = zVal;
 			pp[12*i+3] = x1;	pp[12*i+4] = y0;	pp[12*i+5] = zVal;
 			pp[12*i+6] = x2;	pp[12*i+7] = y0;	pp[12*i+8] = zVal;
@@ -746,7 +814,7 @@ void mglGraph::Bars(const mglData &x, const mglData &y, const char *pen,mreal zV
 			tt[4*i+2] = ScalePoint(pp[12*i+6],pp[12*i+7],pp[12*i+8]);
 			tt[4*i+3] = ScalePoint(pp[12*i+9],pp[12*i+10],pp[12*i+11]);
 		}
-		quads_plot(n,pp,0,tt);
+		quads_plot(n,pp,cc,tt);
 		if(wire)	for(i=0;i<n;i++)
 		{
 			mreal ct[4]={0,0,0,1}, *pt = pp+12*i;
@@ -757,38 +825,42 @@ void mglGraph::Bars(const mglData &x, const mglData &y, const char *pen,mreal zV
 		}
 	}
 	SetPal(0);	EndGroup();
-	delete []tt;	delete []pp;
+	delete []tt;	delete []pp;	delete []cc;
 }
 //-----------------------------------------------------------------------------
-void mglGraph::Bars(const mglData &y, const char *pen,mreal zVal, bool above)
+void mglGraph::Bars(const mglData &y, const char *pen,mreal zVal)
 {
 	if(y.nx<2)	{	SetWarn(mglWarnLow,"Bars");	return;	}
 	mglData x(y.nx);
 	x.Fill(Min.x,Max.x);
-	Bars(x,y,pen,zVal,above);
+	Bars(x,y,pen,zVal);
 }
 //-----------------------------------------------------------------------------
 //
 //		Barh series
 //
 //-----------------------------------------------------------------------------
-void mglGraph::Barh(const mglData &y, const mglData &v, const char *pen,mreal zVal, bool above)
+void mglGraph::Barh(const mglData &y, const mglData &v, const char *pen,mreal zVal)
 {
 	long i,j,m,mx,my,n=v.nx;
 	if(y.nx!=n)	{	SetWarn(mglWarnDim,"Barh");	return;	}
 	if(n<2)		{	SetWarn(mglWarnLow,"Barh");	return;	}
 	static int cgid=1;	StartGroup("Barh",cgid++);
 	m = y.ny > v.ny ? y.ny : v.ny;
-	mreal *pp = new mreal[12*n],y1,y2,xx,x0=GetOrgX('y');
+	mreal *pp = new mreal[12*n],*cc = new mreal[16*n],y1,y2,xx,x0,xp;
 	bool *tt = new bool[4*n], wire = pen && strchr(pen,'#');
 	if(isnan(zVal))	zVal = Min.z;
+	bool above = pen && strchr(pen,'a')!=0, fall = pen && strchr(pen,'f')!=0;
+	if(above)	fall = false;
 	mglData dd(above ? n : 1);
 
+	mglColor c1,c2,c;
 	SetPal(pen);
 	for(j=0;j<m;j++)
-	{
-		DefColor(GetPal(), -1);
-		my = j<y.ny ? j:0;	mx = j<v.ny ? j:0;
+	{
+		c1 = GetPal();
+		if(NumPal==2*m)	c2 = GetPal();	else	c2 = c1;
+		my = j<y.ny ? j:0;	mx = j<v.ny ? j:0;	xp = x0 = GetOrgX('y');
 		for(i=0;i<n;i++)
 		{
 			if(i<n-1)	y2 = y.a[i+n*my] + BarWidth*(y.a[i+1+n*my]-y.a[i+n*my])/2;
@@ -800,6 +872,14 @@ void mglGraph::Barh(const mglData &y, const mglData &v, const char *pen,mreal zV
 			{	y2 = (y2-y1)/m;		y1 += j*y2;		y2 += y1;	}
 			else
 			{	x0 = GetOrgX('y') + dd.a[i];	dd.a[i] += xx;	xx += x0;	}
+			if(fall)	{	x0 = xp;	xx += x0;	xp = xx;	}
+
+			c = (v.a[i+n*mx]<0) ? c1 : c2;
+			cc[16*i]   = cc[16*i+4] = cc[16*i+8] = cc[16*i+12] = c.r;
+			cc[16*i+1] = cc[16*i+5] = cc[16*i+9] = cc[16*i+13] = c.g;
+			cc[16*i+2] = cc[16*i+6] = cc[16*i+10]= cc[16*i+14] = c.b;
+			cc[16*i+3] = cc[16*i+7] = cc[16*i+11]= cc[16*i+15] = AlphaDef;
+
 			pp[12*i+0] = xx;	pp[12*i+1] = y1;	pp[12*i+2] = zVal;
 			pp[12*i+3] = xx;	pp[12*i+4] = y2;	pp[12*i+5] = zVal;
 			pp[12*i+6] = x0;	pp[12*i+7] = y2;	pp[12*i+8] = zVal;
@@ -809,7 +889,7 @@ void mglGraph::Barh(const mglData &y, const mglData &v, const char *pen,mreal zV
 			tt[4*i+2] = ScalePoint(pp[12*i+6],pp[12*i+7],pp[12*i+8]);
 			tt[4*i+3] = ScalePoint(pp[12*i+9],pp[12*i+10],pp[12*i+11]);
 		}
-		quads_plot(n,pp,0,tt);
+		quads_plot(n,pp,cc,tt);
 		if(wire)	for(i=0;i<n;i++)
 		{
 			mreal ct[4]={0,0,0,1}, *pt = pp+12*i;
@@ -820,15 +900,15 @@ void mglGraph::Barh(const mglData &y, const mglData &v, const char *pen,mreal zV
 		}
 	}
 	SetPal(0);	EndGroup();
-	delete []tt;	delete []pp;
+	delete []tt;	delete []pp;	delete []cc;
 }
 //-----------------------------------------------------------------------------
-void mglGraph::Barh(const mglData &v, const char *pen,mreal zVal, bool above)
+void mglGraph::Barh(const mglData &v, const char *pen,mreal zVal)
 {
 	if(v.nx<2)	{	SetWarn(mglWarnLow,"Barh");	return;	}
 	mglData y(v.nx);
 	y.Fill(Min.y,Max.y);
-	Barh(y,v,pen,zVal,above);
+	Barh(y,v,pen,zVal);
 }
 //-----------------------------------------------------------------------------
 //
@@ -896,7 +976,7 @@ void mglGraph::BoxPlot(const mglData &x, const mglData &y, const char *pen,mreal
 			tt[i0] = ScalePoint(pp[3*i0],pp[3*i0+1],pp[3*i0+2]);
 		}
 	}
-	lines_plot(9*n,pp,0,tt,false);
+	lines_plot(9*n,pp,0,tt,false,false);
 	cmap[0]=c1;	cmap[1]=c2;	SetPal(0);	EndGroup();
 	delete []b;		delete []tt;	delete []pp;
 }
@@ -1333,128 +1413,6 @@ void mglGraph::Tube(const mglData &x, const mglData &y, const mglData &z, mreal
 	Tube(x,y,z,r,pen);
 }
 //-----------------------------------------------------------------------------
-//
-//		All in one :) -- NOTE: OBSOLETE functions
-//
-//-----------------------------------------------------------------------------
-void mglGraph::Plot2(const mglData &a, const char *pen,mreal zVal)
-{
-	if(a.nx<2 || a.ny<2)	{	SetWarn(mglWarnLow,"Plot2");	return;	}
-	mglData x,y;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,2*i);	y=a.SubData(-1,2*i+1);
-		Plot(x,y,pen,zVal);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Plot3(const mglData &a, const char *pen)
-{
-	if(a.nx<2 || a.ny<3)	{	SetWarn(mglWarnLow,"Plot3");	return;	}
-	mglData x,y,z;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,3*i);	y=a.SubData(-1,3*i+1);	z=a.SubData(-1,3*i+2);
-		Plot(x,y,z,pen);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Area2(const mglData &a, const char *pen,mreal zVal)
-{
-	if(a.nx<2 || a.ny<2)	{	SetWarn(mglWarnLow,"Area2");	return;	}
-	mglData x,y;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,2*i);	y=a.SubData(-1,2*i+1);
-		Area(x,y,pen,false,zVal);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Area3(const mglData &a, const char *pen)
-{
-	if(a.nx<2 || a.ny<3)	{	SetWarn(mglWarnLow,"Area3");	return;	}
-	mglData x,y,z;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,3*i);	y=a.SubData(-1,3*i+1);	z=a.SubData(-1,3*i+2);
-		Area(x,y,z,pen);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Stem2(const mglData &a, const char *pen,mreal zVal)
-{
-	if(a.nx<2 || a.ny<2)	{	SetWarn(mglWarnLow,"Stem2");	return;	}
-	mglData x,y;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,2*i);	y=a.SubData(-1,2*i+1);
-		Stem(x,y,pen,zVal);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Stem3(const mglData &a, const char *pen)
-{
-	if(a.nx<2 || a.ny<3)	{	SetWarn(mglWarnLow,"Stem3");	return;	}
-	mglData x,y,z;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,3*i);	y=a.SubData(-1,3*i+1);	z=a.SubData(-1,3*i+2);
-		Stem(x,y,z,pen);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Step2(const mglData &a, const char *pen,mreal zVal)
-{
-	if(a.nx<2 || a.ny<2)	{	SetWarn(mglWarnLow,"Step2");	return;	}
-	mglData x,y;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,2*i);	y=a.SubData(-1,2*i+1);
-		Step(x,y,pen,zVal);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Step3(const mglData &a, const char *pen)
-{
-	if(a.nx<2 || a.ny<3)	{	SetWarn(mglWarnLow,"Step3");	return;	}
-	mglData x,y,z;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,3*i);	y=a.SubData(-1,3*i+1);	z=a.SubData(-1,3*i+2);
-		Step(x,y,z,pen);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Bars2(const mglData &a, const char *pen,mreal zVal, bool above)
-{
-	if(a.nx<2 || a.ny<2)	{	SetWarn(mglWarnLow,"Bars2");	return;	}
-	mglData x,y;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,2*i);	y=a.SubData(-1,2*i+1);
-		Bars(x,y,pen,zVal,above);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Bars3(const mglData &a, const char *pen, bool above)
-{
-	if(a.nx<2 || a.ny<3)	{	SetWarn(mglWarnLow,"Bars3");	return;	}
-	mglData x,y,z;
-	for(long i=0;i<a.ny/2;i++)
-	{
-		x=a.SubData(-1,3*i);	y=a.SubData(-1,3*i+1);	z=a.SubData(-1,3*i+2);
-		Bars(x,y,z,pen,above);
-	}
-}
-//-----------------------------------------------------------------------------
-void mglGraph::Torus2(const mglData &a, const char *sch)
-{
-	if(a.nx<2 || a.ny<2)	{	SetWarn(mglWarnLow,"Torus2");	return;	}
-	mglData x=a.SubData(-1,0);
-	mglData z=a.SubData(-1,1);
-	Torus(x,z,sch);
-}
-//-----------------------------------------------------------------------------
 //		1D plotting functions
 //-----------------------------------------------------------------------------
 /// Draw line plot for points in arrays \a x, \a y, \a z.
@@ -1466,12 +1424,6 @@ void mgl_plot_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen)
 /// Draw line plot for points in arrays \a y.
 void mgl_plot(HMGL gr, const HMDT y, const char *pen)
 {	if(gr && y)	gr->Plot(*y,pen);	}
-/// Draw line plot for points in arrays \a a(0,:),\a a(1,:).
-void mgl_plot_2(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Plot2(*a,pen);	}
-/// Draw line plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-void mgl_plot_3(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Plot3(*a,pen);	}
 /// Draw boxplot for points in arrays \a x, \a y.
 void mgl_boxplot_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen)
 {	if(gr && x && y)	gr->BoxPlot(*x,*y,pen);	}
@@ -1496,20 +1448,9 @@ void mgl_area_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char
 /// Draw area plot for points in arrays \a x, \a y.
 void mgl_area_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen)
 {	if(gr && x && y)	gr->Area(*x,*y,pen);	}
-/// Draw area plot for points in arrays \a x, \a y.
-void mgl_area_xys(HMGL gr, const HMDT x, const HMDT y, const char *pen)
-{	if(gr && x && y)	gr->Area(*x,*y,pen,true);	}
 /// Draw area plot for points in arrays \a y.
-void mgl_area_s(HMGL gr, const HMDT y, const char *pen)
-{	if(gr && y)	gr->Area(*y,pen,true);	}
 void mgl_area(HMGL gr, const HMDT y, const char *pen)
 {	if(gr && y)	gr->Area(*y,pen);	}
-/// Draw area plot for points in arrays \a a(0,:),\a a(1,:).
-void mgl_area_2(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Area2(*a, pen);	}
-/// Draw area plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-void mgl_area_3(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Area3(*a,pen);	}
 /// Fill area between curves \a y1, \a y2 parametrically dependent on \a x.
 void mgl_region_xy(HMGL gr, const HMDT x, const HMDT y1, const HMDT y2, const char *pen, int inside)
 {	if(gr && x && y1 && y2)	gr->Region(*x,*y1,*y2,pen,NAN,inside);	}
@@ -1528,12 +1469,6 @@ void mgl_stem_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen)
 /// Draw vertical lines from points in arrays \a y to mglGraph::Org.
 void mgl_stem(HMGL gr, const HMDT y,	const char *pen)
 {	if(gr && y)	gr->Stem(*y,pen);	}
-/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org.
-void mgl_stem_2(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Stem2(*a, pen);	}
-/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org.
-void mgl_stem_3(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Stem3(*a, pen);	}
 /// Draw stairs for points in arrays \a x, \a y, \a z.
 void mgl_step_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char *pen)
 {	if(gr && x && y && z)	gr->Step(*x,*y,*z,pen);	}
@@ -1543,12 +1478,6 @@ void mgl_step_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen)
 /// Draw line plot for points in arrays \a y.
 void mgl_step(HMGL gr, const HMDT y,	const char *pen)
 {	if(gr && y)	gr->Step(*y,pen);	}
-/// Draw stairs for points in arrays \a a(0,:),\a a(1,:).
-void mgl_step_2(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Step2(*a, pen);	}
-/// Draw stairs for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-void mgl_step_3(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Step3(*a, pen);	}
 /// Draw vertical bars from points in arrays \a x, \a y, \a z to mglGraph::Org.
 void mgl_bars_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char *pen)
 {	if(gr && x && y && z)	gr->Bars(*x,*y,*z,pen);	}
@@ -1558,12 +1487,6 @@ void mgl_bars_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen)
 /// Draw vertical bars from points in arrays \a y to mglGraph::Org.
 void mgl_bars(HMGL gr, const HMDT y,	const char *pen)
 {	if(gr && y)	gr->Bars(*y,pen);	}
-/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org.
-void mgl_bars_2(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Bars2(*a, pen);	}
-/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org.
-void mgl_bars_3(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Bars3(*a, pen);	}
 /// Draw vertical bars from points in arrays \a x, \a y to mglGraph::Org.
 void mgl_barh_yx(HMGL gr, const HMDT y, const HMDT v, const char *pen)
 {	if(gr && v && y)	gr->Barh(*y,*v,pen);	}
@@ -1573,9 +1496,6 @@ void mgl_barh(HMGL gr, const HMDT v,	const char *pen)
 /// Draw surface of curve {\a r,\a z} rotatation around Z axis
 void mgl_torus(HMGL gr, const HMDT r, const HMDT z, const char *pen)
 {	if(gr && r && z)	gr->Torus(*r, *z, pen);	}
-/// Draw surface of curve {\a a(0,:),\a a(1,:)} rotatation around Z axis for
-void mgl_torus_2(HMGL gr, const HMDT a, const char *pen)
-{	if(gr && a)	gr->Torus2(*a, pen);	}
 //-----------------------------------------------------------------------------
 /// Draw chart for data a
 void mgl_chart(HMGL gr, const HMDT a, const char *col)
@@ -1640,20 +1560,6 @@ void mgl_plot_(uintptr_t *gr, uintptr_t *y,	const char *pen,int l)
 	if(gr && y)	_GR_->Plot(_D_(y),s);
 	delete []s;
 }
-/// Draw line plot for points in arrays \a a(0,:),\a a(1,:).
-void mgl_plot_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Plot2(_D_(a),s);
-	delete []s;
-}
-/// Draw line plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-void mgl_plot_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Plot3(_D_(a),s);
-	delete []s;
-}
 /// Draw boxplot for points in arrays \a x, \a y.
 void mgl_boxplot_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, const char *pen,int l)
 {
@@ -1712,32 +1618,12 @@ void mgl_area_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, const char *pen,int
 	delete []s;
 }
 /// Draw area plot for points in arrays \a y.
-void mgl_area_s_(uintptr_t *gr, uintptr_t *y, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && y)	_GR_->Area(_D_(y),s,true);
-	delete []s;
-}
 void mgl_area_(uintptr_t *gr, uintptr_t *y, const char *pen,int l)
 {
 	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
 	if(gr && y)	_GR_->Area(_D_(y),s);
 	delete []s;
 }
-/// Draw area plot for points in arrays \a a(0,:),\a a(1,:).
-void mgl_area_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Area2(_D_(a), s);
-	delete []s;
-}
-/// Draw area plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-void mgl_area_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Area3(_D_(a),s);
-	delete []s;
-}
 /// Fill area between the curves \a y1, \a y2 parametrically dependent on \a x.
 void mgl_region_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y1, uintptr_t *y2, const char *pen, int *inside, int l)
 {
@@ -1776,20 +1662,6 @@ void mgl_stem_(uintptr_t *gr, uintptr_t *y,	const char *pen,int l)
 	if(gr && y)	_GR_->Stem(_D_(y),s);
 	delete []s;
 }
-/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org.
-void mgl_stem_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Stem2(_D_(a), s);
-	delete []s;
-}
-/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org.
-void mgl_stem_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Stem3(_D_(a), s);
-	delete []s;
-}
 /// Draw stairs for points in arrays \a x, \a y, \a z.
 void mgl_step_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int l)
 {
@@ -1811,20 +1683,6 @@ void mgl_step_(uintptr_t *gr, uintptr_t *y,	const char *pen,int l)
 	if(gr && y)	_GR_->Step(_D_(y),s);
 	delete []s;
 }
-/// Draw stairs for points in arrays \a a(0,:),\a a(1,:).
-void mgl_step_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Step2(_D_(a), s);
-	delete []s;
-}
-/// Draw stairs for points in arrays \a a(0,:),\a a(1,:),\a a(2,:).
-void mgl_step_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Step3(_D_(a), s);
-	delete []s;
-}
 /// Draw vertical bars from points in arrays \a x, \a y, \a z to mglGraph::Org.
 void mgl_bars_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int l)
 {
@@ -1846,20 +1704,6 @@ void mgl_bars_(uintptr_t *gr, uintptr_t *y,	const char *pen,int l)
 	if(gr && y)	_GR_->Bars(_D_(y),s);
 	delete []s;
 }
-/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org.
-void mgl_bars_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Bars2(_D_(a), s);
-	delete []s;
-}
-/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org.
-void mgl_bars_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Bars3(_D_(a), s);
-	delete []s;
-}
 /// Draw vertical bars from points in arrays \a x, \a y to mglGraph::Org.
 void mgl_barh_yx_(uintptr_t *gr, uintptr_t *y, uintptr_t *v, const char *pen,int l)
 {
@@ -1881,13 +1725,6 @@ void mgl_torus_(uintptr_t *gr, uintptr_t *r, uintptr_t *z, const char *pen,int l
 	if(gr && r && z)	_GR_->Torus(_D_(r), _D_(z), s);
 	delete []s;
 }
-/// Draw surface of curve {\a a(0,:),\a a(1,:)} rotatation around Z axis for
-void mgl_torus_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l)
-{
-	char *s=new char[l+1];	memcpy(s,pen,l);	s[l]=0;
-	if(gr && a)	_GR_->Torus2(_D_(a), s);
-	delete []s;
-}
 //-----------------------------------------------------------------------------
 /// Draw chart for data a
 void mgl_chart_(uintptr_t *gr, uintptr_t *a, const char *col,int l)
diff --git a/mgl/mgl_ab.cpp b/mgl/mgl_ab.cpp
index 3a9b3d5..53dba12 100644
--- a/mgl/mgl_ab.cpp
+++ b/mgl/mgl_ab.cpp
@@ -19,7 +19,7 @@
  ***************************************************************************/
 #include <stdlib.h>
 #include <time.h>
-#include <wchar.h>
+#include <wchar.h>
 
 #include "mgl/mgl_ab.h"
 #define imax(a,b)	(a)>(b) ? (a) : (b)
@@ -37,14 +37,14 @@ mglGraphAB::mglGraphAB(int w,int h) : mglGraph()
 	G = 0;	UseLight = false;	st_pos=-1;
 	memset(stack,0,MGL_STACK_ENTRY*13*sizeof(mreal));
 	SetSize(w,h);	ClfOnUpdate = true;	SetDrawReg(1,1,0);
-	AutoClf=true;	Delay = 100;	ObjId=0;
+	AutoClf=true;	Delay = 1;	ObjId=0;	pPos=0;
 	NoAutoFactor = false;	ShowMousePos = true;
 	BDef[0] = BDef[1] = BDef[2] = BDef[3] = 255;
 	DefaultPlotParam();
 }
 //-----------------------------------------------------------------------------
 mglGraphAB::~mglGraphAB()
-{	if(G)	{	delete []G;	delete []G4;	}	}
+{	if(G)	{	delete []G;	delete []G4;	delete []OI;	}	}
 //-----------------------------------------------------------------------------
 void mglGraphAB::Pop()
 {
@@ -92,11 +92,12 @@ void mglGraphAB::Pen(mglColor col, char style,mreal width)
 	switch(style)
 	{
 	case '-': PDef = 0xffff;	break;
-	case '|': PDef = 0xff00;	break;
-	case ';': PDef = 0xf0f0;	break;
-	case ':': PDef = 0x8888;	break;
-	case 'j': PDef = 0xfe10;	break;
-	case 'i': PDef = 0xe4e4;	break;
+	case '|': PDef = 0x00ff;	break;
+	case ';': PDef = 0x0f0f;	break;
+	case '=': PDef = 0x3333;	break;
+	case ':': PDef = 0x1111;	break;
+	case 'j': PDef = 0x087f;	break;
+	case 'i': PDef = 0x2727;	break;
 	case ' ': PDef = 0x0000;	break;
 //	case 0:	  PDef = 0x0000;	break;
 //	default:  PDef = 0xffff;
@@ -132,21 +133,8 @@ void mglGraphAB::RotateN(mreal Tet,mreal x,mreal y,mreal z)
 void mglGraphAB::Perspective(mreal a)	// I'm too lazy for using 4*4 matrix
 {	Persp = fabs(a)/Depth;	}
 //-----------------------------------------------------------------------------
-void mglGraphAB::RestoreM()
-{
-	memcpy(B,BL,9*sizeof(mreal));
-	xPos = BL[9];	yPos = BL[10];	zPos = BL[11];
-	PlotFactor = BL[12];
-}
-//-----------------------------------------------------------------------------
 void mglGraphAB::InPlot(mreal x1,mreal x2,mreal y1,mreal y2, bool rel)
 {
-	if(!rel)
-	{
-		memcpy(BL,B,9*sizeof(mreal));
-		BL[9] = xPos;	BL[10] = yPos;	BL[11] = zPos;
-		BL[12] = PlotFactor;
-	}
 	SelectPen("k-1");
 	if(Width<=0 || Height<=0 || Depth<=0)	return;
 	memset(B,0,9*sizeof(mreal));
@@ -370,23 +358,24 @@ void mglGraphAB::Putsw(mglPoint p, const wchar_t *wcs, const char *font, mreal s
 	if(font && strchr(font, 'a'))	{	Labelw(p.x, p.y, wcs,font,size,true);	return;	}
 
 	wchar_t *wcl;
-	int wn=0;
+	unsigned wn=0;
 	const wchar_t *wnl=0;
 	for(wn=0;wn<wcslen(wcs);wn++)
-		if(wcs[wn]=='\n' || (wcs[wn]=='\\' && wcs[wn+1]=='n'))
+		if(wcs[wn]=='\n' || (wcs[wn]=='\\' && wcs[wn+1]=='n' && strchr(" \t,.{[]1234567890",wcs[wn+2])))
 		{	wnl = wcs+wn;	break;	}
 	if(wnl)
 	{
 		wcl = new wchar_t[wn+1];	memcpy(wcl,wcs,wn*sizeof(wchar_t));
 		wcl[wn]=0;	Putsw(p, wcl, font, size, dir, sh);
 		wnl = wcs[wn]=='\n'?wnl+1:wnl+2;
+		if(*wnl<=' ')	wnl++;
 		nl_shift++;	Putsw(p, wnl, font, size, dir, sh);	nl_shift--;
 		return;
 	}
 
 	bool upside = ( (((_sx==-1) ^ (Org.y==Max.y || Org.z==Max.z)) && (dir=='x' || dir=='X')) ||
 					(((_sy==-1) ^ (Org.x==Max.x || Org.z==Max.z)) && (dir=='y' || dir=='Y')) ||
-					(((_st==-1) ^ (Org.x==0 || Org.z==1)) && (dir=='t' || dir=='T')) ||
+					(((_st==1)) && (dir=='t' || dir=='T')) ||
 					(((_sz==-1) ^ (Org.y==Max.y || Org.x==Max.x)) && (dir=='z' || dir=='Z')) );
 	mreal pp[6] = {p.x,p.y,p.z,p.x,p.y,p.z};
 	Arrow1 = Arrow2 = '_';
@@ -409,22 +398,21 @@ void mglGraphAB::Putsw(mglPoint p, const wchar_t *wcs, const char *font, mreal s
 	{
 	case 'x':
 	case 'X':
-		pp[3] += pp[3] ? fabs(pp[3])*.001 :(Max.x - Min.x)/100;	break;
+//		pp[3] += pp[3] ? fabs(pp[3])*.001 :(Max.x - Min.x)/100;	break;
+		pp[3] += (Max.x - Min.x)/1000;	break;
 	case 'y':
 	case 'Y':
 		if(TernAxis)	upside = !upside;
-		pp[4] += pp[4] ? fabs(pp[4])*.001 : (Max.y - Min.y)/10;	break;
+//		pp[4] += pp[4] ? fabs(pp[4])*.001 : (Max.y - Min.y)/10;	break;
+		pp[4] += (Max.y - Min.y)/1000;	break;
 	case 'z':
 	case 'Z':
 		if(TernAxis)	upside = !upside;
-		pp[4] -= 0;
-		pp[5] += pp[5] ? fabs(pp[5])*.001 :(Max.z - Min.z)/100;	break;
+//		pp[4] -= 0;		pp[5] += pp[5] ? fabs(pp[5])*.001 :(Max.z - Min.z)/100;	break;
+		pp[5] += (Max.z - Min.z)/1000;	break;
 	case 't':
 	case 'T':
-//		upside = !upside;
-		pp[3] += (Max.x - Min.x)/100;
-		pp[4] -= (Max.y - Min.y)/100;
-		pp[5] += 0;	break;
+		pp[3] += (Max.x - Min.x)/1000;	pp[4] -= (Max.y - Min.y)/1000;	break;
 	}
 	if(upside)	shift = -shift;
 	shift *= fsize/2;
@@ -486,7 +474,7 @@ void mglGraphAB::Putsw(mglPoint p, const wchar_t *wcs, const char *font, mreal s
 		}
 	}
 	zoomx1=x1;	zoomx2=x2;	zoomy1=y1;	zoomy2=y2;
-	yPos -= nl_shift*shift*1.25;
+	yPos -= nl_shift*0.11/PlotFactor*fsize;
 	fnt->Puts(wcs,font1,col);
 	Pop();	delete []font1;	EndGroup();
 }
@@ -500,7 +488,8 @@ void mglGraphAB::Legend(int n, wchar_t **text,char **style, mreal x, mreal y,
 	static int cgid=1;	StartGroup("Legend",cgid++);
 	mreal pp[15], r=GetRatio(), rh, rw, s3=PlotFactor;
 	if(size<=0)	size = -size*FontSize;
-	if(!font || !(*font))	font="L";
+	if(!font || !(*font))	font="L";
+	char *pA, *ff = new char[strlen(font)+1];	strcpy(ff,font);
 	llen *= 1.5;
 
 	rh=(r<1?r:1.)*size/6.;	rw=(r>1?1./r:1.)*size/8.;
@@ -514,8 +503,14 @@ void mglGraphAB::Legend(int n, wchar_t **text,char **style, mreal x, mreal y,
 		w = w>j ? w:j;
 	}
 	w = (w + llen*1.1f);	// add space for lines
-
-	Push();	memcpy(B,B1,9*sizeof(mreal));
+
+	bool rel = true;
+	if((pA=strchr(ff,'A')))
+	{
+		*pA = 'L';
+		rel = false;
+	}
+	Push();	Identity(rel);	//	memcpy(B,B1,9*sizeof(mreal));
 	if(LegendBox)	// draw bounding box
 	{
 		pp[2] = pp[5] = pp[8] = pp[11] = pp[14] = s3-0.01;
@@ -540,13 +535,19 @@ void mglGraphAB::Legend(int n, wchar_t **text,char **style, mreal x, mreal y,
 		pp[0] = x+0.1f*llen;	pp[3] = x+0.9f*llen;	pp[6] = x+0.5f*llen;
 //		ScalePoint(pp[0],pp[1],pp[2]);	ScalePoint(pp[3],pp[4],pp[5]);	ScalePoint(pp[6],pp[7],pp[8]);
 
-		curv_plot(2,pp,0);
-		if(m)	Mark(pp[6],pp[7],pp[8],m);
+		pPos=0;	curv_plot(2,pp,0);
+		if(m)	for(int j=0;j<LegendMarks;j++)
+		{
+			pp[8] = s3;	pp[7] = y+i*h+0.45f*h;
+			pp[6] = x+0.1f*llen + (j+1)*0.8f*llen/(1.+LegendMarks);
+//			ScalePoint(pp[6],pp[7],pp[8]);
+			Mark(pp[6],pp[7],pp[8],m);
+		}
 		SelectPen(TranspType!=2 ? "k-1":"w-1");
-		Putsw(mglPoint(x+(style[i][0]!=0?llen:0), y+i*h+0.3f*h, s3), text[i], font, size);
+		Putsw(mglPoint(x+(style[i][0]!=0?llen:0), y+i*h+0.3f*h, s3), text[i], ff, size);
 	}
 	ScalePuts = true;
-	Pop();	EndGroup();
+	Pop();	EndGroup();	delete []ff;
 }
 //-----------------------------------------------------------------------------
 void mglGraphAB::colorbar(const mglData &vv, const mglColor *cs, int where, mreal x, mreal y, mreal w, mreal h)
@@ -881,6 +882,7 @@ mreal mglGraphAB::GetOrgX(char dir)
 		if(dir=='x')		res = ax[0];
 		else if(dir=='y')	res = ay[0];
 		else if(dir=='z')	res = az[0];
+		else if(dir=='t')	res = Min.x;
 		else res = B[6]>0 ? Max.x:Min.x;
 	}
 	return res;
@@ -896,6 +898,7 @@ mreal mglGraphAB::GetOrgY(char dir)
 		if(dir=='x')		res = ax[1];
 		else if(dir=='y')	res = ay[1];
 		else if(dir=='z')	res = az[1];
+		else if(dir=='t')	res = Min.y;
 		else res = B[7]>0 ? Max.y:Min.y;
 	}
 	return res;
@@ -911,6 +914,7 @@ mreal mglGraphAB::GetOrgZ(char dir)
 		if(dir=='x')		res = ax[2];
 		else if(dir=='y')	res = ay[2];
 		else if(dir=='z')	res = az[2];
+		else if(dir=='t')	res = Min.z;
 		else res = B[8]>0 ? Max.z:Min.z;
 	}
 	return res;
@@ -956,7 +960,7 @@ int mgl_draw_class(mglGraph *gr, void *p)
 {	return p ? ((mglDraw *)p)->Draw(gr) : 0;	}
 void mgl_reload_class(int next, void *p)
 {	if(p)	((mglDraw *)p)->Reload(next);	}
-void mglGraphAB::Window(int argc, char **argv, mglDraw *draw, const char *title, bool maximize)
+void mglGraphAB::Window(int argc, char **argv, const char *title, mglDraw *draw, bool maximize)
 {
 	Window(argc, argv, mgl_draw_class, title, draw, mgl_reload_class, maximize);
 }
diff --git a/mgl/mgl_addon.cpp b/mgl/mgl_addon.cpp
index b3b6c53..bf8e29c 100644
--- a/mgl/mgl_addon.cpp
+++ b/mgl/mgl_addon.cpp
@@ -39,8 +39,8 @@ void mgl_strcls(char *str)
 	}
 	for(n=0;n<strlen(tmp);n++)		if(tmp[n]!=' ')	break;
 	for(i=strlen(tmp)-1;i>0;i--)	if(tmp[i]!=' ')	break;
-	tmp[i+1]=0;
-	strcpy(str,&(tmp[n]));
+	tmp[i+1]=0;	strcpy(str,&(tmp[n]));
+	delete []tmp;
 }
 //---------------------------------------------------------------------------
 int mgl_strpos(const char *str,char *fnd)
@@ -66,7 +66,7 @@ char *mgl_fgetstr(FILE *fp)
 	static char s[256];
 	do
 	{
-		fgets(s,256,fp);
+		if(!fgets(s,256,fp))	break;
 		mgl_strtrim(s);
 //		strlwr(s);
 	} while(!feof(fp) && (s[0]==0 || s[0]=='%' || s[0]=='#'));
@@ -109,8 +109,8 @@ FILE *mgl_next_data(const char *fname,int p)
 
 	if(p>0)	pos = p;
 	if(fname==NULL)	return NULL;
-	if(pos==0)	getcwd(path,256);	// remember ini dyrectory
-	else		chdir(path);
+	if(pos==0)	{	if(!getcwd(path,256))	return 0;	}	// remember ini dyrectory
+	else		{	if(chdir(path)==-1)		return 0;	}
 
 	// read the initial (common) date from "mbrs.ini"
 	FILE *fp=fopen(fname,"rt");
@@ -125,6 +125,8 @@ FILE *mgl_next_data(const char *fname,int p)
 	{
 		s = mgl_fgetstr(fp);
 		fflush(stdout);
+		if(s[0]=='$' || s[1]=='$' || s[3]=='$')
+		{	fclose(fp);	return NULL;	}
 	} while(!feof(fp) && (s[0]!='-' || s[1]!='-' || s[3]!='-'));
 	if(feof(fp))	// no more data
 	{	fclose(fp);	return NULL;	}
diff --git a/mgl/mgl_axis.cpp b/mgl/mgl_axis.cpp
index fc9dd84..f5ffc71 100644
--- a/mgl/mgl_axis.cpp
+++ b/mgl/mgl_axis.cpp
@@ -46,12 +46,10 @@ void wcstrim_mgl(wchar_t *str)
 	wchar_t *c = mgl_wcsdup(str);
 	unsigned long n=wcslen(str);
 	long k;
-	for(k=0;k<long(wcslen(str));k++)	// óäàëÿåì íà÷àëüíûå ïðîáåëû
-		if(!isspace(str[k]))	break;
+	for(k=0;k<long(wcslen(str));k++)	if(!isspace(str[k]))	break;
 	wcscpy(c,&(str[k]));
 	n = wcslen(c);
-	for(k=n-1;k>=0;k--)	// óäàëÿåì íà÷àëüíûå ïðîáåëû
-		if(!isspace(c[k]))		break;
+	for(k=n-1;k>=0;k--)	if(!isspace(c[k]))	break;
 	c[k+1] = 0;
 	wcscpy(str,c);	free(c);
 }
@@ -73,8 +71,7 @@ void mglGraph::DrawXGridLine(mreal t, mreal y0, mreal z0)
 	bool *tt = new bool[GridPnts+1];
 	for(i=0;i<GridPnts+1;i++)
 	{
-		pp[3*i]=t;//TernAxis ? t-t*i/30. : t;
-		pp[3*i+1]=y0;//TernAxis ? t*i/30. : y0;
+		pp[3*i]=t;		pp[3*i+1]=y0;
 		pp[3*i+2]=Min.z+(Max.z-Min.z)*i/GridPnts;
 		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
 	}
@@ -82,7 +79,7 @@ void mglGraph::DrawXGridLine(mreal t, mreal y0, mreal z0)
 	for(i=0;i<GridPnts+1;i++)
 	{
 		pp[3*i]=t;	pp[3*i+2]=z0;
-		pp[3*i+1]=Min.y+(Max.y-(TernAxis ? t:Min.y))*i/GridPnts;
+		pp[3*i+1]=Min.y+(Max.y-(TernAxis ? Min.y+t-Min.x:Min.y))*i/GridPnts;
 		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
 	}
 	curv_plot(GridPnts+1,pp,tt);
@@ -96,8 +93,8 @@ void mglGraph::DrawYGridLine(mreal t, mreal x0, mreal z0)
 	bool *tt = new bool[GridPnts+1];
 	for(i=0;i<GridPnts+1;i++)
 	{
-		pp[3*i]=x0;//TernAxis ? t*i/30. : x0;
-		pp[3*i+1]=t;//TernAxis ? t-t*i/30. : t;
+		pp[3*i]=TernAxis ? Max.x-t+Min.y:x0;
+		pp[3*i+1]=t;
 		pp[3*i+2]=Min.z+(Max.z-Min.z)*i/GridPnts;
 		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
 	}
@@ -105,7 +102,7 @@ void mglGraph::DrawYGridLine(mreal t, mreal x0, mreal z0)
 	for(i=0;i<GridPnts+1;i++)
 	{
 		pp[3*i+2]=z0;	pp[3*i+1]=t;
-		pp[3*i]=Min.x+(Max.x-(TernAxis ? t : Min.x))*i/GridPnts;
+		pp[3*i]=Min.x+(Max.x-(TernAxis ? Min.x+Min.y-t : Min.x))*i/GridPnts;
 		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
 	}
 	curv_plot(GridPnts+1,pp,tt);
@@ -142,17 +139,17 @@ void mglGraph::DrawTGridLine(mreal t, mreal z0)
 	bool *tt = new bool[GridPnts+1];
 	for(i=0;i<GridPnts+1;i++)
 	{
-		pp[3*i]= t*i/GridPnts;
-		pp[3*i+1]=t-t*i/GridPnts;
+		pp[3*i]= Min.x+t*i/GridPnts;
+		pp[3*i+1]=Min.y+t-t*i/GridPnts;
 		pp[3*i+2]=z0;
 		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
 	}
 	curv_plot(GridPnts+1,pp,tt);
 	for(i=0;i<GridPnts+1;i++)
 	{
-		pp[3*i]=t-t*i/GridPnts;
-		pp[3*i+1]=t*i/GridPnts;
-		pp[3*i+2]=z0;
+		pp[3*i]=Min.x;		pp[3*i+1]=Min.y+t;
+		pp[3*i+2]=Min.z+(Max.z-Min.z)*i/GridPnts;
+		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
 	}
 	curv_plot(GridPnts+1,pp,tt);
 	delete [] tt;	delete [] pp;
@@ -227,13 +224,13 @@ void mglGraph::Grid(const char *dir, const char *pen)
 			for(t=z0;t>=Min.z*FLT_EPS;t*=10)	DrawZGridLine(t,x0,y0);
 		}
 	}
-	if(strchr(dir,'t'))
+	if(strchr(dir,'t') && TernAxis)
 	{
 		z0 = isnan(OrgT.z) ? GetOrgZ('z') : OrgT.z;
 		z0 = z0 - ddz*floor((z0-Min.z)/ddz);
 		if(xnum)	for(int i=0;i<xnum;i++)		DrawTGridLine(xval[i],z0);
-		else if(dx)	for(t=Min.x;t<=Max.x;t+=ddx)	DrawTGridLine(t,z0);
-		else if(dy)	for(t=Min.y;t<=Max.y;t+=ddy)	DrawTGridLine(t,z0);
+		else if(dx)	for(t=Min.x;t<=Max.x;t+=ddx)	DrawTGridLine(t-Min.x,z0);
+		else if(dy)	for(t=Min.y;t<=Max.y;t+=ddy)	DrawTGridLine(t-Min.y,z0);
 	}
 	SelectPen("k-1");
 	EndGroup();
@@ -243,39 +240,41 @@ void mglGraph::Labelw(char dir,const wchar_t *text,mreal pos,mreal size,mreal sh
 {
 	mreal t, x0, y0, z0;
 	SelectPen("k-1");
+	char font[33]="C";
+	if(pos<-0.2)	font[0]='L';	if(pos>0.2)	font[0]='R';
+	strcat(font,FontDef);
 	x0 = GetOrgX(dir);	y0 = GetOrgY(dir);	z0 = GetOrgZ(dir);
 	if(size<=0)	size = -size*FontSize;
 	if(dir=='x')
 	{
 		if(dx)	t = (Min.x+Max.x+pos*(Max.x-Min.x))/2;
 		else	t = Min.x*pow(Max.x/Min.x, (pos+1)/2);
-		Putsw(mglPoint(t,y0,z0),text,FontDef,size,'X',shift);
+		Putsw(mglPoint(t,y0,z0),text,font,size,'X',shift);
 	}
 	if(dir=='y')
 	{
 		if(TernAxis)
 		{
-			t = (pos+1)/2;
-			Putsw(mglPoint(Max.x-t,t,z0),text,FontDef,size,'T',shift);
+			t = (Min.y+Max.y+pos*(Max.y-Min.y))/2;
+			Putsw(mglPoint(Max.x+Min.y-t,t,z0),text,font,size,'T',shift);
 		}
 		else
 		{
-			if(dx)	t = (Min.y+Max.y+pos*(Max.y-Min.y))/2;
+			if(dy)	t = (Min.y+Max.y+pos*(Max.y-Min.y))/2;
 			else	t = Min.y*pow(Max.y/Min.y, (pos+1)/2);
-			Putsw(mglPoint(x0,t,z0),text,FontDef,size,'Y',shift);
+			Putsw(mglPoint(x0,t,z0),text,font,size,'Y',shift);
 		}
 	}
 	if(dir=='z')
 	{
-		if(dx)	t = (Min.z+Max.z+pos*(Max.z-Min.z))/2;
+		if(dz)	t = (Min.z+Max.z+pos*(Max.z-Min.z))/2;
 		else	t = Min.z*pow(Max.z/Min.z, (pos+1)/2);
-		Putsw(mglPoint(x0,y0,t),text,FontDef,size,'Z',shift);
+		Putsw(mglPoint(x0,y0,t),text,font,size,'Z',shift);
 	}
 	if(dir=='t' && TernAxis)
 	{
-		if(dx)	t = (Min.x+Max.x-pos*(Max.x-Min.x))/2;
-		else	t = Max.x*pow(Min.x/Max.x, (pos+1)/2);
-		Putsw(mglPoint(x0,t,z0),text,FontDef,size,'Y',shift);
+		t = (Min.y+Max.y-pos*(Max.y-Min.y))/2;
+		Putsw(mglPoint(Min.x,t,Min.z),text,font,size,'Y',shift);
 	}
 }
 //-----------------------------------------------------------------------------
@@ -328,16 +327,16 @@ void _mgl_tick_text(mreal z, mreal z0, mreal d, mreal v, int kind, wchar_t str[6
 	if((kind&1) && z>z0)
 	{
 		int n1,n2;
-		mglprintf(str, 64, fabs(u)<1 ? L"@{(+%.2g)}" : L"@{(+%.3g)}",u);	n1=wcslen(str);
-		mglprintf(str, 64, L"@{(+%g)}",u);	n2=wcslen(str);
-		if(n1<n2)	mglprintf(str, 64, L"@{(+%.2g)}",u);
+		mglprintf(str, 64, fabs(u)<1 ? L"@{(+%.2g)}" : L"@{(+%.3g)}",u);
+		n1=wcslen(str);	mglprintf(str, 64, L"@{(+%g)}",u);	n2=wcslen(str);
+		if(n1<n2)	mglprintf(str, 64, fabs(u)<1 ? L"@{(+%.2g)}" : L"@{(+%.3g)}",u);
 	}
 	else
 	{
 		int n1,n2;
 		mglprintf(str, 64, fabs(u)<1 ? L"%.2g" :  L"%.3g",u);
 		n1=wcslen(str);	mglprintf(str, 64, L"%g",u);	n2=wcslen(str);
-		if(n1<n2)	mglprintf(str, 64, L"%.2g",u);
+		if(n1<n2)	mglprintf(str, 64, fabs(u)<1 ? L"%.2g" :  L"%.3g",u);
 	}
 }
 //-----------------------------------------------------------------------------
@@ -359,10 +358,9 @@ void mglGraph::DrawXTick(mreal x, mreal y0, mreal z0, mreal dy, mreal dz, int f)
 	if(*SubTStl && f)	SelectPen(SubTStl);
 	DrawTick(pp,f!=0);
 }
-void mglGraph::AxisX(bool text)
+void mglGraph::AxisX(bool text, const char *stl)
 {
-	mreal pp[3*31];
-	bool tt[31];
+	mreal pp[3*32];
 	wchar_t str[64];
 	long i;
 	mreal x0,y0,z0,x,ddx,ddy,ddz,v=0;
@@ -374,14 +372,21 @@ void mglGraph::AxisX(bool text)
 	if(ddz==0)	ddz=z0*10>fabs(Max.z-Min.z) ? 0.3*fabs(Max.z-Min.z) : z0*3;
 	if(y0>(Max.y+Min.y)/2)	ddy = -ddy;
 	if(z0>(Max.z+Min.z)/2)	ddz = -ddz;
-	SelectPen(TranspType!=2 ? "k-1":"w-1");
+	SelectPen(stl);
 	for(i=0;i<31;i++)	// draw axis line
 	{
 		pp[3*i+1]=y0;	pp[3*i+2]=z0;
 		pp[3*i]=Min.x+(Max.x-Min.x)*i/30.;
-		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+		ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+	}
+	if(stl[3])
+	{
+		pp[3*31+1]=y0;	pp[3*31+2]=z0;
+		pp[3*31]=Min.x+(Max.x-Min.x)*1.05;
+		ScalePoint(pp[3*31],pp[3*31+1],pp[3*31+2]);
+		curv_plot(32,pp,0);
 	}
-	curv_plot(31,pp,tt);
+	else	curv_plot(31,pp,0);
 
 	if(xnum)	for(int i=0;i<xnum;i++)
 	{
@@ -406,7 +411,6 @@ void mglGraph::AxisX(bool text)
 			x0 = x0 - ddx*floor((x0-Max.x)/ddx+1e-3);
 		}
 		for(x=x0;x<=x1;x+=ddx)
-//		for(x=x0;fabs(x-Max.x)<fabs(Max.x-Min.x)*1.000001;x+=ddx)
 		{
 			DrawXTick(x,y0,z0,ddy,ddz);
 			if(text)
@@ -469,17 +473,19 @@ void mglGraph::AxisX(bool text)
 void mglGraph::DrawYTick(mreal y, mreal x0, mreal z0, mreal dx, mreal dz, int f)
 {
 	mreal pp[9],ff=TickLen/sqrt(1.+f*st_t);
-	pp[0]=x0+dx*ff;	pp[1]=y;	pp[2]=z0;
+	if(TernAxis)
+	{	pp[0]=x0+dx*ff;	pp[1]=y-dx*ff;	pp[2]=z0;	}
+	else
+	{	pp[0]=x0+dx*ff;	pp[1]=y;	pp[2]=z0;	}
 	pp[3]=x0;		pp[4]=y;	pp[5]=z0;
 	pp[6]=x0;		pp[7]=y;	pp[8]=z0+dz*ff;
 	if(*TickStl && !f)	SelectPen(TickStl);
 	if(*SubTStl && f)	SelectPen(SubTStl);
 	DrawTick(pp,f!=0);
 }
-void mglGraph::AxisY(bool text)
+void mglGraph::AxisY(bool text, const char *stl)
 {
-	mreal pp[3*31];
-	bool tt[31];
+	mreal pp[3*32];
 	wchar_t str[64];
 	long i;
 	mreal x0,y0,z0,y,ddx,ddy,ddz,v=0;
@@ -491,14 +497,21 @@ void mglGraph::AxisY(bool text)
 	if(ddz==0)	ddz=z0*10>fabs(Max.z-Min.z) ? 0.3*fabs(Max.z-Min.z) : z0*3;
 	if(x0>(Max.x+Min.x)/2)	ddx = -ddx;
 	if(z0>(Max.z+Min.z)/2)	ddz = -ddz;
-	SelectPen(TranspType!=2 ? "k-1":"w-1");
+	SelectPen(stl);
 	for(i=0;i<31;i++)	// ñàìà îñü
 	{
 		pp[3*i]=x0;	pp[3*i+2]=z0;
 		pp[3*i+1]=Min.y+(Max.y-Min.y)*i/30.;
-		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+		ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+	}
+	if(stl[3])
+	{
+		pp[3*31]=x0;	pp[3*31+2]=z0;
+		pp[3*31+1]=Min.y+(Max.y-Min.y)*1.05;
+		ScalePoint(pp[3*31],pp[3*31+1],pp[3*31+2]);
+		curv_plot(32,pp,0);
 	}
-	curv_plot(31,pp,tt);
+	else	curv_plot(31,pp,0);
 
 	if(ynum)	for(int i=0;i<ynum;i++)
 	{
@@ -592,10 +605,9 @@ void mglGraph::DrawZTick(mreal z, mreal x0, mreal y0, mreal dx, mreal dy, int f)
 	if(*SubTStl && f)	SelectPen(SubTStl);
 	DrawTick(pp,f!=0);
 }
-void mglGraph::AxisZ(bool text)
+void mglGraph::AxisZ(bool text, const char *stl)
 {
-	mreal pp[3*31];
-	bool tt[31];
+	mreal pp[3*32];
 	wchar_t str[64];
 	long i;
 	mreal x0,y0,z0,z,ddx,ddy,ddz,v=0;
@@ -607,14 +619,21 @@ void mglGraph::AxisZ(bool text)
 	if(ddy==0)	ddy=y0*10>fabs(Max.y-Min.y) ? 0.3*fabs(Max.y-Min.y) : y0*3;
 	if(x0>(Max.x+Min.x)/2)	ddx = -ddx;
 	if(y0>(Max.y+Min.y)/2)	ddy = -ddy;
-	SelectPen(TranspType!=2 ? "k-1":"w-1");
+	SelectPen(stl);
 	for(i=0;i<31;i++)	// ñàìà îñü
 	{
 		pp[3*i]=x0;	pp[3*i+1]=y0;
 		pp[3*i+2]=Min.z+(Max.z-Min.z)*i/30.;
-		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+		ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+	}
+	if(stl[3])
+	{
+		pp[3*31]=x0;	pp[3*31+1]=y0;
+		pp[3*31+2]=Min.z+(Max.z-Min.z)*1.05;
+		ScalePoint(pp[3*31],pp[3*31+1],pp[3*31+2]);
+		curv_plot(32,pp,0);
 	}
-	curv_plot(31,pp,tt);
+	else	curv_plot(31,pp,0);
 
 	if(znum)	for(int i=0;i<znum;i++)
 	{
@@ -702,22 +721,28 @@ void mglGraph::Axis(const char *dir, bool adjust)
 	if(adjust)	AdjustTicks(dir);
 	static int cgid=1;	StartGroup("Axis",cgid++);
 	bool text = strchr(dir,'_')==NULL;
+	const char *arr = "AKDTVISO";
+	char stl[5]={TranspType!=2?'k':'w', '-', '1', 0, 0};
+	for(unsigned i=0;i<strlen(arr);i++)
+		if(strchr(dir,arr[i]))	{	stl[3]=arr[i];	break;	}
+
 	if(TernAxis)
 	{
 		_sx = _sy = _st = 1;
-		AxisX(text);
-//		AxisY(text);
-		AxisT(text);
+		if(fabs(Max.x-Min.x) != fabs(Max.y-Min.y))
+			SetWarn(mglWarnTern,"Axis");
+		AxisX(text, stl);
+		AxisT(text, stl);
 	}
 	else
 	{
-		if(strchr(dir,'x'))	{	_sx = 1;	AxisX(text);	}
-		if(strchr(dir,'X'))	{	_sx = -1;	AxisX(text);	}
-		if(strchr(dir,'y'))	{	_sy = 1;	AxisY(text);	}
-		if(strchr(dir,'Y'))	{	_sy = -1;	AxisY(text);	}
+		if(strchr(dir,'x'))	{	_sx = 1;	AxisX(text, stl);	}
+		if(strchr(dir,'X'))	{	_sx = -1;	AxisX(text, stl);	}
+		if(strchr(dir,'y'))	{	_sy = 1;	AxisY(text, stl);	}
+		if(strchr(dir,'Y'))	{	_sy = -1;	AxisY(text, stl);	}
 	}
-	if(strchr(dir,'z'))	{	_sz = 1;	AxisZ(text);	}
-	if(strchr(dir,'Z'))	{	_sz = -1;	AxisZ(text);	}
+	if(strchr(dir,'z'))	{	_sz = 1;	AxisZ(text, stl);	}
+	if(strchr(dir,'Z'))	{	_sz = -1;	AxisZ(text, stl);	}
 	EndGroup();
 }
 //-----------------------------------------------------------------------------
@@ -961,7 +986,7 @@ void mglGraph::Legend(int n, wchar_t **text,char **style, int where,
 	Legend(n,text,style,(x+1)/2,(y+1)/2,font,size,llen);
 }
 //-----------------------------------------------------------------------------
-void mglGraph::Ternary(bool t)
+void mglGraph::Ternary(int t)
 {
 	static mglPoint x1(-1,-1,-1),x2(1,1,1),o(NAN,NAN,NAN);
 	static bool c = true;
@@ -978,17 +1003,16 @@ void mglGraph::Ternary(bool t)
 void mglGraph::DrawTTick(mreal y, mreal x0, mreal z0, mreal dx, mreal dz, int f)
 {
 	mreal pp[9],ff=TickLen/sqrt(1.+f*st_t);
-	pp[0]=x0-y-dx*ff;	pp[1]=y;	pp[2]=z0;
-	pp[3]=x0-y;			pp[4]=y;	pp[5]=z0;
-	pp[6]=x0-y;			pp[7]=y;	pp[8]=z0+dz*ff;
+	pp[0]=x0-y+Min.y-dx*ff;		pp[1]=y;	pp[2]=z0;
+	pp[3]=x0-y+Min.y;			pp[4]=y;	pp[5]=z0;
+	pp[6]=x0-y+Min.y;			pp[7]=y;	pp[8]=z0+dz*ff;
 	if(*TickStl && !f)	SelectPen(TickStl);
 	if(*SubTStl && f)	SelectPen(SubTStl);
 	DrawTick(pp,f!=0);
 }
-void mglGraph::AxisT(bool text)
+void mglGraph::AxisT(bool text, const char *stl)
 {
-	mreal pp[3*31];
-	bool tt[31];
+	mreal pp[3*32];
 	wchar_t str[64];
 	long i;
 	mreal z0=GetOrgZ('z'), y, ddx, ddy, ddz;
@@ -998,43 +1022,60 @@ void mglGraph::AxisT(bool text)
 	if(ddx==0)	ddx=(Max.x-Min.x)/2;
 	if(ddy==0)	ddy=(Max.y-Min.y)/2;
 	if(ddz==0)	ddz=(Max.z-Min.z)/2;
-	SelectPen(TranspType!=2 ? "k-1":"w-1");
+	SelectPen(stl);
 
 	for(i=0;i<31;i++)	// ñàìà îñü
 	{
 		pp[3*i]=Max.x+(Min.x-Max.x)*i/30.;
 		pp[3*i+2]=z0;
 		pp[3*i+1]=Min.y+(Max.y-Min.y)*i/30.;
-		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+		ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
 	}
-	curv_plot(31,pp,tt);
+	if(stl[3])
+	{
+		pp[3*31]=Max.x+(Min.x-Max.x)*1.05;
+		pp[3*31+1]=Min.y+(Max.y-Min.y)*1.05;
+		pp[3*31+2]=z0;
+		ScalePoint(pp[3*31],pp[3*31+1],pp[3*31+2]);
+		curv_plot(32,pp,0);
+	}
+	else	curv_plot(31,pp,0);
 	for(i=0;i<31;i++)	// ñàìà îñü
 	{
 		pp[3*i]=Min.x;
 		pp[3*i+1]=Max.y+(Min.y-Max.y)*i/30.;
 		pp[3*i+2]=z0;
-		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+		ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
 	}
-	curv_plot(31,pp,tt);
+	if(stl[3])
+	{
+		pp[3*31]=Min.x;	pp[3*31+2]=z0;
+		pp[3*31+1]=Max.y+(Min.y-Max.y)*1.05;
+		ScalePoint(pp[3*31],pp[3*31+1],pp[3*31+2]);
+		curv_plot(32,pp,0);
+	}
+	else	curv_plot(31,pp,0);
 
 	NSy = NSy<0 ? 0 : NSy;
-	for(y=0;y<=Max.y+(Max.y-Min.y)*1e-6;y+=ddy)
+	for(y=Min.y;y<=Max.y+(Max.y-Min.y)*1e-6;y+=ddy)
 	{
 		if(y>Min.y && y<Max.y)	DrawTTick(y,Max.x,z0,ddx,ddz);
 		mglprintf(str,64,L"%.2g",y);		wcstrim_mgl(str);
-		if(text)	Putsw(mglPoint(Max.x-y,y,z0),str,FontDef,FontSize,'t');
+		if(text)	Putsw(mglPoint(Max.x+Min.y-y,y,z0),str,FontDef,FontSize,'t');
 
-		if(y>Min.y && y<Max.y)	DrawYTick(Max.y-y,Min.x,z0,ddx,ddz);
-		mglprintf(str,64,L"%.2g",y);		wcstrim_mgl(str);
-		if(text)	Putsw(mglPoint(Min.x,Max.y-y,z0),str,FontDef,FontSize,'y');
+		if(y>Min.y && y<Max.y)	DrawYTick(Max.y+Min.y-y,Min.x,z0,ddx,ddz);
+		mreal yy = 1-Min.x-Min.y-Max.y+y;
+		yy = fabs(yy)<(Max.y-Min.y)*1e-6 ? 0:yy;
+		mglprintf(str,64,L"%.2g",yy);	wcstrim_mgl(str);
+		if(text)	Putsw(mglPoint(Min.x,Max.y+Min.y-y,z0),str,FontDef,FontSize,'y');
 	}
 	if(NSy>0)
 	{
 		ddy /= (NSy+1);	// subticks drawing
-		for(y=0;y<=Max.y;y+=ddy)
+		for(y=Min.y;y<=Max.y;y+=ddy)
 		{
 			DrawTTick(y,Max.x,z0,ddx,ddz,1);
-			DrawYTick(Max.y-y,Min.x,z0,ddx,ddz,1);
+			DrawYTick(Max.y+Min.y-y,Min.x,z0,ddx,ddz,1);
 		}
 	}
 }
diff --git a/mgl/mgl_c.cpp b/mgl/mgl_c.cpp
index 3d6b710..902c7b0 100644
--- a/mgl/mgl_c.cpp
+++ b/mgl/mgl_c.cpp
@@ -157,28 +157,31 @@ void mgl_set_ambbr(HMGL gr, mreal i)
 //-----------------------------------------------------------------------------
 //		Scale and rotate
 //-----------------------------------------------------------------------------
+/// Push transformation matrix into stack.
+void mgl_mat_push(HMGL gr)	{	gr->Push();	}
+/// Pop transformation matrix into stack.
+void mgl_mat_pop(HMGL gr)	{	gr->Pop();	}
 /// Clear transformation matrix.
-void mgl_identity(HMGL gr, int rel)
-{	gr->Identity(rel);	}
+void mgl_identity(HMGL gr, int rel)	{	gr->Identity(rel);	}
 /// Clear up the frame
-void mgl_clf(HMGL gr)
-{	gr->Clf();	}
+void mgl_clf(HMGL gr)	{	gr->Clf();	}
 /// Clear up the frame
-void mgl_clf_rgb(HMGL gr, mreal r, mreal g, mreal b)
-{	gr->Clf(mglColor(r,g,b));	}
-/// Put further plotting in some region of whole frame surface.
-void mgl_subplot(HMGL gr, int nx,int ny,int m)
-{	gr->SubPlot(nx,ny,m);	}
+void mgl_clf_rgb(HMGL gr, mreal r, mreal g, mreal b){	gr->Clf(mglColor(r,g,b));	}
 /// Put further plotting in some region of whole frame surface.
+void mgl_subplot(HMGL gr, int nx,int ny,int m)		{	gr->SubPlot(nx,ny,m);	}
 void mgl_subplot_d(HMGL gr, int nx,int ny,int m,mreal dx,mreal dy)
 {	gr->SubPlot(nx,ny,m,dx,dy);	}
+void mgl_subplot_s(HMGL gr, int nx,int ny,int m,const char *style)
+{	gr->SubPlot(nx,ny,m,style);	}
 /// Put further plotting in some region of whole frame surface.
 void mgl_inplot(HMGL gr, mreal x1,mreal x2,mreal y1,mreal y2)
-{	gr->InPlot(x1,x2,y1,y2);	}
+{	gr->InPlot(x1,x2,y1,y2,false);	}
 void mgl_relplot(HMGL gr, mreal x1,mreal x2,mreal y1,mreal y2)
 {	gr->InPlot(x1,x2,y1,y2,true);	}
 void mgl_columnplot(HMGL gr, int num, int i)
 {	gr->ColumnPlot(num,i);	}
+void mgl_columnplot_d(HMGL gr, int num, int i, mreal d)
+{	gr->ColumnPlot(num,i,d);	}
 void mgl_stickplot(HMGL gr, int num, int i, mreal tet, mreal phi)
 {	gr->StickPlot(num, i, tet, phi);	}
 /// Set aspect ratio for further plotting.
@@ -341,6 +344,8 @@ void mgl_legend(HMGL gr, int where, const char *font, mreal size, mreal llen)
 {	if(gr)	gr->Legend(where, font, size, llen);	}
 void mgl_set_legend_box(HMGL gr, int enable)
 {	gr->LegendBox = enable;	}
+void mgl_set_legend_marks(HMGL gr, int num)
+{	gr->SetLegendMarks(num);	}
 //-----------------------------------------------------------------------------
 const unsigned char *mgl_get_rgb(HMGL graph)
 {
@@ -393,6 +398,37 @@ void mgl_calc_scr(HMGL gr, mreal x, mreal y, mreal z, int *xs, int *ys)
 	if(g && xs && ys)	g->CalcScr(mglPoint(x,y,z),xs,ys);
 }
 //-----------------------------------------------------------------------------
+void mgl_wnd_set_delay(HMGL gr, mreal dt)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->Delay = dt;	}
+void mgl_wnd_set_auto_clf(HMGL gr, int val)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->AutoClf = val;	}
+void mgl_wnd_set_show_mouse_pos(HMGL gr, int val)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->ShowMousePos = val;	}
+void mgl_wnd_set_clf_update(HMGL gr, int val)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->ClfOnUpdate = val;	}
+void mgl_wnd_toggle_alpha(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->ToggleAlpha();	}
+void mgl_wnd_toggle_light(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->ToggleLight();	}
+void mgl_wnd_toggle_zoom(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->ToggleZoom();	}
+void mgl_wnd_toggle_rotate(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->ToggleRotate();	}
+void mgl_wnd_toggle_no(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->ToggleNo();	}
+void mgl_wnd_update(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->Update();	}
+void mgl_wnd_reload(HMGL gr, int o)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->ReLoad(o);	}
+void mgl_wnd_adjust(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->Adjust();	}
+void mgl_wnd_next_frame(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->NextFrame();	}
+void mgl_wnd_prev_frame(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->PrevFrame();	}
+void mgl_wnd_animation(HMGL gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>(gr);	if(g)	g->Animation();	}
+//-----------------------------------------------------------------------------
 mreal mgl_data_get_value(const HMDT d, int i, int j, int k)
 {	return	d->a[i+d->nx*(j+d->ny*k)];	}
 void mgl_data_set_value(HMDT d, mreal v, int i, int j, int k)
@@ -448,6 +484,7 @@ void mgl_set_auto(HMGL gr, mreal x1, mreal x2, mreal y1, mreal y2, mreal z1, mre
 {	gr->SetAutoRanges(x1,x2,y1,y2,z1,z2);	}
 void mgl_set_tick_len(HMGL gr, mreal len, mreal stt)
 {	gr->SetTickLen(len,stt);	}
-void mgl_set_tick_stl(HMGL gr, const char *stl, const char *sub)
+void mgl_set_tick_stl(HMGL gr, const char *stl, const char *sub)
 {	gr->SetTickStl(stl,sub);	}
+int mgl_get_warn(HMGL gr)	{	return gr->WarnCode;	}
 //-----------------------------------------------------------------------------
diff --git a/mgl/mgl_cont.cpp b/mgl/mgl_cont.cpp
index 36c5145..23ff742 100644
--- a/mgl/mgl_cont.cpp
+++ b/mgl/mgl_cont.cpp
@@ -400,9 +400,9 @@ void mglGraph::ContD(const mglData &v, const mglData &x, const mglData &y, const
 	if(y.nx!=z.ny && (x.ny!=z.ny || y.nx!=z.nx || y.ny!=z.ny))
 	{	SetWarn(mglWarnDim, "ContD");	return;	}
 	if(!sch || !(*sch))	sch = PalNames;
-	mglColor *cm = new mglColor[NUM_COLOR];
+	mglColor *cm = new mglColor[MGL_CMAP_COLOR];
 	long nc=NumCol, i, len=strlen(sch);
-	memcpy(cm,cmap,NUM_COLOR*sizeof(mglColor));	// save color scheme
+	memcpy(cm,cmap,MGL_CMAP_COLOR*sizeof(mglColor));	// save color scheme
 	mglData vv(2);
 	char ss[2]="k";
 	for(i=0;i<v.nx*v.ny*v.nz-1;i++)
@@ -412,7 +412,7 @@ void mglGraph::ContD(const mglData &v, const mglData &x, const mglData &y, const
 	}
 	
 	NumCol = nc;
-	memcpy(cmap,cm,NUM_COLOR*sizeof(mglColor));	// restore color scheme
+	memcpy(cmap,cm,MGL_CMAP_COLOR*sizeof(mglColor));	// restore color scheme
 	delete []cm;
 }
 //-----------------------------------------------------------------------------
diff --git a/mgl/mgl_crust.cpp b/mgl/mgl_crust.cpp
index 8f6cdbf..d25fd25 100644
--- a/mgl/mgl_crust.cpp
+++ b/mgl/mgl_crust.cpp
@@ -56,56 +56,135 @@ void mglGraph::TriPlot(const mglData &nums, const mglData &x, const mglData &y,
 		k3 = long(nums.a[3*i+2]+0.1);	if(k3<0 || k3>=n)	continue;
 		nn[3*j]=k1;	nn[3*j+1]=k2;	nn[3*j+2]=k3;	j++;
 	}
-//	DefColor(mglColor(0,0,0),1);
-//	trigs_plot(j,nn,n,pp,cc,tt,false, a.nx==m);
-//	if(sch && strchr(sch,'#'))
-//		trigs_plot(j,nn,n,pp,0,tt,true, a.nx==m);
 	trigs_plot(j,nn,n,pp,cc,tt,sch && strchr(sch,'#'), a.nx==m);
 	EndGroup();
 	delete []pp;	delete []tt;	delete []cc;	delete []nn;
 }
 //-----------------------------------------------------------------------------
 void mglGraph::TriPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch)
+{
+	TriPlot(nums,x,y,z,z,sch);
+}
+//-----------------------------------------------------------------------------
+void mglGraph::TriPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch, mreal zVal)
+{
+	if(isnan(zVal))	zVal = Min.z;
+	mglData z(x.nx);
+	z.Fill(zVal,zVal);
+	TriPlot(nums,x,y,z,z,sch);
+}
+//-----------------------------------------------------------------------------
+//
+//	TriCont series
+//
+//-----------------------------------------------------------------------------
+void mglGraph::tricont_line(mreal val, long i, long k1, long k2, long k3, const mglData &x, const mglData &y, 
+					const mglData &z, const mglData &a, mreal zVal)
+{
+	mreal d1,d2,p1[3],p2[3],c1[4],c2[4];
+	mglColor q1,q2,q3;
+	d1 = _d(val,z.a[k1],z.a[k2]);
+	d2 = _d(val,z.a[k1],z.a[k3]);
+	if(d1<0 || d1>1 || d2<0 || d2>1)	return;
+	p1[2] = p2[2] = zVal;
+
+	p1[0] = x.a[k1]*(1-d1)+x.a[k2]*d1;
+	p1[1] = y.a[k1]*(1-d1)+y.a[k2]*d1;
+	if(!ScalePoint(p1[0],p1[1],p1[2]))	return;
+	p2[0] = x.a[k1]*(1-d2)+x.a[k3]*d2;
+	p2[1] = y.a[k1]*(1-d2)+y.a[k3]*d2;
+	if(!ScalePoint(p1[0],p1[1],p1[2]))	return;
+	if(a.nx==x.nx)
+	{
+		q1 = GetC(a.a[k1]);	q2 = GetC(a.a[k2]);	q3 = GetC(a.a[k3]);
+		c1[0] = q1.r*(1-d1)+q2.r*d1;	c2[0] = q1.r*(1-d2)+q3.r*d2;
+		c1[2] = q1.g*(1-d1)+q2.g*d1;	c2[2] = q1.g*(1-d2)+q3.g*d2;
+		c1[3] = q1.b*(1-d1)+q2.b*d1;	c2[3] = q1.b*(1-d2)+q3.b*d2;
+		c1[3]=c2[3]=1;
+	}
+	else
+	{
+		q1 = GetC(a.a[i]);	c1[0]=q1.r;	c1[1]=q1.g;	c1[2]=q1.b;	c1[3]=1;
+		memcpy(c2,c1,4*sizeof(mreal));
+	}
+	line_plot(p1,p2,c1,c2);
+}
+//-----------------------------------------------------------------------------
+void mglGraph::TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch,mreal zVal)
 {
 	long n = x.nx, m = nums.ny;
-	if(y.nx!=n || z.nx!=n || nums.nx<3)	{	SetWarn(mglWarnLow,"TriPlot");	return;	}
+	if(y.nx!=n || z.nx!=n || nums.nx<3)	{	SetWarn(mglWarnLow,"TriCont");	return;	}
+	if(a.nx!=m && a.nx!=n)	{	SetWarn(mglWarnLow,"TriCont");	return;	}
 	SetScheme(sch);
-	static int cgid=1;	StartGroup("TriPlot",cgid++);
-	mreal *pp = new mreal[3*n], *cc = new mreal[4*n];
-	bool *tt = new bool[n];
-	long *nn = new long[3*m];
-	mglColor c;
-	register long i,j,k1,k2,k3;
-	for(i=0;i<n;i++)
-	{
-		pp[3*i] = x.a[i];	pp[3*i+1] = y.a[i];	pp[3*i+2] = z.a[i];
-		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
-		c = GetC(x.a[i], y.a[i], z.a[i]);
-		cc[4*i] = c.r;		cc[4*i+1] = c.g;
-		cc[4*i+2] = c.b;	cc[4*i+3] = Transparent ? AlphaDef : 1;
+	static int cgid=1;	StartGroup("TriCont",cgid++);
+	mreal val;
+	register long i,k;
+	long k1,k2,k3;
+	for(k=0;k<v.nx;k++)	for(i=0;i<m;i++)
+	{
+		k1 = long(nums.a[3*i]+0.1);		if(k1<0 || k1>=n)	continue;
+		k2 = long(nums.a[3*i+1]+0.1);	if(k2<0 || k2>=n)	continue;
+		k3 = long(nums.a[3*i+2]+0.1);	if(k3<0 || k3>=n)	continue;
+		val = isnan(zVal) ? v.a[k] : zVal;
+		tricont_line(v.a[k], i,k1,k2,k3,x,y,z,a,val);
+		tricont_line(v.a[k], i,k2,k1,k3,x,y,z,a,val);
+		tricont_line(v.a[k], i,k3,k2,k1,x,y,z,a,val);
 	}
+}
+//-----------------------------------------------------------------------------
+void mglGraph::TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch, int Num, mreal zVal)
+{
+	if(Num<1)	{	SetWarn(mglWarnCnt,"Cont");	return;	}
+	mglData v(Num);
+	for(long i=0;i<Num;i++)	v.a[i] = Cmin + (Cmax-Cmin)*mreal(i+1)/(Num+1);
+	TriContV(v,nums,x,y,z,a,sch,zVal);
+}
+//-----------------------------------------------------------------------------
+void mglGraph::TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch, int Num, mreal zVal)
+{	TriCont(nums,x,y,z,z,sch,Num,zVal);	}
+//-----------------------------------------------------------------------------
+void mglGraph::TriContV(const mglData &v, const mglData &nums, const mglData &x, 
+						const mglData &y, const mglData &z, const char *sch,mreal zVal)
+{	TriContV(v,nums,x,y,z,z,sch,zVal);	}
+//-----------------------------------------------------------------------------
+//
+//	QuadPlot series
+//
+//-----------------------------------------------------------------------------
+void mglGraph::QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch)
+{
+	long n = x.nx, m = nums.ny;
	if(y.nx!=n || z.nx!=n || nums.nx<4)	{	SetWarn(mglWarnLow,"QuadPlot");	return;	}
	if(a.nx!=m && a.nx!=n)	{	SetWarn(mglWarnLow,"QuadPlot");	return;	}
+	SetScheme(sch);
	static int cgid=1;	StartGroup("QuadPlot",cgid++);
	mreal *pp = new mreal[3*n], *cc = new mreal[4*n];
	bool *tt = new bool[n];
	long *nn = new long[4*m];
	mglColor c;
	register long i,j,k1,k2,k3,k4;
	for(i=0;i<n;i++)
	{
		pp[3*i] = x.a[i];	pp[3*i+1] = y.a[i];	pp[3*i+2] = z.a[i];
		tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]);
+	}
+	for(i=0;i<a.nx;i++)
+	{
+		c = GetC(a.a[i]);	cc[4*i] = c.r;		cc[4*i+1] = c.g;
+		cc[4*i+2] = c.b;	cc[4*i+3] = Transparent ? AlphaDef : 1;
+	}
 	for(i=j=0;i<m;i++)
 	{
-		k1 = long(nums.a[3*i]+0.1);		if(k1<0 || k1>=n)	continue;
-		k2 = long(nums.a[3*i+1]+0.1);	if(k2<0 || k2>=n)	continue;
-		k3 = long(nums.a[3*i+2]+0.1);	if(k3<0 || k3>=n)	continue;
-		nn[3*j]=k1;	nn[3*j+1]=k2;	nn[3*j+2]=k3;	j++;
+		k1 = long(nums.a[4*i]+0.1);		if(k1<0 || k1>=n)	continue;
+		k2 = long(nums.a[4*i+1]+0.1);	if(k2<0 || k2>=n)	continue;
+		k3 = long(nums.a[4*i+2]+0.1);	if(k3<0 || k3>=n)	continue;
+		k4 = long(nums.a[4*i+3]+0.1);	if(k4<0 || k4>=n)	continue;
+		nn[4*j]=k1;	nn[4*j+1]=k2;	nn[4*j+2]=k3;	nn[4*j+4]=k4;	j++;
 	}
-//	DefColor(mglColor(0,0,0),1);
-//	trigs_plot(j,nn,n,pp,cc,tt,false);
-//	if(sch && strchr(sch,'#'))
-//		trigs_plot(j,nn,n,pp,0,tt,true);
-	trigs_plot(j,nn,n,pp,cc,tt,sch && strchr(sch,'#'));
+	quads_plot(j,nn,n,pp,cc,tt,sch && strchr(sch,'#'), a.nx==m);
 	EndGroup();
 	delete []pp;	delete []tt;	delete []cc;	delete []nn;
 }
 //-----------------------------------------------------------------------------
-void mglGraph::TriPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch, mreal zVal)
+void mglGraph::QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch)
+{
+	QuadPlot(nums,x,y,z,z,sch);
+}
+//-----------------------------------------------------------------------------
+void mglGraph::QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch, mreal zVal)
 {
 	if(isnan(zVal))	zVal = Min.z;
 	mglData z(x.nx);
 	z.Fill(zVal,zVal);
-	TriPlot(nums,x,y,z,sch);
+	QuadPlot(nums,x,y,z,z,sch);
 }
 //-----------------------------------------------------------------------------
 //
@@ -315,6 +394,27 @@ void mgl_triplot_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const
 /// Draw triangle mesh for points in arrays \a x, \a y.
 void mgl_triplot_xy(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const char *sch, mreal zVal)
 {	if(gr&&nums&&x&&y)	gr->TriPlot(*nums, *x, *y, sch, zVal);	}
+/// Draw quad mesh for points in arrays \a x, \a y, \a z.
+void mgl_quadplot_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch)
+{	if(gr&&nums&&x&&y&&z&&c)	gr->QuadPlot(*nums, *x, *y, *z, *c, sch);	}
+/// Draw quad mesh for points in arrays \a x, \a y, \a z.
+void mgl_quadplot_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch)
+{	if(gr&&nums&&x&&y&&z)	gr->QuadPlot(*nums, *x, *y, *z, sch);	}
+/// Draw quad mesh for points in arrays \a x, \a y.
+void mgl_quadplot_xy(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const char *sch, mreal zVal)
+{	if(gr&&nums&&x&&y)	gr->QuadPlot(*nums, *x, *y, sch, zVal);	}
+
+/// Draw contours for triangle mesh for points in arrays \a x, \a y, \a z.
+void mgl_tricont_xyzcv(HMGL gr, const HMDT v, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch, mreal zVal)
+{	if(gr&&nums&&x&&y&&z&&c)	gr->TriContV(*v, *nums, *x, *y, *z, *c, sch, zVal);	}
+void mgl_tricont_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch, int n, mreal zVal)
+{	if(gr&&nums&&x&&y&&z&&c)	gr->TriCont(*nums, *x, *y, *z, *c, sch, n, zVal);	}
+/// Draw contours for triangle mesh for points in arrays \a x, \a y, \a z.
+void mgl_tricont_xyzv(HMGL gr, const HMDT v, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch, mreal zVal)
+{	if(gr&&nums&&x&&y&&z)	gr->TriContV(*v, *nums, *x, *y, *z, sch, zVal);	}
+void mgl_tricont_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch, int n, mreal zVal)
+{	if(gr&&nums&&x&&y&&z)	gr->TriCont(*nums, *x, *y, *z, sch, n, zVal);	}
+
 /// Draw dots in points \a x, \a y, \a z.
 void mgl_dots(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char *sch)
 {	if(gr&&x&&y&&z)	gr->Dots(*x,*y,*z,sch);	}
@@ -355,6 +455,60 @@ void mgl_triplot_xy_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y,
 	if(gr&&nums&&x&&y)	_GR_->TriPlot(_D_(nums), _D_(x), _D_(y), s, *zVal);
 	delete []s;
 }
+/// Draw triangle mesh for points in arrays \a x, \a y, \a z and color it by \a c.
+void mgl_quadplot_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch,int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && nums && x && y && z && c)
+		_GR_->QuadPlot(_D_(nums), _D_(x), _D_(y), _D_(z), _D_(c), s);
+	delete []s;
+}
+/// Draw triangle mesh for points in arrays \a x, \a y, \a z.
+void mgl_quadplot_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && nums && x && y && z)	_GR_->QuadPlot(_D_(nums), _D_(x), _D_(y), _D_(z), s);
+	delete []s;
+}
+/// Draw triangle mesh for points in arrays \a x, \a y.
+void mgl_quadplot_xy_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, const char *sch, mreal *zVal,int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr&&nums&&x&&y)	_GR_->QuadPlot(_D_(nums), _D_(x), _D_(y), s, *zVal);
+	delete []s;
+}
+
+/// Draw triangle mesh for points in arrays \a x, \a y, \a z and color it by \a c.
+void mgl_tricont_xyzcv_(uintptr_t *gr, uintptr_t *v, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, mreal *zVal,int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && nums && x && y && z && c)
+		_GR_->TriContV(_D_(v), _D_(nums), _D_(x), _D_(y), _D_(z), _D_(c), s, *zVal);
+	delete []s;
+}
+/// Draw triangle mesh for points in arrays \a x, \a y, \a z.
+void mgl_tricont_xyzv_(uintptr_t *gr, uintptr_t *v, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch, mreal *zVal,int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && nums && x && y && z)	_GR_->TriContV(_D_(v), _D_(nums), _D_(x), _D_(y), _D_(z), s, *zVal);
+	delete []s;
+}
+/// Draw triangle mesh for points in arrays \a x, \a y, \a z and color it by \a c.
+void mgl_tricont_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, int *n, mreal *zVal, int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && nums && x && y && z && c)
+		_GR_->TriCont( _D_(nums), _D_(x), _D_(y), _D_(z), _D_(c), s, *n, *zVal);
+	delete []s;
+}
+/// Draw triangle mesh for points in arrays \a x, \a y, \a z.
+void mgl_tricont_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch, int *n, mreal *zVal, int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && nums && x && y && z)	_GR_->TriCont(_D_(nums), _D_(x), _D_(y), _D_(z), s, *n, *zVal);
+	delete []s;
+}
+
 /// Draw dots in points \a x, \a y, \a z.
 void mgl_dots_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int l)
 {
diff --git a/mgl/mgl_data.cpp b/mgl/mgl_data.cpp
index 6779d0b..71279e4 100644
--- a/mgl/mgl_data.cpp
+++ b/mgl/mgl_data.cpp
@@ -24,6 +24,8 @@
 
 #ifndef NO_GSL
 #include <gsl/gsl_fft_complex.h>
+#include <gsl/gsl_dht.h>
+#include <gsl/gsl_sf.h>
 #endif
 
 void mglFillP(int x,int y, const mreal *a,int nx,int ny,mreal _p[4][4]);
@@ -865,10 +867,9 @@ mglData mglTransformA(const mglData &am, const mglData &ph, const char *tr)
 //-----------------------------------------------------------------------------
 mglData mglTransform(const mglData &re, const mglData &im, const char *tr)
 {
-	mglData d,rr(re),ii(im);
 	int nx = re.nx, ny = re.ny, nz = re.nz;
-	if(nx*ny*nz != im.nx*im.ny*im.nz || !tr || tr[0]==0)
-	{	d.Create(1,1,1);	return d;	}
+	if(nx*ny*nz != im.nx*im.ny*im.nz || !tr || tr[0]==0)	return mglData();
+	mglData rr(re),ii(im);
 	if(strchr(tr,'i') && strchr(tr,'f'))	// general case
 	{
 		if(tr[0]=='f')	mglFourier(rr,ii,"x");
@@ -894,9 +895,27 @@ mglData mglTransform(const mglData &re, const mglData &im, const char *tr)
 		if(tr[2]=='f')	str[2]='z';
 		mglFourier(rr,ii,str);
 	}
-	d.Create(nx, ny, nz);
+	else if(strchr(tr,'s'))	// do Fourier only once for speeding up
+	{
+		if(tr[0]=='s')	{	rr.SinFFT("x");	ii.SinFFT("x");	}
+		if(tr[1]=='s')	{	rr.SinFFT("y");	ii.SinFFT("y");	}
+		if(tr[2]=='s')	{	rr.SinFFT("z");	ii.SinFFT("z");	}
+	}
+	else if(strchr(tr,'c'))	// do Fourier only once for speeding up
+	{
+		if(tr[0]=='c')	{	rr.CosFFT("x");	ii.CosFFT("x");	}
+		if(tr[1]=='c')	{	rr.CosFFT("y");	ii.CosFFT("y");	}
+		if(tr[2]=='c')	{	rr.CosFFT("z");	ii.CosFFT("z");	}
+	}
+	else if(strchr(tr,'s'))	// do Fourier only once for speeding up
+	{
+		if(tr[0]=='h')	{	rr.Hankel("x");	ii.Hankel("x");	}
+		if(tr[1]=='h')	{	rr.Hankel("y");	ii.Hankel("y");	}
+		if(tr[2]=='h')	{	rr.Hankel("z");	ii.Hankel("z");	}
+	}
+	mglData d(nx, ny, nz);
 	register long i;
-	for(i=0;i<nx*ny*nz;i++)		d.a[i] = hypot(rr.a[i],ii.a[i]);
+	for(i=0;i<nx*ny*nz;i++)	d.a[i] = hypot(rr.a[i],ii.a[i]);
 	return d;
 }
 //-----------------------------------------------------------------------------
@@ -1015,39 +1034,223 @@ mglData mglSTFA(const mglData &re, const mglData &im, int dn, char dir)
 #endif
 	return d;
 }
+//-----------------------------------------------------------------------------
+void mglData::FillSample(int n, const char *how)
+{
+	bool xx = strchr(how,'x');
+	Create(n);
+	register long i;
+	if(strchr(how,'h'))	// Hankel
+	{
+#ifndef NO_GSL
+		gsl_dht *dht = gsl_dht_new(nx,0,1);
+		for(i=0;i<nx;i++)
+			a[i] = xx ? gsl_dht_x_sample(dht, i) : gsl_dht_k_sample(dht, i);
+		gsl_dht_free(dht);
+#endif
+	}
+	else	// Fourier
+	{
+		if(xx)	for(i=0;i<nx;i++)	a[i] = mreal(2*i-nx)/nx;
+		else	for(i=0;i<nx;i++)	a[i] = M_PI*(i<nx/2 ? i:i-nx);
+	}
+}
 //-----------------------------------------------------------------------------
-void mglData::Swap(const char *dir)
-{
-	register long i,j,k,i0,nn,j0;
-	mreal b;
-	if(strchr(dir,'z') && nz>1)
+void mglData::Hankel(const char *dir)
+{
+#ifndef NO_GSL
+	double *ai=0, *af=0, mm;
+	gsl_dht *dht=0;
+	register long i,j,k;
+	if(strchr(dir,'x') && nx>1)
+	{
+		ai = new double[nx];	af = new double[nx];
+		dht = gsl_dht_new(nx,0,1);
+		mm = gsl_sf_bessel_zero_J0(nx+1);
+		for(i=0;i<ny*nz;i++)
+		{
+			for(j=0;j<nx;j++)	ai[j] = a[j+nx*i];
+			gsl_dht_apply(dht,ai,af);
+			for(j=0;j<nx;j++)	a[j+nx*i] = af[j]*mm;
+		}
+	}
+	if(strchr(dir,'y') && ny>1)
+	{
+		ai = new double[ny];	af = new double[ny];
+		dht = gsl_dht_new(ny,0,1);
+		mm = gsl_sf_bessel_zero_J0(ny+1);
+		for(i=0;i<nx;i++)	for(k=0;k<nz;k++)
+		{
+			for(j=0;j<nx;j++)	ai[j] = a[i+nx*(j+ny*k)];
+			gsl_dht_apply(dht,ai,af);
+			for(j=0;j<nx;j++)	a[i+nx*(j+ny*k)] = af[j]*mm;
+		}
+	}
+	if(strchr(dir,'z') && nz>1)
+	{
+		ai = new double[nz];	af = new double[nz];
+		dht = gsl_dht_new(nz,0,1);
+		mm = gsl_sf_bessel_zero_J0(nz+1);
+		k = nx*ny;	for(i=0;i<k;i++)
+		{
+			for(j=0;j<nz;j++)	ai[j] = a[i+j*k];
+			gsl_dht_apply(dht,ai,af);
+			for(j=0;j<nz;j++)	a[i+j*k] = af[j]*mm;
+		}
+	}
+	if(ai)
 	{
-		for(i=0;i<nx*ny;i++)
-		{
-			nn = (nz/2)*nx*ny;
-			for(j=0;j<nz/2;j++)
-			{	i0 = i+j*nx*ny;	b = a[i0];	a[i0] = a[i0+nn];	a[i0+nn] = b;	}
-		}
+		delete []ai;	delete []af;
+		gsl_dht_free(dht);
+	}
+#endif
+}
+//-----------------------------------------------------------------------------
+void mglData::CosFFT(const char *dir)
+{
+#ifndef NO_GSL
+	double *b = 0;
+	gsl_fft_complex_wavetable *wt=0;
+	gsl_fft_complex_workspace *ws=0;
+	register long i,j,k;
+	if(strchr(dir,'x') && nx>1)
+	{
+		wt = gsl_fft_complex_wavetable_alloc(2*nx);
+		ws = gsl_fft_complex_workspace_alloc(2*nx);
+		b = new double[4*nx];
+		for(i=0;i<ny*nz;i++)
+		{
+			k = i*nx;	memset(b,0,4*nx*sizeof(double));	b[0] = b[2*nx] = a[k];
+			for(j=1;j<nx;j++)	{	b[2*j] = a[k+j];	b[4*nx-2*j] = a[k+j];	}
+			gsl_fft_complex_transform(b, 1, 2*nx, wt, ws, forward);
+			for(j=0;j<nx;j++)	a[k+j] = b[2*j]/sqrt(2*nx);
+		}
 	}
 	if(strchr(dir,'y') && ny>1)
 	{
-		nn = (ny/2)*nx;
-		for(i=0;i<nx;i++)  for(k=0;k<nz;k++)
-		{
-			j0 = i+nx*ny*k;
-			for(j=0;j<ny/2;j++)
-			{	i0 = j0+j*nx;	b = a[i0];	a[i0] = a[i0+nn];	a[i0+nn] = b;	}
-		}
+		wt = gsl_fft_complex_wavetable_alloc(2*ny);
+		ws = gsl_fft_complex_workspace_alloc(2*ny);
+		b = new double[4*ny];
+		for(i=0;i<nx;i++)	for(k=0;k<nz;k++)
+		{
+			memset(b,0,4*ny*sizeof(double));	b[0] = b[2*ny] = a[i+nx*ny*k];
+			for(j=1;j<ny;j++)	{	b[2*j] = a[i+nx*(ny*k+j)];	b[4*ny-2*j] = a[i+nx*(ny*k+j)];	}
+			gsl_fft_complex_transform(b, 1, 2*ny, wt, ws, forward);
+			for(j=0;j<ny;j++)	a[i+nx*(ny*k+j)] = b[2*j]/sqrt(2*ny);
+		}
+	}
+	if(strchr(dir,'z') && nz>1)
+	{
+		wt = gsl_fft_complex_wavetable_alloc(2*nz);
+		ws = gsl_fft_complex_workspace_alloc(2*nz);
+		b = new double[4*nz];	k = nx*ny;
+		for(i=0;i<k;i++)
+		{
+			memset(b,0,4*nz*sizeof(double));	b[0] = b[2*nx] = a[i];
+			for(j=1;j<nx;j++)	{	b[2*j] = a[i+k*j];	b[4*nx-2*j] = a[i+k*j];	}
+			gsl_fft_complex_transform(b, 1, 2*nz, wt, ws, forward);
+			for(j=0;j<nz;j++)	a[i+k*j] = b[2*j]/sqrt(2*nz);
+		}
 	}
+	if(b)
+	{	delete []b;	
+		gsl_fft_complex_workspace_free(ws);
+		gsl_fft_complex_wavetable_free(wt);	}
+#endif
+}
+//-----------------------------------------------------------------------------
+void mglData::SinFFT(const char *dir)
+{
+#ifndef NO_GSL
+	double *b = 0;
+	gsl_fft_complex_wavetable *wt=0;
+	gsl_fft_complex_workspace *ws=0;
+	register long i,j,k;
 	if(strchr(dir,'x') && nx>1)
+	{
+		wt = gsl_fft_complex_wavetable_alloc(2*nx);
+		ws = gsl_fft_complex_workspace_alloc(2*nx);
+		b = new double[4*nx];
+		for(i=0;i<ny*nz;i++)
+		{
+			k = i*nx;	memset(b,0,4*nx*sizeof(double));	b[0] = a[k];	b[2*nx] = -a[k];
+			for(j=1;j<nx;j++)	{	b[2*j] = a[k+j];	b[4*nx-2*j] = -a[k+j];	}
+			gsl_fft_complex_transform(b, 1, 2*nx, wt, ws, forward);
+			for(j=0;j<nx;j++)	a[k+j] = -b[2*j+1]/sqrt(2*nx);
+		}
+	}
+	if(strchr(dir,'y') && ny>1)
 	{
-		nn = nx/2;
-		for(j=0;j<ny*nz;j++)
-		{
-			j0 = j*nx;
-			for(i=0;i<nx/2;i++)
-			{	i0 = i+j0;	b = a[i0];	a[i0] = a[i0+nn];	a[i0+nn] = b;	}
-		}
+		wt = gsl_fft_complex_wavetable_alloc(2*ny);
+		ws = gsl_fft_complex_workspace_alloc(2*ny);
+		b = new double[4*ny];
+		for(i=0;i<nx;i++)	for(k=0;k<nz;k++)
+		{
+			memset(b,0,4*ny*sizeof(double));	b[0] = a[i+nx*ny*k];	b[2*ny] = -a[i+nx*ny*k];
+			for(j=1;j<ny;j++)	{	b[2*j] = a[i+nx*(ny*k+j)];	b[4*ny-2*j] = -a[i+nx*(ny*k+j)];	}
+			gsl_fft_complex_transform(b, 1, 2*ny, wt, ws, forward);
+			for(j=0;j<ny;j++)	a[i+nx*(ny*k+j)] = -b[2*j+1]/sqrt(2*ny);
+		}
+	}
+	if(strchr(dir,'z') && nz>1)
+	{
+		wt = gsl_fft_complex_wavetable_alloc(2*nz);
+		ws = gsl_fft_complex_workspace_alloc(2*nz);
+		b = new double[4*nz];	k = nx*ny;
+		for(i=0;i<k;i++)
+		{
+			memset(b,0,4*nz*sizeof(double));	b[0] = a[i];	b[2*nx] = -a[i];
+			for(j=1;j<nx;j++)	{	b[2*j] = a[i+k*j];	b[4*nx-2*j] = -a[i+k*j];	}
+			gsl_fft_complex_transform(b, 1, 2*nz, wt, ws, forward);
+			for(j=0;j<nz;j++)	a[i+k*j] = -b[2*j+1]/sqrt(2*nz);
+		}
+	}
+	if(b)
+	{	delete []b;	
+		gsl_fft_complex_workspace_free(ws);
+		gsl_fft_complex_wavetable_free(wt);	}
+#endif
+}
+//-----------------------------------------------------------------------------
+void mglData::Swap(const char *dir)
+{
+	if(strchr(dir,'z') && nz>1)	Roll('z',nz/2);
+	if(strchr(dir,'y') && ny>1)	Roll('y',ny/2);
+	if(strchr(dir,'x') && nx>1)	Roll('x',nx/2);
+}
+//-----------------------------------------------------------------------------
+void mglData::Roll(char dir, int num)
+{
+	register long i,d;
+	mreal *b;
+	if(dir=='z' && nz>1)
+	{
+		d = num>0 ? num%nz : (num+nz*(1+num/nz))%nz;
+		if(d==0)	return;		// nothing to do
+		b = new mreal[nx*ny*nz];
+		memcpy(b,a+nx*ny*d,nx*ny*(nz-d)*sizeof(mreal));
+		memcpy(b+nx*ny*(nz-d),a,nx*ny*d*sizeof(mreal));
+		delete []a;	a=b;
+	}
+	if(dir=='y' && ny>1)
+	{
+		d = num>0 ? num%ny : (num+ny*(1+num/ny))%ny;
+		if(d==0)	return;		// nothing to do
+		b = new mreal[nx*ny*nz];
+		memcpy(b,a+nx*d,(nx*ny*nz-nx*d)*sizeof(mreal));
+		for(i=0;i<nz;i++)
+			memcpy(b+nx*(ny-d)+nx*ny*i,a+nx*ny*i,nx*d*sizeof(mreal));
+		delete []a;	a=b;
+	}
+	if(dir=='x' && nx>1)
+	{
+		d = num>0 ? num%nx : (num+nx*(1+num/nx))%nx;
+		if(d==0)	return;		// nothing to do
+		b = new mreal[nx*ny*nz];
+		memcpy(b,a+d,(nx*ny*nz-d)*sizeof(mreal));
+		for(i=0;i<nz*ny;i++)
+			memcpy(b+nx-d+nx*i,a+nx*i,d*sizeof(mreal));
+		delete []a;	a=b;
 	}
 }
 //-----------------------------------------------------------------------------
@@ -1337,13 +1540,13 @@ void mglData::Rearrange(int mx, int my, int mz)
 void mglData::InsertColumns(int at, int num, const char *eq)
 {
 	if(num<1)	return;
-	mglData b(nx+num,ny,nz);
-	if(at<1)	at=1;	if(at>nx)	at=nx;
-	register long i,j,k;
+	if(at<0)	at=0;	if(at>nx)	at=nx;
+	register long i,j,k,nn=nx+num;
+	mglData b(nn,ny,nz);
 	for(i=0;i<at;i++)	for(j=0;j<ny;j++)	for(k=0;k<nz;k++)
-		b.a[i+(nx+num)*(j+ny*k)] = a[i+nx*(j+ny*k)];
+		b.a[i+nn*(j+ny*k)] = a[i+nx*(j+ny*k)];
 	for(i=at;i<nx;i++)	for(j=0;j<ny;j++)	for(k=0;k<nz;k++)
-		b.a[i+num+(nx+num)*(j+ny*k)] = a[i+nx*(j+ny*k)];
+		b.a[i+num+nn*(j+ny*k)] = a[i+nx*(j+ny*k)];
 	if(eq)
 	{
 		mglFormula e(eq);
@@ -1352,7 +1555,7 @@ void mglData::InsertColumns(int at, int num, const char *eq)
 		dy = ny==1?0:1./(ny-1);
 		dz = nz==1?0:1./(nz-1);
 		for(i=0;i<num;i++)	for(j=0;j<ny;j++)	for(k=0;k<nz;k++)
-			b.a[i+at+(nx+num)*(j+ny*k)] = e.Calc(i*dx,j*dy, k*dz);
+			b.a[i+at+nn*(j+ny*k)] = e.Calc(i*dx,j*dy, k*dz);
 	}
 	Set(b);
 }
@@ -1360,13 +1563,13 @@ void mglData::InsertColumns(int at, int num, const char *eq)
 void mglData::InsertRows(int at, int num, const char *eq)
 {
 	if(num<1)	return;
-	mglData b(nx,ny+num,nz);
-	if(at<1)	at=1;	if(at>nx)	at=nx;
-	register long i,j,k;
+	if(at<0)	at=0;	if(at>nx)	at=nx;
+	register long i,j,k,nn=num+ny;
+	mglData b(nx,nn,nz);
 	for(i=0;i<nx;i++)	for(j=0;j<at;j++)	for(k=0;k<nz;k++)
-		b.a[i+nx*(j+(ny+num)*k)] = a[i+nx*(j+ny*k)];
+		b.a[i+nx*(j+nn*k)] = a[i+nx*(j+ny*k)];
 	for(i=0;i<nx;i++)	for(j=at;j<ny;j++)	for(k=0;k<nz;k++)
-		b.a[i+nx*(j+num+(ny+num)*k)] = a[i+nx*(j+ny*k)];
+		b.a[i+nx*(j+num+nn*k)] = a[i+nx*(j+ny*k)];
 	if(eq)
 	{
 		mglFormula e(eq);
@@ -1375,7 +1578,7 @@ void mglData::InsertRows(int at, int num, const char *eq)
 		dx = nx==1?0:1./(nx-1);
 		dz = nz==1?0:1./(nz-1);
 		for(i=0;i<nx;i++)	for(j=0;j<num;j++)	for(k=0;k<nz;k++)
-			b.a[i+nx*(j+at+(ny+num)*k)] = e.Calc(i*dx,j*dy, k*dz);
+			b.a[i+nx*(j+at+nn*k)] = e.Calc(i*dx,j*dy, k*dz);
 	}
 	Set(b);
 }
@@ -1383,9 +1586,9 @@ void mglData::InsertRows(int at, int num, const char *eq)
 void mglData::InsertSlices(int at, int num, const char *eq)
 {
 	if(num<1)	return;
-	mglData b(nx,ny,nz+num);
-	if(at<1)	at=1;	if(at>nx)	at=nx;
+	if(at<0)	at=0;	if(at>nx)	at=nx;
 	register long i,j,k;
+	mglData b(nx,ny,nz+num);
 	for(i=0;i<nx;i++)	for(j=0;j<ny;j++)	for(k=0;k<at;k++)
 		b.a[i+nx*(j+ny*k)] = a[i+nx*(j+ny*k)];
 	for(i=0;i<nx;i++)	for(j=0;j<ny;j++)	for(k=at;k<nz;k++)
@@ -1675,6 +1878,9 @@ void mglData::Put(const mglData &val, int xx, int yy, int zz)
 		else if(val.nx>=nx)
 			for(i=0;i<nx;i++)	for(j=0;j<ny;j++)	for(k=0;k<nz;k++)
 				a[i+nx*(j+k*ny)] = val.a[i];
+		else if(val.nx==1)
+			for(i=0;i<nx;i++)	for(j=0;j<ny;j++)	for(k=0;k<nz;k++)
+				a[i+nx*(j+k*ny)] = val.a[0];
 	}
 	else if(xx<0 && yy<0)	// 2d
 	{
@@ -1684,6 +1890,9 @@ void mglData::Put(const mglData &val, int xx, int yy, int zz)
 		else if(val.nx>=nx)
 			for(i=0;i<nx;i++)	for(j=0;j<ny;j++)
 				a[i+nx*(j+zz*ny)] = val.a[i];
+		else if(val.nx==1)
+			for(i=0;i<nx;i++)	for(j=0;j<ny;j++)
+				a[i+nx*(j+zz*ny)] = val.a[0];
 	}
 	else if(yy<0 && zz<0)	// 2d
 	{
@@ -1693,6 +1902,9 @@ void mglData::Put(const mglData &val, int xx, int yy, int zz)
 		else if(val.nx>=ny)
 			for(i=0;i<ny;i++)	for(j=0;j<nz;j++)
 				a[xx+nx*(i+j*ny)] = val.a[i];
+		else if(val.nx==1)
+			for(i=0;i<ny;i++)	for(j=0;j<nz;j++)
+				a[xx+nx*(i+j*ny)] = val.a[0];
 	}
 	else if(xx<0 && zz<0)	// 2d
 	{
@@ -1702,21 +1914,30 @@ void mglData::Put(const mglData &val, int xx, int yy, int zz)
 		else if(val.nx>=nx)
 			for(i=0;i<nx;i++)	for(j=0;j<nz;j++)
 				a[i+nx*(yy+j*ny)] = val.a[i];
+		else if(val.nx==1)
+			for(i=0;i<nx;i++)	for(j=0;j<nz;j++)
+				a[i+nx*(yy+j*ny)] = val.a[0];
 	}
 	else if(xx<0)
 	{
 		if(val.nx>=nx)	for(i=0;i<nx;i++)
 			a[i+nx*(yy+zz*ny)] = val.a[i];
+		else if(val.nx==1)	for(i=0;i<nx;i++)
+			a[i+nx*(yy+zz*ny)] = val.a[0];
 	}
 	else if(yy<0)
 	{
 		if(val.nx>=ny)	for(i=0;i<ny;i++)
 			a[xx+nx*(i+zz*ny)] = val.a[i];
+		else if(val.nx==1)	for(i=0;i<ny;i++)
+			a[xx+nx*(i+zz*ny)] = val.a[0];
 	}
 	else if(zz<0)
 	{
 		if(val.nx>=nz)	for(i=0;i<nz;i++)
 			a[xx+nx*(yy+i*ny)] = val.a[i];
+		else if(val.nx==1)	for(i=0;i<nz;i++)
+			a[xx+nx*(yy+i*ny)] = val.a[0];
 	}
 }
 //-----------------------------------------------------------------------------
diff --git a/mgl/mgl_data_cf.cpp b/mgl/mgl_data_cf.cpp
index 5b9f102..16a834e 100644
--- a/mgl/mgl_data_cf.cpp
+++ b/mgl/mgl_data_cf.cpp
@@ -96,15 +96,17 @@ mreal mgl_data_min(const HMDT d)	{	return d->Minimal();	}
 mreal *mgl_data_value(HMDT d, int i,int j,int k)
 {	return d->a+i+d->nx*(j+d->ny*k);	}
 /// Swap left and right part of the data in given direction (useful for fourier spectrums)
-void mgl_data_swap(HMDT d, const char *dir)
-{	d->Swap(dir);	}
+void mgl_data_swap(HMDT d, const char *dir)		{	d->Swap(dir);	}
+/// Swap left and right part of the data in given direction (useful for fourier spectrums)
+void mgl_data_roll(HMDT d, char dir, int num)	{	d->Roll(dir,num);	}
 /// Mirror the data in given direction
-void mgl_data_mirror(HMDT d, const char *dir)
-{	d->Mirror(dir);	}
-void mgl_data_insert(HMDT dat, char dir, int at, int num)
-{	dat->Insert(dir,at,num);	}
-void mgl_data_delete(HMDT dat, char dir, int at, int num)
-{	dat->Delete(dir,at,num);	}
+void mgl_data_mirror(HMDT d, const char *dir)	{	d->Mirror(dir);	}
+void mgl_data_fill_sample(HMDT d, int num, const char *how)	{	d->FillSample(num,how);	}
+void mgl_data_insert(HMDT d, char dir, int at, int num){	d->Insert(dir,at,num);	}
+void mgl_data_delete(HMDT d, char dir, int at, int num){	d->Delete(dir,at,num);	}
+void mgl_data_hankel(HMDT d, const char *dir)	{	d->Hankel(dir);	}
+void mgl_data_sinfft(HMDT d, const char *dir)	{	d->SinFFT(dir);	}
+void mgl_data_cosfft(HMDT d, const char *dir)	{	d->CosFFT(dir);	}
 //-----------------------------------------------------------------------------
 /// Allocate memory and copy the data from the (mreal *) array
 void mgl_data_set_float(HMDT d, const float *A,int NX,int NY,int NZ)
@@ -247,6 +249,8 @@ void mgl_data_swap_(uintptr_t *d, const char *dir,int l)
 	_DT_->Swap(s);
 	delete []s;
 }
+void mgl_data_roll_(uintptr_t *d, const char *dir, int *num, int)
+{	_DT_->Roll(*dir, *num);	}
 /// Mirror the data in given direction
 void mgl_data_mirror_(uintptr_t *d, const char *dir,int l)
 {
@@ -254,10 +258,31 @@ void mgl_data_mirror_(uintptr_t *d, const char *dir,int l)
 	_DT_->Mirror(s);
 	delete []s;
 }
+void mgl_data_fill_sample_(uintptr_t *d, int num, const char *how,int l)
+{
+	char *s=new char[l+1];	memcpy(s,how,l);	s[l]=0;
+	_DT_->FillSample(num,s);
+	delete []s;
+}
 void mgl_data_insert_(uintptr_t *d, const char *dir, int *at, int *num, int)
 {	_DT_->Insert(*dir,*at,*num);	}
 void mgl_data_delete_(uintptr_t *d, const char *dir, int *at, int *num, int)
 {	_DT_->Delete(*dir,*at,*num);	}
+void mgl_data_hankel_(uintptr_t *d, const char *dir,int l)
+{
+	char *s=new char[l+1];	memcpy(s,dir,l);	s[l]=0;
+	_DT_->Hankel(s);	delete []s;
+}
+void mgl_data_sinfft_(uintptr_t *d, const char *dir,int l)
+{
+	char *s=new char[l+1];	memcpy(s,dir,l);	s[l]=0;
+	_DT_->SinFFT(s);	delete []s;
+}
+void mgl_data_cosfft_(uintptr_t *d, const char *dir,int l)
+{
+	char *s=new char[l+1];	memcpy(s,dir,l);	s[l]=0;
+	_DT_->CosFFT(s);	delete []s;
+}
 //-----------------------------------------------------------------------------
 /// Allocate memory and copy the data from the (mreal *) array
 void mgl_data_set_float1_(uintptr_t *d, const float *A,int *NX)
diff --git a/mgl/mgl_data_io.cpp b/mgl/mgl_data_io.cpp
index 2cb9aa4..0c5d845 100644
--- a/mgl/mgl_data_io.cpp
+++ b/mgl/mgl_data_io.cpp
@@ -21,9 +21,13 @@
 #include <ctype.h>
 #include <math.h>
 #include <string.h>
+#include <zlib.h>
 #ifdef HAVE_HDF5
 #include <hdf5.h>
 #endif
+#ifdef HAVE_HDF4
+#include <hdf/mfhdf.h>
+#endif
 
 #ifndef WIN32
 #include <glob.h>
@@ -296,36 +300,39 @@ void mglData::Save(const char *fname,int ns) const
 	}
 	fclose(fp);
 }
+//-----------------------------------------------------------------------------
+char *mgl_read_gz(gzFile fp)
+{
+	long size=1024,n=0;
+	char *buf=(char*)malloc(size);
+	while(gzread(fp,buf+size*n,size)>0)
+	{	n++;	buf=(char*)realloc(buf,size*(n+1));	}
+	return buf;
+}
 //-----------------------------------------------------------------------------
 bool mglData::Read(const char *fname)
 {
 	long l=1,m=1,k=1;
 	long nb,i;
-	FILE *fp = fopen(fname,"rb");
+	gzFile fp = gzopen(fname,"r");
 	if(!fp)
-	{
+	{
 		if(!a)	Create(1,1,1);
 		return	false;
 	}
-	fseek(fp,0,SEEK_END);
-	nb = ftell(fp);
-	char *buf = new char[nb+1];
-	fseek(fp,0,SEEK_SET);
-	memset(buf,0,nb*sizeof(char));
-	fread(buf,nb,1,fp);
-	fclose(fp);
+	char *buf = mgl_read_gz(fp);
+	nb = strlen(buf);	gzclose(fp);
 
 	bool first=false,com=false;
 	register char ch;
 	for(i=nb-1;i>=0;i--)	if(buf[i]>' ')	break;
-	buf[i+1]=0;	nb = i;		// remove tailing spaces
+	buf[i+1]=0;	nb = i;		// remove tailing spaces
 	for(i=0;i<nb-1 && !isn(buf[i]);i++)	// determine nx
 	{
+		if(buf[i]=='#')		while(!isn(buf[i]) && i<nb)	i++;
 		ch = buf[i];
-//		sp = (ch==' ' || ch=='\t');
-		if(ch=='#')		while(!isn(buf[i]) && i<nb)	i++;
-		if(!isspace(ch) && !first)	first=true;
-		if(first && (ch==' ' || ch=='\t') && !isspace(buf[i+1])) k++;
+		if(ch>' ' && !first)	first=true;
+		if(first && (ch==' ' || ch=='\t') && buf[i+1]>' ') k++;
 	}
 	first = false;
 	for(i=0;i<nb-1;i++)					// determine ny
@@ -350,8 +357,7 @@ bool mglData::Read(const char *fname)
 		}
 	}
 	else	for(i=0;i<nb-1;i++)	if(buf[i]=='\f')	l++;
-
-	delete []buf;
+	free(buf);
 	return Read(fname,k,m,l);
 }
 //-----------------------------------------------------------------------------
@@ -368,16 +374,11 @@ void mglData::Create(int mx,int my,int mz)
 bool mglData::Read(const char *fname,int mx,int my,int mz)
 {
 	if(mx<=0 || my<=0 || mz<=0)	return false;
-	FILE *fp = fopen(fname,"rt");
+	gzFile fp = gzopen(fname,"r");
 	if(!fp)	return false;
 	Create(mx,my,mz);
-
-	fseek(fp,0,SEEK_END);
-	long nb = ftell(fp);
-	char *buf = new char[nb+1];
-	fseek(fp,0,SEEK_SET);
-	memset(buf,0,nb);	fread(buf,nb,1,fp);
-	fclose(fp);
+	char *buf = mgl_read_gz(fp);
+	long nb = strlen(buf);	gzclose(fp);
 
 	register long i=0, j=0, k=0;
 	while(j<nb)
@@ -404,23 +405,18 @@ bool mglData::Read(const char *fname,int mx,int my,int mz)
 		buf[j]=0;
 		a[i] = atof(s);	i++;	if(i>=nx*ny*nz)	break;
 	}
-	delete []buf;
+	free(buf);
 	return true;
 }
 //-----------------------------------------------------------------------------
 bool mglData::ReadMat(const char *fname,int dim)
 {
 	if(dim<=0 || dim>3)	return false;
-	FILE *fp = fopen(fname,"rt");
+	gzFile fp = gzopen(fname,"r");
 	if(!fp)	return false;
 	nx = ny = nz = 1;	NewId();
-
-	fseek(fp,0,SEEK_END);
-	long nb = ftell(fp);
-	char *buf = new char[nb+1];
-	fseek(fp,0,SEEK_SET);
-	memset(buf,0,nb);	fread(buf,nb,1,fp);
-	fclose(fp);
+	char *buf = mgl_read_gz(fp);
+	long nb = strlen(buf);	gzclose(fp);
 
 	register long i=0,j=0;
 	while(j<nb)
@@ -463,7 +459,7 @@ bool mglData::ReadMat(const char *fname,int dim)
 		if(i>=nx*ny*nz)	break;
 		while(buf[j]>' ' && j<nb)	j++;
 	}
-	delete []buf;
+	free(buf);
 	return true;
 }
 //-----------------------------------------------------------------------------
@@ -775,8 +771,7 @@ void mglData::Squeeze(int rx,int ry,int rz,bool smooth)
 			s += a[i1+nx*(j1+ny*k1)];
 		b[i+kx*(j+ky*k)] = s/dx*dy*dz;
 	}
-	delete []a;
-	a = b;
+	delete []a;	a=b;
 	nx = kx;  ny = ky;  nz = kz;	NewId();
 }
 //-----------------------------------------------------------------------------
@@ -910,6 +905,45 @@ void mglData::Fill(const char *eq, mglPoint r1, mglPoint r2, const mglData *v, c
 	}
 }
 //-----------------------------------------------------------------------------
+void mglData::ReadHDF4(const char *fname,const char *data)
+{
+#ifdef HAVE_HDF4
+	int sd = SDstart(fname,DFACC_READ), nn, i;
+	if(sd==-1)	return;	// is not a HDF4 file
+	char name[64];
+	SDfileinfo(sd,&nn,&i);
+	for(i=0;i<nn;i++)
+	{
+		int sds, rank, dims[32], type, attr, in[2]={0,0};
+		sds = SDselect(sd,i);
+		SDgetinfo(sds,name,&rank,dims,&type,&attr);
+		if(!strcmp(name,data))	// as I understand there are possible many datas with the same name
+		{
+			if(rank==1)			Create(dims[0]);
+			else if(rank==2)	Create(dims[1],dims[0]);
+			else if(rank==3)	Create(dims[3],dims[1],dims[0]);
+			else	continue;
+			if(type==DFNT_FLOAT32)
+			{
+				float *b = new float[nx*ny*nz];
+				SDreaddata(sds,in,0,dims,b);
+				for(long j=0;j<nx*ny*nz;j++)	a[j]=b[j];
+				delete []b;
+			}
+			if(type==DFNT_FLOAT64)
+			{
+				double *b = new double[nx*ny*nz];
+				SDreaddata(sds,in,0,dims,b);
+				for(long j=0;j<nx*ny*nz;j++)	a[j]=b[j];
+				delete []b;
+			}
+		}
+		SDendaccess(sds);
+	}
+	SDend(sd);
+#endif
+}
+//-----------------------------------------------------------------------------
 #ifdef HAVE_HDF5
 void mglData::SaveHDF(const char *fname,const char *data,bool rewrite) const
 {
@@ -951,13 +985,15 @@ void mglData::ReadHDF(const char *fname,const char *data)
 {
 	hid_t hf,hd,hs;
 	hsize_t dims[3];
-	long rank;
-	hf = H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT);
+	long rank, res = H5Fis_hdf5(fname);
+	if(res<=0)	{	ReadHDF4(fname,data);	return;	}
+	hf = H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT);	if(hf<0)	return;
 #ifndef H5_USE_16_API
 	hd = H5Dopen(hf,data,H5P_DEFAULT);
 #else
 	hd = H5Dopen(hf,data);
-#endif
+#endif
+	if(hd<0)	return;
 	hs = H5Dget_space(hd);
 	rank = H5Sget_simple_extent_ndims(hs);
 	if(rank>0 && rank<=3)
@@ -1082,7 +1118,7 @@ bool mglData::ReadAll(const char *templ, bool as_slice)
 	delete []fname;		free(b);
 	return true;
 #else
-    return false;
+	return false;
 #endif
 }
 //-----------------------------------------------------------------------------
diff --git a/mgl/mgl_data_png.cpp b/mgl/mgl_data_png.cpp
index 348134b..4668695 100644
--- a/mgl/mgl_data_png.cpp
+++ b/mgl/mgl_data_png.cpp
@@ -99,31 +99,28 @@ void mglData::Import(const char *fname,const char *scheme,mreal v1,mreal v2)
 {
 	if(v1>=v2)	return;
 	long num=0;
-
 #ifndef NO_PNG
 	FILE *fp = fopen(fname, "rb");
 	if (!fp)	return;
 	png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
-	if (!png_ptr)	return;
+	if (!png_ptr)	{	fclose(fp);	return;	}
 	png_infop info_ptr = png_create_info_struct(png_ptr);
 	if (!info_ptr)
-	{	png_destroy_read_struct(&png_ptr,0, 0);	return;	}
+	{	png_destroy_read_struct(&png_ptr,0,0);	fclose(fp);	return;	}
 	png_infop end_info = png_create_info_struct(png_ptr);
 	if (!end_info)
-	{	png_destroy_read_struct(&png_ptr, &info_ptr, 0);	return;	}
+	{	png_destroy_read_struct(&png_ptr,&info_ptr,0);	fclose(fp);	return;	}
 
 	png_init_io(png_ptr, fp);
 	png_read_png(png_ptr, info_ptr,
 		PNG_TRANSFORM_STRIP_ALPHA|PNG_TRANSFORM_PACKING|
 		PNG_TRANSFORM_STRIP_16|PNG_TRANSFORM_EXPAND,0);
 	unsigned char **rows = png_get_rows(png_ptr, info_ptr);
-
 	unsigned char *c = mgl_create_scheme(scheme,num);
 	if(num>1)
 	{
 		long w=png_get_image_width(png_ptr, info_ptr);
 		long h=png_get_image_height(png_ptr, info_ptr);
-
 		Create(w,h,1);
 		register long i,j,k;
 		long pos=0,val,mval=256;
@@ -147,7 +144,6 @@ void mglData::Import(const char *fname,const char *scheme,mreal v1,mreal v2)
 void mglData::Export(const char *fname,const char *scheme,mreal v1,mreal v2,int ns) const
 {
 	register long i,j,i0,k;
-
 	if(v1>v2)	return;
 	if(v1==v2)
 	{
@@ -156,7 +152,6 @@ void mglData::Export(const char *fname,const char *scheme,mreal v1,mreal v2,int
 		{	if(a[i]<v1)	v1=a[i];	if(a[i]>v2)	v2=a[i];	}
 	}
 	if(v1==v2)	return;
-
 #ifndef NO_PNG
 	long num=0;
 	unsigned char *c = mgl_create_scheme(scheme,num);
@@ -165,7 +160,6 @@ void mglData::Export(const char *fname,const char *scheme,mreal v1,mreal v2,int
 	unsigned char **p = (unsigned char **)malloc(ny*sizeof(unsigned char *));
 	unsigned char *d = (unsigned char *)malloc(3*nx*ny*sizeof(unsigned char));
 	for(i=0;i<ny;i++)	p[i] = d+3*nx*(ny-1-i);
-
 	if(ns<0 || ns>=nz)	ns=0;
 	long dd = nx*ny*ns;
 	for(i=0;i<ny;i++)	for(j=0;j<nx;j++)
@@ -179,13 +173,11 @@ void mglData::Export(const char *fname,const char *scheme,mreal v1,mreal v2,int
 
 	FILE *fp = fopen(fname, "wb");
 	if (!fp)	return;
-
 	png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
-	if (!png_ptr)	return;
+	if (!png_ptr)	{	fclose(fp);	return;	}
 	png_infop info_ptr = png_create_info_struct(png_ptr);
 	if (!info_ptr)
-	{	png_destroy_write_struct(&png_ptr,0);	return;	}
-
+	{	png_destroy_write_struct(&png_ptr,0);	fclose(fp);	return;	}
 	png_init_io(png_ptr, fp);
 	png_set_filter(png_ptr, 0, PNG_ALL_FILTERS);
 	png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
@@ -194,7 +186,6 @@ void mglData::Export(const char *fname,const char *scheme,mreal v1,mreal v2,int
 	png_set_rows(png_ptr, info_ptr, p);
 	png_write_png(png_ptr, info_ptr,  PNG_TRANSFORM_IDENTITY, 0);
 	png_write_end(png_ptr, info_ptr);
-
 	png_destroy_write_struct(&png_ptr, &info_ptr);
 	fclose(fp);	free(p);	free(d);
 #endif
diff --git a/mgl/mgl_eps.cpp b/mgl/mgl_eps.cpp
index 4513020..ed6649b 100644
--- a/mgl/mgl_eps.cpp
+++ b/mgl/mgl_eps.cpp
@@ -19,9 +19,11 @@
  ***************************************************************************/
 #include <stdlib.h>
 #include <time.h>
+#include <zlib.h>
 #include "mgl/mgl_eps.h"
 #include "mgl/mgl_c.h"
 #include "mgl/mgl_f.h"
+void mgl_printf(void *fp, bool gz, const char *str, ...);
 //-----------------------------------------------------------------------------
 int mgl_compare_prim(const void *p1, const void *p2)
 {
@@ -83,8 +85,8 @@ void mglGraphPS::line_plot(mreal *p1,mreal *p2,mreal *c1,mreal *c2,bool all)
 	a.x[0]=p1[0];	a.y[0]=p1[1];	a.x[1]=p2[0];	a.y[1]=p2[1];
 	a.zz[0]=p1[2];	a.zz[1]=p2[2];
 	a.c[0]=(c1[0]+c2[0])/2;	a.c[1]=(c1[1]+c2[1])/2;	a.c[2]=(c1[2]+c2[2])/2;
-//	a.c[0]=c1[0];	a.c[1]=c1[1];	a.c[2]=c1[2];
-	a.SetStyle(all? 0xffff:PDef,int(pPos));
+//	a.c[0]=c1[0];	a.c[1]=c1[1];	a.c[2]=c1[2];
+	a.style=all? 0xffff:PDef;	a.s = pPos;
 	add_prim(a);
 	pPos = fmod(pPos+hypot(p2[0]-p1[0], p2[1]-p1[1])/pw/1.5, 16);
 }
@@ -295,45 +297,33 @@ bool mglPrim::IsSame(mreal wp,mreal *cp,int st)
 	return (cp[0]==c[0] && cp[1]==c[1] && cp[2]==c[2]);
 }
 //-----------------------------------------------------------------------------
-void mglPrim::SetStyle(unsigned PDef, int pPos)
-{
-	style=0;
-	switch(PDef)
-	{
-	case 0xff00:	style=1;	break;
-	case 0xf0f0:	style=2;	break;
-	case 0x8888:	style=3;	break;
-	case 0xfe10:	style=4;	break;
-	case 0xe4e4:	style=5;	break;
-	}
-	pPos = abs(pPos)%16;
-	dash = (PDef>>(16-pPos))+(PDef<<pPos);
-}
-//-----------------------------------------------------------------------------
 void mglGraphPS::WriteEPS(const char *fname,const char *descr)
 {
 	if(!P)	return;
 	if(!Finished)	Finish();
 	time_t now;
 	time(&now);
-
-	FILE *fp = fopen(fname,"wt");
+
+	bool gz = fname[strlen(fname)-1]=='z';
+	void *fp = gz ? gzopen(fname,"wt") : fopen(fname,"wt");
 	if(!fp)		{	SetWarn(mglWarnOpen,fname);	return;	}
-	fprintf(fp,"%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n",Width,Height);
-	fprintf(fp,"%%%%Creator: MathGL library\n%%%%Title: %s\n",descr ? descr : fname);
-	fprintf(fp,"%%%%CreationDate: %s\n",ctime(&now));
-	fprintf(fp,"/lw {setlinewidth} def\n/rgb {setrgbcolor} def\n");
-	fprintf(fp,"/np {newpath} def\n/cp {closepath} def\n");
-	fprintf(fp,"/ll {lineto} def\n/mt {moveto} def\n");
-	fprintf(fp,"/rl {rlineto} def\n/rm {rmoveto} def\n/dr {stroke} def\n");
-	fprintf(fp,"/ss {%g} def\n",MarkSize*0.4*font_factor);// remove *font_factor); ???
-	fprintf(fp,"/s2 {%g} def\n",MarkSize*0.8*font_factor);// remove *font_factor); ???
-	fprintf(fp,"/sm {-%g} def\n",MarkSize*0.4*font_factor);//remove *font_factor); ???
-	fprintf(fp,"/m_c {ss 0.3 mul 0 360 arc} def\n");
-	fprintf(fp,"/d0 {[] 0 setdash} def\n/sd {0 setdash} def\n");
+	mgl_printf(fp, gz, "%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n",Width,Height);
+	mgl_printf(fp, gz, "%%%%Creator: MathGL library\n%%%%Title: %s\n",descr ? descr : fname);
+	mgl_printf(fp, gz, "%%%%CreationDate: %s\n",ctime(&now));
+	mgl_printf(fp, gz, "/lw {setlinewidth} def\n/rgb {setrgbcolor} def\n");
+	mgl_printf(fp, gz, "/np {newpath} def\n/cp {closepath} def\n");
+	mgl_printf(fp, gz, "/ll {lineto} def\n/mt {moveto} def\n");
+	mgl_printf(fp, gz, "/rl {rlineto} def\n/rm {rmoveto} def\n/dr {stroke} def\n");
+	mgl_printf(fp, gz, "/ss {%g} def\n",MarkSize*0.4*font_factor);// remove *font_factor); ???
+	mgl_printf(fp, gz, "/s2 {%g} def\n",MarkSize*0.8*font_factor);// remove *font_factor); ???
+	mgl_printf(fp, gz, "/sm {-%g} def\n",MarkSize*0.4*font_factor);//remove *font_factor); ???
+	mgl_printf(fp, gz, "/m_c {ss 0.3 mul 0 360 arc} def\n");
+	mgl_printf(fp, gz, "/d0 {[] 0 setdash} def\n/sd {setdash} def\n");
 
-	bool m_p=false,m_x=false,m_d=false,m_v=false,m_t=false,
-		m_s=false,m_a=false,m_o=false,m_O=false,m_T=false,m_V=false,m_S=false,m_D=false;
+	bool m_p=false,m_x=false,m_d=false,m_v=false,m_t=false,
+		m_s=false,m_a=false,m_o=false,m_T=false,
+		m_V=false,m_S=false,m_D=false,m_Y=false,m_l=false,
+		m_L=false,m_r=false,m_R=false,m_X=false,m_P=false;
 	register long i;
 	// add mark definition if present
 	for(i=0;i<pNum;i++)
@@ -342,27 +332,40 @@ void mglGraphPS::WriteEPS(const char *fname,const char *descr)
 		if(P[i].m=='x')	m_x = true;		if(P[i].m=='s')	m_s = true;
 		if(P[i].m=='d')	m_d = true;		if(P[i].m=='v')	m_v = true;
 		if(P[i].m=='^')	m_t = true;		if(P[i].m=='*')	m_a = true;
-		if(P[i].m=='o')	m_o = true;		if(P[i].m=='O')	m_O = true;
+		if(P[i].m=='o' || P[i].m=='O' || P[i].m=='C')	m_o = true;
 		if(P[i].m=='S')	m_S = true;		if(P[i].m=='D')	m_D = true;
 		if(P[i].m=='V')	m_V = true;		if(P[i].m=='T')	m_T = true;
-	}
-	if(m_p)	fprintf(fp,"/m_p {sm 0 rm s2 0 rl sm sm rm 0 s2 rl d0} def\n");
-	if(m_x)	fprintf(fp,"/m_x {sm sm rm s2 s2 rl 0 sm 2 mul rm sm 2 mul s2 rl d0} def\n");
-	if(m_s)	fprintf(fp,"/m_s {sm sm rm 0 s2 rl s2 0 rl 0 sm 2 mul rl cp d0} def\n");
-	if(m_d)	fprintf(fp,"/m_d {sm 0 rm ss ss rl ss sm rl sm sm rl cp d0} def\n");
-	if(m_v)	fprintf(fp,"/m_v {sm ss 2 div rm s2 0 rl sm sm 1.5 mul rl d0 cp} def\n");
-	if(m_t)	fprintf(fp,"/m_t {sm sm 2 div rm s2 0 rl sm ss 1.5 mul rl d0 cp} def\n");
-	if(m_a)	fprintf(fp,"/m_a {sm 0 rm s2 0 rl sm 1.6 mul sm 0.8 mul rm ss 1.2 mul ss 1.6 mul rl 0 sm 1.6 mul rm sm 1.2 mul ss 1.6 mul rl d0} def\n");
-	if(m_o)	fprintf(fp,"/m_o {ss 0 360 d0 arc} def\n");
-	if(m_O)	fprintf(fp,"/m_O {ss 0 360 d0 arc fill} def\n");
-	if(m_S)	fprintf(fp,"/m_S {sm sm rm 0 s2 rl s2 0 rl 0 sm 2 mul rl cp} def\n");
-	if(m_D)	fprintf(fp,"/m_D {sm 0 rm ss ss rl ss sm rl sm sm rl cp} def\n");
-	if(m_V)	fprintf(fp,"/m_V {sm ss 2 div rm s2 0 rl sm sm 1.5 mul rl cp} def\n");
-	if(m_T)	fprintf(fp,"/m_T {sm sm 2 div rm s2 0 rl sm ss 1.5 mul rl cp} def\n");
-	fprintf(fp,"\n");
+		if(P[i].m=='<')	m_l = true;		if(P[i].m=='L')	m_L = true;
+		if(P[i].m=='>')	m_r = true;		if(P[i].m=='R')	m_R = true;
+		if(P[i].m=='Y')	m_Y = true;
+		if(P[i].m=='P')	m_P = true;		if(P[i].m=='X')	m_X = true;
+	}
+	if(m_P)	{	m_p=true;	m_s=true;	}
+	if(m_X)	{	m_x=true;	m_s=true;	}
+	if(m_p)	mgl_printf(fp, gz, "/m_p {sm 0 rm s2 0 rl sm sm rm 0 s2 rl d0} def\n");
+	if(m_x)	mgl_printf(fp, gz, "/m_x {sm sm rm s2 s2 rl 0 sm 2 mul rm sm 2 mul s2 rl d0} def\n");
+	if(m_s)	mgl_printf(fp, gz, "/m_s {sm sm rm 0 s2 rl s2 0 rl 0 sm 2 mul rl cp d0} def\n");
+	if(m_d)	mgl_printf(fp, gz, "/m_d {sm 0 rm ss ss rl ss sm rl sm sm rl cp d0} def\n");
+	if(m_v)	mgl_printf(fp, gz, "/m_v {sm ss 2 div rm s2 0 rl sm sm 1.5 mul rl d0 cp} def\n");
+	if(m_t)	mgl_printf(fp, gz, "/m_t {sm sm 2 div rm s2 0 rl sm ss 1.5 mul rl d0 cp} def\n");
+	if(m_a)	mgl_printf(fp, gz, "/m_a {sm 0 rm s2 0 rl sm 1.6 mul sm 0.8 mul rm ss 1.2 mul ss 1.6 mul rl 0 sm 1.6 mul rm sm 1.2 mul ss 1.6 mul rl d0} def\n");
+	if(m_o)	mgl_printf(fp, gz, "/m_o {ss 0 360 d0 arc} def\n");
+	if(m_S)	mgl_printf(fp, gz, "/m_S {sm sm rm 0 s2 rl s2 0 rl 0 sm 2 mul rl cp} def\n");
+	if(m_D)	mgl_printf(fp, gz, "/m_D {sm 0 rm ss ss rl ss sm rl sm sm rl cp} def\n");
+	if(m_V)	mgl_printf(fp, gz, "/m_V {sm ss 2 div rm s2 0 rl sm sm 1.5 mul rl cp} def\n");
+	if(m_T)	mgl_printf(fp, gz, "/m_T {sm sm 2 div rm s2 0 rl sm ss 1.5 mul rl cp} def\n");
+	if(m_Y)	mgl_printf(fp, gz, "/m_Y {0 sm rm 0 ss rl sm ss rl s2 0 rm sm sm rl d0} def\n");
+	if(m_r)	mgl_printf(fp, gz, "/m_r {sm 2 div sm rm 0 s2 rl ss 1.5 mul sm rl d0 cp} def\n");
+	if(m_l)	mgl_printf(fp, gz, "/m_l {ss 2 div sm rm 0 s2 rl sm 1.5 mul sm rl d0 cp} def\n");
+	if(m_R)	mgl_printf(fp, gz, "/m_R {sm 2 div sm rm 0 s2 rl ss 1.5 mul sm rl cp} def\n");
+	if(m_L)	mgl_printf(fp, gz, "/m_L {ss 2 div sm rm 0 s2 rl sm 1.5 mul sm rl cp} def\n");
+	if(m_P)	mgl_printf(fp, gz, "/m_P {m_p 0 sm rm m_s} def\n");
+	if(m_X)	mgl_printf(fp, gz, "/m_X {m_x ss sm rm m_s} def\n");
+//	if(m_C)	mgl_printf(fp, gz, "/m_C {m_c m_o} def\n");
+	mgl_printf(fp, gz, "\n");
 
 	// write definition for all glyphs
-	put_desc(fp,"/%c%c_%04x { np\n", "\t%d %d mt ", "%d %d ll ", "cp\n", "} def\n");
+	put_desc(fp,gz,"/%c%c_%04x { np\n", "\t%d %d mt ", "%d %d ll ", "cp\n", "} def\n");
 	// write primitives
 	mreal cp[3]={-1,-1,-1},wp=-1;
 	int st=0;
@@ -379,70 +382,78 @@ void mglGraphPS::WriteEPS(const char *fname,const char *descr)
 			wp=1;
 			if(P[i].s!=MarkSize)
 			{
-				fprintf(fp,"/ss {%g} def\n",P[i].s*0.4*font_factor);
-				fprintf(fp,"/s2 {%g} def\n",P[i].s*0.8*font_factor);
-				fprintf(fp,"/sm {-%g} def\n",P[i].s*0.4*font_factor);
+				mgl_printf(fp, gz, "/ss {%g} def\n",P[i].s*0.4*font_factor);
+				mgl_printf(fp, gz, "/s2 {%g} def\n",P[i].s*0.8*font_factor);
+				mgl_printf(fp, gz, "/sm {-%g} def\n",P[i].s*0.4*font_factor);
 			}
 			switch(P[i].m)
 			{
-			case '+':	fprintf(fp,"np %g %g mt m_p %sdr\n",P[i].x[0],P[i].y[0],str);	break;
-			case 'x':	fprintf(fp,"np %g %g mt m_x %sdr\n",P[i].x[0],P[i].y[0],str);	break;
-			case 's':	fprintf(fp,"np %g %g mt m_s %sdr\n",P[i].x[0],P[i].y[0],str);	break;
-			case 'd':	fprintf(fp,"np %g %g mt m_d %sdr\n",P[i].x[0],P[i].y[0],str);	break;
-			case '*':	fprintf(fp,"np %g %g mt m_a %sdr\n",P[i].x[0],P[i].y[0],str);	break;
-			case 'v':	fprintf(fp,"np %g %g mt m_v %sdr\n",P[i].x[0],P[i].y[0],str);	break;
-			case '^':	fprintf(fp,"np %g %g mt m_t %sdr\n",P[i].x[0],P[i].y[0],str);	break;
-			case 'S':	fprintf(fp,"np %g %g mt m_S %sfill\n",P[i].x[0],P[i].y[0],str);	break;
-			case 'D':	fprintf(fp,"np %g %g mt m_D %sfill\n",P[i].x[0],P[i].y[0],str);	break;
-			case 'V':	fprintf(fp,"np %g %g mt m_V %sfill\n",P[i].x[0],P[i].y[0],str);	break;
-			case 'T':	fprintf(fp,"np %g %g mt m_T %sfill\n",P[i].x[0],P[i].y[0],str);	break;
-			case 'o':	fprintf(fp,"%g %g m_o %sdr\n",P[i].x[0],P[i].y[0],str);break;
-			case 'O':	fprintf(fp,"%g %g m_O %sdr\n",P[i].x[0],P[i].y[0],str);break;
-			default:	fprintf(fp,"%g %g m_c %sfill\n",P[i].x[0],P[i].y[0],str);
+			case '+':	mgl_printf(fp, gz, "np %g %g mt m_p %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'x':	mgl_printf(fp, gz, "np %g %g mt m_x %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case 's':	mgl_printf(fp, gz, "np %g %g mt m_s %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'd':	mgl_printf(fp, gz, "np %g %g mt m_d %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case '*':	mgl_printf(fp, gz, "np %g %g mt m_a %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'v':	mgl_printf(fp, gz, "np %g %g mt m_v %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case '^':	mgl_printf(fp, gz, "np %g %g mt m_t %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'S':	mgl_printf(fp, gz, "np %g %g mt m_S %sfill\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'D':	mgl_printf(fp, gz, "np %g %g mt m_D %sfill\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'V':	mgl_printf(fp, gz, "np %g %g mt m_V %sfill\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'T':	mgl_printf(fp, gz, "np %g %g mt m_T %sfill\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'o':	mgl_printf(fp, gz, "%g %g m_o %sdr\n",P[i].x[0],P[i].y[0],str);break;
+			case 'O':	mgl_printf(fp, gz, "%g %g m_o %sfill\n",P[i].x[0],P[i].y[0],str);break;
+			case 'Y':	mgl_printf(fp, gz, "np %g %g mt m_Y %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case '<':	mgl_printf(fp, gz, "np %g %g mt m_l %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case '>':	mgl_printf(fp, gz, "np %g %g mt m_r %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'L':	mgl_printf(fp, gz, "np %g %g mt m_L %sfill\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'R':	mgl_printf(fp, gz, "np %g %g mt m_R %sfill\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'P':	mgl_printf(fp, gz, "np %g %g mt m_P %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'X':	mgl_printf(fp, gz, "np %g %g mt m_X %sdr\n",P[i].x[0],P[i].y[0],str);	break;
+			case 'C':	mgl_printf(fp, gz, "%g %g m_o %g %g m_c %sdr\n",P[i].x[0],P[i].y[0],P[i].x[0],P[i].y[0],str);	break;
+			default:	mgl_printf(fp, gz, "%g %g m_c %sfill\n",P[i].x[0],P[i].y[0],str);
 			}
 			if(P[i].s!=MarkSize)
 			{
-				fprintf(fp,"/ss {%g} def\n",MarkSize*0.4*font_factor);
-				fprintf(fp,"/s2 {%g} def\n",MarkSize*0.8*font_factor);
-				fprintf(fp,"/sm {-%g} def\n",MarkSize*0.4*font_factor);
+				mgl_printf(fp, gz, "/ss {%g} def\n",MarkSize*0.4*font_factor);
+				mgl_printf(fp, gz, "/s2 {%g} def\n",MarkSize*0.8*font_factor);
+				mgl_printf(fp, gz, "/sm {-%g} def\n",MarkSize*0.4*font_factor);
 			}
 		}
 		else if(P[i].type==2)	// quad
-			fprintf(fp,"np %g %g mt %g %g ll %g %g ll cp %sfill\n",P[i].x[0],P[i].y[0],P[i].x[1],P[i].y[1],P[i].x[2],P[i].y[2],str);
+			mgl_printf(fp, gz, "np %g %g mt %g %g ll %g %g ll cp %sfill\n",P[i].x[0],P[i].y[0],P[i].x[1],P[i].y[1],P[i].x[2],P[i].y[2],str);
 		else if(P[i].type==3)	// trig
-			fprintf(fp,"np %g %g mt %g %g ll %g %g ll %g %g ll cp %sfill\n",P[i].x[0],P[i].y[0],P[i].x[1],P[i].y[1],P[i].x[3],P[i].y[3],P[i].x[2],P[i].y[2],str);
+			mgl_printf(fp, gz, "np %g %g mt %g %g ll %g %g ll %g %g ll cp %sfill\n",P[i].x[0],P[i].y[0],P[i].x[1],P[i].y[1],P[i].x[3],P[i].y[3],P[i].x[2],P[i].y[2],str);
 		else if(P[i].type==1)	// line
 		{
 			sprintf(str,"%.2g lw %.2g %.2g %.2g rgb ", P[i].w>1 ? P[i].w:1., P[i].c[0],P[i].c[1],P[i].c[2]);
 			wp = P[i].w>1  ? P[i].w:1;	st = P[i].style;
-			put_line(fp,i,wp,cp,st, "np %g %g mt ", "%g %g ll ", false);
-			const char *sd = mgl_get_dash(P[i].dash,P[i].w);
-			if(sd && sd[0])	fprintf(fp,"%s [%s] sd dr\n",str,sd);
-			else			fprintf(fp,"%s d0 dr\n",str);
+			put_line(fp,gz,i,wp,cp,st, "np %g %g mt ", "%g %g ll ", false);
+			const char *sd = mgl_get_dash(P[i].style,P[i].w);
+			if(sd && sd[0])	mgl_printf(fp, gz, "%s [%s] %g sd dr\n",str,sd,P[i].w*P[i].s);
+			else			mgl_printf(fp, gz, "%s d0 dr\n",str);
 		}
 		else if(P[i].type==4)	// glyph
 		{
 			mreal ss = P[i].s/2, xx = P[i].x[1], yy = P[i].y[1];
-			fprintf(fp,"gsave\t%g %g translate %g %g scale %g rotate %s\n", 
+			mgl_printf(fp, gz, "gsave\t%g %g translate %g %g scale %g rotate %s\n", 
 				P[i].x[0], P[i].y[0], ss, ss, -P[i].w, str);
 			if(P[i].style&8)	// this is "line"
 			{
 				mreal dy = 0.004,f=fabs(P[i].zz[1]);
-				fprintf(fp,"np %g %g mt %g %g ll %g %g ll %g %g ll cp ",
+				mgl_printf(fp, gz, "np %g %g mt %g %g ll %g %g ll %g %g ll cp ",
 					xx,yy+dy, xx+f,yy+dy, xx+f,yy-dy, xx,yy-dy);
 			}
 			else
-				fprintf(fp,"%.3g %.3g translate %g %g scale %c%c_%04x ", 
+				mgl_printf(fp, gz, "%.3g %.3g translate %g %g scale %c%c_%04x ", 
 					xx, yy, P[i].zz[1], P[i].zz[1], P[i].style&1?'b':'n',
 					P[i].style&2?'i':'n', P[i].m);
-			if(P[i].style&4)	fprintf(fp,"dr");
-			else	fprintf(fp,"eofill");
-			fprintf(fp," grestore\n");
+			if(P[i].style&4)	mgl_printf(fp, gz, "dr");
+			else	mgl_printf(fp, gz, "eofill");
+			mgl_printf(fp, gz, " grestore\n");
 		}
 	}
 	for(i=0;i<pNum;i++)		if(P[i].type==-1)	P[i].type = 1;
-	fprintf(fp,"\nshowpage\n%%%%EOF\n");
-	fclose(fp);
+	mgl_printf(fp, gz, "\nshowpage\n%%%%EOF\n");
+	if(gz)	gzclose(fp);	else	fclose((FILE *)fp);
 }
 //-----------------------------------------------------------------------------
 void mglGraphPS::WriteSVG(const char *fname,const char *descr)
@@ -452,20 +463,21 @@ void mglGraphPS::WriteSVG(const char *fname,const char *descr)
 	time_t now;
 	time(&now);
 
-	FILE *fp = fopen(fname,"wt");
+	bool gz = fname[strlen(fname)-1]=='z';
+	void *fp = gz ? gzopen(fname,"wt") : fopen(fname,"wt");
 	if(!fp)		{	SetWarn(mglWarnOpen,fname);	return;	}
-	fprintf(fp,"<?xml version=\"1.0\" standalone=\"no\"?>\n");
-	fprintf(fp,"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 20000303 Stylable//EN\" \"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd\">\n");
-	fprintf(fp,"<svg width=\"%d\" height=\"%d\">\n",Width,Height);
+	mgl_printf(fp, gz, "<?xml version=\"1.0\" standalone=\"no\"?>\n");
+	mgl_printf(fp, gz, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 20000303 Stylable//EN\" \"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd\">\n");
+	mgl_printf(fp, gz, "<svg width=\"%d\" height=\"%d\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",Width,Height);
 
-	fprintf(fp,"<!--Creator: MathGL library-->\n");
-	fprintf(fp,"<!--Title: %s-->\n<!--CreationDate: %s-->\n\n",descr?descr:fname,ctime(&now));
+	mgl_printf(fp, gz, "<!--Creator: MathGL library-->\n");
+	mgl_printf(fp, gz, "<!--Title: %s-->\n<!--CreationDate: %s-->\n\n",descr?descr:fname,ctime(&now));
 
 	// write definition for all glyphs
-	put_desc(fp,"<symbol id=\"%c%c_%04x\"><path d=\"", "\tM %d %d ",
+	put_desc(fp,gz,"<symbol id=\"%c%c_%04x\"><path d=\"", "\tM %d %d ",
 		"L %d %d ", "Z\n", "\"/></symbol>\n");
 	// currentColor -> inherit ???
-	fprintf(fp,"<g fill=\"none\" stroke=\"none\" stroke-width=\"0.5\">\n");
+	mgl_printf(fp, gz, "<g fill=\"none\" stroke=\"none\" stroke-width=\"0.5\">\n");
 	// write primitives
 	mreal cp[3]={-1,-1,-1},wp=-1;
 	register long i;
@@ -476,113 +488,130 @@ void mglGraphPS::WriteSVG(const char *fname,const char *descr)
 		if(P[i].type==0)
 		{
 			mreal x=P[i].x[0],y=Height-P[i].y[0],s=0.4*font_factor*P[i].s;
+			if(!strchr("xsSoO",P[i].m))	s *= 1.1;
 			wp = 1;
-			if(strchr("SDVT",P[i].m))
-				fprintf(fp,"<g fill=\"#%02x%02x%02x\">\n",
+			if(strchr("SDVTLR",P[i].m))
+				mgl_printf(fp, gz, "<g fill=\"#%02x%02x%02x\">\n",
 					int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
 			else
-				fprintf(fp,"<g stroke=\"#%02x%02x%02x\">\n",
+				mgl_printf(fp, gz, "<g stroke=\"#%02x%02x%02x\">\n",
 					int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
 			switch(P[i].m)
 			{
+			case 'P':
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g M %g %g L %g %g M %g %g L %g %g L %g %g L %g %g L %g %g\"/>\n",
+						x-s,y,x+s,y,x,y-s,x,y+s, x-s,y-s,x+s,y-s,x+s,y+s,x-s,y+s,x-s,y-s);	break;
 			case '+':
-				fprintf(fp,"<path d=\"M %g %g L %g %g M %g %g L %g %g\"/>\n",
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g M %g %g L %g %g\"/>\n",
 						x-s,y,x+s,y,x,y-s,x,y+s);	break;
+			case 'X':
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g M %g %g L %g %g M %g %g L %g %g L %g %g L %g %g L %g %g\"/>\n",
+						x-s,y-s,x+s,y+s,x+s,y-s,x-s,y+s, x-s,y-s,x+s,y-s,x+s,y+s,x-s,y+s,x-s,y-s);	break;
 			case 'x':
-				fprintf(fp,"<path d=\"M %g %g L %g %g M %g %g L %g %g\"/>\n",
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g M %g %g L %g %g\"/>\n",
 						x-s,y-s,x+s,y+s,x+s,y-s,x-s,y+s);	break;
 			case 's':
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %g L %g %gZ\"/>\n",
-						x-s,y-s,x+s,y-s,x+s,y+s,x-s,y+s);	break;
-			case 'd':
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %g L %g %gZ\"/>\n",
-						x-s,y,x,y-s,x+s,y,x,y+s);	break;
-			case '^':
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %gZ\"/>\n",
-						x-s,y+s/2,x+s,y+s/2,x,y-s);	break;
-			case 'v':
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %gZ\"/>\n",
-						x-s,y-s/2,x+s,y-s/2,x,y+s);	break;
 			case 'S':
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %g L %g %gZ\"/>\n",
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %g L %g %gZ\"/>\n",
 						x-s,y-s,x+s,y-s,x+s,y+s,x-s,y+s);	break;
+			case 'd':
 			case 'D':
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %g L %g %gZ\"/>\n",
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %g L %g %gZ\"/>\n",
 						x-s,y,x,y-s,x+s,y,x,y+s);	break;
+			case '^':
 			case 'T':
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %gZ\"/>\n",
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %gZ\"/>\n",
 						x-s,y+s/2,x+s,y+s/2,x,y-s);	break;
+			case 'v':
 			case 'V':
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %gZ\"/>\n",
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %gZ\"/>\n",
 						x-s,y-s/2,x+s,y-s/2,x,y+s);	break;
+			case '<':
+			case 'L':
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %gZ\"/>\n",
+						x+s/2,y+s,x+s/2,y-s,x-s,y);	break;
+			case '>':
+			case 'R':
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %gZ\"/>\n",
+						x-s/2,y+s,x-s/2,y-s,x+s,y);	break;
+			case 'Y':
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %g M %g %g L %g %g\"/>\n",
+						x,y+s, x,y, x+s,y-s, x,y, x-s,y-s);	break;
+			case 'C':
+				mgl_printf(fp, gz, "<circle style=\"fill:#%02x%02x%02x\" cx=\"%g\" cy=\"%g\" r=\"0.15\"/>\n<circle cx=\"%g\" cy=\"%g\" r=\"%g\"/>\n",
+						int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),x,y,x,y,s);	break;
 			case 'o':
-				fprintf(fp,"<circle cx=\"%g\" cy=\"%g\" r=\"%g\"/>\n",
+				mgl_printf(fp, gz, "<circle cx=\"%g\" cy=\"%g\" r=\"%g\"/>\n",
 						x,y,s);	break;
 			case 'O':
-				fprintf(fp,"<circle style=\"fill:#%02x%02x%02x\" cx=\"%g\" cy=\"%g\" r=\"%g\"/>\n",
+				mgl_printf(fp, gz, "<circle style=\"fill:#%02x%02x%02x\" cx=\"%g\" cy=\"%g\" r=\"%g\"/>\n",
 						int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),x,y,s);	break;
 			case '*':
-				fprintf(fp,"<path d=\"M %g %g L %g %g M %g %g L %g %g M %g %g L %g %g\"/>\n",
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g M %g %g L %g %g M %g %g L %g %g\"/>\n",
 						x-s,y,x+s,y,x-0.8*s,y-1.6*s,x+0.8*s,y+1.6*s,x+0.8*s,y-1.6*s,x-0.8*s,y+1.6*s);	break;
 			default:
-				fprintf(fp,"<circle style=\"fill:#%02x%02x%02x\" cx=\"%g\" cy=\"%g\" r=\"0.15\"/>\n",
+				mgl_printf(fp, gz, "<circle style=\"fill:#%02x%02x%02x\" cx=\"%g\" cy=\"%g\" r=\"0.15\"/>\n",
 						int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),x,y);	break;
 			}
-			fprintf(fp,"</g>\n");
+			mgl_printf(fp, gz, "</g>\n");
 		}
 		else if(P[i].type==2 && P[i].c[3]>0)
 		{
-			fprintf(fp,"<g fill=\"#%02x%02x%02x\" opacity=\"%g\">\n",
+			mgl_printf(fp, gz, "<g fill=\"#%02x%02x%02x\" opacity=\"%g\">\n",
 				int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),P[i].c[3]);
-			fprintf(fp,"<path d=\"M %g %g L %g %g L %g %g Z\"/> </g>\n",
+			mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %g Z\"/> </g>\n",
 					P[i].x[0],Height-P[i].y[0],P[i].x[1],Height-P[i].y[1],
 					P[i].x[2],Height-P[i].y[2]);
 		}
 		else if(P[i].type==3 && P[i].c[3]>0)
 		{
-			fprintf(fp,"<g fill=\"#%02x%02x%02x\" opacity=\"%g\">\n",
+			mgl_printf(fp, gz, "<g fill=\"#%02x%02x%02x\" opacity=\"%g\">\n",
 				int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),P[i].c[3]);
-			fprintf(fp,"<path d=\"M %g %g L %g %g L %g %g L %g %g Z\"/> </g>\n",
+			mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %g L %g %g Z\"/> </g>\n",
 					P[i].x[0],Height-P[i].y[0],P[i].x[1],Height-P[i].y[1],
 					P[i].x[3],Height-P[i].y[3],P[i].x[2],Height-P[i].y[2]);
 		}
 		else if(P[i].type==1)
 		{
 //			const char *dash[]={"", "8 8","4 4","1 3","7 4 1 4","3 2 1 2"};
-			fprintf(fp,"<g stroke=\"#%02x%02x%02x\"",
+			mgl_printf(fp, gz, "<g stroke=\"#%02x%02x%02x\"",
 					int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
-			if(P[i].style)	fprintf(fp," stroke-dasharray=\"%s\"", mgl_get_dash(P[i].dash,P[i].w));
-			if(P[i].w>1)	fprintf(fp," stroke-width=\"%g\"", P[i].w);
+			if(P[i].style)
+			{
+				mgl_printf(fp, gz, " stroke-dasharray=\"%s\"", mgl_get_dash(P[i].style,P[i].w));
+				mgl_printf(fp, gz, " stroke-dashoffset=\"%g\"", P[i].s*P[i].w);
+			}
+			if(P[i].w>1)	mgl_printf(fp, gz, " stroke-width=\"%g\"", P[i].w);
 			memcpy(cp,P[i].c,3*sizeof(mreal));
 			wp = P[i].w>1  ? P[i].w:1;	st = P[i].style;
-			put_line(fp,i,wp,cp,st, "><path d=\" M %g %g", " L %g %g", true);
-			fprintf(fp,"\"/> </g>\n");
+			put_line(fp,gz,i,wp,cp,st, "><path d=\" M %g %g", " L %g %g", true);
+			mgl_printf(fp, gz, "\"/> </g>\n");
 		}
 		else if(P[i].type==4)
 		{
 			mreal ss = P[i].s/2, xx = P[i].x[1], yy = P[i].y[1];
 			if(P[i].style&8)	// this is "line"
 			{
-				fprintf(fp,"<g transform=\"translate(%g,%g) scale(%.3g,%.3g) rotate(%g)\"",
+				mgl_printf(fp, gz, "<g transform=\"translate(%g,%g) scale(%.3g,%.3g) rotate(%g)\"",
 					P[i].x[0], Height-P[i].y[0], ss, -ss, -P[i].w);
 				if(P[i].style&4)
-					fprintf(fp," stroke=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
+					mgl_printf(fp, gz, " stroke=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
 				else
-					fprintf(fp," fill=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
+					mgl_printf(fp, gz, " fill=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
 				mreal dy = 0.004,f=fabs(P[i].zz[1]);
-				fprintf(fp,"<path d=\"M %g %g L %g %g L %g %g L %g %g\"/></g>\n",
+				mgl_printf(fp, gz, "<path d=\"M %g %g L %g %g L %g %g L %g %g\"/></g>\n",
 					xx,yy+dy, xx+f,yy+dy, xx+f,yy-dy, xx,yy-dy);
 			}
 			else
 			{
 				ss *= P[i].zz[1];
-				fprintf(fp,"<g transform=\"translate(%g,%g) scale(%.3g,%.3g) rotate(%g)\"",
+				mgl_printf(fp, gz, "<g transform=\"translate(%g,%g) scale(%.3g,%.3g) rotate(%g)\"",
 					P[i].x[0], Height-P[i].y[0], ss, -ss, -P[i].w);
 				if(P[i].style&4)
-					fprintf(fp," stroke=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
+					mgl_printf(fp, gz, " stroke=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
 				else
-					fprintf(fp," fill=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
-				fprintf(fp,"<use x=\"%g\" y=\"%g\" xlink:href=\"#%c%c_%04x\"/></g>\n", 
+					mgl_printf(fp, gz, " fill=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]));
+				mgl_printf(fp, gz, "<use x=\"%g\" y=\"%g\" xlink:href=\"#%c%c_%04x\"/></g>\n", 
 					xx/P[i].zz[1], yy/P[i].zz[1], P[i].style&1?'b':'n',
 					P[i].style&2?'i':'n', P[i].m);
 			}
@@ -590,8 +619,8 @@ void mglGraphPS::WriteSVG(const char *fname,const char *descr)
 	}
 
 	for(i=0;i<pNum;i++)		if(P[i].type==-1)	P[i].type = 1;
-	fprintf(fp,"</g></svg>");
-	fclose(fp);
+	mgl_printf(fp, gz, "</g></svg>");
+	if(gz)	gzclose(fp);	else	fclose((FILE *)fp);
 }
 //-----------------------------------------------------------------------------
 void mglGraphPS::Finish()
@@ -627,7 +656,8 @@ void mglGraphPS::draw_prim(mglPrim *pr, mreal *pp, mreal *c)
 	switch(pr->type)
 	{
 	case 0:	mglGraphAB::mark_plot(pp,pr->m);	break;
-	case 1:	mglGraphAB::line_plot(pp,pp+3,c,c);	break;
+	case 1:	PDef = pr->style;	pPos = pr->s;
+			mglGraphAB::line_plot(pp,pp+3,c,c);	break;
 	case 2:	mglGraphAB::trig_plot(pp,pp+3,pp+6,c,c,c);	break;
 	case 3:	mglGraphAB::quad_plot(pp,pp+3,pp+6,pp+9,c,c,c,c);	break;
 	case 4:
@@ -647,7 +677,7 @@ void mglGraphPS::pnt_plot(long x,long y, mreal, unsigned char c[4])
 	combine(G4+4*i0,c);	OI[i0]=ObjId;
 }
 //-----------------------------------------------------------------------------
-void mglGraphPS::put_line(FILE *fp, long i, mreal wp, mreal *cp,int st, const char *ifmt, const char *nfmt, bool neg)
+void mglGraphPS::put_line(void *fp, bool gz, long i, mreal wp, mreal *cp,int st, const char *ifmt, const char *nfmt, bool neg)
 {
 	long k = i,j;	// first point
 	mreal x0=P[i].x[0], y0=P[i].y[0];
@@ -670,7 +700,7 @@ void mglGraphPS::put_line(FILE *fp, long i, mreal wp, mreal *cp,int st, const ch
 			}
 	}
 	for(j=i;j<pNum ;j++)	if(P[j].type==-2)	P[j].type = 1;
-	fprintf(fp,ifmt,x0,neg?Height-y0:y0);	ok=true;
+	mgl_printf(fp, gz, ifmt,x0,neg?Height-y0:y0);	ok=true;
 	long m=1;
 	while(ok)
 	{
@@ -681,16 +711,16 @@ void mglGraphPS::put_line(FILE *fp, long i, mreal wp, mreal *cp,int st, const ch
 				{
 					k=j;	P[k].type = -1;
 					x0 = P[k].x[1];	y0=P[k].y[1];
-					fprintf(fp,nfmt,x0,neg?Height-y0:y0);
-					if(m>10)	{	m=0;	fprintf(fp,"\n");	}
+					mgl_printf(fp, gz, nfmt,x0,neg?Height-y0:y0);
+					if(m>10)	{	m=0;	mgl_printf(fp, gz, "\n");	}
 					ok=true;	m++;
 				}
 				else if(P[j].x[1]==x0 && P[j].y[1]==y0)
 				{
 					k=j;	P[k].type = -1;
 					x0 = P[k].x[0];	y0=P[k].y[0];
-					fprintf(fp,nfmt,x0,neg?Height-y0:y0);
-					if(m>10)	{	m=0;	fprintf(fp,"\n");	}
+					mgl_printf(fp, gz, nfmt,x0,neg?Height-y0:y0);
+					if(m>10)	{	m=0;	mgl_printf(fp, gz, "\n");	}
 					ok=true;	m++;
 				}
 			}
@@ -699,7 +729,7 @@ void mglGraphPS::put_line(FILE *fp, long i, mreal wp, mreal *cp,int st, const ch
 //-----------------------------------------------------------------------------
 //put_desc(fp,"%c%c%c_%04x {", "np %d %d mt %d %d ll %d %d ll cp fill\n", 
 //"np %d %d mt ", "%d %d ll ", "cp dr\n", "} def")
-void mglGraphPS::put_desc(FILE *fp, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf)
+void mglGraphPS::put_desc(void *fp, bool gz, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf)
 {
 	register long i,j,n;
 	wchar_t *g;
@@ -716,7 +746,7 @@ void mglGraphPS::put_desc(FILE *fp, const char *pre, const char *ln1, const char
 		// have to describe
 		g[n]=P[i].m;	s[n]=P[i].style&7;	n++;	// add to list of described
 		// "%c%c%c_%04x {"
-		fprintf(fp,pre, P[i].style&1?'b':'n', P[i].style&2?'i':'n', P[i].m);
+		mgl_printf(fp, gz, pre, P[i].style&1?'b':'n', P[i].style&2?'i':'n', P[i].m);
 		long ik,ii;
 		int nl=fnt->GetNl(P[i].style&3,P[i].m);
 		const short *ln=fnt->GetLn(P[i].style&3,P[i].m);
@@ -725,12 +755,12 @@ void mglGraphPS::put_desc(FILE *fp, const char *pre, const char *ln1, const char
 		{
 			ii = 2*ik;
 			if(ln[ii]==0x3fff && ln[ii+1]==0x3fff)	// line breakthrough
-			{	fprintf(fp,"%s",ln3);	np=true;	continue;	}
-			else if(np)	fprintf(fp,ln1,ln[ii],ln[ii+1]);
-			else		fprintf(fp,ln2,ln[ii],ln[ii+1]);
+			{	mgl_printf(fp, gz, "%s",ln3);	np=true;	continue;	}
+			else if(np)	mgl_printf(fp, gz, ln1,ln[ii],ln[ii+1]);
+			else		mgl_printf(fp, gz, ln2,ln[ii],ln[ii+1]);
 			np=false;
 		}
-		fprintf(fp,"%s%s",ln3,suf);	// finish glyph description suf="} def"
+		mgl_printf(fp, gz, "%s%s",ln3,suf);	// finish glyph description suf="} def"
 	}
 	delete []g;		delete []s;
 }
diff --git a/mgl/mgl_eval.cpp b/mgl/mgl_eval.cpp
index 7f7ebb3..0170cdb 100644
--- a/mgl/mgl_eval.cpp
+++ b/mgl/mgl_eval.cpp
@@ -23,6 +23,7 @@
 #include <string.h>
 #ifndef NO_GSL
 #include <gsl/gsl_sf.h>
+#include <gsl/gsl_rng.h>
 #include <gsl/gsl_errno.h>
 #endif
 #include "mgl/mgl_eval.h"
@@ -75,6 +76,7 @@ EQ_LN,		// logarithm of x, ln(x)
 EQ_LG,		// decimal logarithm of x, lg(x) = ln(x)/ln(10)
 EQ_SIGN,	// sign of number
 EQ_STEP,	// step function
+EQ_INT,		// integer part [x]
 EQ_ABS,		// absolute value of x
 // special functions of 1 argument
 EQ_LI2,		// dilogarithm for a real argument Li2(x) = - \Re \int_0^x ds \log(1-s)/s.
@@ -118,63 +120,38 @@ EQ_EN,
 EQ_CL,		// Clausen function
 };
 //-----------------------------------------------------------------------------
-#define IM1 2147483563
-#define IM2 2147483399
-#define AM (1.0/IM1)
-#define IA1 40014
-#define IA2 40692
-#define IQ1 53668
-#define IQ2 52774
-#define IR1 12211
-#define IR2 3791
-#define NTAB 32
-#define NDIV (1+(IM1-1)/NTAB)
-#define RNMX (1.0 - 1.2e-7)
 #ifndef M_PI
 #define M_PI       3.14159265358979323846
 #endif
 //-----------------------------------------------------------------------------
-static long mgl_idum=0;
-void mgl_srnd(long seed)	{	mgl_idum = -abs(seed);	}
-//-----------------------------------------------------------------------------
+gsl_rng *mgl_rng=0;
+void mgl_srnd(long seed)
+{
+#ifndef NO_GSL
+	if(mgl_rng==0)
+	{
+		gsl_rng_env_setup();
+		mgl_rng = gsl_rng_alloc(gsl_rng_default);
+	}
+	gsl_rng_set(mgl_rng, seed);
+#else
+	srand(seed);
+#endif
+}
 double mgl_rnd()
 {
-	long &idum=mgl_idum;
-	long j;
-	long k;
-	static long idum2=123456789;
-	static long iy=0;
-	static long iv[NTAB];
-	double temp;
-	if(mgl_idum==0)
-		mgl_idum = -(long)(time(NULL));
-	if (mgl_idum <= 0) { 				// Initialize.
-		if (-(idum) < 1) idum=1;	// Be sure to prevent idum = 0.
-		else idum = -(idum);
-		idum2=(idum);
-		for (j=NTAB+7;j>=0;j--) {	// Load the shuffle table (after 8 warm-ups).
-			k=(idum)/IQ1;
-			idum=IA1*(idum-k*IQ1)-k*IR1;
-			if (idum < 0) idum += IM1;
-			if (j < NTAB) iv[j] = idum;
-		}
-		iy=iv[0];
+#ifndef NO_GSL
+	if(mgl_rng==0)
+	{
+		gsl_rng_env_setup();
+		mgl_rng = gsl_rng_alloc(gsl_rng_default);
+		gsl_rng_set(mgl_rng, time(0));
 	}
-	k=(idum)/IQ1; 					// Start here when not initializing.
-	idum=IA1*(idum-k*IQ1)-k*IR1;	// Compute idum=(IA1*idum) % IM1 without
-									// over ows by Schrage's method.
-	if (idum < 0) idum += IM1;
-	k=idum2/IQ2;
-	idum2=IA2*(idum2-k*IQ2)-k*IR2;	// Compute idum2=(IA2*idum) % IM2 likewise.
-	if (idum2 < 0) idum2 += IM2;
-	j=iy/NDIV; 						// Will be in the range 0..NTAB-1.
-	iy=iv[j]-idum2;					// Here idum is shufted, idum and idum2 are
-									// combined to generate output.
-	iv[j] = idum;
-	if (iy < 1) iy += IM1-1;
-	if ((temp=AM*iy) > RNMX)	// Because users don't expect endpoint values.
-		return RNMX;
-	else return temp;
+	return gsl_rng_uniform(mgl_rng);
+//	gsl_rng_free(r);
+#else
+	return rand()/(RND_MAX-1.);
+#endif
 }
 //-----------------------------------------------------------------------------
 double mgl_ipow(double x,int n);
@@ -405,6 +382,7 @@ mglFormula::mglFormula(const char *string)
 		else if(!strcmp(name,"pow"))	Kod=EQ_POW;
 		else if(!strcmp(name,"mod"))	Kod=EQ_MOD;
 		else if(!strcmp(name,"i"))		Kod=EQ_BESI;
+		else if(!strcmp(name,"int"))	Kod=EQ_INT;
 		else if(!strcmp(name,"j"))		Kod=EQ_BESJ;
 		else if(!strcmp(name,"k"))		Kod=EQ_BESK;
 		else if(!strcmp(name,"y"))		Kod=EQ_BESY;
@@ -518,8 +496,8 @@ mreal mglFormula::CalcIn(const mreal *a1) const
 			,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2
 #endif
 		};
-	func_1 f1[41] = {sin,cos,tan,asin,acos,atan,sinh,cosh,tanh,
-					asinh,acosh,atanh,sqrt,exp,log,log10,sgn,stp,fabs
+	func_1 f1[42] = {sin,cos,tan,asin,acos,atan,sinh,cosh,tanh,
+					asinh,acosh,atanh,sqrt,exp,log,log10,sgn,stp,floor,fabs
 #ifndef NO_GSL
 			,gsl_sf_dilog,gslEllEc,gslEllFc,gslAi,gslBi,gsl_sf_erf,
 			gsl_sf_expint_3,gsl_sf_expint_Ei,gsl_sf_expint_E1,gsl_sf_expint_E2,
@@ -644,8 +622,8 @@ mreal mglFormula::CalcDIn(int id, const mreal *a1) const
 			,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2
 #endif
 		};
-	func_1 f11[41] = {cos,cos_d,tan_d,asin_d,acos_d,atan_d,cosh,sinh,tanh_d,
-					asinh_d,acosh_d,atanh_d,sqrt_d,exp,log_d,log10_d,mgz1,mgz1,sgn
+	func_1 f11[42] = {cos,cos_d,tan_d,asin_d,acos_d,atan_d,cosh,sinh,tanh_d,
+					asinh_d,acosh_d,atanh_d,sqrt_d,exp,log_d,log10_d,mgz1,mgz1,mgz1,sgn
 #ifndef NO_GSL
 			,dilog_d,gslE_d,gslK_d,gslAi_d,gslBi_d,erf_d,exp3_d,ei_d,e1_d,e2_d,
 			si_d,ci_d,gamma_d,gsl_sf_psi_1,mgz1,mgz1,sinc_d,mgz1,mgz1,mgz1,mgz1,mgz1
diff --git a/mgl/mgl_evalp.cpp b/mgl/mgl_evalp.cpp
index b045fa6..0aa536b 100644
--- a/mgl/mgl_evalp.cpp
+++ b/mgl/mgl_evalp.cpp
@@ -126,6 +126,48 @@ mglData mglFormulaCalc(const wchar_t *string, mglParse *arg)
 		wcscpy(str,Buf);
 	}
 	len=wcslen(str);
+	if(str[0]=='[')	// this is manual subdata
+	{
+		mglData a1;
+		long i, j, br=0,k;
+		bool ar=true,mt=false;
+		for(i=1,j=1;i<len-1;i++)
+		{
+			if(str[i]=='[')	br++;
+			if(str[i]==']' && br>0)	br--;
+			if(str[i]==',' && !br)
+			{
+				wcscpy(Buf,str+j);	Buf[i-j]=0;
+				a1=mglFormulaCalc(Buf, arg);
+				if(j==1)
+				{	res = a1;	ar = (a1.nx==1);	mt = (a1.nx>1 && a1.ny==1);	}
+				else
+				{
+					if(ar)		// res 1d array
+					{	k = res.nx;	res.InsertColumns(k);	res.Put(a1,k);	}
+					else if(mt)	// res 2d array
+					{	k = res.ny;	res.InsertRows(k);	res.Put(a1,-1,k);	}
+					else		// res 3d array
+					{	k = res.nz;	res.InsertSlices(k);	res.Put(a1,-1,-1,k);	}
+				}
+				j=i+1;
+			}
+		}
+		wcscpy(Buf,str+j);	Buf[i-j]=0;
+		a1=mglFormulaCalc(Buf, arg);
+		if(j==1)
+		{	res = a1;	ar = (a1.nx==1);	mt = (a1.nx>1 && a1.ny==1);	}
+		else
+		{
+			if(ar)		// res 1d array
+			{	k = res.nx;	res.InsertColumns(k);	res.Put(a1,k);	}
+			else if(mt)	// res 2d array
+			{	k = res.ny;	res.InsertRows(k);	res.Put(a1,-1,k);	}
+			else		// res 3d array
+			{	k = res.nz;	res.InsertSlices(k);	res.Put(a1,-1,-1,k);	}
+		}
+		return res;
+	}
 
 	n=mglFindInText(str,"&|");				// lowest priority -- logical
 	if(n>=0)
@@ -514,6 +556,9 @@ mglData mglFormulaCalc(const wchar_t *string, mglParse *arg)
 			else
 			{	Buf[n]=0;	res = mglApplyOper(Buf,Buf+n+1,arg, fmod);	}
 		}
+		else if(!wcscmp(name+1,L"int"))
+		{	res=mglFormulaCalc(Buf, arg);
+			for(i=0;i<res.nx*res.ny*res.nz;i++)	res.a[i] = floor(res.a[i]);	}
 #ifndef NO_GSL
 		else if(!wcscmp(name,L"i"))
 		{
diff --git a/mgl/mgl_exec.cpp b/mgl/mgl_exec.cpp
index bda95a6..f0b9c4c 100644
--- a/mgl/mgl_exec.cpp
+++ b/mgl/mgl_exec.cpp
@@ -26,7 +26,7 @@
 #endif
 
 #include "mgl/mgl_parse.h"
-
+#define iint(x)	floor((x)+0.5)
 char *mgl_strdup(const char *s);
 wchar_t *mgl_str_copy(const char *s);
 //-----------------------------------------------------------------------------
@@ -82,8 +82,8 @@ void mglc_ambient(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_area(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
-	else if(k[1]!=1)	gr->Area(*(a[0].d),k[1]==2?a[1].s:0,false,k[2]==3 ? a[2].v : NAN);
-	else if(k[2]!=1)	gr->Area(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,false,k[3]==3 ? a[3].v : NAN);
+	else if(k[1]!=1)	gr->Area(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3 ? a[2].v : NAN);
+	else if(k[2]!=1)	gr->Area(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3 ? a[3].v : NAN);
 	else 				gr->Area(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0);
 	return 0;
 }
@@ -91,9 +91,9 @@ void mglc_area(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]!=1)
-		mglprintf(out,1024,L"gr->Area(%s, \"%s\", false, %g);",a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN);
+		mglprintf(out,1024,L"gr->Area(%s, \"%s\", %g);",a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN);
 	else if(k[2]!=1)
-		mglprintf(out,1024,L"gr->Area(%s, %s, \"%s\", false, %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN);
+		mglprintf(out,1024,L"gr->Area(%s, %s, \"%s\", %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN);
 	else 	mglprintf(out,1024,L"gr->Area(%s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"");
 }
 //-----------------------------------------------------------------------------
@@ -112,9 +112,9 @@ void mglc_aspect(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_axial(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
-	else if(k[1]!=1)	gr->Axial(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3 ? int(a[2].v) : 3);
+	else if(k[1]!=1)	gr->Axial(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3 ? iint(a[2].v) : 3);
 	else if(k[1]==1 && k[2]==1)
-		gr->Axial(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3 ? int(a[4].v) : 3);
+		gr->Axial(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3 ? iint(a[4].v) : 3);
 	else	return 1;
 	return 0;
 }
@@ -122,9 +122,9 @@ void mglc_axial(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]!=1)
-		mglprintf(out,1024,L"gr->Axial(%s, \"%s\", %d);", a[0].s,k[1]==2?a[1].s:"",k[2]==3 ? int(a[2].v) : 3);
+		mglprintf(out,1024,L"gr->Axial(%s, \"%s\", %d);", a[0].s,k[1]==2?a[1].s:"",k[2]==3 ? iint(a[2].v) : 3);
 	else if(k[1]==1 && k[2]==1)
-		mglprintf(out,1024,L"gr->Axial(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):3);
+		mglprintf(out,1024,L"gr->Axial(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):3);
 }
 //-----------------------------------------------------------------------------
 int mgls_axialdir(mglGraph *gr, long , mglArg *a, int k[10])
@@ -154,7 +154,7 @@ int mgls_axis(mglGraph *gr, long n, mglArg *a, int k[10])
 		else return 1;
 	}
 	else if(k[0]==2)	gr->Axis(a[0].s, k[1]==3 && a[1].v!=0);
-	else if(k[0]==3)	gr->SetCoor(int(a[0].v));
+	else if(k[0]==3)	gr->SetCoor(iint(a[0].v));
 	else if(k[0]==0)	gr->Axis("xyz");
 	else return 1;
 	return 0;
@@ -177,7 +177,7 @@ void mglc_axis(wchar_t out[1024], long n, mglArg *a, int k[10])
 		if(ok)	mglprintf(out,1024,L"gr->Axis(mglPoint(%g, %g), mglPoint(%g, %g));", a[0].v,a[1].v,a[2].v,a[3].v);
 	}
 	else if(k[0]==2)	mglprintf(out,1024,L"gr->Axis(\"%s\");", a[0].s);
-	else if(k[0]==3)	mglprintf(out,1024,L"gr->SetCoor(\"%d\");", int(a[0].v));
+	else if(k[0]==3)	mglprintf(out,1024,L"gr->SetCoor(\"%d\");", iint(a[0].v));
 	else if(k[0]==0)	mglprintf(out,1024,L"gr->Axis(\"xyz\");");
 }
 //-----------------------------------------------------------------------------
@@ -209,38 +209,38 @@ void mglc_box(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_bars(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
-	else if(k[1]!=1)	gr->Bars(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN, k[3]==3?(a[3].v!=0):false);
-	else if(k[2]!=1)	gr->Bars(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN, k[4]==3?(a[4].v!=0):false);
-	else 				gr->Bars(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0, k[4]==3?(a[4].v!=0):false);
+	else if(k[1]!=1)	gr->Bars(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN);
+	else if(k[2]!=1)	gr->Bars(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN);
+	else 				gr->Bars(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0);
 	return 0;
 }
 void mglc_bars(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]!=1)
-		mglprintf(out,1024,L"gr->Bars(%s, \"%s\", %g, %s);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, (k[3]==3&&a[3].v!=0)?"true":"false");
+		mglprintf(out,1024,L"gr->Bars(%s, \"%s\", %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN);
 	else if(k[2]!=1)
-		mglprintf(out,1024,L"gr->Bars(%s, %s, \"%s\", %g, %s);",a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN, (k[4]==3&&a[4].v!=0)?"true":"false");
+		mglprintf(out,1024,L"gr->Bars(%s, %s, \"%s\", %g);",a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN);
 	else
-		mglprintf(out,1024,L"gr->Bars(%s, %s, %s, \"%s\", %s);",a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", (k[4]==3&&a[4].v!=0)?"true":"false");
+		mglprintf(out,1024,L"gr->Bars(%s, %s, %s, \"%s\");",a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"");
 }
 //-----------------------------------------------------------------------------
 int mgls_barh(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]!=1)
-		gr->Barh(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN, k[3]==3?(a[3].v!=0):false);
+		gr->Barh(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN);
 	else
-		gr->Barh(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN, k[4]==3?(a[4].v!=0):false);
+		gr->Barh(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN);
 	return 0;
 }
 void mglc_barh(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]!=1)
-		mglprintf(out,1024,L"gr->Barh(%s, \"%s\", %g, %s);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, (k[3]==3&&a[3].v!=0)?"true":"false");
+		mglprintf(out,1024,L"gr->Barh(%s, \"%s\", %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN);
 	else
-		mglprintf(out,1024,L"gr->Barh(%s, %s, \"%s\", %g, %s);",a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN, (k[4]==3&&a[4].v!=0)?"true":"false");
+		mglprintf(out,1024,L"gr->Barh(%s, %s, \"%s\", %g);",a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN);
 }
 //-----------------------------------------------------------------------------
 int mgls_belt(mglGraph *gr, long , mglArg *a, int k[10])
@@ -281,14 +281,14 @@ int mgls_beam(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==3)
 		gr->Beam(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),a[4].v,
-				k[5]==2? a[5].s:0,k[6]==3?int(a[6].v):0, int(k[7]==3?a[7].v:3));
+				k[5]==2? a[5].s:0,k[6]==3?iint(a[6].v):0, iint(k[7]==3?a[7].v:3));
 	else	return 1;
 	return 0;
 }
 void mglc_beam(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==3)
-		mglprintf(out,1024,L"gr->Beam(%s, %s, %s, %s, %g, \"%s\", %d, %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].v, k[5]==2? a[5].s:"",k[6]==3?int(a[6].v):0, int(k[7]==3?a[7].v:3));
+		mglprintf(out,1024,L"gr->Beam(%s, %s, %s, %s, %g, \"%s\", %d, %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].v, k[5]==2? a[5].s:"",k[6]==3?iint(a[6].v):0, iint(k[7]==3?a[7].v:3));
 }
 //-----------------------------------------------------------------------------
 int mgls_caxis(mglGraph *gr, long , mglArg *a, int k[10])
@@ -358,14 +358,14 @@ void mglc_crange(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_crop(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3 && k[2]==3 && k[3]==2)
-		a[0].d->Crop(int(a[1].v),int(a[2].v),a[3].s[0]);
+		a[0].d->Crop(iint(a[1].v),iint(a[2].v),a[3].s[0]);
 	else	return 1;
 	return 0;
 }
 void mglc_crop(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3 && k[2]==3 && k[3]==2)
-		mglprintf(out,1024,L"%s.Crop(%d, %d, '%c');",a[0].s, int(a[1].v), int(a[2].v), a[3].s[0]);
+		mglprintf(out,1024,L"%s.Crop(%d, %d, '%c');",a[0].s, iint(a[1].v), iint(a[2].v), a[3].s[0]);
 }
 //-----------------------------------------------------------------------------
 int mgls_cumsum(mglGraph *, long , mglArg *a, int k[10])
@@ -446,19 +446,19 @@ void mglc_crust(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_colorbar(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==2 && k[1]==3 && k[2]==3 && k[3]==3 && k[4]==3 && k[5]==3)
-		gr->Colorbar(a[0].s, int(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v);
-	else if(k[0]==1)	gr->Colorbar(*(a[0].d), k[1]==2 ? a[1].s:0, k[2]==3 ? int(a[2].v):0);
-	else	gr->Colorbar(k[0]==2 ? a[0].s:0, k[1]==3 ? int(a[1].v):0);
+		gr->Colorbar(a[0].s, iint(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v);
+	else if(k[0]==1)	gr->Colorbar(*(a[0].d), k[1]==2 ? a[1].s:0, k[2]==3 ? iint(a[2].v):0);
+	else	gr->Colorbar(k[0]==2 ? a[0].s:0, k[1]==3 ? iint(a[1].v):0);
 	return 0;
 }
 void mglc_colorbar(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==2 && k[1]==3 && k[2]==3 && k[3]==3 && k[4]==3 && k[5]==3)
-		mglprintf(out,1024,L"gr->Colorbar(\"%s\", %d, %g, %g, %g, %g);",a[0].s, int(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v);
+		mglprintf(out,1024,L"gr->Colorbar(\"%s\", %d, %g, %g, %g, %g);",a[0].s, iint(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v);
 	else if(k[0]==1)
-		mglprintf(out,1024,L"gr->Colorbar(%s, \"%s\", %d);",a[0].s, k[1]==2 ? a[1].s:"", k[2]==3 ? int(a[2].v):0);
+		mglprintf(out,1024,L"gr->Colorbar(%s, \"%s\", %d);",a[0].s, k[1]==2 ? a[1].s:"", k[2]==3 ? iint(a[2].v):0);
 	else
-		mglprintf(out,1024,L"gr->Colorbar(\"%s\", %d);",k[0]==2 ? a[0].s:"", k[1]==3 ? int(a[1].v):0);
+		mglprintf(out,1024,L"gr->Colorbar(\"%s\", %d);",k[0]==2 ? a[0].s:"", k[1]==3 ? iint(a[1].v):0);
 }
 //-----------------------------------------------------------------------------
 int mgls_copy(mglGraph *gr, long , mglArg *a, int k[10])
@@ -493,12 +493,12 @@ void mglc_copy(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_cont(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
-	else if(k[1]!=1)	gr->Cont(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?int(a[2].v):7,k[3]==3?a[3].v:NAN);
+	else if(k[1]!=1)	gr->Cont(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?iint(a[2].v):7,k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]!=1)
 		gr->Cont(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0,k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]!=1)
 		gr->Cont(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0,
-			k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN);
+			k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1)
 		gr->Cont(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0,
 			k[5]==3?a[5].v:NAN);
@@ -509,11 +509,11 @@ void mglc_cont(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]!=1)
-		mglprintf(out,1024,L"gr->Cont(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7, k[3]==3?a[3].v:NAN);
+		mglprintf(out,1024,L"gr->Cont(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7, k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]!=1)
 		mglprintf(out,1024,L"gr->Cont(%s, %s, \"%s\", %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]!=1)
-		mglprintf(out,1024,L"gr->Cont(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN);
+		mglprintf(out,1024,L"gr->Cont(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1)
 		mglprintf(out,1024,L"gr->Cont(%s, %s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN);
 }
@@ -522,12 +522,12 @@ int mgls_contf(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]!=1)
-		gr->ContF(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?int(a[2].v):7,k[3]==3?a[3].v:NAN);
+		gr->ContF(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?iint(a[2].v):7,k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]!=1)
 		gr->ContF(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0,k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]!=1)
 		gr->ContF(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0,
-			k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN);
+			k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1)
 		gr->ContF(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0,
 			k[5]==3?a[5].v:NAN);
@@ -538,11 +538,11 @@ void mglc_contf(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]!=1)
-		mglprintf(out,1024,L"gr->ContF(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7, k[3]==3?a[3].v:NAN);
+		mglprintf(out,1024,L"gr->ContF(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7, k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]!=1)
 		mglprintf(out,1024,L"gr->ContF(%s, %s, \"%s\", %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]!=1)
-		mglprintf(out,1024,L"gr->ContF(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN);
+		mglprintf(out,1024,L"gr->ContF(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1)
 		mglprintf(out,1024,L"gr->ContF(%s, %s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN);
 }
@@ -551,12 +551,12 @@ int mgls_contd(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]!=1)
-		gr->ContD(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?int(a[2].v):7,k[3]==3?a[3].v:NAN);
+		gr->ContD(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?iint(a[2].v):7,k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]!=1)
 		gr->ContD(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0,k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]!=1)
 		gr->ContD(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0,
-					k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN);
+					k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1)
 		gr->ContD(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0,
 					k[5]==3?a[5].v:NAN);
@@ -567,11 +567,11 @@ void mglc_contd(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]!=1)
-		mglprintf(out,1024,L"gr->ContD(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7, k[3]==3?a[3].v:NAN);
+		mglprintf(out,1024,L"gr->ContD(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7, k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]!=1)
 		mglprintf(out,1024,L"gr->ContD(%s, %s, \"%s\", %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]!=1)
-		mglprintf(out,1024,L"gr->ContD(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN);
+		mglprintf(out,1024,L"gr->ContD(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1)
 		mglprintf(out,1024,L"gr->ContD(%s, %s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN);
 }
@@ -580,13 +580,13 @@ int mgls_cont3(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]==2)
-		gr->Cont3(*(a[0].d), a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):7);
+		gr->Cont3(*(a[0].d), a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):7);
 	else if(k[1]==1 && k[2]==2)
-		gr->Cont3(*(a[0].d), *(a[1].d), a[2].s[0], k[3]==3?int(a[3].v):-1, k[4]==2?a[4].s:0);
+		gr->Cont3(*(a[0].d), *(a[1].d), a[2].s[0], k[3]==3?iint(a[3].v):-1, k[4]==2?a[4].s:0);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2)
-		gr->Cont3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):7);
+		gr->Cont3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):7);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==2)
-		gr->Cont3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d), a[5].s[0], k[6]==3?int(a[6].v):-1, k[7]==2?a[7].s:0);
+		gr->Cont3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d), a[5].s[0], k[6]==3?iint(a[6].v):-1, k[7]==2?a[7].s:0);
 	else	return 1;
 	return 0;
 }
@@ -594,26 +594,26 @@ void mglc_cont3(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]==2)
-		mglprintf(out,1024,L"gr->Cont3(%s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7);
+		mglprintf(out,1024,L"gr->Cont3(%s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7);
 	else if(k[1]==1 && k[2]==2)
-		mglprintf(out,1024,L"gr->Cont3(%s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s[0], k[3]==3?int(a[3].v):-1, k[4]==2?a[4].s:"");
+		mglprintf(out,1024,L"gr->Cont3(%s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s[0], k[3]==3?iint(a[3].v):-1, k[4]==2?a[4].s:"");
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2)
-		mglprintf(out,1024,L"gr->Cont3(%s, %s, %s, %s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):7);
+		mglprintf(out,1024,L"gr->Cont3(%s, %s, %s, %s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):7);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==2)
-		mglprintf(out,1024,L"gr->Cont3(%s, %s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s[0], k[6]==3?int(a[6].v):-1, k[7]==2?a[7].s:0);
+		mglprintf(out,1024,L"gr->Cont3(%s, %s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s[0], k[6]==3?iint(a[6].v):-1, k[7]==2?a[7].s:0);
 }
 //-----------------------------------------------------------------------------
 int mgls_contf3(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]==2)
-		gr->ContF3(*(a[0].d), a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):7);
+		gr->ContF3(*(a[0].d), a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):7);
 	else if(k[1]==1 && k[2]==2)
-		gr->ContF3(*(a[0].d), *(a[1].d), a[2].s[0], k[3]==3?int(a[3].v):-1, k[4]==2?a[4].s:0);
+		gr->ContF3(*(a[0].d), *(a[1].d), a[2].s[0], k[3]==3?iint(a[3].v):-1, k[4]==2?a[4].s:0);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2)
-		gr->ContF3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):7);
+		gr->ContF3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):7);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==2)
-		gr->ContF3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d), a[5].s[0], k[6]==3?int(a[6].v):-1, k[7]==2?a[7].s:0);
+		gr->ContF3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d), a[5].s[0], k[6]==3?iint(a[6].v):-1, k[7]==2?a[7].s:0);
 	else	return 1;
 	return 0;
 }
@@ -621,30 +621,30 @@ void mglc_contf3(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]==2)
-		mglprintf(out,1024,L"gr->ContF3(%s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7);
+		mglprintf(out,1024,L"gr->ContF3(%s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7);
 	else if(k[1]==1 && k[2]==2)
-		mglprintf(out,1024,L"gr->ContF3(%s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s[0], k[3]==3?int(a[3].v):-1, k[4]==2?a[4].s:"");
+		mglprintf(out,1024,L"gr->ContF3(%s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s[0], k[3]==3?iint(a[3].v):-1, k[4]==2?a[4].s:"");
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2)
-		mglprintf(out,1024,L"gr->ContF3(%s, %s, %s, %s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):7);
+		mglprintf(out,1024,L"gr->ContF3(%s, %s, %s, %s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):7);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==2)
-		mglprintf(out,1024,L"gr->ContF3(%s, %s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s[0], k[6]==3?int(a[6].v):-1, k[7]==2?a[7].s:0);
+		mglprintf(out,1024,L"gr->ContF3(%s, %s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s[0], k[6]==3?iint(a[6].v):-1, k[7]==2?a[7].s:0);
 }
 //-----------------------------------------------------------------------------
 int mgls_conta(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]==1 && k[2]==1 && k[3]==1)
-		gr->ContA(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0, k[5]==3?int(a[5].v):7);
-	else	gr->ContA(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?int(a[2].v):7);
+		gr->ContA(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0, k[5]==3?iint(a[5].v):7);
+	else	gr->ContA(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?iint(a[2].v):7);
 	return 0;
 }
 void mglc_conta(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]==1 && k[2]==1 && k[3]==1)
-		mglprintf(out,1024,L"gr->ContA(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?int(a[5].v):7);
+		mglprintf(out,1024,L"gr->ContA(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?iint(a[5].v):7);
 	else
-		mglprintf(out,1024,L"gr->ContA(%s, \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7);
+		mglprintf(out,1024,L"gr->ContA(%s, \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7);
 }
 //-----------------------------------------------------------------------------
 int mgls_contfa(mglGraph *gr, long , mglArg *a, int k[10])
@@ -652,89 +652,89 @@ int mgls_contfa(mglGraph *gr, long , mglArg *a, int k[10])
 	if(k[0]!=1)	return 1;
 	else if(k[1]==1 && k[2]==1 && k[3]==1)
 		gr->ContFA(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0,
-				k[5]==3?int(a[5].v):7);
-	else	gr->ContFA(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?int(a[2].v):7);
+				k[5]==3?iint(a[5].v):7);
+	else	gr->ContFA(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?iint(a[2].v):7);
 	return 0;
 }
 void mglc_contfa(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]==1 && k[2]==1 && k[3]==1)
-		mglprintf(out,1024,L"gr->ContFA(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?int(a[5].v):7);
+		mglprintf(out,1024,L"gr->ContFA(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?iint(a[5].v):7);
 	else
-		mglprintf(out,1024,L"gr->ContFA(%s, \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7);
+		mglprintf(out,1024,L"gr->ContFA(%s, \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7);
 }
 //-----------------------------------------------------------------------------
 int mgls_contx(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==1)	gr->ContX(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7);
+	if(k[0]==1)	gr->ContX(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7);
 	else	return 1;
 	return 0;
 }
 void mglc_contx(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1)
-		mglprintf(out,1024,L"gr->ContX(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7);
+		mglprintf(out,1024,L"gr->ContX(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7);
 }
 //-----------------------------------------------------------------------------
 int mgls_contfx(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==1)	gr->ContFX(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7);
+	if(k[0]==1)	gr->ContFX(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7);
 	else	return 1;
 	return 0;
 }
 void mglc_contfx(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1)
-		mglprintf(out,1024,L"gr->ContFX(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7);
+		mglprintf(out,1024,L"gr->ContFX(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7);
 }
 //-----------------------------------------------------------------------------
 int mgls_conty(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==1)	gr->ContY(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7);
+	if(k[0]==1)	gr->ContY(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7);
 	else	return 1;
 	return 0;
 }
 void mglc_conty(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1)
-		mglprintf(out,1024,L"gr->ContY(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7);
+		mglprintf(out,1024,L"gr->ContY(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7);
 }
 //-----------------------------------------------------------------------------
 int mgls_contfy(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==1)	gr->ContFY(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7);
+	if(k[0]==1)	gr->ContFY(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7);
 	else	return 1;
 	return 0;
 }
 void mglc_contfy(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1)
-		mglprintf(out,1024,L"gr->ContFY(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7);
+		mglprintf(out,1024,L"gr->ContFY(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7);
 }
 //-----------------------------------------------------------------------------
 int mgls_contz(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==1)	gr->ContZ(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7);
+	if(k[0]==1)	gr->ContZ(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7);
 	else	return 1;
 	return 0;
 }
 void mglc_contz(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1)
-		mglprintf(out,1024,L"gr->ContZ(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7);
+		mglprintf(out,1024,L"gr->ContZ(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7);
 }
 //-----------------------------------------------------------------------------
 int mgls_contfz(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==1)	gr->ContFZ(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7);
+	if(k[0]==1)	gr->ContFZ(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7);
 	else	return 1;
 	return 0;
 }
 void mglc_contfz(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1)
-		mglprintf(out,1024,L"gr->ContFZ(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7);
+		mglprintf(out,1024,L"gr->ContFZ(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7);
 }
 //-----------------------------------------------------------------------------
 int mgls_cone(mglGraph *gr, long , mglArg *a, int [10])
@@ -788,11 +788,11 @@ int mgls_dens3(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]==2)
-		gr->Dens3(*(a[0].d),a[1].s[0],k[2]==3?int(a[2].v):-1,
+		gr->Dens3(*(a[0].d),a[1].s[0],k[2]==3?iint(a[2].v):-1,
 				k[3]==2?a[3].s:0);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2)
 		gr->Dens3(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),a[4].s[0],
-				k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0);
+				k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0);
 	else	return 1;
 	return 0;
 }
@@ -800,9 +800,9 @@ void mglc_dens3(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]==2)
-		mglprintf(out,1024,L"gr->Dens3(%s, '%c', %d, \"%s\");", a[0].s, a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:"");
+		mglprintf(out,1024,L"gr->Dens3(%s, '%c', %d, \"%s\");", a[0].s, a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:"");
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2)
-		mglprintf(out,1024,L"gr->Dens3(%s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0);
+		mglprintf(out,1024,L"gr->Dens3(%s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0);
 }
 //-----------------------------------------------------------------------------
 int mgls_densa(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1072,16 +1072,16 @@ int mgls_flow(mglGraph *gr, long , mglArg *a, int k[10])
 	int i;
 	for(i=0;i<7;i++)	if(k[i]!=1)	break;
 	if(i==2)
-		gr->Flow(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3?int(a[3].v):5,
+		gr->Flow(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3?iint(a[3].v):5,
 			true,k[4]==3?a[4].v:NAN);
 	else if(i==4)
 		gr->Flow(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0,
-			k[5]==3?int(a[5].v):5,true,k[6]==3?a[6].v:NAN);
+			k[5]==3?iint(a[5].v):5,true,k[6]==3?a[6].v:NAN);
 	else if(i==3)
-		gr->Flow(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?int(a[4].v):3);
+		gr->Flow(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?iint(a[4].v):3);
 	else if(i==6)
 		gr->Flow(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),
-			k[6]==2?a[6].s:0,k[7]==3?int(a[7].v):3);
+			k[6]==2?a[6].s:0,k[7]==3?iint(a[7].v):3);
 	else if(k[0]==3 && k[1]==3 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==1)
 		gr->FlowP(mglPoint(a[0].v,a[1].v,k[7]==3?a[7].v:NAN),
 			*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),k[6]==2?a[6].s:0);
@@ -1102,13 +1102,13 @@ void mglc_flow(wchar_t out[1024], long , mglArg *a, int k[10])
 	int i;
 	for(i=0;i<7;i++)	if(k[i]!=1)	break;
 	if(i==2)
-		mglprintf(out,1024,L"gr->Flow(%s, %s, \"%s\", %d, true, %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?int(a[3].v):5, k[4]==3?a[4].v:NAN);
+		mglprintf(out,1024,L"gr->Flow(%s, %s, \"%s\", %d, true, %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?iint(a[3].v):5, k[4]==3?a[4].v:NAN);
 	else if(i==4)
-		mglprintf(out,1024,L"gr->Flow(%s, %s, %s, %s, \"%s\", %d, true, %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?int(a[5].v):5, k[6]==3?a[6].v:NAN);
+		mglprintf(out,1024,L"gr->Flow(%s, %s, %s, %s, \"%s\", %d, true, %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?iint(a[5].v):5, k[6]==3?a[6].v:NAN);
 	else if(i==3)
-		mglprintf(out,1024,L"gr->Flow(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):3);
+		mglprintf(out,1024,L"gr->Flow(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):3);
 	else if(i==6)
-		mglprintf(out,1024,L"gr->Flow(%s, %s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):3);
+		mglprintf(out,1024,L"gr->Flow(%s, %s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):3);
 	else if(k[0]==3 && k[1]==3 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==1)
 		mglprintf(out,1024,L"gr->FlowP(mglPoint(%g,%g,%g), %s, %s, %s, %s, \"%s\");",
 			a[0].v,a[1].v,k[7]==3?a[7].v:NAN,a[2].s,a[3].s,a[4].s,a[5].s,k[6]==2?a[6].s:"");
@@ -1123,6 +1123,32 @@ void mglc_flow(wchar_t out[1024], long , mglArg *a, int k[10])
 			a[0].v,a[1].v,a[2].v,a[3].s,a[4].s,a[5].s,k[6]==2?a[6].s:"");
 }
 //-----------------------------------------------------------------------------
+int mgls_grad(mglGraph *gr, long , mglArg *a, int k[10])
+{
+	int i;
+	for(i=0;i<7;i++)	if(k[i]!=1)	break;
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1)
+		gr->Grad(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d), k[4]==2?a[4].s:0, k[5]==3?iint(a[5].v):5);
+	else if(k[0]==1 && k[1]==1 && k[2]==1)
+		gr->Grad(*(a[0].d),*(a[1].d),*(a[2].d), k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):5, k[5]==3?a[5].v:NAN);
+	else if(k[0]==1)
+		gr->Grad(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?iint(a[2].v):5, k[3]==3?a[3].v:NAN);
+	else	return 1;
+	return 0;
+}
+void mglc_grad(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1)
+		mglprintf(out,1024,L"gr->Grad(%s, %s, %s, %s, \"%s\", %d, %g);", 
+			a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?iint(a[5].v):5);
+	else if(k[0]==1 && k[1]==1 && k[2]==1)
+		mglprintf(out,1024,L"gr->Grad(%s, %s, %s, \"%s\", %d, %g);", 
+			a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):5, k[5]==3?a[5].v:NAN);
+	else if(k[0]==1)
+		mglprintf(out,1024,L"gr->Grad(%s, \"%s\", %d, %g);", 
+			a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):5, k[3]==3?a[3].v:NAN);
+}
+//-----------------------------------------------------------------------------
 int mgls_fill(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==2)
@@ -1140,6 +1166,18 @@ void mglc_fill(wchar_t out[1024], long , mglArg *a, int k[10])
 		mglprintf(out,1024,L"%s.Fill(%g, %g, '%c');", a[0].s, a[1].v,a[2].v, k[3]==2?a[3].s[0]:'x');
 }
 //-----------------------------------------------------------------------------
+int mgls_fillsample(mglGraph *gr, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==3 && k[2]==2)	a[0].d->FillSample(iint(a[1].v), a[2].s);
+	else	return 1;
+	return 0;
+}
+void mglc_fillsample(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==3 && k[2]==2)
+		mglprintf(out,1024,L"%s.FillSample(%d, \"%s\");", a[0].s, iint(a[1].v), a[2].s);
+}
+//-----------------------------------------------------------------------------
 int mgls_fog(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==3)	gr->Fog(a[0].v,k[1]==3?a[1].v:0.25);
@@ -1182,31 +1220,39 @@ void mglc_loadfont(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_grid(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]!=1)			gr->Grid(k[0]==2?a[0].s:"xyz", k[1]==2?a[1].s:"B-");
-	else if(k[1]!=1)	gr->Grid(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN);
-	else if(k[1]==1 && k[2]==1 && k[3]!=1)
+	gr->Grid(k[0]==2?a[0].s:"xyzt", k[1]==2?a[1].s:"B-");
+	return 0;
+}
+void mglc_grid(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	mglprintf(out,1024,L"gr->Grid(\"%s\", \"%s\");", k[0]==2?a[0].s:"xyz", k[1]==2?a[1].s:"B-");
+}
+//-----------------------------------------------------------------------------
+int mgls_grid2(mglGraph *gr, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]!=1)
 		gr->Grid(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0, k[4]==3?a[4].v:NAN);
+	else if(k[0]==1)	gr->Grid(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN);
 	else	return 1;
 	return 0;
 }
-void mglc_grid(wchar_t out[1024], long , mglArg *a, int k[10])
+void mglc_grid2(wchar_t out[1024], long , mglArg *a, int k[10])
 {
-	if(k[0]!=1)	mglprintf(out,1024,L"gr->Grid(\"%s\", \"%s\");", k[0]==2?a[0].s:"xyz", k[1]==2?a[1].s:"B-");
-	else if(k[1]!=1)
-		mglprintf(out,1024,L"gr->Grid(%s,\"%s\", %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN);
-	else if(k[1]==1 && k[2]==1 && k[3]!=1)
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]!=1)
 		mglprintf(out,1024,L"gr->Grid(%s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:NAN);
+	else if(k[0]==1)
+		mglprintf(out,1024,L"gr->Grid(%s,\"%s\", %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN);
 }
 //-----------------------------------------------------------------------------
 int mgls_grid3(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]==2)
-		gr->Grid3(*(a[0].d),a[1].s[0],k[2]==3?int(a[2].v):-1,
+		gr->Grid3(*(a[0].d),a[1].s[0],k[2]==3?iint(a[2].v):-1,
 				k[3]==2?a[3].s:0);
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2)
 		gr->Grid3(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),a[4].s[0],
-				k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0);
+				k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0);
 	else	return 1;
 	return 0;
 }
@@ -1214,9 +1260,9 @@ void mglc_grid3(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return;
 	else if(k[1]==2)
-		mglprintf(out,1024,L"gr->Grid3(%s, '%c', %d, \"%s\");", a[0].s, a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:"");
+		mglprintf(out,1024,L"gr->Grid3(%s, '%c', %d, \"%s\");", a[0].s, a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:"");
 	else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2)
-		mglprintf(out,1024,L"gr->Grid3(%s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0);
+		mglprintf(out,1024,L"gr->Grid3(%s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0);
 }
 //-----------------------------------------------------------------------------
 int mgls_grida(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1242,9 +1288,9 @@ int mgls_light(mglGraph *gr, long , mglArg *a, int k[10])
 	else if(k[0]!=3)	return 1;
 	else if(k[1]!=3)	gr->Light(a[0].v!=0);
 	else if(k[2]==3 && k[3]==3)
-		gr->Light(int(a[0].v),mglPoint(a[1].v,a[2].v,a[3].v),
+		gr->Light(iint(a[0].v),mglPoint(a[1].v,a[2].v,a[3].v),
 			k[4]==2?a[4].s[0]:'w',k[5]==3?a[5].v:0.5,true);
-	else	gr->Light(int(a[0].v),a[1].v!=0);
+	else	gr->Light(iint(a[0].v),a[1].v!=0);
 	return 0;
 }
 void mglc_light(wchar_t out[1024], long , mglArg *a, int k[10])
@@ -1253,8 +1299,8 @@ void mglc_light(wchar_t out[1024], long , mglArg *a, int k[10])
 	else if(k[0]!=3)	return;
 	else if(k[1]!=3)	mglprintf(out,1024,L"gr->Light(%s);", a[0].v!=0 ? "true":"false");
 	else if(k[2]==3 && k[3]==3)
-		mglprintf(out,1024,L"gr->Light(%d, mglPoint(%g, %g, %g), '%c', %g, true);", int(a[0].v), a[1].v, a[2].v, a[3].v, k[4]==2?a[4].s[0]:'w', k[5]==3?a[5].v:0.5);
-	else	mglprintf(out,1024,L"gr->Light(%d, %s);", int(a[0].v), a[1].v!=0 ? "true":"false");
+		mglprintf(out,1024,L"gr->Light(%d, mglPoint(%g, %g, %g), '%c', %g, true);", iint(a[0].v), a[1].v, a[2].v, a[3].v, k[4]==2?a[4].s[0]:'w', k[5]==3?a[5].v:0.5);
+	else	mglprintf(out,1024,L"gr->Light(%d, %s);", iint(a[0].v), a[1].v!=0 ? "true":"false");
 }
 //-----------------------------------------------------------------------------
 int mgls_line(mglGraph *gr, long n, mglArg *a, int [10])
@@ -1306,7 +1352,7 @@ int mgls_legend(mglGraph *gr, long , mglArg *a, int k[10])
 	if(k[0]==3 && k[1]==3)
 		gr->Legend(a[0].v, a[1].v, k[2]==2?a[2].s:"rL", k[3]==3?a[3].v:-1, k[4]==3?a[4].v:0.1);
 	else
-		gr->Legend(k[0]==3?int(a[0].v):3, k[1]==2?a[1].s:"rL", k[2]==3?a[2].v:-1, k[3]==3?a[3].v:0.1);
+		gr->Legend(k[0]==3?iint(a[0].v):3, k[1]==2?a[1].s:"rL", k[2]==3?a[2].v:-1, k[3]==3?a[3].v:0.1);
 	return 0;
 }
 void mglc_legend(wchar_t out[1024], long , mglArg *a, int k[10])
@@ -1314,7 +1360,7 @@ void mglc_legend(wchar_t out[1024], long , mglArg *a, int k[10])
 	if(k[0]==3 && k[1]==3)
 		mglprintf(out,1024,L"gr->Legend(%g, %g, \"%s\", %g, %g);", a[0].v, a[1].v, k[2]==2?a[2].s:"rL", k[3]==3?a[3].v:-1, k[4]==3?a[4].v:0.1);
 	else
-		mglprintf(out,1024,L"gr->Legend(%d, \"%s\", %g, %g);", k[0]==3?int(a[0].v):3, k[1]==2?a[1].s:"rL", k[2]==3?a[2].v:-1, k[4]==3?a[4].v:0.1);
+		mglprintf(out,1024,L"gr->Legend(%d, \"%s\", %g, %g);", k[0]==3?iint(a[0].v):3, k[1]==2?a[1].s:"rL", k[2]==3?a[2].v:-1, k[4]==3?a[4].v:0.1);
 }
 //-----------------------------------------------------------------------------
 int mgls_linewidth(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1341,13 +1387,24 @@ void mglc_barwidth(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_legendbox(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==3)	gr->LegendBox = (a[0].v!=0);
+	if(k[0]==3)	gr->SetLegendBox(a[0].v!=0);
 	else	return 1;
 	return 0;
 }
 void mglc_legendbox(wchar_t out[1024], long , mglArg *a, int k[10])
 {
-	if(k[0]==3)	mglprintf(out,1024,L"gr->LegendBox = %s;", (a[0].v!=0)?"true":"false");
+	if(k[0]==3)	mglprintf(out,1024,L"gr->SetLegendBox(%s);", (a[0].v!=0)?"true":"false");
+}
+//-----------------------------------------------------------------------------
+int mgls_legendmarks(mglGraph *gr, long , mglArg *a, int k[10])
+{
+	if(k[0]==3)	gr->SetLegendMarks(iint(a[0].v));
+	else	return 1;
+	return 0;
+}
+void mglc_legendmarks(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]==3)	mglprintf(out,1024,L"gr->SetLegendMarks(%d);", iint(a[0].v));
 }
 //-----------------------------------------------------------------------------
 int mgls_modify(mglGraph *, long , mglArg *a, int k[10])
@@ -1357,7 +1414,7 @@ int mgls_modify(mglGraph *, long , mglArg *a, int k[10])
 	else if(k[0]==1 && k[1]==2 && k[2]==1)
 		a[0].d->Modify(a[1].s,*(a[2].d));
 	else if(k[0]==1 && k[1]==2)
-		a[0].d->Modify(a[1].s, k[2]==3 ? int(a[2].v):0);
+		a[0].d->Modify(a[1].s, k[2]==3 ? iint(a[2].v):0);
 	else	return 1;
 	return 0;
 }
@@ -1368,7 +1425,7 @@ void mglc_modify(wchar_t out[1024], long , mglArg *a, int k[10])
 	else if(k[0]==1 && k[1]==2 && k[2]==1)
 		mglprintf(out,1024,L"%s.Modify(\"%s\", %s);", a[0].s, a[1].s, a[2].s);
 	else if(k[0]==1 && k[1]==2)
-		mglprintf(out,1024,L"%s.Modify(\"%s\", %d);", a[0].s, a[1].s, k[2]==3 ? int(a[2].v):0);
+		mglprintf(out,1024,L"%s.Modify(\"%s\", %d);", a[0].s, a[1].s, k[2]==3 ? iint(a[2].v):0);
 }
 //-----------------------------------------------------------------------------
 int mgls_max(mglGraph *, long , mglArg *a, int k[10])
@@ -1409,13 +1466,13 @@ void mglc_sum(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_meshnum(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==3)	gr->MeshNum = int(a[0].v);
+	if(k[0]==3)	gr->MeshNum = iint(a[0].v);
 	else	return 1;
 	return 0;
 }
 void mglc_meshnum(wchar_t out[1024], long , mglArg *a, int k[10])
 {
-	if(k[0]==3)	mglprintf(out,1024,L"gr->MeshNum = %d;", int(a[0].v));
+	if(k[0]==3)	mglprintf(out,1024,L"gr->MeshNum = %d;", iint(a[0].v));
 }
 //-----------------------------------------------------------------------------
 int mgls_marksize(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1470,8 +1527,8 @@ int mgls_read(mglGraph *gr, long n, mglArg *a, int k[10])
 	bool rr=true;
 	if(k[0]!=1 || k[1]!=2)	return 1;
 	else if(n==2)	rr=a[0].d->Read(a[1].s);
-	else rr=a[0].d->Read(a[1].s, k[2]==3?int(a[2].v):1,
-			k[3]==3?int(a[3].v):1, k[4]==3?int(a[4].v):1);
+	else rr=a[0].d->Read(a[1].s, k[2]==3?iint(a[2].v):1,
+			k[3]==3?iint(a[3].v):1, k[4]==3?iint(a[4].v):1);
 	if(!rr)	gr->SetWarn(mglWarnFile);
 	return 0;
 }
@@ -1480,21 +1537,21 @@ void mglc_read(wchar_t out[1024], long n, mglArg *a, int k[10])
 	if(k[0]!=1 || k[1]!=2)	return;
 	else if(n==2)	mglprintf(out,1024,L"%s.Read(\"%s\");", a[0].s, a[1].s);
 	else
-		mglprintf(out,1024,L"%s.Read(\"%s\", %d, %d, %d);", a[0].s, a[1].s, k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1, k[4]==3?int(a[4].v):1);
+		mglprintf(out,1024,L"%s.Read(\"%s\", %d, %d, %d);", a[0].s, a[1].s, k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1, k[4]==3?iint(a[4].v):1);
 }
 //-----------------------------------------------------------------------------
 int mgls_readmat(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	bool rr=true;
 	if(k[0]!=1 || k[1]!=2)	return 1;
-	else	rr=a[0].d->ReadMat(a[1].s, k[2]==3?int(a[2].v):2);
+	else	rr=a[0].d->ReadMat(a[1].s, k[2]==3?iint(a[2].v):2);
 	if(!rr)	gr->SetWarn(mglWarnFile);
 	return 0;
 }
 void mglc_readmat(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==2)
-		mglprintf(out,1024,L"%s.ReadMat(\"%s\", %d);", a[0].s, a[1].s, k[2]==3?int(a[2].v):2);
+		mglprintf(out,1024,L"%s.ReadMat(\"%s\", %d);", a[0].s, a[1].s, k[2]==3?iint(a[2].v):2);
 }
 //-----------------------------------------------------------------------------
 int mgls_readall(mglGraph *, long , mglArg *a, int k[10])
@@ -1600,15 +1657,15 @@ void mglc_rect(wchar_t out[1024], long n, mglArg *a, int [10])
 int mgls_resize(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1)
-		*(a[0].d) = a[1].d->Resize(k[2]==3?int(a[2].v):1,
-				k[3]==3?int(a[3].v):1, k[4]==3?int(a[4].v):1);
+		*(a[0].d) = a[1].d->Resize(k[2]==3?iint(a[2].v):1,
+				k[3]==3?iint(a[3].v):1, k[4]==3?iint(a[4].v):1);
 	else	return 1;
 	return 0;
 }
 void mglc_resize(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1)
-		mglprintf(out,1024,L"%s = %s.Resize(%d, %d, %d);", a[0].s, a[1].s, k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1, k[4]==3?int(a[4].v):1);
+		mglprintf(out,1024,L"%s = %s.Resize(%d, %d, %d);", a[0].s, a[1].s, k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1, k[4]==3?iint(a[4].v):1);
 }
 //-----------------------------------------------------------------------------
 int mgls_rotate(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1652,14 +1709,14 @@ void mglc_save(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_smooth(mglGraph *, long , mglArg *a, int k[10])
 {
-	if(k[0]==1)		a[0].d->Smooth(k[1]==3?int(a[1].v):2,k[2]==2?a[2].s:"xyz");
+	if(k[0]==1)		a[0].d->Smooth(k[1]==3?iint(a[1].v):2,k[2]==2?a[2].s:"xyz");
 	else	return 1;
 	return 0;
 }
 void mglc_smooth(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1)
-		mglprintf(out,1024,L"%s.Smooth(%d, \"%s\");", a[0].s, k[1]==3?int(a[1].v):2, k[2]==2?a[2].s:"xyz");
+		mglprintf(out,1024,L"%s.Smooth(%d, \"%s\");", a[0].s, k[1]==3?iint(a[1].v):2, k[2]==2?a[2].s:"xyz");
 }
 //-----------------------------------------------------------------------------
 int mgls_swap(mglGraph *, long , mglArg *a, int k[10])
@@ -1673,13 +1730,13 @@ void mglc_swap(wchar_t out[1024], long , mglArg *a, int k[10])
 	if(k[0]==1 && k[1]==2)	mglprintf(out,1024,L"%s.Swap(\"%s\");", a[0].s, a[1].s);
 }
 //-----------------------------------------------------------------------------
-int mgls_set_id(mglGraph *, long , mglArg *a, int k[10])
+int mgls_idset(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==2)	a[0].d->SetColumnId(a[1].s);
 	else	return 1;
 	return 0;
 }
-void mglc_set_id(wchar_t out[1024], long , mglArg *a, int k[10])
+void mglc_idset(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==2)	mglprintf(out,1024,L"%s.SetColumnId(\"%s\");", a[0].s, a[1].s);
 }
@@ -1769,41 +1826,41 @@ void mglc_radar(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_squeeze(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3)
-		a[0].d->Squeeze(int(a[1].v), k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1, k[4]==3 && a[4].v>0);
+		a[0].d->Squeeze(iint(a[1].v), k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1, k[4]==3 && a[4].v>0);
 	else	return 1;
 	return 0;
 }
 void mglc_squeeze(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3)
-		mglprintf(out,1024,L"%s.Squeeze(%d, %d, %d, %s);", a[0].s, int(a[1].v), 
-			k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1, k[4]==3 && a[4].v>0 ? "true":"false");
+		mglprintf(out,1024,L"%s.Squeeze(%d, %d, %d, %s);", a[0].s, iint(a[1].v), 
+			k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1, k[4]==3 && a[4].v>0 ? "true":"false");
 }
 //-----------------------------------------------------------------------------
 int mgls_stfad(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==3)
-		*(a[0].d) = mglSTFA(*(a[1].d),*(a[2].d), int(a[3].v), k[4]==2?a[4].s[0]:'x');
+		*(a[0].d) = mglSTFA(*(a[1].d),*(a[2].d), iint(a[3].v), k[4]==2?a[4].s[0]:'x');
 	else	return 1;
 	return 0;
 }
 void mglc_stfad(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==3)
-		mglprintf(out,1024,L"%s = mglSTFA(%s, %s, %d, '%c');", a[0].s, a[1].s, a[2].s, int(a[3].v), k[4]==2?a[4].s[0]:'x');
+		mglprintf(out,1024,L"%s = mglSTFA(%s, %s, %d, '%c');", a[0].s, a[1].s, a[2].s, iint(a[3].v), k[4]==2?a[4].s[0]:'x');
 }
 //-----------------------------------------------------------------------------
 int mgls_setsize(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3 && a[1].v>1 && a[0].v>1)
-		gr->SetSize(int(a[0].v), int(a[1].v));
+		gr->SetSize(iint(a[0].v), iint(a[1].v));
 	else	return 1;
 	return 0;
 }
 void mglc_setsize(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3 && a[1].v>1 && a[0].v>1)
-		mglprintf(out,1024,L"gr->SetSize(%d, %d);", int(a[0].v), int(a[1].v));
+		mglprintf(out,1024,L"gr->SetSize(%d, %d);", iint(a[0].v), iint(a[1].v));
 }
 //-----------------------------------------------------------------------------
 int mgls_sphere(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1830,18 +1887,18 @@ void mglc_sphere(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_stfa(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==3)
-		gr->STFA(*(a[0].d),*(a[1].d), int(a[2].v), k[3]==2?a[3].s:"");
+		gr->STFA(*(a[0].d),*(a[1].d), iint(a[2].v), k[3]==2?a[3].s:"");
 	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==3)
-		gr->STFA(*(a[0].d),*(a[1].d), *(a[2].d),*(a[3].d), int(a[4].v), k[5]==2?a[5].s:"");
+		gr->STFA(*(a[0].d),*(a[1].d), *(a[2].d),*(a[3].d), iint(a[4].v), k[5]==2?a[5].s:"");
 	else	return 1;
 	return 0;
 }
 void mglc_stfa(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==3)
-		mglprintf(out,1024,L"gr->STFA(%s, %s, %d, \"%s\");", a[0].s, a[1].s, int(a[2].v), k[3]==2?a[3].s:"");
+		mglprintf(out,1024,L"gr->STFA(%s, %s, %d, \"%s\");", a[0].s, a[1].s, iint(a[2].v), k[3]==2?a[3].s:"");
 	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==3)
-		mglprintf(out,1024,L"gr->STFA(%s, %s, %s, %s, %d, \"%s\");", a[0].s, a[1].s,  a[2].s, a[3].s, int(a[4].v), k[5]==2?a[5].s:"");
+		mglprintf(out,1024,L"gr->STFA(%s, %s, %s, %s, %d, \"%s\");", a[0].s, a[1].s,  a[2].s, a[3].s, iint(a[4].v), k[5]==2?a[5].s:"");
 }
 //-----------------------------------------------------------------------------
 int mgls_surf3(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1852,10 +1909,10 @@ int mgls_surf3(mglGraph *gr, long , mglArg *a, int k[10])
 		gr->Surf3(a[4].v,*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),
 				k[5]==2? a[5].s:0);
 	else if(k[1]==3)	gr->Surf3(a[1].v,*(a[0].d),k[2]==2? a[2].s:0);
-	else if(k[1]==2)	gr->Surf3(*(a[0].d),a[1].s,int(k[2]==3?a[2].v:3));
+	else if(k[1]==2)	gr->Surf3(*(a[0].d),a[1].s,iint(k[2]==3?a[2].v:3));
 	else if(k[1]==1 && k[2]==1 && k[3]==1)
 		gr->Surf3(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),
-				k[4]==2? a[4].s:0,int(k[5]==3?a[5].v:3));
+				k[4]==2? a[4].s:0,iint(k[5]==3?a[5].v:3));
 	else	return 1;
 	return 0;
 }
@@ -1868,9 +1925,9 @@ void mglc_surf3(wchar_t out[1024], long , mglArg *a, int k[10])
 	else if(k[1]==3)
 		mglprintf(out,1024,L"gr->Surf3(%g, %s, \"%s\");", a[1].v, a[0].s, k[2]==2? a[2].s:"");
 	else if(k[1]==2)
-		mglprintf(out,1024,L"gr->Surf3(%s, \"%s\", %d);",  a[0].s, a[1].s, int(k[2]==3?a[2].v:3));
+		mglprintf(out,1024,L"gr->Surf3(%s, \"%s\", %d);",  a[0].s, a[1].s, iint(k[2]==3?a[2].v:3));
 	else if(k[1]==1 && k[2]==1 && k[3]==1)
-		mglprintf(out,1024,L"gr->Surf3(%s, %s, %s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", int(k[5]==3?a[5].v:3));
+		mglprintf(out,1024,L"gr->Surf3(%s, %s, %s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", iint(k[5]==3?a[5].v:3));
 }
 //-----------------------------------------------------------------------------
 int mgls_surf3c(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1881,10 +1938,10 @@ int mgls_surf3c(mglGraph *gr, long , mglArg *a, int k[10])
 		gr->Surf3C(a[5].v,*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),
 				k[6]==2? a[6].s:0);
 	else if(k[2]==3)	gr->Surf3C(a[2].v,*(a[0].d),*(a[1].d),k[3]==2? a[3].s:0);
-	else if(k[2]==2)	gr->Surf3C(*(a[0].d),*(a[1].d),a[2].s,int(k[3]==3?a[3].v:3));
+	else if(k[2]==2)	gr->Surf3C(*(a[0].d),*(a[1].d),a[2].s,iint(k[3]==3?a[3].v:3));
 	else if(k[2]==1 && k[3]==1 && k[4]==1)
 		gr->Surf3C(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),
-				k[5]==2? a[5].s:0,int(k[6]==3?a[6].v:3));
+				k[5]==2? a[5].s:0,iint(k[6]==3?a[6].v:3));
 	else	return 1;
 	return 0;
 }
@@ -1897,9 +1954,9 @@ void mglc_surf3c(wchar_t out[1024], long , mglArg *a, int k[10])
 	else if(k[2]==3)
 		mglprintf(out,1024,L"gr->Surf3C(%g, %s, %s, \"%s\");", a[2].v, a[0].s, a[1].s, k[3]==2?a[3].s:0);
 	else if(k[2]==2)
-		mglprintf(out,1024,L"gr->Surf3C(%s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, int(k[3]==3?a[3].v:3));
+		mglprintf(out,1024,L"gr->Surf3C(%s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, iint(k[3]==3?a[3].v:3));
 	else if(k[2]==1 && k[3]==1 && k[4]==1)
-		mglprintf(out,1024,L"gr->Surf3C(%s, %s, %s, %s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"", int(k[6]==3?a[6].v:3));
+		mglprintf(out,1024,L"gr->Surf3C(%s, %s, %s, %s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"", iint(k[6]==3?a[6].v:3));
 }
 //-----------------------------------------------------------------------------
 int mgls_surf3a(mglGraph *gr, long , mglArg *a, int k[10])
@@ -1910,10 +1967,10 @@ int mgls_surf3a(mglGraph *gr, long , mglArg *a, int k[10])
 		gr->Surf3A(a[5].v,*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),
 				k[6]==2? a[6].s:0);
 	else if(k[2]==3)	gr->Surf3A(a[2].v,*(a[0].d),*(a[1].d),k[3]==2? a[3].s:0);
-	else if(k[2]==2)	gr->Surf3A(*(a[0].d),*(a[1].d),a[2].s,int(k[3]==3?a[3].v:3));
+	else if(k[2]==2)	gr->Surf3A(*(a[0].d),*(a[1].d),a[2].s,iint(k[3]==3?a[3].v:3));
 	else if(k[2]==1 && k[3]==1 && k[4]==1)
 		gr->Surf3A(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),
-				k[5]==2? a[5].s:0,int(k[6]==3?a[6].v:3));
+				k[5]==2? a[5].s:0,iint(k[6]==3?a[6].v:3));
 	else	return 1;
 	return 0;
 }
@@ -1926,35 +1983,39 @@ void mglc_surf3a(wchar_t out[1024], long , mglArg *a, int k[10])
 	else if(k[2]==3)
 		mglprintf(out,1024,L"gr->Surf3A(%g, %s, %s, \"%s\");", a[2].v, a[0].s, a[1].s, k[3]==2?a[3].s:0);
 	else if(k[2]==2)
-		mglprintf(out,1024,L"gr->Surf3A(%s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, int(k[3]==3?a[3].v:3));
+		mglprintf(out,1024,L"gr->Surf3A(%s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, iint(k[3]==3?a[3].v:3));
 	else if(k[2]==1 && k[3]==1 && k[4]==1)
-		mglprintf(out,1024,L"gr->Surf3A(%s, %s, %s, %s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"", int(k[6]==3?a[6].v:3));
+		mglprintf(out,1024,L"gr->Surf3A(%s, %s, %s, %s, %s, \"%s\", %d);",  a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"", iint(k[6]==3?a[6].v:3));
 }
 //-----------------------------------------------------------------------------
 int mgls_subplot(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==3 && k[1]==3 && k[2]==3)
-		gr->SubPlot(int(a[0].v), int(a[1].v), int(a[2].v), k[3]==3?a[3].v:0, k[4]==3?a[4].v:0);
+	if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==2)
+		gr->SubPlot(iint(a[0].v), iint(a[1].v), iint(a[2].v), a[3].s);
+	else if(k[0]==3 && k[1]==3 && k[2]==3)
+		gr->SubPlot(iint(a[0].v), iint(a[1].v), iint(a[2].v), k[3]==3?a[3].v:0, k[4]==3?a[4].v:0);
 	else	return 1;
 	return 0;
 }
 void mglc_subplot(wchar_t out[1024], long , mglArg *a, int k[10])
 {
-	if(k[0]==3 && k[1]==3 && k[2]==3)
-		mglprintf(out,1024,L"gr->SubPlot(%d, %d, %d, %g, %g);", int(a[0].v), int(a[1].v), int(a[2].v), k[3]==3?a[3].v:0, k[4]==3?a[4].v:0);
+	if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==2)
+		mglprintf(out,1024,L"gr->SubPlot(%d, %d, %d, \"%s\");", iint(a[0].v), iint(a[1].v), iint(a[2].v), a[3].s);
+	else if(k[0]==3 && k[1]==3 && k[2]==3)
+		mglprintf(out,1024,L"gr->SubPlot(%d, %d, %d, %g, %g);", iint(a[0].v), iint(a[1].v), iint(a[2].v), k[3]==3?a[3].v:0, k[4]==3?a[4].v:0);
 }
 //-----------------------------------------------------------------------------
 int mgls_subdata(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==3)
-		*(a[0].d) = a[1].d->SubData(int(a[2].v), k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1);
+		*(a[0].d) = a[1].d->SubData(iint(a[2].v), k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1);
 	else	return 1;
 	return 0;
 }
 void mglc_subdata(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==3)
-		mglprintf(out,1024,L"%s = %s.SubData(%d, %d, %d);",  a[0].s, a[1].s, int(a[2].v), k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1);
+		mglprintf(out,1024,L"%s = %s.SubData(%d, %d, %d);",  a[0].s, a[1].s, iint(a[2].v), k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1);
 }
 //-----------------------------------------------------------------------------
 int mgls_trace(mglGraph *, long , mglArg *a, int k[10])
@@ -1972,10 +2033,6 @@ int mgls_tile(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]!=1)	return 1;
 	else if(k[1]!=1)	gr->Tile(*(a[0].d), k[1]==2? a[1].s:0);
-	else if(k[1]==1 && k[2]!=1)
-		gr->TileS(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0);
-	else if(k[1]==1 && k[2]==1 && k[3]==1)
-		gr->TileS(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2? a[4].s:0);
 	else if(k[1]==1 && k[2]==1)
 		gr->Tile(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2? a[3].s:0);
 	else	return 1;
@@ -1986,14 +2043,29 @@ void mglc_tile(wchar_t out[1024], long , mglArg *a, int k[10])
 	if(k[0]!=1)	return;
 	else if(k[1]!=1)
 		mglprintf(out,1024,L"gr->Tile(%s, \"%s\");", a[0].s, k[1]==2?a[1].s:"");
-	else if(k[1]==1 && k[2]!=1)
-		mglprintf(out,1024,L"gr->Tile(%s, %s, \"%s\");", a[0].s, a[1].s, k[2]==2?a[2].s:"");
-	else if(k[1]==1 && k[2]==1 && k[3]==1)
-		mglprintf(out,1024,L"gr->Tile(%s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"");
 	else if(k[1]==1 && k[2]==1)
 		mglprintf(out,1024,L"gr->Tile(%s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"");
 }
 //-----------------------------------------------------------------------------
+int mgls_tiles(mglGraph *gr, long , mglArg *a, int k[10])
+{
+	if(k[0]!=1)	return 1;
+	else if(k[1]==1 && k[2]!=1)
+		gr->TileS(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0);
+	else if(k[1]==1 && k[2]==1 && k[3]==1)
+		gr->TileS(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2? a[4].s:0);
+	else	return 1;
+	return 0;
+}
+void mglc_tiles(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]!=1)	return;
+	else if(k[1]==1 && k[2]!=1)
+		mglprintf(out,1024,L"gr->TileS(%s, %s, \"%s\");", a[0].s, a[1].s, k[2]==2?a[2].s:"");
+	else if(k[1]==1 && k[2]==1 && k[3]==1)
+		mglprintf(out,1024,L"gr->TileS(%s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"");
+}
+//-----------------------------------------------------------------------------
 int mgls_text(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==2)
@@ -2060,13 +2132,13 @@ void mglc_transparent(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_transptype(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==3)	gr->TranspType = int(a[0].v);
+	if(k[0]==3)	gr->TranspType = iint(a[0].v);
 	else	return 1;
 	return 0;
 }
 void mglc_transptype(wchar_t out[1024], long , mglArg *a, int k[10])
 {
-	if(k[0]==3)	mglprintf(out,1024,L"gr->TranspType = %d;", int(a[0].v));
+	if(k[0]==3)	mglprintf(out,1024,L"gr->TranspType = %d;", iint(a[0].v));
 }
 //-----------------------------------------------------------------------------
 int mgls_transform(mglGraph *, long , mglArg *a, int k[10])
@@ -2166,7 +2238,7 @@ int mgls_triplot(mglGraph *gr, long , mglArg *a, int k[10])
 }
 void mglc_triplot(wchar_t out[1024], long , mglArg *a, int k[10])
 {
-	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[3]==1)
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1)
 		mglprintf(out,1024,L"gr->TriPlot(%s, %s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"");
 	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1)
 		mglprintf(out,1024,L"gr->TriPlot(%s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"");
@@ -2174,6 +2246,51 @@ void mglc_triplot(wchar_t out[1024], long , mglArg *a, int k[10])
 		mglprintf(out,1024,L"gr->TriPlot(%s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:NAN);
 }
 //-----------------------------------------------------------------------------
+int mgls_quadplot(mglGraph *gr, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1)
+		gr->QuadPlot(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),k[5]==2?a[5].s:0);
+	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1)
+		gr->QuadPlot(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0);
+	else if(k[0]==1 && k[1]==1 && k[2]==1)
+		gr->QuadPlot(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?a[4].v:NAN);
+	else	return 1;
+	return 0;
+}
+void mglc_quadplot(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1)
+		mglprintf(out,1024,L"gr->QuadPlot(%s, %s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"");
+	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1)
+		mglprintf(out,1024,L"gr->QuadPlot(%s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"");
+	else if(k[0]==1 && k[1]==1 && k[2]==1)
+		mglprintf(out,1024,L"gr->QuadPlot(%s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:NAN);
+}
+//-----------------------------------------------------------------------------
+int mgls_tricont(mglGraph *gr, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==1)
+		gr->TriContV(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),k[6]==2?a[6].s:0,k[7]==3?a[7].v:NAN);
+	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1)
+		gr->TriContV(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),k[5]==2?a[5].s:0,k[6]==3?a[6].v:NAN);
+	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[5]==1)
+		gr->TriCont(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0,k[5]==3?a[5].v:NAN);
+	else	return 1;
+	return 0;
+}
+void mglc_tricont(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==1)
+		mglprintf(out,1024,L"gr->TriContV(%s, %s, %s, %s, %s, %s, \"%s\", %g);",
+			a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"",k[7]==3?a[7].v:NAN);
+	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1)
+		mglprintf(out,1024,L"gr->TriContV(%s, %s, %s, %s, %s, \"%s\", %g);",
+			a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"",k[6]==3?a[6].v:NAN);
+	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1)
+		mglprintf(out,1024,L"gr->TriCont(%s, %s, %s, %s, \"%s\", %g);",
+			a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN);
+}
+//-----------------------------------------------------------------------------
 int mgls_ternary(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==3)	gr->Ternary(a[0].v!=0);
@@ -2230,13 +2347,13 @@ int mgls_vect(mglGraph *gr, long , mglArg *a, int k[10])
 	int i;
 	for(i=0;i<7;i++)	if(k[i]!=1)	break;
 	if(i==2)
-		gr->Vect(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN, k[4]==3?int(a[4].v):0);
+		gr->Vect(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN, k[4]==3?iint(a[4].v):0);
 	else if(i==4)
-		gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0, k[5]==3?a[5].v:NAN, k[6]==3?int(a[6].v):0);
+		gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0, k[5]==3?a[5].v:NAN, k[6]==3?iint(a[6].v):0);
 	else if(i==3)
-		gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):0);
+		gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):0);
 	else if(i==6)
-		gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):0);
+		gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):0);
 	else	return 1;
 	return 0;
 }
@@ -2245,13 +2362,13 @@ void mglc_vect(wchar_t out[1024], long , mglArg *a, int k[10])
 	int i;
 	for(i=0;i<7;i++)	if(k[i]!=1)	break;
 	if(i==2)
-		mglprintf(out,1024,L"gr->Vect(%s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN,k[4]==3?int(a[4].v):0);
+		mglprintf(out,1024,L"gr->Vect(%s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN,k[4]==3?iint(a[4].v):0);
 	else if(i==4)
-		mglprintf(out,1024,L"gr->Vect(%s, %s, %s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN,k[6]==3?int(a[6].v):0);
+		mglprintf(out,1024,L"gr->Vect(%s, %s, %s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN,k[6]==3?iint(a[6].v):0);
 	else if(i==3)
-		mglprintf(out,1024,L"gr->Vect(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0,k[4]==3?int(a[4].v):0);
+		mglprintf(out,1024,L"gr->Vect(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0,k[4]==3?iint(a[4].v):0);
 	else if(i==6)
-		mglprintf(out,1024,L"gr->Vect(%s, %s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"",k[7]==3?int(a[7].v):0);
+		mglprintf(out,1024,L"gr->Vect(%s, %s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"",k[7]==3?iint(a[7].v):0);
 }
 //-----------------------------------------------------------------------------
 int mgls_vectl(mglGraph *gr, long , mglArg *a, int k[10])
@@ -2306,7 +2423,7 @@ void mglc_traj(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_xlabel(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==2)	gr->Labelw('x', a[0].w, k[1]==3?a[1].v:1, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0);
+	if(k[0]==2)	gr->Labelw('x', a[0].w, k[1]==3?a[1].v:0, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0);
 	else	return 1;
 	return 0;
 }
@@ -2317,7 +2434,7 @@ void mglc_xlabel(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_ylabel(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==2)	gr->Labelw('y', a[0].w, k[1]==3?a[1].v:1, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0);
+	if(k[0]==2)	gr->Labelw('y', a[0].w, k[1]==3?a[1].v:0, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0);
 	else	return 1;
 	return 0;
 }
@@ -2328,7 +2445,7 @@ void mglc_ylabel(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_zlabel(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==2)	gr->Labelw('z', a[0].w, k[1]==3?a[1].v:1, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0);
+	if(k[0]==2)	gr->Labelw('z', a[0].w, k[1]==3?a[1].v:0, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0);
 	else	return 1;
 	return 0;
 }
@@ -2339,7 +2456,7 @@ void mglc_zlabel(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_tlabel(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==2)	gr->Labelw('t', a[0].w, k[1]==3?a[1].v:1, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0);
+	if(k[0]==2)	gr->Labelw('t', a[0].w, k[1]==3?a[1].v:0, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0);
 	else	return 1;
 	return 0;
 }
@@ -2423,7 +2540,7 @@ int mgls_xtick(mglGraph *gr, long n, mglArg *a, int k[10])
 		gr->SetTicksVal('x',i,v,s);
 	}
 	else if(k[0]==3)
-		gr->SetTicks('x', a[0].v, k[1]==3?int(a[1].v):0, k[2]==3?a[2].v:NAN);
+		gr->SetTicks('x', a[0].v, k[1]==3?iint(a[1].v):0, k[2]==3?a[2].v:NAN);
 	else if(k[0]==2)	gr->SetXTT(a[0].w);
 	else	return 1;
 	return 0;
@@ -2431,9 +2548,9 @@ int mgls_xtick(mglGraph *gr, long n, mglArg *a, int k[10])
 void mglc_xtick(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3 && k[2]==3)
-		mglprintf(out,1024,L"gr->SetTicks('x', %g, %d, %g);", a[0].v, int(a[1].v),a[2].v);
+		mglprintf(out,1024,L"gr->SetTicks('x', %g, %d, %g);", a[0].v, iint(a[1].v),a[2].v);
 	else if(k[0]==3 && k[1]==3)
-		mglprintf(out,1024,L"gr->SetTicks('x', %g, %d);", a[0].v, int(a[1].v));
+		mglprintf(out,1024,L"gr->SetTicks('x', %g, %d);", a[0].v, iint(a[1].v));
 	else if(k[0]==3 && k[1]==2)
 		mglprintf(out,1024,L"gr->SetTicksVal('x', %g, \"%s\");", a[0].v, a[1].s);
 	else if(k[0]==3)	mglprintf(out,1024,L"gr->SetTicks('x', %g);", a[0].v);
@@ -2455,7 +2572,7 @@ int mgls_ytick(mglGraph *gr, long n, mglArg *a, int k[10])
 		gr->SetTicksVal('y',i,v,s);
 	}
 	else if(k[0]==3)
-		gr->SetTicks('y', a[0].v, k[1]==3?int(a[1].v):0, k[2]==3?a[2].v:NAN);
+		gr->SetTicks('y', a[0].v, k[1]==3?iint(a[1].v):0, k[2]==3?a[2].v:NAN);
 	else if(k[0]==2)	gr->SetYTT(a[0].w);
 	else	return 1;
 	return 0;
@@ -2463,9 +2580,9 @@ int mgls_ytick(mglGraph *gr, long n, mglArg *a, int k[10])
 void mglc_ytick(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3 && k[2]==3)
-		mglprintf(out,1024,L"gr->SetTicks('y', %g, %d, %g);", a[0].v, int(a[1].v),a[2].v);
+		mglprintf(out,1024,L"gr->SetTicks('y', %g, %d, %g);", a[0].v, iint(a[1].v),a[2].v);
 	else if(k[0]==3 && k[1]==3)
-		mglprintf(out,1024,L"gr->SetTicks('y', %g, %d);", a[0].v, int(a[1].v));
+		mglprintf(out,1024,L"gr->SetTicks('y', %g, %d);", a[0].v, iint(a[1].v));
 	else if(k[0]==3 && k[1]==2)
 		mglprintf(out,1024,L"gr->SetTicksVal('y', %g, \"%s\");", a[0].v, a[1].s);
 	else if(k[0]==3)	mglprintf(out,1024,L"gr->SetTicks('y', %g);", a[0].v);
@@ -2486,7 +2603,7 @@ int mgls_ztick(mglGraph *gr, long n, mglArg *a, int k[10])
 		gr->SetTicksVal('z',i,v,s);
 	}
 	else if(k[0]==3)
-		gr->SetTicks('z', a[0].v, k[1]==3?int(a[1].v):0, k[2]==3?a[2].v:NAN);
+		gr->SetTicks('z', a[0].v, k[1]==3?iint(a[1].v):0, k[2]==3?a[2].v:NAN);
 	else if(k[0]==2)	gr->SetZTT(a[0].w);
 	else	return 1;
 	return 0;
@@ -2494,9 +2611,9 @@ int mgls_ztick(mglGraph *gr, long n, mglArg *a, int k[10])
 void mglc_ztick(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3 && k[2]==3)
-		mglprintf(out,1024,L"gr->SetTicks('z', %g, %d, %g);", a[0].v, int(a[1].v),a[2].v);
+		mglprintf(out,1024,L"gr->SetTicks('z', %g, %d, %g);", a[0].v, iint(a[1].v),a[2].v);
 	else if(k[0]==3 && k[1]==3)
-		mglprintf(out,1024,L"gr->SetTicks('z', %g, %d);", a[0].v, int(a[1].v));
+		mglprintf(out,1024,L"gr->SetTicks('z', %g, %d);", a[0].v, iint(a[1].v));
 	else if(k[0]==3 && k[1]==2)
 		mglprintf(out,1024,L"gr->SetTicksVal('z', %g, \"%s\");", a[0].v, a[1].s);
 	else if(k[0]==3)	mglprintf(out,1024,L"gr->SetTicks('z', %g);", a[0].v);
@@ -2540,14 +2657,14 @@ void mglc_error(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_extend(mglGraph *, long , mglArg *a, int k[10])
 {
-	if(k[0]==1 && k[1]==3)	a[0].d->Extend(int(a[1].v),k[2]==3?int(a[2].v):0);
+	if(k[0]==1 && k[1]==3)	a[0].d->Extend(iint(a[1].v),k[2]==3?iint(a[2].v):0);
 	else	return 1;
 	return 0;
 }
 void mglc_extend(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3)
-		mglprintf(out,1024,L"%s.Extend(%d, %d);", a[0].s, int(a[1].v), k[2]==3?int(a[2].v):0);
+		mglprintf(out,1024,L"%s.Extend(%d, %d);", a[0].s, iint(a[1].v), k[2]==3?iint(a[2].v):0);
 }
 //-----------------------------------------------------------------------------
 int mgls_info(mglGraph *gr, long , mglArg *a, int k[10])
@@ -2589,20 +2706,20 @@ void mglc_inplot(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_columnplot(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==3 && k[1]==3)	gr->ColumnPlot(int(a[0].v), int(a[1].v));
+	if(k[0]==3 && k[1]==3)	gr->ColumnPlot(iint(a[0].v), iint(a[1].v), k[2]==3?a[2].v:0);
 	else	return 1;
 	return 0;
 }
 void mglc_columnplot(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3)
-		mglprintf(out,1024,L"gr->ColumnPlot(%d, %d);", int(a[0].v), int(a[1].v));
+		mglprintf(out,1024,L"gr->ColumnPlot(%d, %d, %g);", iint(a[0].v), iint(a[1].v), k[2]==3?a[2].v:0);
 }
 //-----------------------------------------------------------------------------
 int mgls_stickplot(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==3)
-		gr->StickPlot(int(a[0].v), int(a[1].v), a[2].v, a[3].v);
+		gr->StickPlot(iint(a[0].v), iint(a[1].v), a[2].v, a[3].v);
 	else	return 1;
 	return 0;
 }
@@ -2610,7 +2727,7 @@ void mglc_stickplot(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==3)
 		mglprintf(out,1024,L"gr->StickPlot(%d, %d, %g, %g);",
-			int(a[0].v), int(a[1].v), a[2].v, a[3].v);
+			iint(a[0].v), iint(a[1].v), a[2].v, a[3].v);
 }
 //-----------------------------------------------------------------------------
 int mgls_pipe(mglGraph *gr, long , mglArg *a, int k[10])
@@ -2618,16 +2735,16 @@ int mgls_pipe(mglGraph *gr, long , mglArg *a, int k[10])
 	int i;
 	for(i=0;i<7;i++)	if(k[i]!=1)	break;
 	if(i==2)
-		gr->Pipe(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3?a[3].v:0.05,k[4]==3?int(a[4].v):5,
+		gr->Pipe(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3?a[3].v:0.05,k[4]==3?iint(a[4].v):5,
 			true,k[5]==3?a[5].v:NAN);
 	else if(i==4)
 		gr->Pipe(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0,k[5]==3?a[5].v:0.05,
-			k[6]==3?int(a[6].v):5,true,k[7]==3?a[7].v:NAN);
+			k[6]==3?iint(a[6].v):5,true,k[7]==3?a[7].v:NAN);
 	else if(i==3)
-		gr->Pipe(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?a[4].v:0.05,k[5]==3?int(a[5].v):3);
+		gr->Pipe(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?a[4].v:0.05,k[5]==3?iint(a[5].v):3);
 	else if(i==6)
 		gr->Pipe(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),
-			k[6]==2?a[6].s:0,k[7]==3?a[7].v:0.05,k[8]==3?int(a[8].v):3);
+			k[6]==2?a[6].s:0,k[7]==3?a[7].v:0.05,k[8]==3?iint(a[8].v):3);
 	else	return 1;
 	return 0;
 }
@@ -2636,13 +2753,13 @@ void mglc_pipe(wchar_t out[1024], long , mglArg *a, int k[10])
 	int i;
 	for(i=0;i<7;i++)	if(k[i]!=1)	break;
 	if(i==2)
-		mglprintf(out,1024,L"gr->Pipe(%s, %s, \"%s\", %g, %d, true, %g);",  a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:0.05, k[4]==3?int(a[4].v):5, k[5]==3?a[5].v:NAN);
+		mglprintf(out,1024,L"gr->Pipe(%s, %s, \"%s\", %g, %d, true, %g);",  a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:0.05, k[4]==3?iint(a[4].v):5, k[5]==3?a[5].v:NAN);
 	else if(i==4)
-		mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, %s, \"%s\", %g, %d, true, %g);",  a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:0.05, k[6]==3?int(a[6].v):5, k[7]==3?a[7].v:NAN);
+		mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, %s, \"%s\", %g, %d, true, %g);",  a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:0.05, k[6]==3?iint(a[6].v):5, k[7]==3?a[7].v:NAN);
 	else if(i==3)
-		mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, \"%s\", %g, %d);",  a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:0.05, k[5]==3?int(a[5].v):3);
+		mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, \"%s\", %g, %d);",  a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:0.05, k[5]==3?iint(a[5].v):3);
 	else if(i==6)
-		mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, %s, %s, %s, \"%s\", %g, %d);",  a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"", k[7]==3?a[7].v:0.05, k[8]==3?int(a[8].v):3);
+		mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, %s, %s, %s, \"%s\", %g, %d);",  a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"", k[7]==3?a[7].v:0.05, k[8]==3?iint(a[8].v):3);
 }
 //-----------------------------------------------------------------------------
 int mgls_origin(mglGraph *gr, long , mglArg *a, int k[10])
@@ -2675,22 +2792,22 @@ void mglc_plotfactor(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_norm(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3 && k[2]==3)
-		a[0].d->Norm(a[1].v,a[2].v,k[3]==3?a[3].v!=0:false,k[4]==3?int(a[4].v):0);
+		a[0].d->Norm(a[1].v,a[2].v,k[3]==3?a[3].v!=0:false,k[4]==3?iint(a[4].v):0);
 	else	return 1;
 	return 0;
 }
 void mglc_norm(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3 && k[2]==3)
-		mglprintf(out,1024,L"%s.Norm(%g, %g, %s, %d);", a[0].s, a[1].v, a[2].v, (k[3]==3&&a[3].v!=0)?"true":"false", k[4]==3?int(a[4].v):0);
+		mglprintf(out,1024,L"%s.Norm(%g, %g, %s, %d);", a[0].s, a[1].v, a[2].v, (k[3]==3&&a[3].v!=0)?"true":"false", k[4]==3?iint(a[4].v):0);
 }
 //-----------------------------------------------------------------------------
 int mgls_hist(mglGraph *gr, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==3 && k[4]==3 && k[5]==3)
-		*(a[0].d) = a[1].d->Hist(*(a[2].d), int(a[3].v), a[4].v, a[5].v, k[6]==3?int(a[6].v):0);
+		*(a[0].d) = a[1].d->Hist(*(a[2].d), iint(a[3].v), a[4].v, a[5].v, k[6]==3?iint(a[6].v):0);
 	else if(k[0]==1 && k[1]==1 && k[2]==3 && k[3]==3 && k[4]==3)
-		*(a[0].d) = a[1].d->Hist(int(a[2].v), a[3].v, a[4].v, k[5]==3?int(a[5].v):0);
+		*(a[0].d) = a[1].d->Hist(iint(a[2].v), a[3].v, a[4].v, k[5]==3?iint(a[5].v):0);
 	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1)
 		gr->Hist(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d));
 	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1)
@@ -2703,9 +2820,9 @@ int mgls_hist(mglGraph *gr, long , mglArg *a, int k[10])
 void mglc_hist(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==3 && k[4]==3 && k[5]==3)
-		mglprintf(out,1024,L"%s = %s.Hist(%s, %d, %g, %g, %d);", a[0].s, a[1].s, a[2].s, int(a[3].v), a[4].v, a[5].v, k[6]==3?int(a[6].v):0);
+		mglprintf(out,1024,L"%s = %s.Hist(%s, %d, %g, %g, %d);", a[0].s, a[1].s, a[2].s, iint(a[3].v), a[4].v, a[5].v, k[6]==3?iint(a[6].v):0);
 	else if(k[0]==1 && k[1]==1 && k[2]==3 && k[3]==3 && k[4]==3)
-		mglprintf(out,1024,L"%s = %s.Hist(%d, %g, %g, %d);", a[0].s, a[1].s, int(a[2].v), a[3].v, a[4].v, k[5]==3?int(a[5].v):0);
+		mglprintf(out,1024,L"%s = %s.Hist(%d, %g, %g, %d);", a[0].s, a[1].s, iint(a[2].v), a[3].v, a[4].v, k[5]==3?iint(a[5].v):0);
 	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1)
 		mglprintf(out,1024,L"gr->Hist(%s, %s, %s, %s, %s);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s);
 	else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1)
@@ -2723,29 +2840,53 @@ int mgls_mirror(mglGraph *, long , mglArg *a, int k[10])
 void mglc_mirror(wchar_t out[1024], long , mglArg *a, int k[10])
 {	if(k[0]==1 && k[1]==2)	mglprintf(out,1024,L"%s.Mirror(\"%s\");", a[0].s, a[1].s);	}
 //-----------------------------------------------------------------------------
+int mgls_hankel(mglGraph *, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2)	a[0].d->Hankel(a[1].s);	else	return 1;
+	return 0;
+}
+void mglc_hankel(wchar_t out[1024], long , mglArg *a, int k[10])
+{	if(k[0]==1 && k[1]==2)	mglprintf(out,1024,L"%s.Hankel('%s');", a[0].s, a[1].s);	}
+//-----------------------------------------------------------------------------
+int mgls_sinfft(mglGraph *, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2)	a[0].d->SinFFT(a[1].s);	else	return 1;
+	return 0;
+}
+void mglc_sinfft(wchar_t out[1024], long , mglArg *a, int k[10])
+{	if(k[0]==1 && k[1]==2)	mglprintf(out,1024,L"%s.SinFFT('%s');", a[0].s, a[1].s);	}
+//-----------------------------------------------------------------------------
+int mgls_cosfft(mglGraph *, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2)	a[0].d->CosFFT(a[1].s);	else	return 1;
+	return 0;
+}
+void mglc_cosfft(wchar_t out[1024], long , mglArg *a, int k[10])
+{	if(k[0]==1 && k[1]==2)	mglprintf(out,1024,L"%s.CosFFT('%s');", a[0].s, a[1].s);	}
+//-----------------------------------------------------------------------------
 int mgls_new(mglGraph *, long , mglArg *a, int k[10])
 {
-	if(k[0]==1)	a[0].d->Create(k[1]==3?int(a[1].v):1, k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1);
+	if(k[0]==1)	a[0].d->Create(k[1]==3?iint(a[1].v):1, k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1);
 	else	return 1;
 	return 0;
 }
 void mglc_new(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1)
-		mglprintf(out,1024,L"%s.Create(%d, %d, %d);", a[0].s, k[1]==3?int(a[1].v):1, k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1);
+		mglprintf(out,1024,L"%s.Create(%d, %d, %d);", a[0].s, k[1]==3?iint(a[1].v):1, k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1);
 }
 //-----------------------------------------------------------------------------
 int mgls_var(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3 && k[2]==3)
-	{	a[0].d->Create(int(a[1].v));	a[0].d->Fill(a[2].v, k[3]==3?a[3].v:NAN);	}
+	{	a[0].d->Create(iint(a[1].v));	a[0].d->Fill(a[2].v, k[3]==3?a[3].v:NAN);	}
 	else	return 1;
 	return 0;
 }
 void mglc_var(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3 && k[2]==3)
-	mglprintf(out,1024,L"%s.Create(%d);\t%s.Fill(%g,%g);",a[0].s, int(a[1].v), a[0].s, a[2].v, k[3]==3?a[3].v:NAN);
+	mglprintf(out,1024,L"%s.Create(%d);\t%s.Fill(%g,%g);",a[0].s, iint(a[1].v), a[0].s, a[2].v, k[3]==3?a[3].v:NAN);
 }
 //-----------------------------------------------------------------------------
 int mgls_chdir(mglGraph *gr, long , mglArg *a, int k[10])
@@ -2922,14 +3063,14 @@ void mglc_arrowsize(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_rearrange(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3)
-		a[0].d->Rearrange(int(a[1].v), k[2]==3?int(a[2].v):0, k[3]==3?int(a[3].v):0);
+		a[0].d->Rearrange(iint(a[1].v), k[2]==3?iint(a[2].v):0, k[3]==3?iint(a[3].v):0);
 	else	return 1;
 	return 0;
 }
 void mglc_rearrange(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3)
-		mglprintf(out,1024,L"%s.Rearrange(%d, %d, %d);",a[0].s, int(a[1].v), k[2]==3?int(a[2].v):0, k[3]==3?int(a[3].v):0);
+		mglprintf(out,1024,L"%s.Rearrange(%d, %d, %d);",a[0].s, iint(a[1].v), k[2]==3?iint(a[2].v):0, k[3]==3?iint(a[3].v):0);
 }
 //-----------------------------------------------------------------------------
 int mgls_ctick(mglGraph *gr, long , mglArg *a, int k[10])
@@ -2947,32 +3088,32 @@ void mglc_ctick(wchar_t out[1024], long , mglArg *a, int k[10])
 //-----------------------------------------------------------------------------
 int mgls_fplot(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==2 && k[1]==2 && k[2]==2)	gr->Plot(a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):100);
-	else if(k[0]==2)	gr->Plot(a[0].s, k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):100);
+	if(k[0]==2 && k[1]==2 && k[2]==2)	gr->Plot(a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):100);
+	else if(k[0]==2)	gr->Plot(a[0].s, k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):100);
 	else	return 1;
 	return 0;
 }
 void mglc_fplot(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==2 && k[1]==2 && k[2]==2)
-		mglprintf(out,1024,L"gr->Plot(\"%s\", \"%s\", \"%s\", \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):100);
+		mglprintf(out,1024,L"gr->Plot(\"%s\", \"%s\", \"%s\", \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):100);
 	else if(k[0]==2)
-		mglprintf(out,1024,L"gr->Plot(\"%s\", \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):100);
+		mglprintf(out,1024,L"gr->Plot(\"%s\", \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):100);
 }
 //-----------------------------------------------------------------------------
 int mgls_fsurf(mglGraph *gr, long , mglArg *a, int k[10])
 {
-	if(k[0]==2 && k[1]==2 && k[2]==2)	gr->Surf(a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):100);
-	else if(k[0]==2)	gr->Surf(a[0].s, k[1]==2?a[1].s:0, k[2]==3?int(a[2].v):100);
+	if(k[0]==2 && k[1]==2 && k[2]==2)	gr->Surf(a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):100);
+	else if(k[0]==2)	gr->Surf(a[0].s, k[1]==2?a[1].s:0, k[2]==3?iint(a[2].v):100);
 	else	return 1;
 	return 0;
 }
 void mglc_fsurf(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==2 && k[1]==2 && k[2]==2)
-		mglprintf(out,1024,L"gr->Surf(\"%s\", \"%s\", \"%s\", \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):100);
+		mglprintf(out,1024,L"gr->Surf(\"%s\", \"%s\", \"%s\", \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):100);
 	else if(k[0]==2)
-		mglprintf(out,1024,L"gr->Surf(\"%s\", \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):100);
+		mglprintf(out,1024,L"gr->Surf(\"%s\", \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):100);
 }
 //-----------------------------------------------------------------------------
 int mgls_fgets(mglGraph *gr, long , mglArg *a, int k[10])
@@ -2981,29 +3122,37 @@ int mgls_fgets(mglGraph *gr, long , mglArg *a, int k[10])
 	FILE *fp;
 	if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==2)
 	{
-		int i, n = (k[4]==3?int(a[4].v):0);
+		int i, n = (k[4]==3?iint(a[4].v):0);
 		fp = fopen(a[3].s,"rt");
 		if(!fp)
 		{
 			if(gr->Message)	sprintf(gr->Message,"Wrong file %s",a[3].s);
 			return 0;
 		}
-		for(i=0;i<n;i++)	fgets(buf,1024,fp);
-		fgets(buf,1024,fp);
+		for(i=0;i<n;i++)	if(!fgets(buf,1024,fp))	continue;
+		if(!fgets(buf,1024,fp))
+		{
+			if(gr->Message)	sprintf(gr->Message,"Couldn't read %d-th string of file %s",n,a[3].s);
+			fclose(fp);	return 0;
+		}
 		fclose(fp);
 		gr->Text(mglPoint(a[0].v,a[1].v,a[2].v),buf, (k[5]==2 && a[5].s[0]!=0)?a[5].s:gr->FontDef, k[6]==3?a[6].v:-1.4);
 	}
 	else if(k[0]==3 && k[1]==3 && k[2]==2)
 	{
-		int i, n = k[3]==3?int(a[3].v):0;
+		int i, n = k[3]==3?iint(a[3].v):0;
 		fp = fopen(a[2].s,"rt");
 		if(!fp)
 		{
 			if(gr->Message)	sprintf(gr->Message,"Wrong file %s",a[2].s);
 			return 0;
 		}
-		for(i=0;i<n;i++)	fgets(buf,1024,fp);
-		fgets(buf,1024,fp);
+		for(i=0;i<n;i++)	if(!fgets(buf,1024,fp))	continue;
+		if(!fgets(buf,1024,fp))
+		{
+			if(gr->Message)	sprintf(gr->Message,"Couldn't read %d-th string of file %s",n,a[3].s);
+			fclose(fp);	return 0;
+		}
 		fclose(fp);
 		gr->Text(mglPoint(a[0].v,a[1].v,gr->Min.z),buf, (k[4]==2 && a[4].s[0]!=0)?a[4].s:gr->FontDef, k[5]==3?a[5].v:-1.4);
 	}
@@ -3119,18 +3268,18 @@ void mglc_evaluate(wchar_t out[1024], long , mglArg *a, int k[10])
 int mgls_put(mglGraph *, long , mglArg *a, int k[10])
 {
 	if(k[1]==3 && k[0]==1)
-		a[0].d->Put(a[1].v, k[2]==3?int(a[2].v):-1, k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1);
+		a[0].d->Put(a[1].v, k[2]==3?iint(a[2].v):-1, k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1);
 	else if(k[0]==1 && k[1]==1)
-		a[0].d->Put(*(a[1].d), k[2]==3?int(a[2].v):-1, k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1);
+		a[0].d->Put(*(a[1].d), k[2]==3?iint(a[2].v):-1, k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1);
 	else	return 1;
 	return 0;
 }
 void mglc_put(wchar_t out[1024], long , mglArg *a, int k[10])
 {
 	if(k[0]==1 && k[1]==3)
-		mglprintf(out,1024,L"%s.Put(%g, %d, %d, %d);", a[0].s, a[1].v, k[2]==3?int(a[2].v):-1, k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1);
+		mglprintf(out,1024,L"%s.Put(%g, %d, %d, %d);", a[0].s, a[1].v, k[2]==3?iint(a[2].v):-1, k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1);
 	else if(k[0]==1 && k[1]==1)
-		mglprintf(out,1024,L"%s.Put(%s, %d, %d, %d);", a[0].s, a[1].s, k[2]==3?int(a[2].v):-1, k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1);
+		mglprintf(out,1024,L"%s.Put(%s, %d, %d, %d);", a[0].s, a[1].s, k[2]==3?iint(a[2].v):-1, k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1);
 }
 //-----------------------------------------------------------------------------
 int mgls_palette(mglGraph *gr, long , mglArg *a, int k[10])
@@ -3304,6 +3453,42 @@ int mgls_adjust(mglGraph *gr, long , mglArg *a, int k[10])
 void mglc_adjust(wchar_t out[1024], long , mglArg *a, int k[10])
 {	mglprintf(out,1024,L"gr->AdjustTicks(\"%s\");",k[0]==2?a[0].s:"xyzc");	}
 //-----------------------------------------------------------------------------
+int mgls_insert(mglGraph *, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2)	a[0].d->Insert(a[1].s[0], k[2]==3 ? iint(a[2].v):0, k[3]==3 ? iint(a[3].v):1);
+	else	return 1;
+	return 0;
+}
+void mglc_insert(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2)	mglprintf(out,1024,L"%s.Insert('%c', %d, %d);",
+	    a[0].s, a[1].s[0], k[2]==3 ? iint(a[2].v):0, k[3]==3 ? iint(a[3].v):1);
+}
+//-----------------------------------------------------------------------------
+int mgls_delete(mglGraph *, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2)	a[0].d->Delete(a[1].s[0], k[2]==3 ? iint(a[2].v):0, k[3]==3 ? iint(a[3].v):1);
+	else	return 1;
+	return 0;
+}
+void mglc_delete(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2)	mglprintf(out,1024,L"%s.Delete('%c', %d, %d);",
+	    a[0].s, a[1].s[0], k[2]==3 ? iint(a[2].v):0, k[3]==3 ? iint(a[3].v):1);
+}
+//-----------------------------------------------------------------------------
+int mgls_roll(mglGraph *, long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2 && k[2]==3)	a[0].d->Roll(a[1].s[0], iint(a[2].v));
+	else	return 1;
+	return 0;
+}
+void mglc_roll(wchar_t out[1024], long , mglArg *a, int k[10])
+{
+	if(k[0]==1 && k[1]==2 && k[2]==3)	mglprintf(out,1024,L"%s.Roll('%c', %d);",
+	    a[0].s, a[1].s[0], iint(a[2].v));
+}
+//-----------------------------------------------------------------------------
 mglCommand mgls_base_cmd[] = {
 	{L"addlegend",L"Add legend entry",L"addlegend 'txt' 'fmt'", mgls_addlegend, mglc_addlegend, false, 2},
 	{L"addto",L"Add data or number",L"addto Var Dat|Var num", mgls_addto, mglc_addto, false, 3},
@@ -3334,7 +3519,7 @@ mglCommand mgls_base_cmd[] = {
 	{L"clf",L"Clear picture",L"clf", mgls_clf, mglc_clf, false, 5},
 	{L"cloud",L"Draw cloud",L"cloud Adat ['fmt']|Xdat Ydat Zdat Adat ['fmt']", mgls_cloud, mglc_cloud, false, 0},
 	{L"colorbar",L"Draw colorbar",L"colorbar ['fmt' pos]|Vdat ['fmt' pos]|'sch' pos x y w h ", mgls_colorbar, mglc_colorbar, false, 1},
-	{L"columnplot",L"Set position of plot inside cell of column", L"columnplot num ind", mgls_columnplot, mglc_columnplot, false, 4},
+	{L"columnplot",L"Set position of plot inside cell of column", L"columnplot num ind [d]", mgls_columnplot, mglc_columnplot, false, 4},
 	{L"combine", L"Direct multiplication of arrays", L"combine Res Adat Bdat", mgls_combine, mglc_combine, false, 3},
 	{L"cone",L"Draw cone",L"cone x1 y1 z1 x2 y2 z2 r1 [r2 'fmt' edge]", mgls_cone, mglc_cone, false, 1},
 	{L"cont",L"Draw contour lines",L"cont Zdat ['fmt' num zpos]|Vdat Zdat ['fmt' zpos]|Xdat Ydat Zdat ['fmt' num zpos]|Vdat Xdat Ydat Zdat ['fmt' zpos]", mgls_cont, mglc_cont, false, 0},
@@ -3351,6 +3536,7 @@ mglCommand mgls_base_cmd[] = {
 	{L"conty",L"Draw contour lines at y-slice (or y-plane)",L"conty Dat ['fmt' pos num]", mgls_conty, mglc_conty, false, 0},
 	{L"contz",L"Draw contour lines at z-slice (or z-plane)",L"contz Dat ['fmt' pos num]", mgls_contz, mglc_contz, false, 0},
 	{L"copy",L"Copy data from another variable",L"copy Dat1 Dat2 ['eq' onaxis]", mgls_copy, mglc_copy, true, 3},
+	{L"cosfft",L"Cos-Fourier transform at some direction",L"cosfft Dat 'dir'", mgls_cosfft, mglc_cosfft, false, 3},
 	{L"crange",L"Set color range",L"crange Dat [sym] | c1 c2", mgls_crange, mglc_crange, false, 2},
 	{L"crop",L"Crop edge of data",L"crop Dat n1 n2 'dir'", mgls_crop, mglc_crop, false, 3},
 	{L"crust",L"Draw reconstructed surface for arbitrary data points",L"crust Xdat Ydat Zdat ['fmt']", mgls_crust, mglc_crust, false, 0},
@@ -3358,6 +3544,7 @@ mglCommand mgls_base_cmd[] = {
 	{L"cumsum",L"Cumulative summation",L"cumsum Dat 'dir'", mgls_cumsum, mglc_cumsum, false, 3},
 	{L"curve",L"Draw curve",L"curve x1 y1 dx1 dy1 x2 y2 dx2 dy2 ['fmt']|x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2 ['fmt']", mgls_curve, mglc_curve, false, 1},
 	{L"cut",L"Setup plot points cutting",L"cut val|x1 y1 z1 x2 y2 z2|'cond'", mgls_cut, mglc_cut, false, 2},
+	{L"delete",L"Delete slice of data",L"delete Dat 'dir' [pos=0 num=1]", mgls_delete, mglc_delete, false, 3},
 	{L"dens",L"Draw density plot",L"dens Zdat ['fmt' zpos]|Xdat Ydat Zdat ['fmt' zpos]", mgls_dens, mglc_dens, false, 0},
 	{L"dens3",L"Draw density plot at slices of 3D data",L"dens3 Adat 'dir' [pos 'fmt']|Xdat Ydat Zdat Adat 'dir' [pos 'fmt']", mgls_dens3, mglc_dens3, false, 0},
 	{L"densa",L"Draw density plot at central slices of 3D data",L"densa Adat ['fmt']|Xdat Ydat Zdat Adat ['fmt']", mgls_densa, mglc_densa, false, 0},
@@ -3381,6 +3568,7 @@ mglCommand mgls_base_cmd[] = {
 	{L"fall",L"Draw waterfalls",L"fall Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_fall, mglc_fall, false, 0},
 	{L"fgets",L"Print string from file",L"fgets x y z 'fname' [pos=0 'fmt' size]|x y z 'fname' [pos=0 'fmt' size]", mgls_fgets, mglc_fgets, false, 1},
 	{L"fill",L"Fill data linearly in range [v1, v2]",L"fill Var v1 v2 ['dir'] | Var 'eq' [Vdat Wdat]", mgls_fill, mglc_fill, false, 3},
+	{L"fillsample",L"Fill x-,k-samples for transforms",L"fillsample Var num 'how'", mgls_fillsample, mglc_fillsample, false, 3},
 	{L"fit",L"Fit data to formula",L"fit Res A 'eq' 'var' [Ini]|Res X A 'eq' 'var' [Ini]|Res X Y A 'eq' 'var' [Ini]|Res X Y Z A 'eq' 'var' [Ini]", mgls_fit, mglc_fit, true, 3},
 	{L"fits",L"Fit data to formula",L"fits Res A S 'eq' 'var' [Ini]|Res X A S 'eq' 'var' [Ini]|Res X Y A S 'eq' 'var' [Ini]|Res X Y Z A S 'eq' 'var' [Ini]", mgls_fits, mglc_fits, true, 3},
 	{L"flow",L"Draw flow threads for vector field",L"flow Udat Vdat ['fmt' num zval]|Xdat Ydat Udat Vdat ['fmt' num zval]|Udat Vdat Wdat ['fmt' num]|Xdat Ydat Zdat Udat Vdat ['fmt' num]|\
@@ -3389,18 +3577,24 @@ mglCommand mgls_base_cmd[] = {
 	{L"font",L"Setup font",L"font 'fmt' [size]", mgls_font, mglc_font, false, 2},
 	{L"fplot",L"Plot curve by formula",L"fplot 'y(x)' ['fmt' zval num]|'x(t)' 'y(t)' 'z(t)' ['fmt' num]", mgls_fplot, mglc_fplot, false, 1},
 	{L"fsurf",L"Plot surface by formula",L"fsurf 'z(x,y)' ['fmt' num]|'x(u,v)' 'y(u,v)' 'z(u,v)' ['fmt' num]", mgls_fsurf, mglc_fsurf, false, 1},
-	{L"grid",L"Draw grid",L"grid ['dir' 'fmt']|Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_grid, mglc_grid, false, 0},
+	{L"grad",L"Draw gradient lines for scalar field",L"grad Phi ['fmt' num zval]|Xdat Ydat Phi ['fmt' num zval]|Xdat Ydat Zdat Phi ['fmt' num]", mgls_grad, mglc_grad, false, 0},
+	{L"grid",L"Draw grid",L"grid ['dir' 'fmt']", mgls_grid, mglc_grid, false, 0},
+	{L"grid2",L"Draw grid for data array(s)",L"grid Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_grid2, mglc_grid2, false, 0},
 	{L"grid3",L"Draw grid at slices of 3D data",L"grid3 Adat 'dir' [pos 'fmt']|Xdat Ydat Zdat Adat 'dir' [pos 'fmt']", mgls_grid3, mglc_grid3, false, 0},
 	{L"grida",L"Draw grid at central slices of 3D data",L"grida Adat ['fmt']|Xdat Ydat Zdat Adat ['fmt']", mgls_grida, mglc_grida, false, 0},
+	{L"hankel",L"Hankel transform at some direction",L"hankel Dat 'dir'", mgls_hankel, mglc_hankel, false, 3},
 	{L"hist",L"Create histogram (distribution) of data values",L"hist Res Dat num v1 v2 [nsub]|Res Dat Wdat num v1 v2 [nsub]", mgls_hist, mglc_hist, true, 3},
+	{L"idset",L"Set column id for data",L"idset Dat 'ids'", mgls_idset, mglc_idset, false, 3},
 	{L"import",L"Import data from PNG picture",L"import Dat 'fname' 'scheme' [v1 v2]", mgls_import, mglc_import, true, 3},
 	{L"info",L"Print information about data",L"info Dat [detail]|'message'", mgls_info, mglc_info, false, 3},
 	{L"inplot",L"Set position of plot in picture",L"x1 x2 y1 y2 [rel]", mgls_inplot, mglc_inplot, false, 4},
+	{L"insert",L"Insert slice of data",L"insert Dat 'dir' [pos=0 num=1]", mgls_insert, mglc_insert, false, 3},
 	{L"integrate",L"Integrate data",L"integrate Dat 'dir'", mgls_integrate, mglc_integrate, false, 3},
 	{L"jacobian",L"Get Jacobian",L"jacobian Res Xdat Ydat [Zdat]", mgls_jacobian, mglc_jacobian, true, 3},
 	{L"label",L"Draw label at arbitrary position",L"label x y 'txt' ['fmt' size]", mgls_label, mglc_label, false, 1},
 	{L"legend",L"Draw legend",L"legend [pos 'fmt' size llen]|x y ['fmt' size llen]", mgls_legend, mglc_legend, false, 1},
 	{L"legendbox",L"Switch on/off drawing box in legend",L"legendbox val", mgls_legendbox, mglc_legendbox, false, 2},
+	{L"legendmarks",L"Set number of marks in the legend",L"legendmarks val", mgls_legendbox, mglc_legendbox, false, 2},
 	{L"light",L"Setup light",L"light [val] | val num | num xpos ypos zpos ['fmt' br]", mgls_light, mglc_light, false, 2},
 	{L"line",L"Draw line",L"line x1 y1 x2 y2 ['fmt']|x1 y1 z1 x2 y2 z2 ['fmt']", mgls_line, mglc_line, false, 1},
 	{L"linewidth",L"Set default line width",L"linewidth val", mgls_linewidth, mglc_linewidth, false, 2},
@@ -3429,6 +3623,7 @@ mglCommand mgls_base_cmd[] = {
 	{L"put",L"Put value (numeric or array) to given data element",L"put Dat val [i j k] | Dat Val [i j k]", mgls_put, mglc_put, false, 3},
 	{L"putsfit",L"Print fitted formula",L"putsfit x y ['pre' 'font' size]|x y z ['pre' 'font' size]", mgls_putsfit, mglc_putsfit, false, 0},
 	{L"qo2d",L"Solve PDE in accompanied coordinates",L"qo2d Res 'ham' IniRe IniIm Ray [r k0 Xout Yout]", mgls_qo2d, mglc_qo2d, true, 3},
+	{L"quadplot",L"Draw surface of quadrangles",L"quadplot Idat Xdat Ydat ['fmt']|Idat Xdat Ydat Zdat ['fmt']|Idat Xdat Ydat Zdat Cdat ['fmt'] ", mgls_quadplot, mglc_quadplot, false, 0},
 	{L"radar",L"Draw radar chart",L"radar Rdat ['fmt' r]", mgls_radar, mglc_radar, false, 0},
 	{L"ranges",L"Set axis ranges",L"ranges x1 x2 y1 y2 [z1 z2]", mgls_ranges, mglc_ranges, false, 2},
 	{L"ray",L"Solve Hamiltonian ODE (find GO ray or trajectory)",L"ray Res 'ham' x0 y0 z0 px0 py0 pz0 [dz=0.1 tmax=10]", mgls_ray, mglc_ray, true, 3},
@@ -3440,13 +3635,14 @@ mglCommand mgls_base_cmd[] = {
 	{L"rect",L"Draw rectangle",L"rect x1 y1 x2 y2 ['fmt']|x1 y1 z1 x2 y2 z2 ['fmt']", mgls_rect, mglc_rect, false, 1},
 	{L"region",L"Draw filled region between 2 curves",L"region Ydat1 Ydat2 ['fmt' inside]|Xdat Ydat1 Ydat2 ['fmt' inside]", mgls_region, mglc_region, false, 0},
 	{L"resize",L"Resize data",L"resize Res Dat mx [my mz]", mgls_resize, mglc_resize, true, 3},
+	{L"roll",L"Roll data along direction",L"roll Dat 'dir' num", mgls_roll, mglc_roll, false, 0},
 	{L"rotate",L"Rotate plot",L"rotate tetz tetx [tety] | tet x y z", mgls_rotate, mglc_rotate, false, 4},
 	{L"rotatetext",L"Set to auto rotate text or not",L"rotatetext val", mgls_rotatetext, mglc_rotatetext, false, 2},
 	{L"save",L"Save data to file",L"save Dat 'file'", mgls_save, mglc_save, false, 3},
 	{L"savehdf",L"Save data to HDF5 file",L"savehdf Dat 'file' 'id'", mgls_savehdf, mglc_savehdf, false, 3},
-	{L"set_id",L"Set column id for data",L"set_id Dat 'ids'", mgls_set_id, mglc_set_id, false, 3},
 	{L"setsize",L"Set picture size",L"setsize width height", mgls_setsize, mglc_setsize, false, 5},
 	{L"sew",L"Remove jump into the data, like phase jumps",L"sew Dat ['dir' da]", mgls_sew, mglc_sew, false, 3},
+	{L"sinfft",L"Sin-Fourier transform at some direction",L"sinfft Dat 'dir'", mgls_sinfft, mglc_sinfft, false, 3},
 	{L"smooth",L"Smooth data",L"smooth Dat [kind 'dir']", mgls_smooth, mglc_smooth, false, 3},
 	{L"sphere",L"Draw sphere",L"sphere x0 y0 r ['fmt']|x0 y0 z0 r ['fmt']", mgls_sphere, mglc_sphere, false, 1},
 	{L"squeeze",L"Squeeze data",L"squeeze Dat kx [ky kz]", mgls_squeeze, mglc_squeeze, false, 3},
@@ -3456,7 +3652,7 @@ mglCommand mgls_base_cmd[] = {
 	{L"stfad",L"Do STFA transform",L"stfad Res Real Imag dn ['dir']", mgls_stfad, mglc_stfad, true, 3},
 	{L"stickplot",L"Set position of plot inside cell of stick", L"stickplot num ind tet phi", mgls_stickplot, mglc_stickplot, false, 4},
 	{L"subdata",L"Extract sub-array",L"subdata Res Dat nx [ny nz]", mgls_subdata, mglc_subdata, true, 3},
-	{L"subplot",L"Set position of plot",L"subplot m n pos [dx dy]", mgls_subplot, mglc_subplot, false, 4},
+	{L"subplot",L"Set position of plot",L"subplot m n pos [dx dy]|m n pos 'style'", mgls_subplot, mglc_subplot, false, 4},
 	{L"subto",L"Subtract data or number",L"subto Var Dat|Var num", mgls_subto, mglc_subto, false, 3},
 	{L"sum",L"Find summation over direction",L"sum Res Dat 'dir'", mgls_sum, mglc_sum, true, 3},
 	{L"surf",L"Draw solid surface",L"surf Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_surf, mglc_surf, false, 0},
@@ -3472,7 +3668,8 @@ mglCommand mgls_base_cmd[] = {
 	{L"textmark",L"Draw TeX mark at point position",L"textmark Ydat Rdat 'text' ['fmt' zval]|Xdat Ydat Rdat 'text' ['fmt' zval]|Xdat Ydat Zdat Rdat 'text' ['fmt']", mgls_textmark, mglc_textmark, false, 0},
 	{L"ticklen",L"Set tick length",L"ticklen val [stt]", mgls_ticklen, mglc_ticklen, false, 2},
 	{L"tickstl",L"Set tick style",L"tickstl 'stl' ['sub']", mgls_tickstl, mglc_tickstl, false, 2},
-	{L"tile",L"Draw horizontal tiles",L"tile Zdat ['fmt']|Xdat Ydat Zdat ['fmt'] | Zdat Rdat ['fmt']|Xdat Ydat Zdat Rdat ['fmt']", mgls_tile, mglc_tile, false, 0},
+	{L"tile",L"Draw horizontal tiles",L"tile Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_tile, mglc_tile, false, 0},
+	{L"tiles",L"Draw horizontal tiles with variable size",L"tiles Zdat Rdat ['fmt']|Xdat Ydat Zdat Rdat ['fmt']", mgls_tiles, mglc_tiles, false, 0},
 	{L"title",L"Print title for the picture",L"title 'text' ['fmt' size]", mgls_title, mglc_title, false, 1},
 	{L"tlabel",L"Draw label for t-axis",L"tlabel 'txt' [pos size shift]", mgls_tlabel, mglc_tlabel, false, 1},
 	{L"torus",L"Draw surface of curve rotation",L"torus Rdat ['fmt']|Zdat Rdat ['fmt']", mgls_torus, mglc_torus, false, 0},
@@ -3483,6 +3680,7 @@ mglCommand mgls_base_cmd[] = {
 	{L"transparent",L"Switch off transparency",L"transparent val", mgls_transparent, mglc_transparent, false, 2}, //!!! OLD !!!
 	{L"transpose",L"Transpose data array",L"transpose Dat ['dir']", mgls_transpose, mglc_transpose, false, 3},
 	{L"transptype",L"Set type transparency",L"transptype val", mgls_transptype, mglc_transptype, false, 2},
+	{L"tricont",L"Draw contour lines for surface of triangles",L"tricont Vdat Idat Xdat Ydat ['fmt']|Vdat Idat Xdat Ydat Zdat ['fmt']|Vdat Idat Xdat Ydat Zdat Cdat ['fmt'] ", mgls_tricont, mglc_tricont, false, 0},
 	{L"triplot",L"Draw surface of triangles",L"triplot Idat Xdat Ydat ['fmt']|Idat Xdat Ydat Zdat ['fmt']|Idat Xdat Ydat Zdat Cdat ['fmt'] ", mgls_triplot, mglc_triplot, false, 0},
 	{L"tube",L"Draw curve by tube",L"tube Ydat Rdat ['fmt' zval]|Ydat rval ['fmt' zval]|Xdat Ydat Rdat ['fmt' zval]|Xdat Ydat rval ['fmt' zval]|Xdat Ydat Zdat Rdat ['fmt']|Xdat Ydat Zdat rval ['fmt']", mgls_tube, mglc_tube, false, 0},
 	{L"var",L"Create new 1D data and fill it in range",L"var Dat nx x1 [x2]", mgls_var, mglc_var, true, 3},
diff --git a/mgl/mgl_export.cpp b/mgl/mgl_export.cpp
index 26b7a16..77dfcd5 100644
--- a/mgl/mgl_export.cpp
+++ b/mgl/mgl_export.cpp
@@ -21,6 +21,8 @@
 #include <string.h>
 #include <stdlib.h>
 #include <time.h>
+#include <zlib.h>
+#include <stdarg.h>
 #ifndef NO_PNG
 #include <png.h>
 #endif
@@ -213,9 +215,7 @@ int mgl_jpeg_save(const char *fname, int w, int h, unsigned char **p)
 	cinfo.in_color_space = JCS_RGB;
 	jpeg_set_defaults(&cinfo);
 	jpeg_start_compress(&cinfo, TRUE);
-
-    jpeg_write_scanlines(&cinfo, p, h);
-
+	jpeg_write_scanlines(&cinfo, p, h);
 	jpeg_finish_compress(&cinfo);
 	jpeg_destroy_compress(&cinfo);
 	fclose(outfile);
@@ -223,26 +223,37 @@ int mgl_jpeg_save(const char *fname, int w, int h, unsigned char **p)
 	return 0;
 }
 //-----------------------------------------------------------------------------
+void mgl_printf(void *fp, bool gz, const char *str, ...)
+{
+	char buf[512];
+	va_list lst;
+	va_start(lst,str);
+	vsprintf(buf,str,lst);
+	va_end(lst);
+	if(gz)	gzprintf(fp, "%s", buf);
+	else	fprintf((FILE *)fp, "%s", buf);
+}
+//---------------------------------------------------------------------------
 int mgl_bps_save(const char *fname, int w, int h, unsigned char **p)
 {
 	time_t now;
 	time(&now);
 	register long i,j;
+	bool gz = fname[strlen(fname)-1]=='z';
 
-	FILE *fp = fopen(fname,"wt");
-	fprintf(fp,"%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n",w,h);
-	fprintf(fp,"%%%%Creator: MathGL library\n%%%%Title: %s\n", fname);
-	fprintf(fp,"%%%%CreationDate: %s\n",ctime(&now));
-//	fprintf(fp,"%%%%EndComments\n\n");
-	fprintf(fp,"%d %d 8 [1 0 0 1 0 0] {currentfile %d string readhexstring pop} false 3 colorimage\n",
+	void *fp = gz ? gzopen(fname,"wt") : fopen(fname,"wt");
+	mgl_printf(fp, gz, "%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n",w,h);
+	mgl_printf(fp, gz, "%%%%Creator: MathGL library\n%%%%Title: %s\n", fname);
+	mgl_printf(fp, gz, "%%%%CreationDate: %s\n",ctime(&now));
+	mgl_printf(fp, gz, "%d %d 8 [1 0 0 1 0 0] {currentfile %d string readhexstring pop} false 3 colorimage\n",
 			w,h,1+w*h/40);
 	for(j=h-1;j>=0;j--)	for(i=0;i<w;i++)
 	{
-		if((i+w*(h-j-1))%40==0 && i+j>0)	fprintf(fp,"\n");
-		fprintf(fp,"%02x%02x%02x",p[j][3*i],p[j][3*i+1],p[j][3*i+2]);
+		if((i+w*(h-j-1))%40==0 && i+j>0)	mgl_printf(fp, gz, "\n");
+		mgl_printf(fp, gz, "%02x%02x%02x",p[j][3*i],p[j][3*i+1],p[j][3*i+2]);
 	}
-	fprintf(fp,"\n\nshowpage\n%%%%EOF\n");
-	fclose(fp);
+	mgl_printf(fp, gz, "\n\nshowpage\n%%%%EOF\n");
+	if(gz)	gzclose(fp);	else	fclose((FILE *)fp);
 	return 0;
 }
 //-----------------------------------------------------------------------------
diff --git a/mgl/mgl_f.cpp b/mgl/mgl_f.cpp
index e5c0d5f..e2cc35b 100644
--- a/mgl/mgl_f.cpp
+++ b/mgl/mgl_f.cpp
@@ -183,9 +183,12 @@ void mgl_set_ambbr_(uintptr_t *gr, mreal *i)
 //-----------------------------------------------------------------------------
 //		Scale and rotate
 //-----------------------------------------------------------------------------
+/// Push transformation matrix into stack.
+void mgl_mat_push_(uintptr_t *gr)	{	_GR_->Push();	}
+/// Pop transformation matrix into stack.
+void mgl_mat_pop_(uintptr_t *gr)	{	_GR_->Pop();	}
 /// Clear transformation matrix.
-void mgl_identity_(uintptr_t *gr, int *rel)
-{	_GR_->Identity(*rel);	}
+void mgl_identity_(uintptr_t *gr, int *rel)	{	_GR_->Identity(*rel);	}
 /// Clear up the frame
 void mgl_clf_(uintptr_t *gr)
 {	_GR_->Clf();	}
@@ -195,16 +198,20 @@ void mgl_clf_rgb_(uintptr_t *gr, mreal *r, mreal *g, mreal *b)
 /// Put further plotting in some region of whole frame surface.
 void mgl_subplot_(uintptr_t *gr, int *nx,int *ny,int *m)
 {	_GR_->SubPlot(*nx,*ny,*m);	}
-/// Put further plotting in some region of whole frame surface.
 void mgl_subplot_d_(uintptr_t *gr, int *nx,int *ny,int *m,mreal *dx,mreal *dy)
 {	_GR_->SubPlot(*nx,*ny,*m,*dx,*dy);	}
+void mgl_subplot_s_(uintptr_t *gr, int *nx,int *ny,int *m,const char *st,int l)
+{	char *s=new char[l+1];	memcpy(s,st,l);	s[l]=0;
+	_GR_->SubPlot(*nx,*ny,*m,s);	delete []s;	}
 /// Put further plotting in some region of whole frame surface.
 void mgl_inplot_(uintptr_t *gr, mreal *x1,mreal *x2,mreal *y1,mreal *y2)
-{	_GR_->InPlot(*x1,*x2,*y1,*y2);	}
+{	_GR_->InPlot(*x1,*x2,*y1,*y2,false);	}
 void mgl_relplot_(uintptr_t *gr, mreal *x1,mreal *x2,mreal *y1,mreal *y2)
 {	_GR_->InPlot(*x1,*x2,*y1,*y2,true);	}
 void mgl_columnplot_(uintptr_t *gr, int *num, int *i)
 {	_GR_->ColumnPlot(*num,*i);	}
+void mgl_columnplot_d_(uintptr_t *gr, int *num, int *i, mreal *d)
+{	_GR_->ColumnPlot(*num,*i,*d);	}
 void mgl_stickplot_(uintptr_t *gr, int *num, int *i, mreal *tet, mreal *phi)
 {	_GR_->StickPlot(*num, *i, *tet, *phi);	}
 /// Set aspect ratio for further plotting.
@@ -460,6 +467,8 @@ void mgl_legend_(uintptr_t *gr, int *where, const char *font, mreal *size, mreal
 }
 void mgl_set_legend_box_(uintptr_t *gr, int *enable)
 {	_GR_->LegendBox = *enable;	}
+void mgl_set_legend_marks_(uintptr_t *gr, int *num)
+{	_GR_->SetLegendMarks(*num);	}
 //-----------------------------------------------------------------------------
 const unsigned char *mgl_get_rgb_(uintptr_t *graph)
 {
@@ -507,6 +516,52 @@ void mgl_calc_scr_(uintptr_t *gr, mreal *x, mreal *y, mreal *z, int *xs, int *ys
 	if(g)	g->CalcScr(mglPoint(*x,*y,*z),xs,ys);
 }
 //-----------------------------------------------------------------------------
+void mgl_wnd_set_delay_(uintptr_t *gr, mreal *dt)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->Delay = *dt;	}
+void mgl_wnd_set_auto_clf_(uintptr_t *gr, int *val)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->AutoClf = *val;	}
+void mgl_wnd_set_show_mouse_pos_(uintptr_t *gr, int *val)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->ShowMousePos = *val;	}
+void mgl_wnd_set_clf_update_(uintptr_t *gr, int *val)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->ClfOnUpdate = *val;	}
+void mgl_wnd_toggle_alpha_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->ToggleAlpha();	}
+void mgl_wnd_toggle_light_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->ToggleLight();	}
+void mgl_wnd_toggle_zoom_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->ToggleZoom();	}
+void mgl_wnd_toggle_rotate_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->ToggleRotate();	}
+void mgl_wnd_toggle_no_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->ToggleNo();	}
+void mgl_wnd_update_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->Update();	}
+void mgl_wnd_reload_(uintptr_t *gr, int *o)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->ReLoad(*o);	}
+void mgl_wnd_adjust_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->Adjust();	}
+void mgl_wnd_next_frame_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->NextFrame();	}
+void mgl_wnd_prev_frame_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->PrevFrame();	}
+void mgl_wnd_animation_(uintptr_t *gr)
+{	mglGraphAB *g = dynamic_cast<mglGraphAB *>((mglGraph *)(*gr));
+	if(g)	g->Animation();	}
+//-----------------------------------------------------------------------------
 mreal mgl_data_get_value_(uintptr_t *d, int *i, int *j, int *k)
 {	return	_DT_->a[*i+_DT_->nx*(*j+*k*_DT_->ny)];	}
 void mgl_data_set_value_(uintptr_t *d, mreal *v, int *i, int *j, int *k)
@@ -581,4 +636,5 @@ void mgl_set_tick_stl_(uintptr_t *gr, const char *stl, const char *sub, int l, i
 	_GR_->SetTickStl(t,s);
 	delete []s;	delete []t;
 }
+int mgl_get_warn_(uintptr_t *gr)	{	return _GR_->WarnCode;	}
 //-----------------------------------------------------------------------------
diff --git a/mgl/mgl_flow.cpp b/mgl/mgl_flow.cpp
index 1f61cac..419de75 100644
--- a/mgl/mgl_flow.cpp
+++ b/mgl/mgl_flow.cpp
@@ -106,7 +106,8 @@ void mglGraph::Flow(const mglData &x, const mglData &y, const mglData &ax, const
 	Arrow1 = Arrow2 = '_';
 	SetScheme(sch);
 	// allocate memory
-	if(isnan(zVal)) zVal = Min.z;
+	if(isnan(zVal)) zVal = Min.z;
+	cnt=(num>0);	num = abs(num);	// redefine central parater
 
 	for(long k=0;k<ax.nz;k++)
 	{
@@ -309,7 +310,8 @@ void mglGraph::Flow(const mglData &x, const mglData &y, const mglData &z, const
 	if(!(both || (x.nx==n && y.nx==m && z.nx==l)))
 	{	SetWarn(mglWarnDim,"Flow");	return;	}
 	static int cgid=1;	StartGroup("Flow3",cgid++);
-
+	cnt=(num>0);	num = abs(num);	// redefine central parater
+	
 	Arrow1 = Arrow2 = '_';
 	SetScheme(sch);
 
@@ -449,6 +451,53 @@ void mglGraph::FlowP(mglPoint p, const mglData &ax, const mglData &ay, const mgl
 }
 //-----------------------------------------------------------------------------
 //
+//	Grad series
+//
+//-----------------------------------------------------------------------------
+void mglGraph::Grad(const mglData &x, const mglData &y, const mglData &z, const mglData &phi, const char *sch, int num)
+{
+	mglData ax(phi), ay(phi),az(phi),xx(phi),yy(phi),zz(phi);
+	long nn = phi.nx*phi.ny*phi.nz;
+	if(x.nx*x.ny*x.nz==nn && y.nx*y.ny*y.nz==nn && x.nx*x.ny*x.nz==nn)
+	{	xx = x;	yy = y;	zz = z;	}	// nothing to do
+	else if(x.nx==phi.nx && y.nx==phi.ny && z.nx==phi.nz)
+	{	// prepare data
+		register long i,j,k,i0;
+		for(i=0;i<phi.nx;i++)	for(j=0;j<phi.ny;j++)	for(k=0;k<phi.nz;k++)
+		{
+			i0 = i+phi.nx*(j+phi.ny*k);	xx.a[i0] = x.a[i];
+			yy.a[i0] = y.a[j];			zz.a[i0] = z.a[k];	}
+	}
+	else	{	SetWarn(mglWarnDim,"Grad");	return;	}
+	ax.Diff(xx,yy,zz);	ay.Diff(yy,xx,zz);	az.Diff(zz,xx,yy);
+	Flow(xx,yy,zz,ax,ay,az,sch,num,num>0);
+}
+//-----------------------------------------------------------------------------
+void mglGraph::Grad(const mglData &x, const mglData &y, const mglData &phi, const char *sch, int num, mreal zVal)
+{
+	mglData ax(phi), ay(phi),xx(phi),yy(phi);
+	long nn = phi.nx*phi.ny;
+	if(x.nx*x.ny==nn && y.nx*y.ny==nn)	{	xx = x;	yy = y;	}
+	else if(x.nx==phi.nx && y.nx==phi.ny)
+	{
+		register long i,j,i0;
+		for(i=0;i<phi.nx;i++)	for(j=0;j<phi.ny;j++)
+		{	i0 = i+phi.nx*j;	xx.a[i0] = x.a[i];	yy.a[i0] = y.a[j];	}
+	}
+	else	{	SetWarn(mglWarnDim,"Grad");	return;	}
+	ax.Diff(xx,yy);	ay.Diff(yy,xx);
+	Flow(xx,yy,ax,ay,sch,num,num>0,zVal);
+}
+//-----------------------------------------------------------------------------
+void mglGraph::Grad(const mglData &phi, const char *sch, int num, mreal zVal)
+{
+	mglData x(phi.nx), y(phi.ny), z(phi.nz);
+	x.Fill(Min.x,Max.x);	y.Fill(Min.y,Max.y);	z.Fill(Min.z,Max.z);
+	if(phi.nz>2)	Grad(x,y,z,phi,sch,num?num:3);
+	else			Grad(x,y,phi,sch,num?num:5,zVal);
+}
+//-----------------------------------------------------------------------------
+//
 //	Pipe series
 //
 //-----------------------------------------------------------------------------
@@ -534,7 +583,8 @@ void mglGraph::Pipe(const mglData &x, const mglData &y, const mglData &ax, const
 	SetScheme(sch);
 	// allocate memory
 	if(isnan(zVal)) zVal = Min.z;
-
+	cnt=(num>0);	num = abs(num);
+	
 	for(long k=0;k<ax.nz;k++)
 	{
 		if(ax.nz>1)	zVal = Min.z+(Max.z-Min.z)*mreal(k)/(ax.nz-1);
@@ -672,7 +722,8 @@ void mglGraph::Pipe(const mglData &x, const mglData &y, const mglData &z, const
 
 	Arrow1 = Arrow2 = '_';
 	SetScheme(sch);
-
+	cnt=(num>0);	num = abs(num);
+	
 	for(i=0;i<num;i++)	for(j=0;j<num;j++)
 	{
 		u = (i+1.)/(num+1.);	v = (j+1.)/(num+1.);	w = 0;
@@ -762,6 +813,14 @@ void mgl_pipe_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const HMDT
 void mgl_pipe_3d(HMGL gr, const HMDT ax, const HMDT ay, const HMDT az, const char *sch, mreal r0, int num, int central)
 {	if(gr && ay && ax && az)	gr->Pipe(*ax, *ay, *az, sch, r0, num, central);	}
 //-----------------------------------------------------------------------------
+/// The gradient of the scalar field
+void mgl_grad_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const HMDT ph, const char *sch, int num)
+{	if(gr&&x&&y&&z&&ph)	gr->Grad(*x,*y,*z,*ph,sch,num);	}
+void mgl_grad_xy(HMGL gr, const HMDT x, const HMDT y, const HMDT ph, const char *sch, int num, mreal zVal)
+{	if(gr&&x&&y&&ph)	gr->Grad(*x,*y,*ph,sch,num,zVal);	}
+void mgl_grad(HMGL gr, const HMDT ph, const char *sch, int num, mreal zVal)
+{	if(gr&&ph)	gr->Grad(*ph,sch,num,zVal);	}
+//-----------------------------------------------------------------------------
 //	Fortran interface
 //-----------------------------------------------------------------------------
 /// Plot flows for vector field {ax,ay} parametrically depended on coordinate {x,y} with color proportional to value |a|
@@ -862,3 +921,26 @@ void mgl_pipe_3d_(uintptr_t *gr, uintptr_t *ax, uintptr_t *ay, uintptr_t *az, co
 	delete []s;
 }
 //-----------------------------------------------------------------------------
+/// Plot gradient for scalar field ph parametrically depended on coordinate {x,y} with color proportional to value |a|
+void mgl_grad_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *ph, const char *sch,
+					int *num, mreal *zVal,int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && ph && x && y)	_GR_->Grad(_D_(x), _D_(y), _D_(ph), s, *num, *zVal);
+	delete []s;
+}
+void mgl_grad_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *ph, const char *sch,
+					int *num, int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && ph && x && y && z)	_GR_->Grad(_D_(x), _D_(y), _D_(z), _D_(ph), s, *num);
+	delete []s;
+}
+/// Plot flows for vector field {ax,ay} with color proportional to value |a|
+void mgl_grad_(uintptr_t *gr, uintptr_t *ph, const char *sch, int *num, mreal *zVal,int l)
+{
+	char *s=new char[l+1];	memcpy(s,sch,l);	s[l]=0;
+	if(gr && ph)	_GR_->Flow(_D_(ph), s, *num, *zVal);
+	delete []s;
+}
+//-----------------------------------------------------------------------------
diff --git a/mgl/mgl_font.cpp b/mgl/mgl_font.cpp
index 2c94b11..b92712c 100644
--- a/mgl/mgl_font.cpp
+++ b/mgl/mgl_font.cpp
@@ -21,6 +21,8 @@
 #include <stdlib.h>
 #include <locale.h>
 #include <ctype.h>
+#include <wctype.h>
+#include <zlib.h>
 
 #ifdef WIN32
 #include <windows.h>
@@ -89,7 +91,7 @@ mreal mglFont::Puts(const wchar_t *str,const char *how, char col)
 		if(strchr(how,'w'))	font = font|MGL_FONT_WIRE;
 		if(strchr(how,'o'))	font = font|MGL_FONT_OLINE;
 		if(strchr(how,'u'))	font = font|MGL_FONT_ULINE;
-	}
+	}
 	return Puts(str, font, align,col);
 }
 //-----------------------------------------------------------------------------
@@ -271,8 +273,9 @@ unsigned mglFont::Parse(const wchar_t *s)
 	else if(!wcscmp(s,L"underset"))	res = unsigned(-9);
 	else if(!wcscmp(s,L"stackr"))	res = unsigned(-10);
 	else if(!wcscmp(s,L"stackl"))	res = unsigned(-11);
-	else if(!wcscmp(s,L"sub"))		res = unsigned(-12);	// new
-	else if(!wcscmp(s,L"sup"))		res = unsigned(-13);	// new
+	else if(!wcscmp(s,L"sub"))		res = unsigned(-12);
+	else if(!wcscmp(s,L"sup"))		res = unsigned(-13);
+	else if(!wcscmp(s,L"textsc"))	res = unsigned(-14);	// new
 	else if(!wcscmp(s,L"b"))		res = MGL_FONT_BOLD;
 	else if(!wcscmp(s,L"i"))		res = MGL_FONT_ITAL;
 	else if(!wcscmp(s,L"bi"))		res = MGL_FONT_BOLD|MGL_FONT_ITAL;
@@ -369,7 +372,8 @@ void mglFont::draw_ouline(mglGraph *gr, int st, mreal x, mreal y, mreal f, mreal
 	if(st&MGL_FONT_ULINE)
 		gr->Glyph(x,y-200*f/g, ww*g, (st&MGL_FONT_WIRE)?12:8, 0, ccol);
 }
-//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+#define MGL_CLEAR_STYLE {st = style;	yy = y;	ff = f;	ccol=col;	a = (st/MGL_FONT_BOLD)&3;}
 mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char col)
 {
 	if(numg==0)	return 0;
@@ -402,7 +406,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			ww = Puts(b1, x, yy, ff, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol);
 			if(gr && !(style&0x10))	// add under-/over- line now
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
 		}
 		else if(s==unsigned(-9))	// underset
 		{
@@ -411,7 +415,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			Puts(b2, x+(ww-w2)/2, yy-150*ff/fact[a], ff/4, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol);
 			if(gr && !(style&0x10))	// add under-/over- line now
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
 		}
 		else if(s==unsigned(-8))	// overset
 		{
@@ -420,7 +424,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			Puts(b2, x+(ww-w2)/2, yy+375*ff/fact[a], ff/4, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol);
 			if(gr && !(style&0x10))	// add under-/over- line now
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
 		}
 		else if(s==unsigned(-12))	// sub
 		{
@@ -429,7 +433,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			Puts(b2, x+(ww-w2)/2, yy-250*ff/fact[a], ff/4, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol);
 			if(gr && !(style&0x10))	// add under-/over- line now
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
 		}
 		else if(s==unsigned(-13))	// sup
 		{
@@ -438,7 +442,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			Puts(b2, x+(ww-w2)/2, yy+450*ff/fact[a], ff/4, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol);
 			if(gr && !(style&0x10))	// add under-/over- line now
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
 		}
 		else if(s==unsigned(-11))	// stackl
 		{
@@ -447,7 +451,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			Puts(b2, x, yy-110*ff/fact[a], ff*0.45, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol);
 			if(gr && !(style&0x10))	// add under-/over- line now
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
 		}
 		else if(s==unsigned(-10))	// stacr
 		{
@@ -456,7 +460,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			Puts(b2, x+(ww-w2), yy-110*ff/fact[a], ff*0.45, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol);
 			if(gr && !(style&0x10))	// add under-/over- line now
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
 		}
 		else if(s==unsigned(-7))	// stack
 		{
@@ -465,7 +469,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			Puts(b2, x+(ww-w2)/2, yy-110*ff/fact[a], ff*0.45, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol);
 			if(gr && !(style&0x10))	// add under-/over- line now
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
 		}
 		else if(s==unsigned(-6))	// frac
 		{
@@ -477,10 +481,20 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 				draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
 				gr->Glyph(x,y+150*f/fact[a], ww*fact[a], (st&MGL_FONT_WIRE)?12:8, 0, ccol);
 			}
-			st = style;	yy = y;	ff = f;		// clear style modification
+			MGL_CLEAR_STYLE
+		}
+		else if(s==unsigned(-4))	MGL_CLEAR_STYLE	// should be never here but if I miss sth ...
+		else if(s==unsigned(-14))	// script symbols
+		{
+			register long j,k=1;
+			if(str[i+1]==unsigned(-3))	for(j=i+2;k>0 && str[j];j++)
+			{
+				if(str[j]==unsigned(-3))	k++;
+				if(str[j]==unsigned(-4))	k--;
+				if(iswlower(str[j]))
+					str[j] = MGL_FONT_UPPER|MGL_FONT_LOWER|towupper(str[j]);
+			}
 		}
-		else if(s==unsigned(-4))	// should be never here but if I miss sth ...
-			continue;
 		else if(s==unsigned(-5))	// large symbol
 			ff *= 1.5;
 		else if(s==unsigned(-1))	// set normal font
@@ -498,10 +512,8 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 					if(j==-1)	continue;
 					if(gr && !(style&0x10))
 					{
-						if(st & MGL_FONT_WIRE)
-							gr->Glyph(x,yy,ff,a+4,j,ccol);
-						else
-							gr->Glyph(x,yy,ff,a,j,ccol);
+						if(st & MGL_FONT_WIRE)	gr->Glyph(x,yy,ff,a+4,j,ccol);
+						else					gr->Glyph(x,yy,ff,a,j,ccol);
 					}
 				}
 				else
@@ -510,7 +522,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 				if(gr && !(style&0x10))	// add under-/over- line now
 					draw_ouline(gr,st,x,y,f,fact[a],ww,ccol);
 				if(s & MGL_FONT_ZEROW)	ww = 0;
-				st = style;	yy = y;	ff = f;	ccol=col;	// clear style modification
+				MGL_CLEAR_STYLE
 			}
 			// apply new styles
 			if(s/MGL_FONT_BOLD)	st = st | (s & MGL_FONT_STYLE);
@@ -518,10 +530,9 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 			ss = (s/MGL_FONT_UPPER)%4;
 			if(ss)
 			{
-				if(ss==1)		yy += 200*ff/fact[a];	// =  500*0.4
-				else if(ss==2)	yy -=  80*ff/fact[a];	// = -500*0.16
-				else if(ss==3)	yy +=  60*ff/fact[a];	// =  500*0.12
-				ff *=0.6;
+				if(ss==1)		{	ff *=0.6;	yy += 200*ff/fact[a];	}	// =  500*0.4
+				else if(ss==2)	{	ff *=0.6;	yy -=  80*ff/fact[a];	}	// = -500*0.16
+				else if(ss==3)	{	ff *=0.8;	yy +=  0*60*ff/fact[a];	}	// =  500*0.12
 			}
 		}
 		x += ww;	w += ww;
@@ -530,32 +541,6 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char
 	return w;
 }
 //-----------------------------------------------------------------------------
-void mglFont::read_data(FILE *fp, mreal *ff, short *wdt, short *numl,
-						unsigned *posl, short *numt, unsigned *post, unsigned &cur)
-{
-	char str[256];
-	int tmpw, tmpnl, tmpnt;
-	unsigned s,i,n, tmpi, tmppl, tmppt;
-	long j;
-
-	fgets(str,256,fp);				// first string is comment (not used)
-	fgets(str,256,fp);				// second string have information
-	sscanf(str, "%u%f%d", &n, ff, &s);
-	buf = (short *)realloc(buf, (cur+s)*sizeof(short));	// prealocate buffer
-
-	for(i=0;i<n;i++)
-	{
-		fscanf(fp,"%u%d%d%u%d%u", &tmpi, &tmpw, &tmpnl, &tmppl, &tmpnt, &tmppt);
-		j=Internal(unsigned(tmpi));	if(j<0)	continue;
-		if(wdt)	wdt[j] = tmpw;
-		numl[j] = tmpnl;	posl[j] = tmppl+cur;
-		numt[j] = tmpnt;	post[j] = tmppt+cur;
-	}
-	for(i=0;i<s;i++)	{	fscanf(fp,"%d", &tmpi);	buf[i+cur] = tmpi;	}
-	cur += s;
-	fclose(fp);	// !!! close file here !!!
-}
-//-----------------------------------------------------------------------------
 void mglFont::mem_alloc()
 {
 	id = new wchar_t[numg];
@@ -591,45 +576,6 @@ void mglFont::main_copy()
 	memcpy(width[3],width[0],numg*sizeof(short));
 }
 //-----------------------------------------------------------------------------
-bool mglFont::read_main(const char *base, const char *path, unsigned &cur)
-{
-	FILE *fp;
-	char str[256];
-	int tmpi, tmpw, tmpnl, tmpnt;
-	unsigned s, tmppl, tmppt;
-#ifdef WIN32	// normal weight (should have most of symbols !!!)
-	if(path)	sprintf(str,"%s\\%s.vfm",path,base);
-#else
-	if(path)	sprintf(str,"%s/%s.vfm",path,base);
-#endif
-	else	sprintf(str,"%s.vfm",base);
-
-	fp = fopen(str,"r");
-	if(!fp)	return false;			// this font must be in any case
-	fgets(str,256,fp);				// first string is comment (not used)
-	fgets(str,256,fp);				// second string have information
-	sscanf(str, "%u%f%u", &numg, fact, &s);
-	fact[1] = fact[2] = fact[3] = fact[0];	// copy default factor for other font styles;
-	buf = (short *)malloc(s*sizeof(short));	// prealocate buffer
-	// now allocate memory for all fonts
-	mem_alloc();
-	// and load symbols itself
-	register long i;
-	for(i=0;i<int(numg);i++)
-	{
-		fscanf(fp,"%u%d%d%u%d%u", &tmpi, &tmpw, &tmpnl, &tmppl, &tmpnt, &tmppt);
-		id[i] = tmpi;		width[0][i] = tmpw;
-		numl[0][i] = tmpnl; ln[0][i] = tmppl;
-		numt[0][i] = tmpnt;	tr[0][i] = tmppt;
-	}
-	for(i=0;i<int(s);i++)	{	fscanf(fp,"%d", &tmpi);	buf[i] = tmpi;	}
-	cur += s;
-	fclose(fp);		// finish wire normal font
-	numb = cur;
-	main_copy();	// copy normal style as default for other styles
-	return true;
-}
-//-----------------------------------------------------------------------------
 bool mglFont::read_def(unsigned &cur)
 {
 	numg = mgl_numg;	cur = mgl_cur;
@@ -655,6 +601,81 @@ bool mglFont::read_def(unsigned &cur)
 	return true;
 }
 //-----------------------------------------------------------------------------
+bool mglFont::read_data(const char *fname, float *ff, short *wdt, short *numl,
+						unsigned *posl, short *numt, unsigned *post, unsigned &cur)
+{
+	gzFile fp;
+	char str[256];
+	int tmpw, tmpnl, tmpnt;
+	unsigned s,n, tmpi, tmppl, tmppt;
+	register long i,j,ch;
+	fp = gzopen(fname,"r");	if(!fp)	return false;	// false if no file
+	// first string is comment (not used), second string have information
+	if(!gzgets(fp,str,256) || !gzgets(fp,str,256))
+	{	gzclose(fp);	return false;	}
+	sscanf(str, "%u%f%d", &n, ff, &s);
+	buf = (short *)realloc(buf, (cur+s)*sizeof(short));	// prealocate buffer
+	if(!buf)	{	gzclose(fp);	return false;	}
+
+	for(i=0;i<n;i++)
+	{
+		gzgets(fp,str,256);
+		sscanf(str,"%u%d%d%u%d%u", &tmpi, &tmpw, &tmpnl, &tmppl, &tmpnt, &tmppt);
+		j=Internal(unsigned(tmpi));	if(j<0)	continue;
+		if(wdt)	wdt[j] = tmpw;
+		numl[j] = tmpnl;	posl[j] = tmppl+cur;
+		numt[j] = tmpnt;	post[j] = tmppt+cur;
+	}
+	for(j=i=0;i<int(s);i++)
+	{
+		for(j=0;j<256;j++)
+		{	str[j] = ch = gzgetc(fp);	if(ch<=' ')	break;	}
+		buf[i+cur] = atoi(str);
+	}
+	cur += s;
+	gzclose(fp);		// finish wire normal font
+	return true;
+}
+//-----------------------------------------------------------------------------
+bool mglFont::read_main(const char *fname, unsigned &cur)
+{
+	gzFile fp;
+	int tmpi, tmpw, tmpnl, tmpnt;
+	unsigned s, tmppl, tmppt;
+	char str[256];
+
+	fp = gzopen(fname,"r");	if(!fp)	return false;	// this font must be in any case
+	// first string is comment (not used), second string have information
+	if(!gzgets(fp,str,256) || !gzgets(fp,str,256))
+	{	gzclose(fp);	return false;	}
+	sscanf(str, "%u%f%u", &numg, fact, &s);
+	fact[1] = fact[2] = fact[3] = fact[0];	// copy default factor for other font styles;
+	buf = (short *)malloc(s*sizeof(short));	// prealocate buffer
+	if(!buf)	{	gzclose(fp);	return false;	}
+	// now allocate memory for all fonts
+	mem_alloc();
+	// and load symbols itself
+	register long i,j,ch;
+	for(i=0;i<int(numg);i++)
+	{
+		gzgets(fp,str,256);
+		sscanf(str,"%u%d%d%u%d%u", &tmpi, &tmpw, &tmpnl, &tmppl, &tmpnt, &tmppt);
+		id[i] = tmpi;		width[0][i] = tmpw;
+		numl[0][i] = tmpnl; ln[0][i] = tmppl;
+		numt[0][i] = tmpnt;	tr[0][i] = tmppt;
+	}
+	for(j=i=0;i<int(s);i++)
+	{
+		for(j=0;j<256;j++)
+		{	str[j] = ch = gzgetc(fp);	if(ch<=' ')	break;	}
+		buf[i] = atoi(str);
+	}
+	gzclose(fp);	// finish wire normal font
+	cur += s;		numb = cur;
+	main_copy();	// copy normal style as default for other styles
+	return true;
+}
+//-----------------------------------------------------------------------------
 bool mglFont::Load(const char *base, const char *path)
 {
 //	base = 0;
@@ -662,7 +683,6 @@ bool mglFont::Load(const char *base, const char *path)
 #ifdef WIN32
 	sep='\\';
 #endif
-	FILE *fp;
 	char str[256];
 	setlocale(LC_NUMERIC,"C");
 	unsigned cur=0;
@@ -680,15 +700,14 @@ bool mglFont::Load(const char *base, const char *path)
 	}
 	Clear();							// first clear old
 
-	if(!base || !read_main(base,path,cur))
+	sprintf(str,"%s%c%s.vfm",path,sep,base);
+	if(!base || !read_main(str,cur))
 	{	read_def(cur);	if(buf)	delete []buf;	return true;	}
 
 	//================== bold ===========================================
-	sprintf(str,"%s%c%s_b.vfm",path,sep,base);
-	fp = fopen(str,"rt");
-	if(fp)		// this file may absent
+	sprintf(str,"%s%c%s_b.vfm",path,sep,base);	// this file may absent
+	if(read_data(str, fact+1, width[1], numl[1], ln[1], numt[1], tr[1], cur))
 	{
-		read_data(fp, fact+1, width[1], numl[1], ln[1], numt[1], tr[1], cur);
 		fact[3] = fact[1];		// copy default factor for bold-italic;
 		// copy normal style as default for other styles
 		memcpy(numl[3],numl[1],numg*sizeof(short));
@@ -700,13 +719,11 @@ bool mglFont::Load(const char *base, const char *path)
 
 	//================== italic =========================================
 	sprintf(str,"%s%c%s_i.vfm",path,sep,base);
-	fp = fopen(str,"rt");
-	if(fp)	read_data(fp, fact+2, width[2], numl[2], ln[2], numt[2], tr[2], cur);
+	read_data(str, fact+2, width[2], numl[2], ln[2], numt[2], tr[2], cur);
 
 	//================== bold-italic ====================================
 	sprintf(str,"%s%c%s_bi.vfm",path,sep,base);
-	fp = fopen(str,"rt");
-	if(fp)	read_data(fp, fact+3, width[3], numl[3], ln[3], numt[3], tr[3], cur);
+	read_data(str, fact+3, width[3], numl[3], ln[3], numt[3], tr[3], cur);
 	numb = cur;
 
 	// Finally normalize all factors
diff --git a/mgl/mgl_gl.cpp b/mgl/mgl_gl.cpp
index cffa91e..81abcd3 100644
--- a/mgl/mgl_gl.cpp
+++ b/mgl/mgl_gl.cpp
@@ -316,8 +316,8 @@ void mglGraphGL::line_plot(mreal *p1,mreal *p2,mreal *c1,mreal *c2,bool all)
 //-----------------------------------------------------------------------------
 void mglGraphGL::mark_plot(mreal *pp, char type)
 {
-	mreal x=pp[0],y=pp[1],z=pp[2], s=MarkSize*175*font_factor;	// 175 = 0.35*500
-	if(!ScalePoint(x,y,z))	return;
+	mreal x=pp[0],y=pp[1],z=pp[2], s=MarkSize*0.35*font_factor;	// 175 = 0.35*500
+//	if(!ScalePoint(x,y,z))	return;
 	Pen(NC,'-',BaseLineWidth);
 	glColor3f(CDef[0],CDef[1],CDef[2]);
 	if(type=='.')
@@ -360,6 +360,13 @@ void mglGraphGL::mark_plot(mreal *pp, char type)
 			glVertex3f(x-0.6*s,y-0.8*s,z);	glVertex3f(x+0.6*s,y+0.8*s,z);
 			glVertex3f(x+0.6*s,y-0.8*s,z);	glVertex3f(x-0.6*s,y+0.8*s,z);
 			glEnd();				break;
+		case 'Y':
+			glBegin(GL_LINES);
+			glVertex3f(x,y-s,z);			glVertex3f(x,y,z);
+			glVertex3f(x-0.8*s,y+0.6*s,z);	glVertex3f(x,y,z);
+			glVertex3f(x+0.8*s,y+0.6*s,z);	glVertex3f(x,y,z);
+			glEnd();				break;
+
 		case '^':
 			s = s*1.1;
 			glBegin(GL_LINE_LOOP);
@@ -369,7 +376,29 @@ void mglGraphGL::mark_plot(mreal *pp, char type)
 			s = s*1.1;
 			glBegin(GL_LINE_LOOP);
 			glVertex3f(x-s,y+s/2,z);	glVertex3f(x+s,y+s/2,z);
-			glVertex3f(x,y-s,z);		glEnd();		break;
+			glVertex3f(x,y-s,z);		glEnd();		break;
+
+		case 'R':
+			s = s*1.1;
+			glBegin(GL_TRIANGLES);
+			glVertex3f(x-s/2,y-s,z);	glVertex3f(x-s/2,y+s,z);
+			glVertex3f(x+s,y,z);		glEnd();		break;
+		case '>':
+			s = s*1.1;
+			glBegin(GL_LINE_LOOP);
+			glVertex3f(x-s/2,y-s,z);	glVertex3f(x-s/2,y+s,z);
+			glVertex3f(x+s,y,z);		glEnd();		break;
+		case 'L':
+			s = s*1.1;
+			glBegin(GL_TRIANGLES);
+			glVertex3f(x+s/2,y-s,z);	glVertex3f(x+s/2,y+s,z);
+			glVertex3f(x-s,y,z);		glEnd();		break;
+		case '<':
+			s = s*1.1;
+			glBegin(GL_LINE_LOOP);
+			glVertex3f(x+s/2,y-s,z);	glVertex3f(x+s/2,y+s,z);
+			glVertex3f(x-s,y,z);		glEnd();		break;
+
 		case 'S':
 			glBegin(GL_QUADS);
 			glVertex3f(x-s,y-s,z);		glVertex3f(x+s,y-s,z);
@@ -414,3 +443,69 @@ void mglGraphGL::InPlot(mreal x1,mreal x2,mreal y1,mreal y2,bool rel)
 	glTranslated(-0.5,-0.5,-0.5);
 }
 //-----------------------------------------------------------------------------
+void mglGraphGL::Glyph(mreal x, mreal y, mreal f, int s, long j, char col)
+{
+	int ss=s&3;
+	mreal p[12];
+	f /= fnt->GetFact(ss);
+	mglColor cc = mglColor(col);
+	if(!cc.Valid())	cc = mglColor(CDef[0],CDef[1],CDef[2]);
+	glColor4f(cc.r,cc.g,cc.b,CDef[3]);
+	if(s&8)
+	{
+		mreal dy = 0.004;
+		if(s&4)	glBegin(GL_LINE_LOOP);
+		else	glBegin(GL_QUADS);
+		p[2]=p[5]=p[8]=p[11]=0;
+		p[0]=p[6]=x;			p[1]=p[4] =y+dy;
+		p[3]=p[9]=fabs(f)+x;	p[7]=p[10]=y-dy;
+		PostScale(p,4);
+		glVertex3f(p[0],p[1],p[2]);		glVertex3f(p[3],p[4],p[5]);
+		glVertex3f(p[9],p[10],p[11]);	glVertex3f(p[6],p[7],p[8]);
+		glEnd();
+	}
+	else if(s&4)
+	{
+		const short *line = fnt->GetLn(ss,j);
+		long ik,ii,il=0, nl=fnt->GetNl(ss,j);
+		if(!line || nl<=0)	return;
+		glBegin(GL_LINES);
+		for(ik=0;ik<nl;ik++)
+		{
+			ii = 2*ik;
+			if(line[ii]==0x3fff && line[ii+1]==0x3fff)	// line breakthrough
+			{	il = ik+1;	continue;	}
+			else if(ik==nl-1 || (line[ii+2]==0x3fff && line[ii+3]==0x3fff))
+			{	// enclose the circle. May be in future this block should be commented
+				p[0]=f*line[ii]+x;	p[1]=f*line[ii+1]+y;	p[2]=0;	ii=2*il;
+				p[3]=f*line[ii]+x;	p[4]=f*line[ii+1]+y;	p[5]=0;
+			}
+			else
+			{	// normal line
+				p[0]=f*line[ii]+x;	p[1]=f*line[ii+1]+y;	p[2]=0;	ii+=2;
+				p[3]=f*line[ii]+x;	p[4]=f*line[ii+1]+y;	p[5]=0;
+			}
+			PostScale(p,2);
+			glVertex3f(p[0],p[1],p[2]);	glVertex3f(p[3],p[4],p[5]);
+		}
+		glEnd();
+	}
+	else
+	{
+		const short *trig = fnt->GetTr(ss,j);
+		register long ik,ii, nt=fnt->GetNt(ss,j);
+		if(!trig || nt<=0)	return;
+		glBegin(GL_TRIANGLES);
+		for(ik=0;ik<nt;ik++)
+		{
+			ii = 6*ik;	p[0]=f*trig[ii]+x;	p[1]=f*trig[ii+1]+y;	p[2]=0;
+			ii+=2;		p[3]=f*trig[ii]+x;	p[4]=f*trig[ii+1]+y;	p[5]=0;
+			ii+=2;		p[6]=f*trig[ii]+x;	p[7]=f*trig[ii+1]+y;	p[8]=0;
+			PostScale(p,3);
+			glVertex3f(p[0],p[1],p[2]);	glVertex3f(p[3],p[4],p[5]);
+			glVertex3f(p[6],p[7],p[8]);
+		}
+		glEnd();
+	}
+}
+//-----------------------------------------------------------------------------
diff --git a/mgl/mgl_io.cpp b/mgl/mgl_io.cpp
deleted file mode 100644
index 22143f4..0000000
--- a/mgl/mgl_io.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-/***************************************************************************
- * mgl_io.cpp is part of Math Graphic Library
- * Copyright (C) 2007 Alexey Balakin <balakin at appl.sci-nnov.ru>            *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU Library General Public License as       *
- *   published by the Free Software Foundation; either version 3 of the    *
- *   License, or (at your option) any later version.                       *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU Library General Public     *
- *   License along with this program; if not, write to the                 *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
- ***************************************************************************/
-#include<string.h>
-#include<stdio.h>
-#include<vector>
-#include<mgl/mgl_io.h>
-
-#ifdef WITH_LTDL
-#include<ltdl.h>
-#endif
-
-// Maximum number or registered handlers
-#define MAXCOUNT		255
-
-// Return Codes
-#define	IO_OK				0
-#define IO_TOO_MANY_HANDLERS		1
-#define IO_SAVE_LOAD_PTRS_DIFFER	2
-#define IO_COUNTER_ERROR		3
-#define IO_CANT_SET_SEARCH_PATH		4
-#define IO_CANT_FIND_MODULE		5
-#define IO_LOAD_HANDLER_NOTFOUND	6
-#define IO_SAVE_HANDLER_NOTFOUND	7
-#define IO_UNLOAD_MODULE		8
-#define IO_UNKNOWN_HANDLERS		9
-#define IO_SAVE_ERROR			10
-#define IO_LOAD_ERROR			10
-
-int mgl_bmp_save(const char *fname, int w, int h, unsigned char **p);
-int mgl_png_save(const char *fname, int w, int h, unsigned char **p);
-int mgl_pnga_save(const char *fname, int w, int h, unsigned char **p);
-int mgl_png_load(const char *fname, mgl_save func);
-//----------------------------------------------------------------------------
-int mglIO::pRegister(const char *nDesc, int cExt, const char **type, mgl_load nptrLoad, mgl_save nptrSave, void* nltHandle, const char *nModuleName)
-{
-	mglModule temp;
-	temp.Desc=nDesc;
-	temp.countExt=cExt;
-	temp.Ext=type;
-	temp.ptrLoad=nptrLoad;
-	temp.ptrSave=nptrSave;
-	temp.ltHandle=nltHandle;
-	temp.Name=nModuleName;
-	mymod.push_back(temp);
-	return IO_OK;
-}
-//----------------------------------------------------------------------------
-int mglIO::Register(const char *nDesc, const int cExt, const char **type,
-	mgl_load nptrLoad, mgl_save nptrSave, const char *nModuleName)
-{
-	return pRegister(nDesc,cExt,type,nptrLoad,nptrSave,NULL,nModuleName);
-}
-//----------------------------------------------------------------------------
-#ifdef WITH_LTDL
-int mglIO::Register(const char *nDesc, int cExt, const char **type,
-	const char *nModuleName, const char *Path)
-{
-	lt_dlhandle module=NULL;
-	mgl_load nptrLoad;
-	mgl_save nptrSave;
-	lt_dlinit();
-	if(strlen(Path)!=0){
-		if(lt_dladdsearchdir(Path)!=0){
-//			printf("path %s\n",lt_dlgetsearchpath());
-			return IO_CANT_SET_SEARCH_PATH;
-		}
-	}
-	module=lt_dlopenext(nModuleName);
-	if(module==NULL)
-		return IO_CANT_FIND_MODULE;
-	nptrSave=(mgl_save)lt_dlsym(module, "save");
-	if(nptrSave==NULL){
-//		printf("save not found\n");
-		lt_dlclose(module);
-		return IO_SAVE_HANDLER_NOTFOUND;
-	}
-	nptrLoad=(mgl_load)lt_dlsym(module, "load");
-	if(nptrLoad==NULL){
-		lt_dlclose(module);
-		return IO_LOAD_HANDLER_NOTFOUND;
-	}
-	return pRegister(nDesc,cExt,type,nptrLoad,nptrSave,(void*)module,nModuleName);
-}
-#endif
-//----------------------------------------------------------------------------
-int mglIO::punRegister(int offset)
-{
-	if(mymod.size()==0)
-	    return IO_COUNTER_ERROR;
-	if(mymod[offset].ltHandle!=NULL){
-#ifdef WITH_LTDL
-		if(!lt_dlclose((lt_dlhandle)(mymod[offset].ltHandle)))
-		{
-#endif
-			return IO_UNLOAD_MODULE;
-#ifdef WITH_LTDL
-		}
-		lt_dlexit();}
-#endif
-	delete[] mymod[offset].Ext;
-	mymod.erase(mymod.begin()+offset);
-	return IO_OK;
-}
-//----------------------------------------------------------------------------
-int mglIO::unRegister(mgl_load nptrLoad, mgl_save nptrSave)
-{
-	int posLoad=-1;
-	int posSave=-1;
-	for(unsigned int i=0; i<mymod.size(); i++)
-		if(mymod[i].ptrLoad==nptrLoad)
-			posLoad=i;
-	for(unsigned int i=0; i<mymod.size(); i++)
-		if(mymod[i].ptrSave==nptrSave)
-			posSave=i;
-	if(posSave!=posLoad)
-		return IO_SAVE_LOAD_PTRS_DIFFER;
-	if(posLoad==-1)
-		return IO_UNKNOWN_HANDLERS;
-	return punRegister(posLoad);
-}
-//----------------------------------------------------------------------------
-int mglIO::unRegister(const char *nModuleName)
-{
-	int offset=-1;
-	for(unsigned int i=0;i<mymod.size(); i++)
-		if(!strcmp(mymod[i].Name,nModuleName))
-			offset=i;
-	if(offset==-1)
-		return IO_UNKNOWN_HANDLERS;
-	return punRegister(offset);
-}
-//----------------------------------------------------------------------------
-int sample_save(const char *fname, int w,int h, unsigned char **p)
-{
-	printf("Sample save called\n");
-	return 0;
-}
-//----------------------------------------------------------------------------
-int sample_load(const char *fname, void (*func)(void*,int,int,const unsigned char **), void *par)
-{
-	printf("Sample load called\n");
-	return 0;
-}
-//----------------------------------------------------------------------------
-mglIO::mglIO(void)
-{
-	const char *Ext1="sml";
-	const char *Ext2="sample";
-	const char **type=new const char*[2];
-	type[0]=Ext1; type[1]=Ext2;
-	Register("Sample data type", 2, type, &sample_save, &sample_load,"sample");
-}
-//----------------------------------------------------------------------------
-mglIO::~mglIO()
-{
-	unRegister("sample");
-	for(unsigned int i=0;i<mymod.size();i++)
-		punRegister(i);
-}
-//----------------------------------------------------------------------------
-int mglIO::Save(const char *type, const char *fname, int w, int h, unsigned char **p) const
-{
-	ptrFunc* func;
-	for(unsigned int i=0;i<mymod.size();i++)
-		for(int j=0;j<mymod[i].countExt;j++)
-			if(!strcmp(mymod[i].Ext[j],type)){
-				func=mymod[i].ptrSave;
-				return (*func)(fname,w,h,p);
-			}
-	return IO_SAVE_ERROR;
-}
-//----------------------------------------------------------------------------
-int mglIO::Load(const char *type, const char *fname, int w, int h, unsigned char **p) const
-{
-	ptrFunc* func;
-	for(unsigned int i=0;i<mymod.size();i++)
-		for(int j=0;j<mymod[i].countExt;j++)
-			if(!strcmp(mymod[i].Ext[j],type))
-			{
-				func=mymod[i].ptrLoad;
-				return (*func)(fname,w,h,p);
-			}
-	return IO_LOAD_ERROR;
-}
-//----------------------------------------------------------------------------
-int mgl_pnga_save(const char *fname, int w, int h, unsigned char **p)
-{
-	FILE *fp = fopen(fname, "wb");
-	if (!fp)	return 1;
-
-	png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,0,0,0);
-	if (!png_ptr)	return 1;
-	png_infop info_ptr = png_create_info_struct(png_ptr);
-	if (!info_ptr)
-	{	png_destroy_write_struct(&png_ptr,0);	return 1;	}
-
-	png_init_io(png_ptr, fp);
-	png_set_filter(png_ptr, 0, PNG_ALL_FILTERS);
-	png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
-	png_set_IHDR(png_ptr, info_ptr, w, h, 8,
-				PNG_COLOR_TYPE_RGB_ALPHA,
-				PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
-				PNG_FILTER_TYPE_DEFAULT);
-	png_set_rows(png_ptr, info_ptr, p);
-	png_write_png(png_ptr, info_ptr,  PNG_TRANSFORM_IDENTITY, 0);
-	png_write_end(png_ptr, info_ptr);
-
-	png_destroy_write_struct(&png_ptr, &info_ptr);
-	fclose(fp);
-	return 0;
-}
-//-----------------------------------------------------------------------------
-int mgl_png_save(const char *fname, int w, int h, unsigned char **p)
-{
-	FILE *fp = fopen(fname, "wb");
-	if (!fp)	return 1;
-
-	png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,0,0,0);
-	if (!png_ptr)	return 1;
-	png_infop info_ptr = png_create_info_struct(png_ptr);
-	if (!info_ptr)
-	{	png_destroy_write_struct(&png_ptr,0);	return 1;	}
-
-	png_init_io(png_ptr, fp);
-	png_set_filter(png_ptr, 0, PNG_ALL_FILTERS);
-	png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
-	png_set_IHDR(png_ptr, info_ptr, w, h, 8,
-				PNG_COLOR_TYPE_RGB,
-				PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
-				PNG_FILTER_TYPE_DEFAULT);
-	png_set_rows(png_ptr, info_ptr, p);
-	png_write_png(png_ptr, info_ptr,  PNG_TRANSFORM_IDENTITY, 0);
-	png_write_end(png_ptr, info_ptr);
-
-	png_destroy_write_struct(&png_ptr, &info_ptr);
-	fclose(fp);
-	return 0;
-}
-//-----------------------------------------------------------------------------
-int mgl_bmp_save(const char *fname, int w, int h, unsigned char **p)
-{
-	FILE *fp = fopen(fname,"wb");
-	if (!fp)	return 1;
-
-	char z[4] = {0,0,0,0};
-	unsigned u = w*h*3 + 54;
-	// BITMAPFILEHEADER
-	fwrite("BM",2,1,fp);	fwrite(&u,4,1,fp);
-	fwrite(z,4,1,fp);	u=54;	fwrite(&u,4,1,fp);
-	// BITMAPINFOHEADER
-	u=40;	fwrite(&u,4,1,fp);	fwrite(&(w),4,1,fp);	fwrite(&(h),4,1,fp);
-	unsigned short pp=1;
-	fwrite(&pp,2,1,fp);	pp=24;	fwrite(&pp,2,1,fp);	u = w*h*3;
-	fwrite(z,4,1,fp);	fwrite(&u,4,1,fp);
-	fwrite(z,4,1,fp);	fwrite(z,4,1,fp);
-	fwrite(z,4,1,fp);	fwrite(z,4,1,fp);
-	// image
-//	for(int i=h-1;i>=0;i--)	fwrite(p[i],3*w,1,fp);
-	register int i,j;
-	for(i=h-1;i>=0;i--)	for(j=0;j<w;j++)
-	{
-		fwrite(p[i]+3*j+2,1,1,fp);
-		fwrite(p[i]+3*j+1,1,1,fp);
-		fwrite(p[i]+3*j+0,1,1,fp);
-	}
-	fclose(fp);
-	return 0;
-}
-//-----------------------------------------------------------------------------
-void mgl_png_load(const char *fname, void (*func)(void*,int,int,const unsigned char **), void *par)
-{
-	FILE *fp = fopen(fname, "rb");
-	if (!fp)	return;
-	png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
-	if (!png_ptr)	return;
-	png_infop info_ptr = png_create_info_struct(png_ptr);
-	if (!info_ptr)
-	{	png_destroy_read_struct(&png_ptr,0, 0);	return;	}
-	png_infop end_info = png_create_info_struct(png_ptr);
-	if (!end_info)
-	{	png_destroy_read_struct(&png_ptr, &info_ptr, 0);	return;	}
-
-	png_init_io(png_ptr, fp);
-	png_read_png(png_ptr, info_ptr,
-		PNG_TRANSFORM_STRIP_ALPHA|PNG_TRANSFORM_PACKING|
-		PNG_TRANSFORM_STRIP_16|PNG_TRANSFORM_EXPAND,0);
-	unsigned char **rows = png_get_rows(png_ptr, info_ptr);
-
-	long w=png_get_image_width(png_ptr, info_ptr);
-	long h=png_get_image_height(png_ptr, info_ptr);
-	func(par, w, h, rows);
-
-	png_destroy_read_struct(&png_ptr, &info_ptr,&end_info);
-	fclose(fp);
-}
-//-----------------------------------------------------------------------------
diff --git a/mgl/mgl_main.cpp b/mgl/mgl_main.cpp
index d0fdf72..eeeac50 100644
--- a/mgl/mgl_main.cpp
+++ b/mgl/mgl_main.cpp
@@ -28,11 +28,6 @@
 #include <wchar.h>
 #include "mgl/mgl.h"
 #include "mgl/mgl_eval.h"
-#ifndef MGL_DEF_VIEWER
-//#define MGL_DEF_VIEWER "kuickshow"
-#define MGL_DEF_VIEWER "gthumb"
-//#define MGL_DEF_VIEWER "gwenview";
-#endif
 //-----------------------------------------------------------------------------
 const char *mglWarn[mglWarnEnd] = {"%s: data dimension(s) is incompatible",
 								"%s: data dimension(s) is too small",
@@ -240,7 +235,7 @@ void mglGraph::SetScheme(const char *s, bool face)
 	if(s[0]==0)	return;
 	strcpy(last_style, s);
 	NumCol = 0;
-	for(i=0;i<NUM_COLOR;i++)	cmap[i] = NC;
+	for(i=0;i<MGL_CMAP_COLOR;i++)	cmap[i] = NC;
 	cmap[0] = mglColor(0,0,0);	cmap[1] = mglColor(1,1,1);
 	OnCoord = false;	SmoothColorbar = true;
 	for(i=0;i<strlen(s);i++)
@@ -254,7 +249,7 @@ void mglGraph::SetScheme(const char *s, bool face)
 			{	cmap[NumCol].Set(s[i],(s[i+1]-'0')/5.f);	i++;	}
 			else	cmap[NumCol].Set(s[i]);
 			NumCol++;
-			if(NumCol>=NUM_COLOR)	break;
+			if(NumCol>=MGL_CMAP_COLOR)	break;
 		}
 		else
 		{
@@ -263,7 +258,7 @@ void mglGraph::SetScheme(const char *s, bool face)
 			{
 				cmap[NumCol].Set(s[i]);
 				NumCol++;
-				if(NumCol>=NUM_COLOR)	break;
+				if(NumCol>=MGL_CMAP_COLOR)	break;
 			}
 		}
 	}
@@ -420,8 +415,8 @@ char mglGraph::SelectPen(const char *p)
 	{
 //		strcpy(last_style, p);
 		const char *col = "wkrgbcymhRGBCYMHWlenuqpLENUQP";
-		const char *stl = " -|;:ji";
-		const char *mrk = "*o+xsd.^v";
+		const char *stl = " -|;:ji=";
+		const char *mrk = "*o+xsd.^v<>";
 		const char *wdh = "123456789";
 		const char *arr = "AKDTVISO_";
 		for(unsigned i=0;i<strlen(p);i++)
@@ -443,11 +438,17 @@ char mglGraph::SelectPen(const char *p)
 		}
 		if(strchr(p,'#'))
 		{
+			if(mk=='.')	mk = 'C';
+			if(mk=='+')	mk = 'P';
+			if(mk=='x')	mk = 'X';
 			if(mk=='o')	mk = 'O';
 			if(mk=='d')	mk = 'D';
 			if(mk=='s')	mk = 'S';
 			if(mk=='^')	mk = 'T';
 			if(mk=='v')	mk = 'V';
+			if(mk=='<')	mk = 'L';
+			if(mk=='>')	mk = 'R';
+			if(mk=='*')	mk = 'Y';
 		}
 	}
 	Pen(c, st, BaseLineWidth*w);
@@ -458,7 +459,8 @@ char mglGraph::SelectPen(const char *p)
 //-----------------------------------------------------------------------------
 void mglGraph::SetPal(const char *colors)
 {
-	if(!colors || !colors[0])	colors = DefPal;	// restore default
+	if(!colors || !colors[0])	// restore default if only 1 color
+	{	if(NumPal<2)	colors = DefPal;	else	return;	}
 	memset(Pal,0,100*sizeof(mglColor));
 	memset(PalNames,0,101*sizeof(char));
 	int i,n = strlen(colors),k;
@@ -469,7 +471,7 @@ void mglGraph::SetPal(const char *colors)
 		PalNames[k] = colors[i];	Pal[k] = mglColor(colors[i]);	k++;
 	}
 	NumPal = k;	//	CurrPal = 0;
-	if(k==0)	SetPal(0);	// if no colors then set default palette
+	if(k<1)	SetPal(0);	// if no colors then set default palette
 }
 //-----------------------------------------------------------------------------
 mglColor mglGraph::GetPal()
@@ -489,7 +491,35 @@ void mglGraph::SubPlot(int nx,int ny,int m, mreal dx, mreal dy)
 	else	{	dx /= 2;	dy /= 2;	}
 	x1 = (mx+dx)/nx;		x2 = (mx+1+dx)/nx;
 	y2 = 1.f-(my+dy)/ny;	y1 = 1.f-(my+1+dy)/ny;
-	InPlot(x1,x2,y1,y2);
+	InPlot(x1,x2,y1,y2,false);
+}
+//-----------------------------------------------------------------------------
+void mglGraph::SubPlot(int nx,int ny,int m, const char *style)
+{
+	mreal x1,x2,y1,y2;
+	int mx = m%nx, my = m/nx;
+	x1 = float(mx)/nx;		x2 = float(mx+1)/nx;
+	y2 = 1.f-float(my)/ny;	y1 = 1.f-float(my+1)/ny;
+	InPlot(x1,x2,y1,y2,style);
+}
+//-----------------------------------------------------------------------------
+void mglGraph::InPlot(mreal x1,mreal x2,mreal y1,mreal y2, const char *st)
+{
+	if(!st)		{	InPlot(x1,x2,y1,y2,false);	return;	}
+	if(strchr(st,'T'))	{	y1*=0.9;	y2*=0.9;	}	// general title
+	bool r = !(strchr(st,'r') || strchr(st,'R') || strchr(st,'>') || strchr(st,'g'));
+	bool l = !(strchr(st,'l') || strchr(st,'L') || strchr(st,'<') || strchr(st,'g'));
+	bool u = !(strchr(st,'u') || strchr(st,'U') || strchr(st,'_') || strchr(st,'g'));
+	bool a = !(strchr(st,'a') || strchr(st,'A') || strchr(st,'^') || strchr(st,'g') || strchr(st,'t'));
+	// let use simplified scheme -- i.e. no differences between axis, colorbar and/or title
+	register mreal xs=(x1+x2)/2, ys=(y1+y2)/2, f1 = 1.3, f2 = 1.1;
+	if(r && l)	{	x2=xs+(x2-xs)*f1;	x1=xs+(x1-xs)*f1;	}
+	else if(r)	{	x2=xs+(x2-xs)*f1;	x1=xs+(x1-xs)*f2;	}
+	else if(l)	{	x2=xs+(x2-xs)*f2;	x1=xs+(x1-xs)*f1;	}
+	if(a && u)	{	y2=ys+(y2-ys)*f1;	y1=ys+(y1-ys)*f1;	}
+	else if(a)	{	y2=ys+(y2-ys)*f1;	y1=ys+(y1-ys)*f2;	}
+	else if(u)	{	y2=ys+(y2-ys)*f2;	y1=ys+(y1-ys)*f1;	}
+	InPlot(x1,x2,y1,y2,false);
 }
 //-----------------------------------------------------------------------------
 void mglGraph::Printf(mglPoint p,const char *str,...)
@@ -556,8 +586,9 @@ void mglGraph::ClearEq()
 //-----------------------------------------------------------------------------
 void mglGraph::DefaultPlotParam()
 {
+	LegendMarks = 1;
 	FontSize = 5;			BaseLineWidth = 1;
-	Ambient();				Ternary(false);
+	Ambient();				Ternary(0);
 	PlotId = "frame";		SelectPen("k-1");
 	SetScheme("BbcyrR");	SetPalette(MGL_DEF_PAL);
 	SetTicks('x');	SetTicks('y');	SetTicks('z');	SetTicks('c');
@@ -587,7 +618,7 @@ void mglGraph::DefaultPlotParam()
 	for(int i=0;i<10;i++)
 	{	Light(i, mglPoint(0,0,1));	Light(i,false);	}
 	Light(0,true);		Light(false);
-	InPlot(0,1,0,1);	Zoom(0,0,1,1);
+	InPlot(0,1,0,1,false);	Zoom(0,0,1,1);
 }
 //-----------------------------------------------------------------------------
 void mglGraph::SetTickStl(const char *stl, const char *sub)
@@ -848,12 +879,12 @@ void mglGraph::SetFont(mglFont *f)
 //-----------------------------------------------------------------------------
 void mglGraph::Title(const wchar_t *str,const char *font,mreal size)
 {
-	Identity();
+	Push();	Identity();
 	mglFormula *ox=fx, *oy=fy, *oz=fz;
 	fx = fy = fz = NULL;
 	Text(mglPoint((Min.x+Max.x)*0.5, Max.y+(Max.y-Min.y)*0.15, (Min.z+Max.z)*0.5), str, font, size);
 	fx=ox;	fy=oy;	fz=oz;
-	RestoreM();
+	Pop();
 }
 //-----------------------------------------------------------------------------
 void mglGraph::Title(const char *str,const char *font,mreal size)
@@ -867,7 +898,7 @@ void mglGraph::Title(const char *str,const char *font,mreal size)
 //-----------------------------------------------------------------------------
 void mglGraph::Labelw(mreal x, mreal y, const wchar_t *text, const char *fnt, mreal size, bool rel)
 {
-	Identity(rel);
+	Push();	Identity(rel);
 	mglFormula *ox=fx, *oy=fy, *oz=fz;
 	fx = fy = fz = NULL;
 	char *f = new char[strlen(fnt)+1];
@@ -878,7 +909,7 @@ void mglGraph::Labelw(mreal x, mreal y, const wchar_t *text, const char *fnt, mr
 				Max.z), text, f, size);
 	delete []f;
 	fx=ox;	fy=oy;	fz=oz;
-	RestoreM();
+	Pop();
 }
 //-----------------------------------------------------------------------------
 void mglGraph::Label(mreal x, mreal y, const char *str, const char *fnt, mreal size, bool rel)
@@ -1039,7 +1070,7 @@ void mglGraph::ShowImage(const char *viewer, bool keep)
 	if(keep)
 	{
 		sprintf(cmd,"%s %s &", viewer,fname);
-		system(cmd);
+		if(system(cmd)==-1)	printf("Error to call external viewer\n");
 #ifdef WIN32
 //		sleep(2);
 		sprintf(cmd,"del %s", fname);
@@ -1053,7 +1084,7 @@ void mglGraph::ShowImage(const char *viewer, bool keep)
 	else
 		sprintf(cmd,"%s %s; rm %s", viewer,fname,fname);
 #endif
-	system(cmd);
+	if(system(cmd)==-1)	printf("Error to call external viewer\n");
 	delete []cmd;
 }
 //-----------------------------------------------------------------------------
@@ -1074,11 +1105,26 @@ void mglGraph::SetAutoRanges(mreal x1, mreal x2, mreal y1, mreal y2, mreal z1, m
 void mglGraph::Colorbar(const char *sch,int where)
 {
 	SetScheme(sch);
+	// ‘0’ - right, ‘1’ - left, ‘2’ - above, ‘3’ - under
+	if(sch && strchr(sch,'>'))	where = 0;
+	if(sch && strchr(sch,'<'))	where = 1;
+	if(sch && strchr(sch,'^'))	where = 2;
+	if(sch && strchr(sch,'_'))	where = 3;
+	if(sch && strchr(sch,'A'))	{	Push();	Identity();	}
 	Colorbar(where, where==0?1:0, where==2?1:0, 1, 1);
+	if(sch && strchr(sch,'A'))	Pop();
 }
 //-----------------------------------------------------------------------------
 void mglGraph::Colorbar(const mglData &v, const char *sch,int where)
-{	Colorbar(v,sch,where, where==0?1:0, where==2?1:0, 1, 1);	}
+{
+	if(sch && strchr(sch,'>'))	where = 0;
+	if(sch && strchr(sch,'<'))	where = 1;
+	if(sch && strchr(sch,'^'))	where = 2;
+	if(sch && strchr(sch,'_'))	where = 3;
+	if(sch && strchr(sch,'A'))	{	Push();	Identity();	}
+	Colorbar(v,sch,where, where==0?1:0, where==2?1:0, 1, 1);
+	if(sch && strchr(sch,'A'))	Pop();
+}
 //-----------------------------------------------------------------------------
 void mglGraph::Colorbar(int where, mreal x, mreal y, mreal w, mreal h)
 {
@@ -1107,11 +1153,11 @@ void mglGraph::Colorbar(const mglData &v, const char *sch, int where, mreal x, m
 	delete []c;
 }
 //-----------------------------------------------------------------------------
-void mglGraph::ColumnPlot(int num, int i)
+void mglGraph::ColumnPlot(int num, int i, mreal dd)
 {
 	mreal d = i/(num+PlotFactor-1);
 	mreal w = PlotFactor/(num+PlotFactor-1);
-	InPlot(0,1,d,d+w,true);
+	InPlot(0,1,d,d+w*(1-dd),true);
 }
 //-----------------------------------------------------------------------------
 void mglGraph::SetCoor(int how)
diff --git a/mgl/mgl_parse.cpp b/mgl/mgl_parse.cpp
index e50c6c2..5443add 100644
--- a/mgl/mgl_parse.cpp
+++ b/mgl/mgl_parse.cpp
@@ -35,6 +35,41 @@ wchar_t *wcstokw32(wchar_t *wcs, const wchar_t *delim)	{	return wcstok(wcs,delim
 
 wchar_t *mgl_wcsdup(const wchar_t *s);
 //-----------------------------------------------------------------------------
+mglFunc::mglFunc(long p, const wchar_t *f, mglFunc *prev)
+{
+	pos = p;	next = prev;
+	register long i;
+	for(i=0;(isalnum(f[i]) || f[i]=='_') && i<31;i++)	func[i]=f[i];
+	func[i]=0;
+	narg = wcstol(f+i+1,0,0);
+	if(narg<0 || narg>9)	narg=0;
+}
+//-----------------------------------------------------------------------------
+long mglParse::IsFunc(const wchar_t *name, int *na)
+{
+	mglFunc *f=func;
+	while(f)
+	{
+		if(!wcscmp(name,f->func))
+		{	if(na)	*na=f->narg;	return f->pos;	}
+		f = f->next;
+	}
+	return 0;
+}
+//-----------------------------------------------------------------------------
+void mglParse::ScanFunc(const wchar_t *line)
+{
+	static long num=0;
+	if(!line)
+	{	if(func)	delete func;
+		num=0;	func=0;	return;	}
+	num++;
+	if(wcsncmp(line,L"func",4) || line[4]>' ')	return;
+	register long i;
+	for(i=4;line[i]<=' ' || line[i]=='\'';i++);
+	func = new mglFunc(num-1, line+i, func);
+}
+//-----------------------------------------------------------------------------
 void mgl_wcstrim(wchar_t *str)
 {
 	wchar_t *c = mgl_wcsdup(str);
@@ -160,7 +195,7 @@ mglParse::mglParse(bool setsize)
 	AllowSetSize=setsize;
 	Once = true;	parlen=320;
 	op1 = new wchar_t[4096];	op2 = new wchar_t[4096];
-	fval = new mglData[10];
+	fval = new mglData[40];
 }
 //-----------------------------------------------------------------------------
 mglParse::~mglParse()
@@ -170,9 +205,10 @@ mglParse::~mglParse()
 		while(DataList->next)	delete DataList->next;
 		delete DataList;
 	}
-	for(long i=0;i<10;i++)	if(par[i])	delete [] par[i];
+	for(long i=0;i<40;i++)	if(par[i])	delete []par[i];
 	delete []op1;	delete []op2;	delete []fval;
 	if(Cmd!=mgls_base_cmd)	delete []Cmd;
+	if(fn_stack)	free(fn_stack);
 }
 //-----------------------------------------------------------------------------
 bool mglParse::AddParam(int n, const char *str, bool isstr)
@@ -235,7 +271,7 @@ mglNum *mglParse::FindNum(const char *str)
 //-----------------------------------------------------------------------------
 bool mglParse::AddParam(int n, const wchar_t *str, bool isstr)
 {
-	if(n<0 || n>9 || wcschr(str,'$'))	return false;
+	if(n<0 || n>39 || wcschr(str,'$'))	return false;
 	if(!isstr)	parlen += wcslen(str);
 	if(par[n])	delete []par[n];
 	par[n] = new wchar_t[wcslen(str)+1];
@@ -474,11 +510,32 @@ int mglParse::PreExec(mglGraph *, long k, wchar_t **arg, mglArg *a)
 	return n;
 }
 //-----------------------------------------------------------------------------
+void mglParse::PutArg(const wchar_t *string, wchar_t *str, bool def)
+{
+	if(parlen>0)
+	{
+		wchar_t *sb = new wchar_t[wcslen(string)+1], *t;
+		if(def)	str = str+10;
+		register long n;
+		while((t=wcschr(str,'$'))!=0)
+		{
+			wcscpy(sb,t+2);
+			t[0]=0;
+			n = t[1]-'0';	if(n>=0 && n<=9 && par[n])	wcscat(str,par[n]);
+			n = t[1]-'a';	if(n>=0 && n<='z'-'a' && par[n+10])	wcscat(str,par[n+10]);
+			if(t[1]=='$')	wcscat(str,L"\xffff");
+			wcscat(str,sb);
+		}
+		delete []sb;
+		while((t=wcschr(str,L'\xffff'))!=0)	*t='$';
+	}
+}
+//-----------------------------------------------------------------------------
 // return values: 0 - OK, 1 - wrong arguments, 2 - wrong command, 3 - string too long, 4 -- unclosed string
 int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 {
 	if(!gr || Stop)	return 0;
-	wchar_t *str, *s = new wchar_t[wcslen(string)+1+parlen],*arg[1024],*t;
+	wchar_t *str, *s = new wchar_t[wcslen(string)+1+40*parlen],*arg[1024],*t;
 	str = s;
 	wcscpy(str,string);
 	wcstrim_mgl(str);
@@ -499,13 +556,13 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 		}
 	}
 	// check if string is closed
-	for(n=1,k=0;n<long(wcslen(str));n++)
-		if(str[n]=='\'' && str[n-1]!='\\')	k++;
+	for(n=1,k=0;n<long(wcslen(str));n++)	if(str[n]=='\'' && str[n-1]!='\\')	k++;
 	if(k%2)	return 4;	// strings is not closed
 	// define parameters or start cycle
 	if(!skip() && !wcsncmp(str,L"def",3) && (str[6]==' ' || str[6]=='\t'))
 	{
-		if(!skip() && !wcsncmp(str+3,L"ine",3) && (str[6]==' ' || str[6]=='\t'))
+		PutArg(string,str,true);
+		if(!wcsncmp(str+3,L"ine",3))
 		{
 			wchar_t *ss=str+7;	wcstrim_mgl(ss);//	int res = 1;
 			if(*ss=='$' && ss[1]>='0' && ss[1]<='9')
@@ -515,8 +572,15 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 				AddParam(n, ss);
 				delete []s;	return 0;
 			}
+			if(*ss=='$' && ss[1]>='a' && ss[1]<='z')
+			{
+				int n=ss[1]-'a';//	res = 0;
+				ss +=2;	mgl_wcstrim(ss);
+				AddParam(n+10, ss);
+				delete []s;	return 0;
+			}
 		}
-		if(!skip() && !wcsncmp(str+3,L"num",3) && (str[6]==' ' || str[6]=='\t'))
+		if(!wcsncmp(str+3,L"num",3))
 		{
 			str += 7;	wcstrim_mgl(str);	int res = 1;
 			if(*str=='$' && str[1]>='0' && str[1]<='9')
@@ -529,9 +593,19 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 				AddParam(n, buf);
 				delete []buf;
 			}
+			if(*str=='$' && str[1]>='a' && str[1]<='z')
+			{
+				int n=str[1]-'a';	res = 0;
+				str +=2;	mgl_wcstrim(str);
+				const mglData &d=mglFormulaCalc(str, this);
+				char *buf=new char[128];
+				sprintf(buf,"%g",d.a[0]);
+				AddParam(n+10, buf);
+				delete []buf;
+			}
 			delete []s;		return res;
 		}
-		if(!skip() && !wcsncmp(str+3,L"chr",3) && (str[6]==' ' || str[6]=='\t'))
+		if(!wcsncmp(str+3,L"chr",3))
 		{
 			str += 7;	wcstrim_mgl(str);	int res = 1;
 			if(*str=='$' && str[1]>='0' && str[1]<='9')
@@ -542,9 +616,17 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 				wchar_t buf[2]={0,0};	buf[0] = wchar_t(d.a[0]);
 				AddParam(n, buf);
 			}
+			if(*str=='$' && str[1]>='a' && str[1]<='z')
+			{
+				int n=str[1]-'a';	res = 0;
+				str +=2;	mgl_wcstrim(str);
+				const mglData &d=mglFormulaCalc(str, this);
+				wchar_t buf[2]={0,0};	buf[0] = wchar_t(d.a[0]);
+				AddParam(n+10, buf);
+			}
 			delete []s;		return res;
 		}
-		if(!skip() && !wcsncmp(str+3,L"pal",3) && (str[6]==' ' || str[6]=='\t'))
+		if(!wcsncmp(str+3,L"pal",3))
 		{
 			str += 7;	wcstrim_mgl(str);	int res = 1;
 			if(*str=='$' && str[1]>='0' && str[1]<='9')
@@ -556,6 +638,15 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 				buf[0] = gr->DefPal[int(d.a[0])%gr->NumPal];
 				AddParam(n, buf);
 			}
+			if(*str=='$' && str[1]>='a' && str[1]<='z')
+			{
+				int n=str[1]-'a';	res = 0;
+				str +=2;	mgl_wcstrim(str);
+				const mglData &d=mglFormulaCalc(str, this);
+				wchar_t buf[2]={0,0};
+				buf[0] = gr->DefPal[int(d.a[0])%gr->NumPal];
+				AddParam(n+10, buf);
+			}
 			delete []s;		return res;
 		}
 	}
@@ -565,24 +656,10 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 		while(*t && isspace(*t))	t++;
 		// if command have format 'for $N ...' then change it to 'for N ...'
 		if(*t=='$' && t[1]>='0' && t[1]<='9')	*t = ' ';
+		if(*t=='$' && t[1]>='a' && t[1]<='z')	*t = ' ';
 	}
 	// parse arguments (parameters $1, ..., $9)
-	if(parlen>0)
-	{
-		wchar_t *sb = new wchar_t[wcslen(string)+1];
-		while((t=wcschr(str,'$'))!=0)
-		{
-			wcscpy(sb,t+2);
-			t[0]=0;
-			long n = t[1]-'0';
-			if(n>=0 && n<=9 && par[n])	wcscat(str,par[n]);
-			wcscat(str,sb);
-		}
-		delete []sb;
-	}
-
-	wcstrim_mgl(str);
-	if(!skip() && !wcscmp(str,L"stop"))	{	Stop = true;	delete []s;	return 0;	}
+	PutArg (string,str,false);	wcstrim_mgl(str);
 
 	for(k=0;k<1024;k++)	// parse string to substrings (by spaces)
 	{
@@ -605,6 +682,9 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 		mglArg *a = new mglArg[k];
 		FillArg(gr, k, arg, a);
 		// execute first special (program-flow-control) commands
+		if(!skip() && !wcscmp(arg[0],L"stop"))
+		{	Stop = true;	delete []s;	delete []a;	return 0;	}
+		if(!wcscmp(arg[0],L"func"))	{	delete []s;	delete []a;	return 0;	}
 		n = FlowExec(gr, arg[0],k-1,a);
 		if(n)		{	delete []s;	delete []a;	return n-1;	}
 		if(skip())	{	delete []s;	delete []a;	return 0;	}
@@ -623,16 +703,45 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 			n = 1;
 			if(a[0].type==1)
 			{
-				n=0;	mgl_wcstombs(a[0].s, a[0].w, 1024);
-				FILE *fp = fopen(a[0].s,"rt");	Execute(gr,fp);	fclose(fp);
+				int na=0;
+				mgl_wcstombs(a[0].s, a[0].w, 1024);		n=-IsFunc(a[0].w,&na);
+				if(n && k!=na+2)	
+				{
+					if(gr->Message)
+						sprintf(gr->Message,"Bad arguments for %ls: %ld instead of %d\n",
+								a[0].w,k-2,na);
+					n = 1;
+				}
+				else if(n)
+				{
+					if(!fn_stack)
+					{	fn_num = 100;
+						fn_stack = (mglFnStack*)malloc(fn_num*sizeof(mglFnStack));	}
+					if(fn_pos >= fn_num)
+					{	fn_num+= 100;
+						fn_stack = (mglFnStack*)realloc(fn_stack,fn_num*sizeof(mglFnStack));	}
+					memcpy(fn_stack[fn_pos].par,par+1,9*sizeof(wchar_t*));
+					memset(par+1,0,9*sizeof(wchar_t*));
+					for(int i=1;i<k-1;i++)	AddParam(i,arg[i+1]);
+					fn_stack[fn_pos].pos = pos;	fn_pos++;	n--;
+				}
+				else
+				{
+					FILE *fp = fopen(a[0].s,"rt");
+					if(fp)	{	Execute(gr,fp);	fclose(fp);	}
+					else	n=1;
+				}
 			}
 			delete []s;	delete []a;	return n;
 		}
 		if(!wcscmp(arg[0],L"for"))
 		{
 			n = 1;
-			int r = int(a[0].v);
-			if(a[0].type==2 && (r>=0 || r<=9))
+			char ch = arg[1][0];
+			int r = ch-'0';
+			if(ch>='a' && ch<='z')	r = 10+ch-'a';
+//			int r = int(a[0].v);
+			if(arg[1][1]==0 && (r>=0 || r<=39))
 			{
 				if(a[1].type==0)
 				{
@@ -652,7 +761,7 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos)
 				}
 				if(n==0)
 				{
-					for(int i=9;i>0;i--)
+					for(int i=39;i>0;i--)
 					{	for_stack[i]=for_stack[i-1];	if_for[i]=if_for[i-1];	}
 					for_stack[0] = r+1;		fval[r].nz = pos;	if_for[0]=if_pos;
 					wchar_t buf[32];		mglprintf(buf,32,L"%g",fval[r].a[0]);
@@ -755,7 +864,7 @@ int mglParse::FlowExec(mglGraph *, const wchar_t *com, long m, mglArg *a)
 		}
 		else n = 1;
 		if(n==0)
-		{	if_stack[if_pos] = cond;	if_pos = if_pos<19 ? if_pos+1 : 19;	}
+		{	if_stack[if_pos] = cond;	if_pos = if_pos<39 ? if_pos+1 : 39;	}
 	}
 	else if(!Skip && !wcscmp(com,L"endif"))
 	{
@@ -796,6 +905,13 @@ int mglParse::FlowExec(mglGraph *, const wchar_t *com, long m, mglArg *a)
 		if(if_pos==if_for[0])	if_pos = if_pos>0 ? if_pos-1 : 0;
 		if(out)	mglprintf(out,1024,L"break;");	for_br = true;
 	}
+	else if(!skip() && !wcscmp(com, L"return"))	// parse command "delete"
+	{
+		if(!fn_pos)	return 2;
+		fn_pos--;	n = -fn_stack[fn_pos].pos-1;
+		for(int i=1;i<10;i++)	if(par[i])	delete []par[i];
+		memcpy(par+1,fn_stack[fn_pos].par,9*sizeof(wchar_t*));
+	}
 	else if(!ifskip() && !Skip && !wcscmp(com,L"next"))
 	{
 		if(if_pos==if_for[0])	if_pos = if_pos>0 ? if_pos-1 : 0;
@@ -811,9 +927,9 @@ int mglParse::FlowExec(mglGraph *, const wchar_t *com, long m, mglArg *a)
 			}
 			else
 			{
-				for(int i=0;i<9;i++)
+				for(int i=0;i<39;i++)
 				{	for_stack[i]=for_stack[i+1];	if_for[i]=if_for[i+1];	}
-				for_stack[9] = 0;	for_br=false;
+				for_stack[39] = 0;	for_br=false;
 			}
 		}
 		if(out)	mglprintf(out,1024,L"}");
@@ -845,7 +961,7 @@ void mgl_error_print(int line, int r, mglGraph *gr)
 	if(r==2)	printf("Wrong command in line %d\n", line);
 	if(r==3)	printf("String too long in line %d\n", line);
 	if(r==4)	printf("Unbalanced ' in line %d\n", line);
-	gr->Message[0]=0;
+	if(gr->Message)	gr->Message[0]=0;
 }
 void mglParse::Execute(mglGraph *gr, FILE *fp, bool print)
 {
@@ -868,14 +984,16 @@ void mglParse::Execute(mglGraph *gr, int n, const wchar_t **text, void (*error)(
 {
 	if(gr==0 || n<1 || text==0)	return;
 	long i, r;
-	for_br=Skip=false;	if_pos=0;
+	for_br=Skip=false;	if_pos=fn_pos=0;	ScanFunc(0);
+	for(i=0;i<n;i++)	ScanFunc(text[i]);
 	for(i=0;i<n;i++)
 	{
+//printf("line %ld : %ls\n",i,text[i]);
 		r = Parse(gr,text[i],i+1);
 		if(r<0)	{	i = -r-2;	continue;	}
 		if(error)
 		{
-			if(r>0)	error(i, r, gr);
+			if(r>0)	error(i+1, r, gr);
 			if(gr->Message && gr->Message[0])	error(i,0,gr);
 		}
 	}
@@ -1127,7 +1245,7 @@ void mglParse::AddCommand(mglCommand *cmd, int mc)
 //-----------------------------------------------------------------------------
 mglCommand mglParse::Prg[]={
 	{L"break",L"Break for-cycle",L"break", 0, 0, 0, 5},
-	{L"call",L"Execute script in external file",L"call 'filename'", 0, 0, 0, 5},
+	{L"call",L"Execute script in external file",L"call 'name' [args]", 0, 0, 0, 5},
 	{L"continue",L"Skip commands and iterate for-cycle again",L"continue", 0, 0, 0, 5},
 	{L"defchr",L"Define parameter as character",L"defchr $N val", 0, 0, 0, 5},
 	{L"define",L"Define constant or parameter",L"define $N sth | Var val", 0, 0, 0, 5},
@@ -1138,9 +1256,11 @@ mglCommand mglParse::Prg[]={
 	{L"elseif",L"Conditional operator",L"elseif val|Dat ['cond']", 0, 0, 0, 5},
 	{L"endif",L"Finish if/else block",L"endif", 0, 0, 0, 5},
 	{L"for",L"For cycle",L"for $N v1 v2 [dv] | $N Dat", 0, 0, 0, 5},
+	{L"func",L"Start function definition and stop execution of main script",L"func 'name' [narg]", 0, 0, 0, 5},
 	{L"if",L"Conditional operator",L"if val|Dat ['cond']", 0, 0, 0, 5},
 	{L"next",L"Start next for-cycle iteration",L"next", 0, 0, 0, 5},
 	{L"once",L"Start/close commands which should executed only once",L"once val", 0, 0, 0, 5},
+	{L"return",L"Return from function",L"return", 0, 0, 0, 5},
 	{L"stop",L"Stop execution",L"stop", 0, 0, 0, 5},
 {L"",0,0, 0, 0, 0, 0}};
 //-----------------------------------------------------------------------------
@@ -1156,6 +1276,7 @@ void mgl_parse_text(HMGL gr, HMPR p, const char *str)	{	p->Execute(gr, str);	}
 void mgl_parsew_text(HMGL gr, HMPR p, const wchar_t *str){	p->Parse(gr, str);	}
 void mgl_restore_once(HMPR p)	{	p->RestoreOnce();	}
 void mgl_parser_allow_setsize(HMPR p, int a)	{	p->AllowSetSize = a;	}
+void mgl_scan_func(HMPR p, const wchar_t *line)	{	p->ScanFunc(line);	}
 //-----------------------------------------------------------------------------
 uintptr_t mgl_create_parser_()	{	return uintptr_t(new mglParse);	}
 void mgl_delete_parser_(uintptr_t* p)	{	delete _PR_;	}
diff --git a/mgl/mgl_tex_table.cpp b/mgl/mgl_tex_table.cpp
index b518d8f..75ca877 100644
--- a/mgl/mgl_tex_table.cpp
+++ b/mgl/mgl_tex_table.cpp
@@ -159,7 +159,7 @@ mglTeXsymb mgl_tex_symb[] = {
 	{0x2144, L"Yup"},
 	{0x1b5, L"Zbar"},
 	{0x396, L"Zeta"},
-	{0x2c6, L"^"},
+	{0x5e, L"^"},
 	{0xe5, L"aa"},
 	{0x223e, L"ac"},
 	{0x23e6, L"accurrent"},
@@ -174,7 +174,7 @@ mglTeXsymb mgl_tex_symb[] = {
 	{0xe6, L"ae"},
 	{0x2135, L"aleph"},
 	{0x3b1, L"alpha"},
-	{0x2210, L"amalg"},
+//	{0x2210, L"amalg"},
 	{0x2a3f, L"amalg"},
 	{0x299f, L"angdnr"},
 	{0x2220, L"angle"},
diff --git a/mgl/mgl_vect.cpp b/mgl/mgl_vect.cpp
index de8003a..f65afb5 100644
--- a/mgl/mgl_vect.cpp
+++ b/mgl/mgl_vect.cpp
@@ -78,7 +78,7 @@ void mglGraph::Traj(const mglData &x, const mglData &y, const mglData &z,
 			tt[2*i]   = ScalePoint(pp[6*i],pp[6*i+1],pp[6*i+2]);
 			tt[2*i+1] = ScalePoint(pp[6*i+3],pp[6*i+4],pp[6*i+5]);
 		}
-		vects_plot(n,pp,cc,tt);
+		vects_plot(n,pp,cc,tt,false);
 	}
 	cmap[0]=cm;	NumCol=nc;
 	SetPal(0);	EndGroup();
@@ -167,9 +167,9 @@ void mglGraph::Vect(const mglData &x, const mglData &y, const mglData &ax, const
 			tt[2*i0+1]= ScalePoint(pp[6*i0+3],pp[6*i0+4],pp[6*i0+5]);
 		}
 		if(flag & MGL_VEC_DOT)
-			lines_plot(nn*mm,pp,(flag&MGL_VEC_COL)?0:cc,tt,true);
+			lines_plot(nn*mm,pp,(flag&MGL_VEC_COL)?0:cc,tt,true,flag&MGL_VEC_GRD);
 		else
-			vects_plot(nn*mm,pp,(flag&MGL_VEC_COL)?0:cc,tt);
+			vects_plot(nn*mm,pp,(flag&MGL_VEC_COL)?0:cc,tt,flag&MGL_VEC_GRD);
 	}
 	EndGroup();
 	delete []pp;	delete []tt;	delete []cc;
@@ -189,7 +189,7 @@ void mglGraph::Vect(const mglData &ax, const mglData &ay, const char *sch, mreal
 //
 //-----------------------------------------------------------------------------
 void mglGraph::VectL(const mglData &x, const mglData &y, const mglData &ax, const mglData &ay, const char *sch, mreal zVal)
-{	Vect(x,y,ax,ay,sch,zVal,MGL_VEC_COL|MGL_VEC_DOT);	}
+{	Vect(x,y,ax,ay,sch,zVal,MGL_VEC_COL|MGL_VEC_DOT|MGL_VEC_GRD);	}
 //-----------------------------------------------------------------------------
 void mglGraph::VectL(const mglData &ax, const mglData &ay, const char *sch, mreal zVal)
 {
@@ -205,7 +205,7 @@ void mglGraph::VectL(const mglData &ax, const mglData &ay, const char *sch, mrea
 //
 //-----------------------------------------------------------------------------
 void mglGraph::VectC(const mglData &x, const mglData &y, const mglData &ax, const mglData &ay, const char *sch, mreal zVal)
-{	Vect(x,y,ax,ay,sch,zVal,MGL_VEC_LEN|MGL_VEC_DOT);	}
+{	Vect(x,y,ax,ay,sch,zVal,MGL_VEC_LEN|MGL_VEC_DOT|MGL_VEC_GRD);	}
 //-----------------------------------------------------------------------------
 void mglGraph::VectC(const mglData &ax, const mglData &ay, const char *sch, mreal zVal)
 {
@@ -294,9 +294,9 @@ void mglGraph::Vect(const mglData &x, const mglData &y, const mglData &z, const
 			tt[2*i0+1]= ScalePoint(pp[6*i0+3],pp[6*i0+4],pp[6*i0+5]);
 		}
 		if(flag & MGL_VEC_DOT)
-			lines_plot(nn*mm*ll,pp,(flag&MGL_VEC_COL)?0:cc,tt,true);
+			lines_plot(nn*mm*ll,pp,(flag&MGL_VEC_COL)?0:cc,tt,true,flag&MGL_VEC_GRD);
 		else
-			vects_plot(nn*mm*ll,pp,(flag&MGL_VEC_COL)?0:cc,tt);
+			vects_plot(nn*mm*ll,pp,(flag&MGL_VEC_COL)?0:cc,tt,flag&MGL_VEC_GRD);
 	}
 	EndGroup();
 	delete []pp;	delete []tt;	delete []cc;
@@ -318,7 +318,7 @@ void mglGraph::Vect(const mglData &ax, const mglData &ay, const mglData &az, con
 //
 //-----------------------------------------------------------------------------
 void mglGraph::VectL(const mglData &x, const mglData &y, const mglData &z, const mglData &ax, const mglData &ay, const mglData &az, const char *sch)
-{	Vect(x,y,z,ax,ay,az,sch,MGL_VEC_COL|MGL_VEC_DOT);	}
+{	Vect(x,y,z,ax,ay,az,sch,MGL_VEC_COL|MGL_VEC_DOT|MGL_VEC_GRD);	}
 //-----------------------------------------------------------------------------
 void mglGraph::VectL(const mglData &ax, const mglData &ay, const mglData &az, const char *sch)
 {
@@ -337,7 +337,7 @@ void mglGraph::VectL(const mglData &ax, const mglData &ay, const mglData &az, co
 //-----------------------------------------------------------------------------
 void mglGraph::VectC(const mglData &x, const mglData &y, const mglData &z,
 					const mglData &ax, const mglData &ay, const mglData &az, const char *sch)
-{	Vect(x,y,z,ax,ay,az,sch,MGL_VEC_LEN|MGL_VEC_DOT);	}
+{	Vect(x,y,z,ax,ay,az,sch,MGL_VEC_LEN|MGL_VEC_DOT|MGL_VEC_GRD);	}
 //-----------------------------------------------------------------------------
 void mglGraph::VectC(const mglData &ax, const mglData &ay, const mglData &az, const char *sch)
 {
diff --git a/mgl/mgl_zb.cpp b/mgl/mgl_zb.cpp
index b7162b7..c152739 100644
--- a/mgl/mgl_zb.cpp
+++ b/mgl/mgl_zb.cpp
@@ -216,7 +216,8 @@ void mglGraphZB::Clf(mglColor Back)
 }
 //-----------------------------------------------------------------------------
 void mglGraphZB::SetSize(int w,int h)
-{
+{
+	if(w<=0 || h<=0)	{	SetWarn(mglWarnSize);	return;	}
 	if(C)	{	delete []C;	delete []Z;	}
 	C = new unsigned char[w*h*32];		// ����� *1 ��� TranspType>0 !!!
 	Z = new mreal[w*h*8];
@@ -811,9 +812,11 @@ void mglGraphAB::mark_plot(mreal *pp, char type)
 	mreal p[12]={0,0,pp[2],0,0,pp[2],0,0,pp[2],0,0,pp[2]};
 	mreal v, ss=MarkSize*0.35*font_factor;
 	register long i,j,s;
-	if(type=='.' || ss==0)
+	if(type=='.' || type=='C' || ss==0)
 	{
 		bool aa=UseAlpha;	UseAlpha = true;
+		ss *= 1.1;	if(type=='C')	for(i=long(-4*ss);i<=long(4*ss);i++)
+			pnt_plot(long(pp[0]+ss*cos(i*M_PI_4/ss)), long(pp[1]+ss*sin(i*M_PI_4/ss)),pp[2],cs);
 		s = long(5.5+fabs(PenWidth));
 		for(i=-s;i<=s;i++)	for(j=-s;j<=s;j++)
 		{
@@ -821,103 +824,137 @@ void mglGraphAB::mark_plot(mreal *pp, char type)
 			cs[3] = (unsigned char)(255.f*exp(-6.f*v));
 			if(cs[3]==0)	continue;
 			pnt_plot(long(pp[0])+i,long(pp[1])+j,pp[2],cs);
-		}
+		}
 		UseAlpha = aa;
 	}
 	else
 	{
 		mreal pw = PenWidth;	PenWidth = BaseLineWidth;
 		int pd = PDef;	PDef = 0xffff;
-		register mreal zv = strchr("oOVDTS",type) ? pp[2]+BaseLineWidth : pp[2];
+		register mreal zv = strchr("oOVDTS",type) ? pp[2]+BaseLineWidth : pp[2];
+		if(!strchr("xsSoO",type))	ss *= 1.1;
 		switch(type)
 		{
+		case 'P':
+			p[0] = pp[0]-ss;	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1]-ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]-ss;	p[1] = pp[1]-ss;	p[3] = pp[0]-ss;	p[4] = pp[1]+ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]-ss;	p[1] = pp[1]+ss;	p[3] = pp[0]+ss;	p[4] = pp[1]+ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]+ss;	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1]+ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 		case '+':
-			ss = ss*1.1;
 			p[0] = pp[0]-ss;	p[1] = pp[1];	p[3] = pp[0]+ss;	p[4] = pp[1];
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0];	p[1] = pp[1]-ss;	p[3] = pp[0];	p[4] = pp[1]+ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
+		case 'X':
+			p[0] = pp[0]-ss;	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1]-ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]-ss;	p[1] = pp[1]-ss;	p[3] = pp[0]-ss;	p[4] = pp[1]+ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]-ss;	p[1] = pp[1]+ss;	p[3] = pp[0]+ss;	p[4] = pp[1]+ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]+ss;	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1]+ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 		case 'x':
 			p[0] = pp[0]-ss;	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1]+ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]+ss;	p[1] = pp[1]-ss;	p[3] = pp[0]-ss;	p[4] = pp[1]+ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
+		case 'S':
+			for(i=long(-ss-1);i<=long(ss+1);i++)	for(j=long(-ss-1);j<=long(ss+1);j++)
+				pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
 		case 's':
 			p[0] = pp[0]-ss;	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1]-ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]+ss;	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1]+ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]+ss;	p[1] = pp[1]+ss;	p[3] = pp[0]-ss;	p[4] = pp[1]+ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]-ss;	p[1] = pp[1]+ss;	p[3] = pp[0]-ss;	p[4] = pp[1]-ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
+		case 'D':
+			for(i=long(-ss-1);i<=long(ss+1);i++)	for(j=long(-ss-1);j<=long(ss+1);j++)
+				if(abs(i)+abs(j)<=long(ss+1))
+					pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
 		case 'd':
-			ss = ss*1.1;
 			p[0] = pp[0];	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1];
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]+ss;	p[1] = pp[1];	p[3] = pp[0];	p[4] = pp[1]+ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0];	p[1] = pp[1]+ss;	p[3] = pp[0]-ss;	p[4] = pp[1];
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]-ss;	p[1] = pp[1];	p[3] = pp[0];	p[4] = pp[1]-ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			break;
+		case 'Y':
+			p[0] = pp[0];	p[1] = pp[1]-ss;	p[3] = pp[0];	p[4] = pp[1];
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]-0.8*ss;	p[1] = pp[1]+0.6*ss;	p[3] = pp[0];	p[4] = pp[1];
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]+0.8*ss;	p[1] = pp[1]+0.6*ss;	p[3] = pp[0];	p[4] = pp[1];
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
 		case '*':
-			ss = ss*1.1;
 			p[0] = pp[0]-ss;	p[1] = pp[1];	p[3] = pp[0]+ss;	p[4] = pp[1];
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]-0.6*ss;	p[1] = pp[1]-0.8*ss;	p[3] = pp[0]+0.6*ss;	p[4] = pp[1]+0.8*ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]-0.6*ss;	p[1] = pp[1]+0.8*ss;	p[3] = pp[0]+0.6*ss;	p[4] = pp[1]-0.8*ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
+		case 'T':
+			for(i=long(-ss-1);i<=long(ss+1);i++)	for(j=long(-ss/2-1);j<=long(ss+1);j++)
+				if(3*abs(i)+2*j<=long(2*ss+1))
+					pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
 		case '^':
-			ss = ss*1.1;
 			p[0] = pp[0]-ss;	p[1] = pp[1]-ss/2;	p[3] = pp[0];	p[4] = pp[1]+ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]-ss;	p[1] = pp[1]-ss/2;	p[3] = pp[0]+ss;	p[4] = pp[1]-ss/2;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]+ss;	p[1] = pp[1]-ss/2;	p[3] = pp[0];	p[4] = pp[1]+ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
+		case 'V':
+			for(i=long(-ss-1);i<=long(ss+1);i++)	for(j=long(-ss-1);j<=long(ss/2+1);j++)
+				if(3*abs(i)-2*j<=long(2*ss+1))
+					pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
 		case 'v':
-			ss = ss*1.1;
 			p[0] = pp[0]-ss;	p[1] = pp[1]+ss/2;	p[3] = pp[0];	p[4] = pp[1]-ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]-ss;	p[1] = pp[1]+ss/2;	p[3] = pp[0]+ss;	p[4] = pp[1]+ss/2;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			p[0] = pp[0]+ss;	p[1] = pp[1]+ss/2;	p[3] = pp[0];	p[4] = pp[1]-ss;
-			line_plot(p,p+3,CDef,CDef);
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
-		case 'S':
-			for(i=long(-ss);i<=long(ss);i++)	for(j=long(-ss);j<=long(ss);j++)
-				pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
+		case 'L':
+			for(i=long(-ss-1);i<=long(ss+1);i++)	for(j=long(-ss-1);j<=long(ss/2+1);j++)
+				if(3*abs(i)-2*j<=long(2*ss+1))
+					pnt_plot(long(pp[0])+j,long(pp[1])+i,zv,cs);
+		case '<':
+			p[0] = pp[0]+ss/2;	p[1] = pp[1]-ss;	p[3] = pp[0]-ss;	p[4] = pp[1];
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]+ss/2;	p[1] = pp[1]+ss;	p[3] = pp[0]-ss;	p[4] = pp[1];
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = p[3] = pp[0]+ss/2;	p[1] = pp[1]-ss;	p[4] = pp[1]+ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
-		case 'D':
-			ss = ss*1.1;
-			for(i=long(-ss);i<=long(ss);i++)	for(j=long(-ss);j<=long(ss);j++)
-				if(abs(i)+abs(j)<=long(ss))
-					pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
-			break;
-		case 'T':
-			ss = ss*1.1;
-			for(i=long(-ss);i<=long(ss);i++)	for(j=long(-ss/2);j<=long(ss);j++)
-				if(3*abs(i)+2*j<=2*long(ss))
-					pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
-			break;
-		case 'V':
-			ss = ss*1.1;
-			for(i=long(-ss);i<=long(ss);i++)	for(j=long(-ss);j<=long(ss/2);j++)
-				if(3*abs(i)-2*j<=2*long(ss))
-					pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
-			break;
-		case 'o':
-			for(i=long(-4*ss);i<=long(4*ss);i++)
-				pnt_plot(long(pp[0]+ss*cos(i*M_PI_4/ss)),
-					long(pp[1]+ss*sin(i*M_PI_4/ss)),zv,cs);
+		case 'R':
+			for(i=long(-ss-1);i<=long(ss+1);i++)	for(j=long(-ss/2-1);j<=long(ss+1);j++)
+				if(3*abs(i)+2*j<=long(2*ss+1))
+					pnt_plot(long(pp[0])+j,long(pp[1])+i,zv,cs);
+		case '>':
+			p[0] = pp[0]-ss/2;	p[1] = pp[1]-ss;	p[3] = pp[0]+ss;	p[4] = pp[1];
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = pp[0]-ss/2;	p[1] = pp[1]+ss;	p[3] = pp[0]+ss;	p[4] = pp[1];
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
+			p[0] = p[3] = pp[0]-ss/2;	p[1] = pp[1]-ss;	p[4] = pp[1]+ss;
+			mglGraphAB::line_plot(p,p+3,CDef,CDef);
 			break;
 		case 'O':
 			for(i=long(-ss);i<=long(ss);i++)	for(j=long(-ss);j<=long(ss);j++)
@@ -925,6 +962,10 @@ void mglGraphAB::mark_plot(mreal *pp, char type)
 				if(i*i+j*j>=ss*ss)	continue;
 				pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs);
 			}
+		case 'o':
+			for(i=long(-4*ss);i<=long(4*ss);i++)
+				pnt_plot(long(pp[0]+ss*cos(i*M_PI_4/ss)),
+					long(pp[1]+ss*sin(i*M_PI_4/ss)),zv,cs);
 			break;
 		}
 		PDef = pd;	PenWidth = pw;
diff --git a/mgl/mgl_zb2.cpp b/mgl/mgl_zb2.cpp
index 5de8c35..1c2f7a0 100644
--- a/mgl/mgl_zb2.cpp
+++ b/mgl/mgl_zb2.cpp
@@ -487,46 +487,21 @@ void mglGraphAB::quads_plot(long n,mreal *pp,mreal *cc,bool *tt)
 {
 //	if(!DrawFace)	return;
 	register long i;
-	mreal *p,*c;
+	mreal *p;
+	mreal *c1=CDef,*c2=CDef,*c3=CDef,*c4=CDef;
 	PostScale(pp,4*n);	LightScale();
-	if(cc)
-	{
-		for(i=0;i<n;i++)
-		{
-			if(tt && (!tt[4*i] || !tt[4*i+1] || !tt[4*i+2] || !tt[4*i+3]))
-				continue;
-			p = pp+12*i;	c = cc+16*i;
-			if(DrawFace)
-				quad_plot(p,p+3,p+9,p+6,c,c+4,c+12,c+8);
-			else
-			{
-				line_plot(p,p+3,c,c+4);
-				line_plot(p,p+9,c,c+12);
-				line_plot(p+9,p+6,c+12,c+8);
-				line_plot(p+3,p+6,c+4,c+8);
-			}
-		}
-	}
-	else
+	for(i=0;i<n;i++)
 	{
-		for(i=0;i<n;i++)
+		if(tt && (!tt[4*i] || !tt[4*i+1] || !tt[4*i+2] || !tt[4*i+3]))
+			continue;
+		p = pp+12*i;
+		if(cc)	{	c1=cc+16*i;	c2=c1+4;	c3=c1+8;	c4=c1+12;	}
+		if(DrawFace)
+			quad_plot(p,p+3,p+9,p+6,c1,c2,c4,c3);
+		else
 		{
-			if(tt && (!tt[4*i] || !tt[4*i+1] || !tt[4*i+2] || !tt[4*i+3]))
-				continue;
-			p = pp+12*i;	//c = cc+16*i;
-			if(DrawFace)
-//				quad_plot(p,p+3,p+9,p+6,CDef,CDef,CDef,CDef);
-			{
-				trig_plot(p,p+3,p+9,CDef,CDef,CDef);
-				trig_plot(p+3,p+6,p+9,CDef,CDef,CDef);
-			}
-			else
-			{
-				line_plot(p,p+3,CDef,CDef);
-				line_plot(p,p+9,CDef,CDef);
-				line_plot(p+9,p+6,CDef,CDef);
-				line_plot(p+3,p+6,CDef,CDef);
-			}
+			line_plot(p,p+3,c1,c2);		line_plot(p,p+9,c1,c4);
+			line_plot(p+9,p+6,c4,c3);	line_plot(p+3,p+6,c2,c3);
 		}
 	}
 }
@@ -560,11 +535,41 @@ void mglGraphAB::trigs_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool
 	}
 }
 //-----------------------------------------------------------------------------
-void mglGraphAB::lines_plot(long n,mreal *pp,mreal *cc,bool *tt, bool b)
+void mglGraphAB::quads_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool byquad)
+{
+	if(!DrawFace)	wire=true;
+	register long i,j1,j2,j3,j4;
+	mreal *c1,*c2,*c3,*c4;
+	PostScale(pp,m);	LightScale();
+	c1 = c2 = c3 = c4 = CDef;
+	for(i=0;i<n;i++)
+	{
+		j1 = nn[4*i];	j2 = nn[4*i+1];	j3 = nn[4*i+2];	j4 = nn[4*i+3];
+		if(tt && (!tt[j1] || !tt[j2] || !tt[j3] || !tt[j4]))	continue;
+		if(cc)
+		{
+			if(!byquad)
+			{	c1=cc+4*j1;	c2=cc+4*j2;	c3=cc+4*j3;	c4=cc+4*j4;	}
+			else
+			{	c1 = c2 = c3 = c4 = cc+4*i;	}
+		}
+		if(wire)
+		{
+			line_plot(pp+3*j1,pp+3*j2,c1,c2);
+			line_plot(pp+3*j1,pp+3*j4,c1,c4);
+			line_plot(pp+3*j3,pp+3*j2,c3,c2);
+			line_plot(pp+3*j3,pp+3*j4,c3,c4);
+		}
+		else
+			quad_plot(pp+3*j1,pp+3*j2,pp+3*j4,pp+3*j3,c1,c2,c4,c3);
+	}
+}
+//-----------------------------------------------------------------------------
+void mglGraphAB::lines_plot(long n,mreal *pp,mreal *cc,bool *tt, bool b,bool grd)
 {
 	register long i;
 	mreal s1[4],s2[4],*p;
-	mglColor col,c1=cmap[0],c2=NumCol>1?cmap[1]:cmap[0];
+	mglColor col,c1=cmap[0],c2=(grd && NumCol>1)?cmap[1]:cmap[0];
 	s1[3] = s2[3] = AlphaDef;
 	PostScale(pp,2*n);
 	long pOld = PDef;
@@ -579,7 +584,7 @@ void mglGraphAB::lines_plot(long n,mreal *pp,mreal *cc,bool *tt, bool b)
 			{
 				col = GetC(cc[i]-0.5,false);
 				s1[0] = col.r;	s1[1] = col.g;	s1[2] = col.b;
-				col = GetC(cc[i],false);
+				if(grd)	col = GetC(cc[i],false);
 				s2[0] = col.r;	s2[1] = col.g;	s2[2] = col.b;
 			}
 		}
@@ -594,11 +599,11 @@ void mglGraphAB::lines_plot(long n,mreal *pp,mreal *cc,bool *tt, bool b)
 	PDef = pOld;
 }
 //-----------------------------------------------------------------------------
-void mglGraphAB::vects_plot(long n,mreal *pp,mreal *cc,bool *tt)
+void mglGraphAB::vects_plot(long n,mreal *pp,mreal *cc,bool *tt, bool grd)
 {
 	register long i;
 	mreal s1[4],s2[4],*p,q[6],d;
-	mglColor col,c1=cmap[0],c2=NumCol>1?cmap[1]:cmap[0];
+	mglColor col,c1=cmap[0],c2=(grd && NumCol>1)?cmap[1]:cmap[0];
 	s1[3] = s2[3] = AlphaDef;
 	PostScale(pp,2*n);
 	long pOld = PDef;
@@ -613,7 +618,7 @@ void mglGraphAB::vects_plot(long n,mreal *pp,mreal *cc,bool *tt)
 			{
 				col = GetC(cc[i]-0.5,false);
 				s1[0] = col.r;	s1[1] = col.g;	s1[2] = col.b;
-				col = GetC(cc[i],false);
+				if(grd)	col = GetC(cc[i],false);
 				s2[0] = col.r;	s2[1] = col.g;	s2[2] = col.b;
 			}
 		}
@@ -713,7 +718,7 @@ void mglGraphAB::Glyph(mreal x, mreal y, mreal f, int s, long j, char col)
 void mglGraphAB::glyph_fill(mreal x,mreal y, mreal f, int nt, const short *trig, mreal *c)
 {
 	long ik,ii;
-	mreal p[12], n[3]={0,0,0}, pw = Width>2 ? fabs(PenWidth) : 1e-5*Width;
+	mreal p[12], pw = Width>2 ? fabs(PenWidth) : 1e-5*Width;
 	if(!trig || nt<=0)	return;
 	for(ik=0;ik<nt;ik++)
 	{
@@ -721,8 +726,10 @@ void mglGraphAB::glyph_fill(mreal x,mreal y, mreal f, int nt, const short *trig,
 		ii+=2;		p[3]=f*trig[ii]+x;	p[4]=f*trig[ii+1]+y;	p[5]=0;
 		ii+=2;		p[6]=f*trig[ii]+x;	p[7]=f*trig[ii+1]+y;	p[8]=0;
 		PostScale(p,3);
-		p[2]+=pw;	p[5]+=pw;	p[8]+=pw;
-		mglGraphAB::trig_plot_n(p,p+3,p+6,c,c,c,n,n,n);
+		p[2]+=pw;	p[5]+=pw;	p[8]+=pw;
+		bool ul=UseLight;	UseLight=false;
+		mglGraphAB::trig_plot(p,p+3,p+6,c,c,c);
+		UseLight=ul;
 	}
 }
 //-----------------------------------------------------------------------------
diff --git a/png b/png
new file mode 120000
index 0000000..8077efa
--- /dev/null
+++ b/png
@@ -0,0 +1 @@
+texinfo/png/
\ No newline at end of file
diff --git a/texinfo/CMakeLists.txt b/texinfo/CMakeLists.txt
index c0ae756..a5e48fc 100644
--- a/texinfo/CMakeLists.txt
+++ b/texinfo/CMakeLists.txt
@@ -1,3 +1,7 @@
+
+# Warning!!!!!
+# new files and destination for html docs.
+
 if(use_doc)
 	add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/texinfo/png/all.png
 		COMMAND LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/mgl ${CMAKE_BINARY_DIR}/examples/mgl_example
diff --git a/texinfo/Makefile.am b/texinfo/Makefile.am
index 159449d..d35c1b3 100644
--- a/texinfo/Makefile.am
+++ b/texinfo/Makefile.am
@@ -1,35 +1,42 @@
-SUBDIRS			= png .
+SUBDIRS				= png .
 
-CLEANFILES = mathgl_en.info mathgl_en.info-1 mathgl_en.info-2 mathgl_en.info-3 \
-mathgl_ru.info mathgl_ru.info-1 mathgl_ru.info-2 mathgl_ru.info-3
+CLEANFILES = mathgl_en.info mathgl_en.info-1 mathgl_en.info-2 mathgl_en.info-3 mgl_en.info \
+mathgl_ru.info mathgl_ru.info-1 mathgl_ru.info-2 mathgl_ru.info-3 mathgl_ru.info-4 mgl_ru.info
 
 MAKEINFOHTML		= texi2html
-TEXI2PDF		= texi2pdf
+TEXI2PDF			= texi2pdf
 
 AM_MAKEINFOHTMLFLAGS	= --split=chapter
 AM_MAKEINFOFLAGS	= --no-validate
 
-info_TEXINFOS           = mathgl_en.texi
-mathgl_en_TEXINFOS		= \
-example_en.texi  gpl-3.0.texi  overview_en.texi  samples_en.texi \
-class_en.texi  fdl.texi      data_en.texi \
-core_en.texi   gpl-2.0.texi  mgl_en.texi
+info_TEXINFOS		= mathgl_en.texi
+mathgl_en_TEXINFOS	= \
+overview_en.texi example_en.texi core_en.texi class_en.texi widget_en.texi \
+data_en.texi other_en.texi mgl_cmd_en.texi samples_en.texi appendix_en.texi fdl.texi
 
-info_TEXINFOS           += mathgl_ru.texi
+
+info_TEXINFOS		+= mathgl_ru.texi
 mathgl_ru_TEXINFOS	= \
-samples_ru.texi class_ru.texi overview_ru.texi appendix_ru.texi \
-data_ru.texi mgl_ru.texi core_ru.texi example_ru.texi fdl.texi \
-gpl-2.0.texi gpl-3.0.texi
+overview_ru.texi example_ru.texi core_ru.texi class_ru.texi widget_ru.texi \
+data_ru.texi other_ru.texi mgl_cmd_ru.texi samples_ru.texi appendix_ru.texi fdl.texi
 
-mglpng=$(DESTDIR)$(docdir)/png_static
+info_TEXINFOS		+= mgl_en.texi
+mgl_en_TEXINFOS	= \
+mgl_cmd_en.texi samples_en.texi ex_mgl_en.texi concept_en.texi fdl.texi
 
-#install-data-local: install-html install-pdf
-install-data-local: install-html
-	mkdir -p $(mglpng)
-	cp -r $(top_srcdir)/texinfo/png_static/*.png $(mglpng)
+info_TEXINFOS		+= mgl_ru.texi
+mgl_ru_TEXINFOS	= \
+mgl_cmd_ru.texi samples_ru.texi ex_mgl_ru.texi concept_ru.texi fdl.texi
 
+#mglpng=$(DESTDIR)$(docdir)/png_static
+
+#install-data-local: install-html install-pdf
+install-data-local: 
+#	mkdir -p $(mglpng)
+#	cp -r $(top_srcdir)/texinfo/png_static/*.png $(mglpng)
 uninstall-local:
-	rm -rf $(mglpng)
+#	rm -rf $(mglpng)
 
 #all-local: html pdf
 all-local: html
+	./filter.py
diff --git a/texinfo/Makefile.in b/texinfo/Makefile.in
index 8a6869c..d14dd39 100644
--- a/texinfo/Makefile.in
+++ b/texinfo/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -35,10 +35,15 @@ build_triplet = @build@
 host_triplet = @host@
 subdir = texinfo
 DIST_COMMON = $(mathgl_en_TEXINFOS) $(mathgl_ru_TEXINFOS) \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in
+	$(mgl_en_TEXINFOS) $(mgl_ru_TEXINFOS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -47,14 +52,14 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
-INFO_DEPS = mathgl_en.info mathgl_ru.info
+INFO_DEPS = mathgl_en.info mathgl_ru.info mgl_en.info mgl_ru.info
 TEXINFO_TEX = $(top_srcdir)/config/texinfo.tex
 am__TEXINFO_TEX_DIR = $(top_srcdir)/config
-DVIS = mathgl_en.dvi mathgl_ru.dvi
-PDFS = mathgl_en.pdf mathgl_ru.pdf
-PSS = mathgl_en.ps mathgl_ru.ps
-HTMLS = mathgl_en.html mathgl_ru.html
-TEXINFOS = mathgl_en.texi mathgl_ru.texi
+DVIS = mathgl_en.dvi mathgl_ru.dvi mgl_en.dvi mgl_ru.dvi
+PDFS = mathgl_en.pdf mathgl_ru.pdf mgl_en.pdf mgl_ru.pdf
+PSS = mathgl_en.ps mathgl_ru.ps mgl_en.ps mgl_ru.ps
+HTMLS = mathgl_en.html mathgl_ru.html mgl_en.html mgl_ru.html
+TEXINFOS = mathgl_en.texi mathgl_ru.texi mgl_en.texi mgl_ru.texi
 TEXI2DVI = texi2dvi
 DVIPS = dvips
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -161,6 +166,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -181,6 +188,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -291,25 +299,28 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 SUBDIRS = png .
-CLEANFILES = mathgl_en.info mathgl_en.info-1 mathgl_en.info-2 mathgl_en.info-3 \
-mathgl_ru.info mathgl_ru.info-1 mathgl_ru.info-2 mathgl_ru.info-3
+CLEANFILES = mathgl_en.info mathgl_en.info-1 mathgl_en.info-2 mathgl_en.info-3 mgl_en.info \
+mathgl_ru.info mathgl_ru.info-1 mathgl_ru.info-2 mathgl_ru.info-3 mathgl_ru.info-4 mgl_ru.info
 
 MAKEINFOHTML = texi2html
 TEXI2PDF = texi2pdf
 AM_MAKEINFOHTMLFLAGS = --split=chapter
 AM_MAKEINFOFLAGS = --no-validate
-info_TEXINFOS = mathgl_en.texi mathgl_ru.texi
+info_TEXINFOS = mathgl_en.texi mathgl_ru.texi mgl_en.texi mgl_ru.texi
 mathgl_en_TEXINFOS = \
-example_en.texi  gpl-3.0.texi  overview_en.texi  samples_en.texi \
-class_en.texi  fdl.texi      data_en.texi \
-core_en.texi   gpl-2.0.texi  mgl_en.texi
+overview_en.texi example_en.texi core_en.texi class_en.texi widget_en.texi \
+data_en.texi other_en.texi mgl_cmd_en.texi samples_en.texi appendix_en.texi fdl.texi
 
 mathgl_ru_TEXINFOS = \
-samples_ru.texi class_ru.texi overview_ru.texi appendix_ru.texi \
-data_ru.texi mgl_ru.texi core_ru.texi example_ru.texi fdl.texi \
-gpl-2.0.texi gpl-3.0.texi
+overview_ru.texi example_ru.texi core_ru.texi class_ru.texi widget_ru.texi \
+data_ru.texi other_ru.texi mgl_cmd_ru.texi samples_ru.texi appendix_ru.texi fdl.texi
+
+mgl_en_TEXINFOS = \
+mgl_cmd_en.texi samples_en.texi ex_mgl_en.texi concept_en.texi fdl.texi
+
+mgl_ru_TEXINFOS = \
+mgl_cmd_ru.texi samples_ru.texi ex_mgl_ru.texi concept_ru.texi fdl.texi
 
-mglpng = $(DESTDIR)$(docdir)/png_static
 all: all-recursive
 
 .SUFFIXES:
@@ -434,6 +445,90 @@ mathgl_ru.html: mathgl_ru.texi $(mathgl_ru_TEXINFOS)
 	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
 	  exit 1; \
 	fi
+
+mgl_en.info: mgl_en.texi $(mgl_en_TEXINFOS)
+	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+	rm -rf $$backupdir && mkdir $$backupdir && \
+	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+	  done; \
+	else :; fi && \
+	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi; \
+	then \
+	  rc=0; \
+	else \
+	  rc=$$?; \
+	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+	fi; \
+	rm -rf $$backupdir; exit $$rc
+
+mgl_en.dvi: mgl_en.texi $(mgl_en_TEXINFOS) 
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2DVI) -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi
+
+mgl_en.pdf: mgl_en.texi $(mgl_en_TEXINFOS) 
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2PDF) -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi
+
+mgl_en.html: mgl_en.texi $(mgl_en_TEXINFOS) 
+	rm -rf $(@:.html=.htp)
+	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $(@:.html=.htp) `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi; \
+	then \
+	  rm -rf $@; \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+	else \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+	  exit 1; \
+	fi
+
+mgl_ru.info: mgl_ru.texi $(mgl_ru_TEXINFOS)
+	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+	rm -rf $$backupdir && mkdir $$backupdir && \
+	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+	  done; \
+	else :; fi && \
+	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi; \
+	then \
+	  rc=0; \
+	else \
+	  rc=$$?; \
+	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+	fi; \
+	rm -rf $$backupdir; exit $$rc
+
+mgl_ru.dvi: mgl_ru.texi $(mgl_ru_TEXINFOS) 
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2DVI) -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi
+
+mgl_ru.pdf: mgl_ru.texi $(mgl_ru_TEXINFOS) 
+	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+	$(TEXI2PDF) -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi
+
+mgl_ru.html: mgl_ru.texi $(mgl_ru_TEXINFOS) 
+	rm -rf $(@:.html=.htp)
+	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+	 -o $(@:.html=.htp) `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi; \
+	then \
+	  rm -rf $@; \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+	else \
+	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+	  exit 1; \
+	fi
 .dvi.ps:
 	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
 	$(DVIPS) -o $@ $<
@@ -524,13 +619,23 @@ mostlyclean-aminfo:
 	  mathgl_ru.cps mathgl_ru.fn mathgl_ru.fns mathgl_ru.ky \
 	  mathgl_ru.kys mathgl_ru.log mathgl_ru.pg mathgl_ru.tmp \
 	  mathgl_ru.toc mathgl_ru.tp mathgl_ru.tps mathgl_ru.vr \
-	  mathgl_ru.vrs
+	  mathgl_ru.vrs mgl_en.aux mgl_en.cp mgl_en.cps mgl_en.fn \
+	  mgl_en.fns mgl_en.ky mgl_en.kys mgl_en.log mgl_en.pg \
+	  mgl_en.tmp mgl_en.toc mgl_en.tp mgl_en.tps mgl_en.vr \
+	  mgl_en.vrs mgl_ru.aux mgl_ru.cp mgl_ru.cps mgl_ru.fn \
+	  mgl_ru.fns mgl_ru.ky mgl_ru.kys mgl_ru.log mgl_ru.pg \
+	  mgl_ru.tmp mgl_ru.toc mgl_ru.tp mgl_ru.tps mgl_ru.vr \
+	  mgl_ru.vrs
 
 clean-aminfo:
 	-test -z "mathgl_en.dvi mathgl_en.pdf mathgl_en.ps mathgl_en.html mathgl_ru.dvi \
-	  mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html" \
+	  mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html mgl_en.dvi \
+	  mgl_en.pdf mgl_en.ps mgl_en.html mgl_ru.dvi mgl_ru.pdf \
+	  mgl_ru.ps mgl_ru.html" \
 	|| rm -rf mathgl_en.dvi mathgl_en.pdf mathgl_en.ps mathgl_en.html mathgl_ru.dvi \
-	  mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html
+	  mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html mgl_en.dvi \
+	  mgl_en.pdf mgl_en.ps mgl_en.html mgl_ru.dvi mgl_ru.pdf \
+	  mgl_ru.ps mgl_ru.html
 
 maintainer-clean-aminfo:
 	@list='$(INFO_DEPS)'; for i in $$list; do \
@@ -546,7 +651,7 @@ maintainer-clean-aminfo:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -571,7 +676,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -935,16 +1040,18 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
 	uninstall-local uninstall-pdf-am uninstall-ps-am
 
 
-#install-data-local: install-html install-pdf
-install-data-local: install-html
-	mkdir -p $(mglpng)
-	cp -r $(top_srcdir)/texinfo/png_static/*.png $(mglpng)
+#mglpng=$(DESTDIR)$(docdir)/png_static
 
+#install-data-local: install-html install-pdf
+install-data-local: 
+#	mkdir -p $(mglpng)
+#	cp -r $(top_srcdir)/texinfo/png_static/*.png $(mglpng)
 uninstall-local:
-	rm -rf $(mglpng)
+#	rm -rf $(mglpng)
 
 #all-local: html pdf
 all-local: html
+	./filter.py
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/texinfo/appendix_en.texi b/texinfo/appendix_en.texi
index b5ccc38..7841b66 100644
--- a/texinfo/appendix_en.texi
+++ b/texinfo/appendix_en.texi
@@ -11,7 +11,57 @@ The full list of TeX-like commands recognizable by MathGL is shown below. If com
 
 @strong{Accents}: \hat, \tilde, \dot, \ddot, \dddot, \ddddot, \acute, \check, \grave, \vec, \bar, \breve
 
- at strong{Special symbols}: \textquotedbl, \textdollar, \And, \textasciigrave, \textsubw, \colon, \less, \greater, \lbrack, \backslash, \rbrack, \textasciicircum, \lbrace, \vert, \rbrace, \textasciitilde, \aa, \ae, \textexclamdown, \textcent, \sterling, \textcurrency, \yen, \textbrokenbar, \S, \textasciidieresis, \textcopyright, \textordfeminine, \guillemotleft, \neg, \textregistered, \textasciimacron, \textdegree, \pm, \texttwosuperior, \textthreesuperior, \textasciiacute, \textmu, \P, \cdotp, \textonesuperior, \textordmasculine, \guillemotright, \textonequarter, \textonehalf, \textthreequarters, \textquestiondown, \AA, \AE, \DH, \times, \O, \TH, \ss, \dh, \div, \o, \th, \DJ, \dj, \textcrh, \L, \l, \OE, \oe, \NG, \ng, \textcrb, \texthtc, \textflorin, \texthvlig, \texthtk, \textctd, \textctl, \textctn, \textctt, \textdotlessj, \textbarl, \textcrlambda, \lambdabar, \Ohorn, \ohorn, \texthtp, \textlooptoprevesh, \textlhookt, \texthtt, \Uhorn, \uhorn, \Zbar, \textbenttailyogh, \textcrtwo, \textcrinvglotstop, \textpipe, \textdoublepipe, \textdoublebarpipe, \textexclam, \textturna, \textscripta, \textturnscripta, \texthtb, \textopeno, \textctc, \textrtaild, \texthtd, \textreve, \textschwa, \texthtg, \textscriptg, \textscg, \textgamma, \textramshorns, \textturnh, \texthth, \texththeng, \textbari, \textiota, \textturnmrleg, \textltailm, \textltailn, \textrtailn, \textscn, \textbaro, \textscoelig, \textcloseomega, \textphi, \textturnr, \textscr, \textinvscr, \textrtails, \textesh, \textbardotlessjvar, \textvibyi, \textctesh, \textturnt, \textrtailt, \textbaru, \textrtailz, \textctz, \textyogh, \textctyogh, \textglotstop, \textrevglotstop, \textinvglotstop, \textstretchcvar, \textbullseye, \textscb, \textrhookschwa, \textepsilon, \textrevepsilon, \textrhookrevepsilon, \textcloserevepsilon, \textbardotlessj, \textsci, \textltilde, \textbeltl, \textrtaill, \textlyoghlig, \textturnm, \textturnlonglegr, \textturnrrtail, \textlonglegr, \textrtailr, \textfishhookr, \textlhti, \textupsilon, \textscriptv, \textturnv, \textturnw, \textturny, \textscy, \textcloseepsilon, \texthtscg, \textsch, \textctj, \textturnk, \textscl, \texthtq, \textbarglotstop, \textbarrevglotstop, \textdzlig, \textdyoghlig, \textdctzlig, \texttslig, \texttctctlig, \texttctctlig, \textlongy, \textlongy, \ipasupgamma, \ipasupl, \ipasups, \ipasupx, \ipasuprerglotstpp, \tonebarextrahigh, \tonebarhigh, \tonebarmid, \tonebarlow, \tonebarextralow, \textsuph, \textsuphth, \textsupj, \textsupr, \textsupturnr, \textsupturnrrtail, \textsupinvscr, \textsupw, \textsupy, \cprime, \cdprime, \textturncomma, \rasp, \lasp, \texthamza, \textain, \textraiseglotstop, \textraiserevglotstop, \textlptr, \textrptr, \textuptr, \textdptr, \$\wedge$, \v, \textprimstress, \textmacron, \textacute, \textgrave, \textsecstress, \textlowmacron, \textlowgrave, \textlowacute, \textlengthmark, \texthalflength, \textrhalfring, \textlhalfring, \textraised, \textlowered, \textadvanced, \textretracted, \textbreve, \textdotaccent, \textringaccent, \textogonek, \textsmalltilde, \textdoubleacute, \textrhoticity, \textovercross, \ipavoicing, \ipaunaspirated, \sampi, \Alpha, \Beta, \Gamma, \Delta, \Epsilon, \Zeta, \Eta, \Theta, \Iota, \Kappa, \Lambda, \Mu, \Nu, \Xi, \Omicron, \Pi, \Rho, \Sigma, \Tau, \textsilon, \Phi, \Chi, \Psi, \Omega, \alpha, \beta, \gamma, \delta, \varepsilon, \zeta, \eta, \theta, \iota, \kappa, \lambda, \mu, \nu, \xi, \omicron, \pi, \rho, \varsigma, \sigma, \tau, \silon, \varphi, \chi, \psi, \omega, \varbeta, \vartheta, \silon, \phi, \varpi, \oldKoppa, \oldkoppa, \Stigma, \stigma, \Digamma, \digamma, \Koppa, \koppa, \varkappa, \varrho, \varTheta, \epsilon, \backepsilon, \textsca, \textsce, \textscu, \textlhookd, \textlhookk, \textlhookl, \texthooks, \testhookx, \texthookz, \texthyphen, \nobreakhyphen, \figdash, \endash, \emdash, \horizbar, \Vert, \twolowline, \lq, \rq, \dagger, \dag, \ddagger, \ddag, \textbullet, \enleadertwodots, \dots, \textperthousand, \textpertenthousand, \textprime, \prime, \textdprime, \dprime, \texttrprime, \trprime, \textbackprime, \backprime, \textbackdprime, \backdprime, \textbacktrprime, \backtrprime, \caretinsert, \guilsinglleft, \tieconcat, \hyphenbullet, \fracslash, \Question, \closure, \textAsterisks, \textdiscount, \textqprime, \qprime, \quotsinglbase, \quotsinglright, \textquotedblleft, \textquotedblright, \quotdblbase, \quotdblright, \guilsinglright, \textreferencemark, \Exclam, \overline, \textasterisklow, \textsemicolonreversed, \medmathspace, \supn, \textfranc, \textlira, \textpesetas, \euro, \BbbC, \incare, \Eulerconst, \scrI, \Im, \scrL, \ell, \BbbN, \textnumero, \textcircledP, \wp, \BbbP, \texttrademark, \BbbZ, \textoz, \textohm, \mho, \frakZ, \turnediota, \scrE, \scrF, \Finv, \scrM, \scro, \aleph, \beth, \gimel, \daleth, \Bbbsum, \Game, \sansLturned, \sansLmirrored, \Yup, \itBbbD, \itBbbd, \itBbbe, \itBbbi, \itBbbj, \scrg, \scrH, \frakH, \BbbH, \Planckconst, \hslash, \hbar, \BbbQ, \scrR, \Re, \BbbR, \textrecipe, \Angstrom, \scrB, \frakC, \textestimated, \scre, \Bbbpi, \Bbbgamma, \BbbGamma, \BbbPi, \PropertyLine, \upand, \fraconethird, \fractwothirds, \fraconefifth, \fractwofifths, \fracthreefifths, \fracfourfifths, \fraconesixth, \fracfivesixths, \fraconeeighth, \fracthreeeighths, \fracfiveeighths, \fracseveneights, \ldasharrhead, \leftdasharrow, \leftdasharrowhead, \rightdasharrow, \updasharrow, \leftarrow, \gets, \shortleftarrow, \uparrow, \rightarrow, \to, \shortrightarrow, \downarrow, \leftrightarrow, \updownarrow, \nwarrow, \nearrow, \searrow, \swarrow, \downdasharrow, \barleftarrow, \rightarrowbar, \leftwhitearrow, \upwhitearrow, \rightwhitearrow, \downwhitearrow, \nleftarrow, \nrightarrow, \leftsquigarrow, \rightsquigarrow, \leadsto, \twoheadleftarrow, \twoheaduparrow, \twoheadrightarrow, \twoheaddownarrow, \leftarrowtail, \rightarrowtail, \mapsfrom, \mapsup, \mapsto, \mapsdown, \updownarrowbar, \hookleftarrow, \hookrightarrow, \looparrowleft, \looparrowright, \leftrightsquigarrow, \nleftrightarrow, \downzigzagarrow, \Lsh, \Rsh, \Ldsh, \Rdsh, \linefeed, \carriagereturn, \curvearrowleft, \curvearrowright, \barovernorthwestarrow, \barleftarrowrightarrowbar, \acwopencirclearrow, \cwopencirclearrow, \leftharpoonup, \leftharpoondown, \upharpoonright, \upharpoonleft, \rightharpoonup, \rightharpoondown, \downharpoonright, \downharpoonleft, \rightleftarrows, \updownarrows, \leftrightarrows, \leftleftarrows, \upuparrows, \rightrightarrows, \downdownarrows, \leftrightharpoons, \rightleftharpoons, \nLeftarrow, \nLeftrightarrow, \nRightarrow, \Leftarrow, \Uparrow, \Rightarrow, \Downarrow, \Leftrightarrow, \Updownarrow, \Nwarrow, \Nearrow, \Searrow, \Swarrow, \Lleftarrow, \Rrightarrow, \leftsquigarrow, \rightsquigarrow, \nHuparrow, \nHdownarrow, \whitearrowupfrombar, \circleonrightarrow, \downuparrows, \rightthreearrows, \nvleftarrow, \nvrightarrow, \nvleftrightarrow, \nVleftarrow, \nVrightarrow, \nVleftrightarrow, \leftarrowtriangle, \rightarrowtriangle, \leftrightarrowtriangle, \forall, \complement, \partial, \exists, \nexists, \varnothing, \emptyset, \increment, \nabla, \in, \varin, \notin, \smallin, \ni, \owns, \varni, \nni, \smallni, \QED, \prod, \coprod, \amalg, \sum, \minus, \mp, \dotplus, \slash, \smallsetminus, \setminus, \ast, \circ, \bullet, \surd, \sqrt, \sqrt3, \sqrt4, \cuberoot, \fourthroot, \propto, \varpropto, \infty, \rightangle, \angle, \measuredangle, \sphericalangle, \mid, \nmid, \parallel, \nparallel, \wedge, \vee, \cap, \cup, \smallint, \int, \iint, \iiint, \oint, \oiint, \oiiint, \intclockwise, \varointclockwise, \ointctrclockwise, \therefore, \because, \colon, \Colon, \dotminus, \dashcolon, \dotsminusdots, \kernelcontraction, \sim, \thicksim, \backsim, \ac, \sinewave, \wr, \nsim, \eqsim, \simeq, \nsime, \cong, \simneqq, \ncong, \approx, \thickapprox, \napprox, \approxeq, \approxident, \backcong, \asymp, \Bumpeq, \bumpeq, \doteq, \Doteq, \fallingdotseq, \risingdotseq, \coloneq, \eqcolon, \eqcirc, \circeq, \arceq, \wedgeq, \veeeq, \stareq, \triangleq, \eqdef, \measeq, \questeq, \ne, \neq, \equiv, \nequiv, \Equiv, \leq, \le, \geq, \ge, \leqq, \geqq, \lneqq, \gneqq, \ll, \gg, \between, \nasymp, \nless, \ngtr, \nleq, \ngeq, \lesssim, \gtrsim, \nlesssim, \ngtrsim, \lessgtr, \gtrless, \nlessgtr, \ngtrless, \prec, \succ, \preccurlyeq, \succcurlyeq, \precsim, \succsim, \nprec, \nsucc, \subset, \supset, \nsubset, \nsupset, \subseteq, \supseteq, \nsubseteq, \nsupseteq, \subsetneq, \supsetneq, \cupleftarrow, \cupdot, \uplus, \sqsubset, \sqsupset, \sqsubseteq, \sqsupseteq, \sqcap, \sqcup, \oplus, \ominus, \otimes, \oslash, \odot, \circledcirc, \circledast, \circledequal, \circleddash, \boxplus, \boxminus, \boxtimes, \boxdot, \vdash, \dashv, \top, \bot, \assert, \models, \vDash, \Vdash, \Vvdash, \VDash, \nvdash, \nvDash, \nVdash, \nVDash, \prurel, \scurel, \vartriangleleft, \lhd, \vartriangleright, \rhd, \trianglelefteq, \unlhd, \trianglerighteq, \unrhd, \origof, \imageof, \multimap, \hermitmatrix, \intercal, \veebar, \barwedge, \barvee, \measuredrightangle, \varlrtriangle, \bigwedge, \bigvee, \bigcap, \bigcup, \smalldiamond, \cdot, \star, \divideontimes, \bowtie, \ltimes, \rtimes, \leftthreetimes, \rightthreetimes, \backsimeq, \curlyvee, \curlywedge, \Subset, \Supset, \Cap, \Cup, \pitchfork, \equalparallel, \lessdot, \gtrdot, \lll, \ggg, \lesseqgtr, \gtreqless, \eqless, \eqgtr, \curlyeqprec, \curlyeqsucc, \npreccurlyeq, \nsucccurlyeq, \nsqsubseteq, \nsqsupseteq, \sqsubsetneq, \sqsupsetneq, \lnsim, \gnsim, \precnsim, \succnsim, \ntriangleleft, \ntriangleright, \ntrianglelefteq, \ntrianglerighteq, \vdots, \cdots, \adots, \ddots, \disin, \varisins, \isins, \isindot, \varisinobar, \isinobar, \isinvb, \isinE, \nisd, \varnis, \nis, \varniobar, \niobar, \bagmember, \diameter, \house, \varbarwedge, \vardoublebarwedge, \lceil, \rceil, \lfloor, \rfloor, \drcrop, \dlcrop, \urcrop, \ulcrop, \invnot, \sqlozenge, \profline, \profsurf, \recorder, \target, \viewdata, \cloverleaf, \turnednot, \watchicon, \ulcorner, \urcorner, \llcorner, \lrcorner, \inttop, \intbottom, \frown, \smile, \clangle, \crangle, \varhexagonlrbonds, \cylcty, \profalar, \conictaper, \topbot, \obar, \APLnotslash, \APLnotbackslash, \APLboxupcaret, \APLboxquestion, \rangledownzigzagarrow, \dircurrent, \hexagon, \lparenuend, \lparenextender, \lparenlend, \rparenuend, \rparenextender, \rparenlend, \lbrackuend, \lbrackextender, \lbracklend, \rbrackuend, \rbrackextender, \rbracklend, \lbraceuend, \lbracemid, \lbracelend, \vbraceextender, \rbraceuend, \rbracemid, \rbracelend, \intextender, \harrowextender, \lmoustache, \rmoustache, \sumtop, \sumbottom, \overbracket, \underbracket, \bbrktbrk, \sqrtbottom, \lvboxline, \rvboxline, \carreturn, \varrowextender, \overparen, \underparen, \overbrace, \underbrace, \obrbrak, \ubrbrak, \trapezium, \benzenr, \strns, \fltns, \accurrent, \elinters, \textvisiblespace, \circledone, \circledtwo, \circledthree, \circledfour, \circledfive, \circledsix, \circledseven, \circledeight, \circlednine, \circledA, \circledB, \circledC, \circledD, \circledE, \circledF, \circledG, \circledH, \circledI, \circledJ, \circledK, \circledL, \circledM, \circledN, \circledO, \circledP, \circledQ, \circledR, \circledS, \circledT, \circledU, \circledV, \circledW, \circledX, \circledY, \circledZ, \circleda, \circledb, \circledc, \circledd, \circlede, \circledf, \circledg, \circledh, \circledi, \circledj, \circledk, \circledl, \circledm, \circledn, \circledo, \circledp, \circledq, \circledr, \circleds, \circledt, \circledu, \circledv, \circledw, \circledx, \circledy, \circledz, \circledzero, \bdhrule, \bdvrule, \bdtriplevdash, \bdquadhdash, \bdquadvdash, \bddvrh, \bddvlh, \bduvrh, \bduvlh, \bdbvrh, \bdbvlh, \bddvbh, \bduvbh, \bdbvbh, \bdHrule, \bdVrule, \bddvrH, \bddVrh, \bddVrH, \bddvlH, \bddVlh, \bddVlH, \bduvrH, \bduVrh, \bduVrH, \bduvlH, \bduVlh, \bduVlH, \bdbvrH, \bdbVrh, \bdbVrH, \bdbvlH, \bdbVlh, \bdbVlH, \bddvbH, \bddVbh, \bddVbH, \bduvbH, \bduVbh, \bduVbH, \bdbvbH, \bdbVbh, \bdbVbH, \bdnesw, \bdnwse, \blockuphalf, \blocklowhalf, \blockfull, \blocklefthalf, \blockrighthalf, \blockqtrshaded, \blockhalfshaded, \blockthreeqtrshaded, \mdlgblksquare, \mdlgwhtsquare, \squoval, \blackinwhitesquare, \squarehfill, \squarevfill, \squarehvfill, \squarenwsefill, \squareneswfill, \squarecrossfill, \squaregrayfill, \smblksquare, \smwhtsquare, \hrectangleblack, \hrectangle, \vrectangleblack, \vrectangle, \parallelogramblack, \parallelogram, \bigblacktriangleup, \bigtriangleup, \blacktriangle, \vartriangle, \blacktriangleright, \triangleright, \smallblacktriangleright, \smalltriangleright, \blackpointerright, \whitepointerright, \bigblacktriangledown, \bigtriangledown, \blacktriangledown, \triangledown, \blacktriangleleft, \triangleleft, \smallblacktriangleleft, \smalltriangleleft, \blackpointerleft, \whitepointerleft, \mdlgblkdiamond, \mdlgwhtdiamond, \diamond, \blackinwhitediamond, \fisheye, \lozenge, \mdlgwhtcircle, \dottedcircle, \circlevertfill, \bullseye, \mdlgblkcircle, \circlelefthalfblack, \circlerighthalfblack, \circlebottomhalfblack, \circletophalfblack, \circleurquadblack, \blackcircleulquadwhite, \blacklefthalfcircle, \blackrighthalfcircle, \inversebullet, \inversewhitecircle, \invwhiteupperhalfcircle, \invwhitelowerhalfcircle, \ularc, \urarc, \lrarc, \llarc, \topsemicircle, \botsemicircle, \lrblacktriangle, \llblacktriangle, \ulblacktriangle, \urblacktriangle, \smwhtcircle, \squareleftblack, \squareleftblack, \squareulblack, \squarelrblack, \boxbar, \trianglecdot, \triangleleftblack, \trianglerightblack, \lgwhtcircle, \squareulquad, \squarellquad, \squarelrquad, \squareurquad, \circleulquad, \circlellquad, \circlelrquad, \circleurquad, \ultriangle, \urtriangle, \lltriangle, \mdwhtsquare, \box, \mdblksquare, \mdsmwhtsquare, \mdsmblksquare, \lrtriangle, \bigstar, \bigwhitestar, \astrosun, \conjunction, \phone, \XBox, \danger, \frownie, \smiley, \blacksmiley, \sun, \rightmoon, \leftmoon, \mercury, \female, \earth, \male, \jupiter, \saturn, \neptune, \pluto, \aries, \taurus, \spadesuit, \heartsuit, \diamondsuit, \clubsuit, \varspadesuit, \varheartsuit, \vardiamondsuit, \varclubsuit, \quarternote, \eighthnote, \twonotes, \flat, \natural, \sharp, \acidfree, \dicei, \diceii, \diceiii, \diceiv, \dicev, \dicevi, \circledrightdot, \circledtwodots, \blackcircledrightdot, \blackcircledtwodots, \triangleexclam, \Hermaphrodite, \mdwhtcircl, \mdblkrcl, \mdsmwhtcircl, \neuter, \scissors, \envelope, \checkmark, \maltese, \circledstar, \varstar, \dingasterisk, \lbrbrak, \rbrbrak, \circledsansone, \circledsanstwo, \circledsansthree, \circledsansfour, \circledsansfive, \circledsanssix, \circledsansseven, \circledsanseight, \circledsansnine, \circledsansten, \blackcircledsansone, \blackcircledsanstwo, \blackcircledsansthree, \blackcircledsansfour, \blackcircledsansfive, \blackcircledsanssix, \blackcircledsansseven, \blackcircledsanseight, \blackcircledsansnine, \blackcircledsansten, \draftingarrow, \threedangle, \whiteinwhitetriangle, \perp, \subsetcirc, \supsetcirc, \lbag, \rbag, \veedot, \bsolhsub, \suphsol, \longdivision, \diamondcdot, \wedgedot, \upin, \pullback, \pushout, \leftouterjoin, \rightouterjoin, \fullouterjoin, \bigbot, \bigtop, \DashVDash, \dashVdash, \multimapinv, \vlongdash, \longdashv, \cirbot, \lozengeminus, \concavediamond, \concavediamondtickleft, \concavediamondtickright, \whitesquaretickleft, \whitesquaretickright, \lBrack, \rBrack, \langle, \rangle, \lAngle, \rAngle, \Lbrbrak, \Rbrbrak, \UUparrow, \DDownarrow, \acwgapcirclearrow, \cwgapcirclearrow, \rightarrowonoplus, \longleftarrow, \longrightarrow, \longleftrightarrow, \Longleftarrow, \Longrightarrow, \Longleftrightarrow, \longmapsfrom, \longmapsto, \Longmapsfrom, \Longmapsto, \longrightsquigarrow, \nvtwoheadrightarrow, \nVtwoheadrightarrow, \nvLeftarrow, \nvRightarrow, \nvLeftrightarrow, \twoheadmapsto, \Mapsfrom, \Mapsto, \downarrowbarred, \uparrowbarred, \Uuparrow, \Ddownarrow, \leftbkarrow, \rightbkarrow, \leftdbkarrow, \dbkarow, \drbkarow, \rightdotarrow, \baruparrow, \downarrowbar, \nvrightarrowtail, \nVrightarrowtail, \twoheadrightarrowtail, \nvtwoheadrightarrowtail, \nVtwoheadrightarrowtail, \lefttail, \righttail, \leftdbltail, \rightdbltail, \diamondleftarrow, \rightarrowdiamond, \diamondleftarrowbar, \barrightarrowdiamond, \nwsearrow, \neswarrow, \hknwarrow, \hknearrow, \hksearow, \hkswarow, \tona, \toea, \tosa, \towa, \rdiagovfdiag, \fdiagovrdiag, \seovnearrow, \neovsearrow, \fdiagovnearrow, \rdiagovsearrow, \neovnwarrow, \nwovnearrow, \rightcurvedarrow, \uprightcurvearrow, \downrightcurvedarrow, \leftdowncurvedarrow, \rightdowncurvedarrow, \cwrightarcarrow, \acwleftarcarrow, \acwoverarcarrow, \acwundercurvearrow, \curvearrowrightminus, \curvearrowleftplus, \cwundercurvearrow, \ccwundercurvearrow, \acwcirclearrow, \cwcirclearrow, \rightarrowshortleftarrow, \leftarrowshortrightarrow, \shortrightarrowleftarrow, \rightarrowplus, \leftarrowplus, \rightarrowx, \leftrightarrowcircle, \twoheaduparrowcircle, \leftrightharpoonupdown, \leftrightharpoondownup, \updownharpoonrightleft, \updownharpoonleftright, \leftrightharpoonupup, \updownharpoonrightright, \leftrightharpoondowndown, \updownharpoonleftleft, \barleftharpoonup, \rightharpoonupbar, \barupharpoonright, \downharpoonrightbar, \barleftharpoondown, \rightharpoondownbar, \barupharpoonleft, \downharpoonleftbar, \leftharpoonupbar, \barrightharpoonup, \upharpoonrightbar, \bardownharpoonright, \leftharpoondownbar, \barrightharpoondown, \upharpoonleftbar, \bardownharpoonleft, \leftharpoonsupdown, \upharpoonsleftright, \rightharpoonsupdown, \downharpoonsleftright, \leftrightharpoonsup, \leftrightharpoonsdown, \rightleftharpoonsup, \rightleftharpoonsdown, \leftharpoonupdash, \dashleftharpoondown, \rightharpoonupdash, \dashrightharpoondown, \updownharpoonsleftright, \downupharpoonsleftright, \rightimply, \equalrightarrow, \similarrightarrow, \leftarrowsimilar, \rightarrowsimilar, \rightarrowapprox, \ltlarr, \leftarrowless, \gtrarr, \subrarr, \leftarrowsubset, \suplarr, \leftfishtail, \rightfishtail, \upfishtail, \downfishtail, \Vvert, \mdsmblkcircle, \typecolon, \lBrace, \rBrace, \lParen, \rParen, \llparenthesis, \rrparenthesis, \llangle, \rrangle, \lbrackubar, \rbrackubar, \lbrackultick, \rbracklrtick, \lbracklltick, \rbrackurtick, \langledot, \rangledot, \lparenless, \rparengtr, \Lparengtr, \Rparenless, \lblkbrbrak, \rblkbrbrak, \fourvdots, \vzigzag, \measuredangleleft, \rightanglesqr, \rightanglemdot, \angles, \angdnr, \gtlpar, \sphericalangleup, \turnangle, \revangle, \angleubar, \revangleubar, \wideangledown, \wideangleup, \measanglerutone, \measanglelutonw, \measanglerdtose, \measangleldtosw, \measangleurtone, \measangleultonw, \measangledrtose, \measangledltosw, \revemptyset, \emptysetobar, \emptysetocirc, \emptysetoarr, \emptysetoarrl, \circlehbar, \circledvert, \circledparallel, \obslash, \operp, \obot, \olcross, \odotslashdot, \uparrowoncircle, \circledwhitebullet, \circledbullet, \olessthan, \ogreaterthan, \cirscir, \cirE, \boxdiag, \boxbslash, \boxast, \boxcircle, \boxbox, \boxonbox, \triangleodot, \triangleubar, \triangles, \triangleserifs, \rtriltri, \ltrivb, \vbrtri, \lfbowtie, \rfbowtie, \fbowtie, \lftimes, \rftimes, \hourglass, \blackhourglass, \lvzigzag, \rvzigzag, \Lvzigzag, \Rvzigzag, \iinfin, \tieinfty, \nvinfty, \dualmap, \laplac, \lrtriangleeq, \shuffle, \eparsl, \smeparsl, \eqvparsl, \gleichstark, \thermod, \downtriangleleftblack, \downtrianglerightblack, \blackdiamonddownarrow, \mdlgblklozenge, \circledownarrow, \blackcircledownarrow, \errbarsquare, \errbarblacksquare, \errbardiamond, \errbarblackdiamond, \errbarcircle, \errbarblackcircle, \ruledelayed, \setminus, \dsol, \rsolbar, \xsol, \xbsol, \doubleplus, \tripleplus, \lcurvyangle, \rcurvyangle, \tplus, \tminus, \sumint, \iiiint, \intbar, \intBar, \fint, \circfint, \awint, \rppolint, \scpolint, \npolint, \pointnt, \sqint, \intlharhk, \intx, \intcap, \intcup, \upint, \lowint, \zpipe, \ringplus, \plushat, \simplus, \plusdot, \plussim, \plussubtwo, \plustrif, \commaminus, \minusdot, \minusfdots, \minusrdots, \opluslhrim, \oplusrhrim, \vectimes, \dottimes, \timesbar, \btimes, \smashtimes, \otimeslhrim, \otimesrhrim, \otimeshat, \Otimes, \odiv, \triangleplus, \triangleminus, \triangletimes, \intprod, \intprodr, \fcmp, \amalg, \capdot, \uminus, \barcup, \barcap, \capwedge, \cupvee, \twocups, \twocaps, \closedvarcup, \closedvarcap, \Sqcap, \Sqcup, \closedvarcupsmashprod, \wedgeodot, \veeodot, \Wedge, \Vee, \wedgeonwedge, \veeonvee, \bigslopedvee, \bigslopedwedge, \veeonwedge, \wedgemidvert, \veemidvert, \midbarwedge, \midbarvee, \doublebarwedge, \wedgebar, \wedgedoublebar, \varveebar, \doublebarvee, \veedoublebar, \dsub, \rsub, \eqdot, \dotequiv, \equivVert, \equivVvert, \dotsim, \simrdots, \simminussim, \congdot, \asteq, \hatapprox, \approxeqq, \eqqplus, \pluseqq, \eqqsim, \Coloneq, \eqeq, \eqeqeq, \ddotseq, \equivDD, \ltcir, \gtcir, \ltquest, \gtquest, \leqslant, \geqslant, \lesdot, \gesdot, \lesdoto, \gesdoto, \lesdotor, \gesdotol, \lessapprox, \gtrapprox, \lneq, \gneq, \lnapprox, \gnapprox, \lesseqqgtr, \gtreqqless, \lsime, \gsime, \lsimg, \gsiml, \lgE, \glE, \lesges, \gesles, \eqslantless, \eqslantgtr, \elsdot, \egsdot, \eqqless, \eqqgtr, \eqqslantless, \eqqslantgtr, \simless, \simgtr, \simlE, \simgE, \Lt, \Gt, \partialmeetcontraction, \glj, \gla, \ltcc, \gtcc, \lescc, \gescc, \smt, \lat, \smte, \late, \bumpeqq, \preceq, \succeq, \precneq, \succneq, \preceqq, \succeqq, \precneqq, \succneqq, \precapprox, \succapprox, \precnapprox, \succnapprox, \Prec, \Sc, \subsetdot, \supsetdot, \subsetplus, \supsetplus, \submult, \supmult, \subedot, \supedot, \subseteqq, \supseteqq, \subsim, \supsim, \subsetapprox, \supsetapprox, \subsetneqq, \supsetneqq, \lsqhook, \rsqhook, \csub, \csup, \csube, \csupe, \subsup, \supsub, \subsub, \supsup, \suphsub, \supdsub, \forkv, \topfork, \mlcp, \forks, \forksnot, \shortlefttack, \shortdowntack, \shortuptack, \perps, \vDdash, \dashV, \Dashv, \DashV, \varVdash, \Barv, \vBar, \vBarv, \barV, \Vbar, \Not, \bNot, \revnmid, \cirmid, \midcir, \topcir, \nhpar, \parsim, \interleave, \nhVvert, \threedotcolon, \lllnest, \gggnest, \leqqslant, \leqqslant, \talloblong, \squareurblack, \squarellblack, \diamondleftblack, \diamondrightblack, \diamondtopblack, \diamondbotblack, \dottedsquare, \lgblksquare, \lgwhtsquare, \vysmlblksquare, \vysmlwhtsquare, \pentagonblack, \pentagon, \varhexagon, \varhexagonblack, \hexagonblack, \lgblkcircle, \mdblkdiamond, \mdwhtdiamond, \mdblklozenge, \mdwhtlozenge, \smblkdiamond, \smblklozenge, \smwhtlozenge, \blkhorzoval, \whthorzoval, \blkvertoval, \whtvertoval, \circleonleftarrow, \leftthreearrows, \leftarrowonoplus, \longleftsquigarrow, \nvtwoheadleftarrow, \nVtwoheadleftarrow, \twoheadmapsfrom, \twoheadleftdbkarrow, \leftdotarrow, \nvleftarrowtail, \nVleftarrowtail, \twoheadleftarrowtail, \nvtwoheadleftarrowtail, \nVtwoheadleftarrowtail, \leftarrowx, \leftcurvedarrow, \equalleftarrow, \bsimilarleftarrow, \leftarrowbackapprox, \rightarrowgtr, \rightarrowsupset, \LLeftarrow, \RRightarrow, \bsimilarrightarrow, \rightarrowbackapprox, \similarleftarrow, \leftarrowapprox, \leftarrowbsimilar, \righarrowbsimilar, \medwhitestar, \medblackstar, \smwhitestar, \rightpentagonblack, \rightpentagon, \postalmark, \hzigzag, \hiraganano, \textheng, \texthen, \calB, \calE, \calF, \calH, \calM, \calR.
+ at strong{Special symbols}:
+
+\# (#), \% (%), \& (&), \^ (^).
+
+\AA (Å), \AE (Æ), \APLboxquestion (⍰), \APLboxupcaret (⍓), \APLnotbackslash (⍀), \APLnotslash (⌿), \Alpha (Α), \And (&), \Angstrom (Å), \Barv (⫧), \BbbC (ℂ), \BbbGamma (ℾ), \BbbH (ℍ), \BbbN (ℕ), \BbbP (ℙ), \BbbPi (ℿ), \BbbQ (ℚ), \BbbR (ℝ), \BbbZ (ℤ), \Bbbgamma (ℽ), \Bbbpi (ℼ), \Bbbsum (⅀), \Beta (Β), \Bumpeq (≎), \Cap (⋒), \Chi (Χ), \Colon (∷), \Coloneq (⩴), \Cup (⋓), \DDownarrow (⟱), \DH (Ð), \DJ (Đ), \DashV (⫥), \DashVDash (⟚), \Dashv (⫤), \Ddownarrow (⤋), \Delta (Δ), \Digamma (Ϝ), \Doteq (≑), \Downarrow (⇓), \Epsilon (Ε), \Equiv (≣), \Eta (Η), \Eulerconst (ℇ), \Exclam (‼), \Finv (Ⅎ), \Game (⅁), \Gamma (Γ), \Gt (⪢), \Hermaphrodite (⚥), \Im (ℑ), \Iota (Ι), \Kappa (Κ), \Koppa (Ϟ), \L (Ł), \LLeftarrow (⭅), \Lambda (Λ), \Lbrbrak (⟬), \Ldsh (↲), \Leftarrow (⇐), \Leftrightarrow (⇔), \Lleftarrow (⇚), \Longleftarrow (⟸), \Longleftrightarrow (⟺), \Longmapsfrom (⟽), \Longmapsto (⟾), \Longrightarrow (⟹), \Lparengtr (⦕), \Lsh (↰), \Lt (⪡), \Lvzigzag (⧚), \Mapsfrom (⤆), \Mapsto (⤇), \Mu (Μ), \NG (Ŋ), \Nearrow (⇗), \Not (⫬), \Nu (Ν), \Nwarrow (⇖), \O (Ø), \OE (Œ), \Ohorn (Ơ), \Omega (Ω), \Omicron (Ο), \Otimes (⨷), \P (¶), \Phi (Φ), \Pi (Π), \Planckconst (ℎ), \Prec (⪻), \PropertyLine (⅊), \Psi (Ψ), \QED (∎), \Question (⁇), \RRightarrow (⭆), \Rbrbrak (⟭), \Rdsh (↳), \Re (ℜ), \Rho (Ρ), \Rightarrow (⇒), \Rparenless (⦖), \Rrightarrow (⇛), \Rsh (↱), \Rvzigzag (⧛), \S (§), \Sc (⪼), \Searrow (⇘), \Sigma (Σ), \Sqcap (⩎), \Sqcup (⩏), \Stigma (Ϛ), \Subset (⋐), \Supset (⋑), \Swarrow (⇙), \TH (Þ), \Tau (Τ), \Theta (Θ), \UUparrow (⟰), \Uhorn (Ư), \Uparrow (⇑), \Updownarrow (⇕), \Uuparrow (⤊), \VDash (⊫), \Vbar (⫫), \Vdash (⊩), \Vee (⩔), \Vert (‖), \Vvdash (⊪), \Vvert (⦀), \Wedge (⩓), \XBox (☒), \Xi (Ξ), \Yup (⅄), \Zbar (Ƶ), \Zeta (Ζ).
+
+\aa (å), \ac (∾), \accurrent (⏦), \acidfree (♾), \acwcirclearrow (⥀), \acwgapcirclearrow (⟲), \acwleftarcarrow (⤹), \acwopencirclearrow (↺), \acwoverarcarrow (⤺), \acwundercurvearrow (⤻), \adots (⋰), \ae (æ), \aleph (ℵ), \alpha (α), \amalg (⨿), \angdnr (⦟), \angle (∠), \angles (⦞), \angleubar (⦤), \approx (≈), \approxeq (≊), \approxeqq (⩰), \approxident (≋), \arceq (≘), \aries (♈), \assert (⊦), \ast (∗), \asteq (⩮), \astrosun (☉), \asymp (≍), \awint (⨑).
+
+\bNot (⫭), \backcong (≌), \backdprime (‶), \backepsilon (϶), \backprime (‵), \backsim (∽), \backsimeq (⋍), \backslash (\), \backtrprime (‷), \bagmember (⋿), \barV (⫪), \barcap (⩃), \barcup (⩂), \bardownharpoonleft (⥡), \bardownharpoonright (⥝), \barleftarrow (⇤), \barleftarrowrightarrowbar (↹), \barleftharpoondown (⥖), \barleftharpoonup (⥒), \barovernorthwestarrow (↸), \barrightarrowdiamond (⤠), \barrightharpoondown (⥟), \barrightharpoonup (⥛), \baruparrow (⤒), \barupharpoonleft (⥘), \barupharpoonright (⥔), \barvee (⊽), \barwedge (⊼), \bbrktbrk (⎶), \bdHrule (═), \bdVrule (║), \bdbVbH (╬), \bdbVbh (╫), \bdbVlH (╣), \bdbVlh (╢), \bdbVrH (╠), \bdbVrh (╟), \bdbvbH (╪), \bdbvbh (┼), \bdbvlH (╡), \bdbvlh (┤), \bdbvrH (╞), \bdbvrh (├), \bddVbH (╦), \bddVbh (╥), \bddVlH (╗), \bddVlh (╖), \bddVrH (╔), \bddVrh (╓), \bddvbH (╤), \bddvbh (┬), \bddvlH (╕), \bddvlh (┐), \bddvrH (╒), \bddvrh (┌), \bdhrule (─), \bdnesw (╱), \bdnwse (╲), \bdquadhdash (┈), \bdquadvdash (┊), \bdtriplevdash (┆), \bduVbH (╩), \bduVbh (╨), \bduVlH (╝), \bduVlh (╜), \bduVrH (╚), \bduVrh (╙), \bduvbH (╧), \bduvbh (┴), \bduvlH (╛), \bduvlh (┘), \bduvrH (╘), \bduvrh (└), \bdvrule (│), \because (∵), \benzenr (⏣), \beta (β), \beth (ℶ), \between (≬), \bigblacktriangledown (▼), \bigblacktriangleup (▲), \bigbot (⟘), \bigcap (⋂), \bigcup (⋃), \bigslopedvee (⩗), \bigslopedwedge (⩘), \bigstar (★), \bigtop (⟙), \bigtriangledown (▽), \bigtriangleup (△), \bigvee (⋁), \bigwedge (⋀), \bigwhitestar (☆), \blackcircledownarrow (⧭), \blackcircledrightdot (⚈), \blackcircledsanseight (➑), \blackcircledsansfive (➎), \blackcircledsansfour (➍), \blackcircledsansnine (➒), \blackcircledsansone (➊), \blackcircledsansseven (➐), \blackcircledsanssix (➏), \blackcircledsansten (➓), \blackcircledsansthree (➌), \blackcircledsanstwo (➋), \blackcircledtwodots (⚉), \blackcircleulquadwhite (◕), \blackdiamonddownarrow (⧪), \blackhourglass (⧗), \blackinwhitediamond (◈), \blackinwhitesquare (▣), \blacklefthalfcircle (◖), \blackpointerleft (◄), \blackpointerright (►), \blackrighthalfcircle (◗), \blacksmiley (☻), \blacktriangle (▴), \blacktriangledown (▾), \blacktriangleleft (◀), \blacktriangleright (▶), \blkhorzoval (⬬), \blkvertoval (⬮), \blockfull (█), \blockhalfshaded (▒), \blocklefthalf (▌), \blocklowhalf (▄), \blockqtrshaded (░), \blockrighthalf (▐), \blockthreeqtrshaded (▓), \blockuphalf (▀), \bot (⊥), \botsemicircle (◡), \bowtie (⋈), \box (◻), \boxast (⧆), \boxbar (◫), \boxbox (⧈), \boxbslash (⧅), \boxcircle (⧇), \boxdiag (⧄), \boxdot (⊡), \boxminus (⊟), \boxonbox (⧉), \boxplus (⊞), \boxtimes (⊠), \bsimilarleftarrow (⭁), \bsimilarrightarrow (⭇), \bsolhsub (⟈), \btimes (⨲), \bullet (∙), \bullseye (◎), \bumpeq (≏), \bumpeqq (⪮).
+
+\calB (ℬ), \calE (ℰ), \calF (ℱ), \calH (ℋ), \calM (ℳ), \calR (ℛ), \cap (∩), \capdot (⩀), \capwedge (⩄), \caretinsert (‸), \carreturn (⏎), \carriagereturn (↵), \ccwundercurvearrow (⤿), \cdot (⋅), \cdotp (·), \cdots (⋯), \cdprime (ʺ), \checkmark (✓), \chi (χ), \cirE (⧃), \cirbot (⟟), \circ (∘), \circeq (≗), \circfint (⨐), \circlebottomhalfblack (◒), \circledA (Ⓐ), \circledB (Ⓑ), \circledC (Ⓒ), \circledD (Ⓓ), \circledE (Ⓔ), \circledF (Ⓕ), \circledG (Ⓖ), \circledH (Ⓗ), \circledI (Ⓘ), \circledJ (Ⓙ), \circledK (Ⓚ), \circledL (Ⓛ), \circledM (Ⓜ), \circledN (Ⓝ), \circledO (Ⓞ), \circledP (Ⓟ), \circledQ (Ⓠ), \circledR (Ⓡ), \circledS (Ⓢ), \circledT (Ⓣ), \circledU (Ⓤ), \circledV (Ⓥ), \circledW (Ⓦ), \circledX (Ⓧ), \circledY (Ⓨ), \circledZ (Ⓩ), \circleda (ⓐ), \circledast (⊛), \circledb (ⓑ), \circledbullet (⦿), \circledc (ⓒ), \circledcirc (⊚), \circledd (ⓓ), \circleddash (⊝), \circlede (ⓔ), \circledeight (⑧), \circledequal (⊜), \circledf (ⓕ), \circledfive (⑤), \circledfour (④), \circledg (ⓖ), \circledh (ⓗ), \circledi (ⓘ), \circledj (ⓙ), \circledk (ⓚ), \circledl (ⓛ), \circledm (ⓜ), \circledn (ⓝ), \circlednine (⑨), \circledo (ⓞ), \circledone (①), \circledownarrow (⧬), \circledp (ⓟ), \circledparallel (⦷), \circledq (ⓠ), \circledr (ⓡ), \circledrightdot (⚆), \circleds (ⓢ), \circledsanseight (➇), \circledsansfive (➄), \circledsansfour (➃), \circledsansnine (➈), \circledsansone (➀), \circledsansseven (➆), \circledsanssix (➅), \circledsansten (➉), \circledsansthree (➂), \circledsanstwo (➁), \circledseven (⑦), \circledsix (⑥), \circledstar (✪), \circledt (ⓣ), \circledthree (③), \circledtwo (②), \circledtwodots (⚇), \circledu (ⓤ), \circledv (ⓥ), \circledvert (⦶), \circledw (ⓦ), \circledwhitebullet (⦾), \circledx (ⓧ), \circledy (ⓨ), \circledz (ⓩ), \circledzero (⓪), \circlehbar (⦵), \circlelefthalfblack (◐), \circlellquad (◵), \circlelrquad (◶), \circleonleftarrow (⬰), \circleonrightarrow (⇴), \circlerighthalfblack (◑), \circletophalfblack (◓), \circleulquad (◴), \circleurquad (◷), \circleurquadblack (◔), \circlevertfill (◍), \cirmid (⫯), \cirscir (⧂), \clangle (〈), \closedvarcap (⩍), \closedvarcup (⩌), \closedvarcupsmashprod (⩐), \closure (⁐), \cloverleaf (⌘), \clubsuit (♣), \colon (:), \colon (∶), \coloneq (≔), \commaminus (⨩), \complement (∁), \concavediamond (⟡), \concavediamondtickleft (⟢), \concavediamondtickright (⟣), \cong (≅), \congdot (⩭), \conictaper (⌲), \conjunction (☌), \coprod (∐), \cprime (ʹ), \crangle (〉), \csub (⫏), \csube (⫑), \csup (⫐), \csupe (⫒), \cuberoot (∛), \cup (∪), \cupdot (⊍), \cupleftarrow (⊌), \cupvee (⩅), \curlyeqprec (⋞), \curlyeqsucc (⋟), \curlyvee (⋎), \curlywedge (⋏), \curvearrowleft (↶), \curvearrowleftplus (⤽), \curvearrowright (↷), \curvearrowrightminus (⤼), \cwcirclearrow (⥁), \cwgapcirclearrow (⟳), \cwopencirclearrow (↻), \cwrightarcarrow (⤸), \cwundercurvearrow (⤾), \cylcty (⌭).
+
+\dag (†), \dagger (†), \daleth (ℸ), \danger (☡), \dashV (⫣), \dashVdash (⟛), \dashcolon (∹), \dashleftharpoondown (⥫), \dashrightharpoondown (⥭), \dashv (⊣), \dbkarow (⤏), \ddag (‡), \ddagger (‡), \ddots (⋱), \ddotseq (⩷), \delta (δ), \dh (ð), \diameter (⌀), \diamond (◇), \diamondbotblack (⬙), \diamondcdot (⟐), \diamondleftarrow (⤝), \diamondleftarrowbar (⤟), \diamondleftblack (⬖), \diamondrightblack (⬗), \diamondsuit (♢), \diamondtopblack (⬘), \dicei (⚀), \diceii (⚁), \diceiii (⚂), \diceiv (⚃), \dicev (⚄), \dicevi (⚅), \digamma (ϝ), \dingasterisk (✽), \dircurrent (⎓), \disin (⋲), \div (÷), \divideontimes (⋇), \dj (đ), \dlcrop (⌍), \doteq (≐), \dotequiv (⩧), \dotminus (∸), \dotplus (∔), \dots (…), \dotsim (⩪), \dotsminusdots (∺), \dottedcircle (◌), \dottedsquare (⬚), \dottimes (⨰), \doublebarvee (⩢), \doublebarwedge (⩞), \doubleplus (⧺), \downarrow (↓), \downarrowbar (⤓), \downarrowbarred (⤈), \downdasharrow (⇣), \downdownarrows (⇊), \downfishtail (⥿), \downharpoonleft (⇃), \downharpoonleftbar (⥙), \downharpoonright (⇂), \downharpoonrightbar (⥕), \downharpoonsleftright (⥥), \downrightcurvedarrow (⤵), \downtriangleleftblack (⧨), \downtrianglerightblack (⧩), \downuparrows (⇵), \downupharpoonsleftright (⥯), \downwhitearrow (⇩), \downzigzagarrow (↯), \dprime (″), \draftingarrow (➛), \drbkarow (⤐), \drcrop (⌌), \dsol (⧶), \dsub (⩤), \dualmap (⧟).
+
+\earth (♁), \egsdot (⪘), \eighthnote (♪), \elinters (⏧), \ell (ℓ), \elsdot (⪗), \emdash (—), \emptyset (∅), \emptysetoarr (⦳), \emptysetoarrl (⦴), \emptysetobar (⦱), \emptysetocirc (⦲), \endash (–), \enleadertwodots (‥), \envelope (✉), \eparsl (⧣), \epsilon (ϵ), \eqcirc (≖), \eqcolon (≕), \eqdef (≝), \eqdot (⩦), \eqeq (⩵), \eqeqeq (⩶), \eqgtr (⋝), \eqless (⋜), \eqqgtr (⪚), \eqqless (⪙), \eqqplus (⩱), \eqqsim (⩳), \eqqslantgtr (⪜), \eqqslantless (⪛), \eqsim (≂), \eqslantgtr (⪖), \eqslantless (⪕), \equalleftarrow (⭀), \equalparallel (⋕), \equalrightarrow (⥱), \equiv (≡), \equivDD (⩸), \equivVert (⩨), \equivVvert (⩩), \eqvparsl (⧥), \errbarblackcircle (⧳), \errbarblackdiamond (⧱), \errbarblacksquare (⧯), \errbarcircle (⧲), \errbardiamond (⧰), \errbarsquare (⧮), \eta (η), \euro (€), \exists (∃).
+
+\fallingdotseq (≒), \fbowtie (⧓), \fcmp (⨾), \fdiagovnearrow (⤯), \fdiagovrdiag (⤬), \female (♀), \figdash (‒), \fint (⨏), \fisheye (◉), \flat (♭), \fltns (⏥), \forall (∀), \forks (⫝̸), \forksnot (⫝), \forkv (⫙), \fourthroot (∜), \fourvdots (⦙), \fracfiveeighths (⅝), \fracfivesixths (⅚), \fracfourfifths (⅘), \fraconeeighth (⅛), \fraconefifth (⅕), \fraconesixth (⅙), \fraconethird (⅓), \fracseveneights (⅞), \fracslash (⁄), \fracthreeeighths (⅜), \fracthreefifths (⅗), \fractwofifths (⅖), \fractwothirds (⅔), \frakC (ℭ), \frakH (ℌ), \frakZ (ℨ), \frown (⌢), \frownie (☹), \fullouterjoin (⟗).
+
+\gamma (γ), \ge (≥), \geq (≥), \geqq (≧), \geqslant (⩾), \gescc (⪩), \gesdot (⪀), \gesdoto (⪂), \gesdotol (⪄), \gesles (⪔), \gets (←), \gg (≫), \ggg (⋙), \gggnest (⫸), \gimel (ℷ), \glE (⪒), \gla (⪥), \gleichstark (⧦), \glj (⪤), \gnapprox (⪊), \gneq (⪈), \gneqq (≩), \gnsim (⋧), \greater (>), \gsime (⪎), \gsiml (⪐), \gtcc (⪧), \gtcir (⩺), \gtlpar (⦠), \gtquest (⩼), \gtrapprox (⪆), \gtrarr (⥸), \gtrdot (⋗), \gtreqless (⋛), \gtreqqless (⪌), \gtrless (≷), \gtrsim (≳), \guillemotleft («), \guillemotright (»), \guilsinglleft (‹), \guilsinglright (›).
+
+\harrowextender (⎯), \hatapprox (⩯), \hbar (ℏ), \heartsuit (♡), \hermitmatrix (⊹), \hexagon (⎔), \hexagonblack (⬣), \hiraganano (の), \hknearrow (⤤), \hknwarrow (⤣), \hksearow (⤥), \hkswarow (⤦), \hookleftarrow (↩), \hookrightarrow (↪), \horizbar (―), \hourglass (⧖), \house (⌂), \hrectangle (▭), \hrectangleblack (▬), \hslash (ℏ), \hyphenbullet (⁃), \hzigzag (〰).
+
+\iiiint (⨌), \iiint (∭), \iinfin (⧜), \iint (∬), \imageof (⊷), \in (∈), \incare (℅), \increment (∆), \infty (∞), \int (∫), \intBar (⨎), \intbar (⨍), \intbottom (⌡), \intcap (⨙), \intclockwise (∱), \intcup (⨚), \intercal (⊺), \interleave (⫴), \intextender (⎮), \intlharhk (⨗), \intprod (⨼), \intprodr (⨽), \inttop (⌠), \intx (⨘), \inversebullet (◘), \inversewhitecircle (◙), \invnot (⌐), \invwhitelowerhalfcircle (◛), \invwhiteupperhalfcircle (◚), \iota (ι), \ipasupgamma (ˠ), \ipasupl (ˡ), \ipasuprerglotstpp (ˤ), \ipasups (ˢ), \ipasupx (ˣ), \ipaunaspirated (˭), \ipavoicing (ˬ), \isinE (⋹), \isindot (⋵), \isinobar (⋷), \isins (⋴), \isinvb (⋸), \itBbbD (ⅅ), \itBbbd (ⅆ), \itBbbe (ⅇ), \itBbbi (ⅈ), \itBbbj (ⅉ).
+
+\jupiter (♃), \kappa (κ), \kernelcontraction (∻), \koppa (ϟ).
+
+\l (ł), \lAngle (⟪), \lBrace (⦃), \lBrack (⟦), \lParen (⦅), \lambda (λ), \lambdabar (ƛ), \langle (⟨), \langledot (⦑), \laplac (⧠), \lasp (ʽ), \lat (⪫), \late (⪭), \lbag (⟅), \lblkbrbrak (⦗), \lbrace (@{), \lbracelend (⎩), \lbracemid (⎨), \lbraceuend (⎧), \lbrack ([), \lbrackextender (⎢), \lbracklend (⎣), \lbracklltick (⦏), \lbrackubar (⦋), \lbrackuend (⎡), \lbrackultick (⦍), \lbrbrak (❲), \lceil (⌈), \lcurvyangle (⧼), \ldasharrhead (⇠), \le (≤), \leadsto (↝), \leftarrow (←), \leftarrowapprox (⭊), \leftarrowbackapprox (⭂), \leftarrowbsimilar (⭋), \leftarrowless (⥷), \leftarrowonoplus (⬲), \leftarrowplus (⥆), \leftarrowshortrightarrow (⥃), \leftarrowsimilar (⥳), \leftarrowsubset (⥺), \leftarrowtail (↢), \leftarrowtriangle (⇽), \leftarrowx (⬾), \leftbkarrow (⤌), \leftcurvedarrow (⬿), \leftdasharrow (⇠), \leftdasharrowhead (⇡), \leftdbkarrow (⤎), \leftdbltail (⤛), \leftdotarrow (⬸), \leftdowncurvedarrow (⤶), \leftfishtail (⥼), \leftharpoondown (↽), \leftharpoondownbar (⥞), \leftharpoonsupdown (⥢), \leftharpoonup (↼), \leftharpoonupbar (⥚), \leftharpoonupdash (⥪), \leftleftarrows (⇇), \leftmoon (☾), \leftouterjoin (⟕), \leftrightarrow (↔), \leftrightarrowcircle (⥈), \leftrightarrows (⇆), \leftrightarrowtriangle (⇿), \leftrightharpoondowndown (⥐), \leftrightharpoondownup (⥋), \leftrightharpoons (⇋), \leftrightharpoonsdown (⥧), \leftrightharpoonsup (⥦), \leftrightharpoonupdown (⥊), \leftrightharpoonupup (⥎), \leftrightsquigarrow (↭), \leftsquigarrow (↜), \leftsquigarrow (⇜), \lefttail (⤙), \leftthreearrows (⬱), \leftthreetimes (⋋), \leftwhitearrow (⇦), \leq (≤), \leqq (≦), \leqqslant (⫹), \leqqslant (⫺), \leqslant (⩽), \lescc (⪨), \lesdot (⩿), \lesdoto (⪁), \lesdotor (⪃), \lesges (⪓), \less (<), \lessapprox (⪅), \lessdot (⋖), \lesseqgtr (⋚), \lesseqqgtr (⪋), \lessgtr (≶), \lesssim (≲), \lfbowtie (⧑), \lfloor (⌊), \lftimes (⧔), \lgE (⪑), \lgblkcircle (⬤), \lgblksquare (⬛), \lgwhtcircle (◯), \lgwhtsquare (⬜), \lhd (⊲), \linefeed (↴), \ll (≪), \llangle (⦉), \llarc (◟), \llblacktriangle (◣), \llcorner (⌞), \lll (⋘), \lllnest (⫷), \llparenthesis (⦇), \lltriangle (◺), \lmoustache (⎰), \lnapprox (⪉), \lneq (⪇), \lneqq (≨), \lnsim (⋦), \longdashv (⟞), \longdivision (⟌), \longleftarrow (⟵), \longleftrightarrow (⟷), \longleftsquigarrow (⬳), \longmapsfrom (⟻), \longmapsto (⟼), \longrightarrow (⟶), \longrightsquigarrow (⟿), \looparrowleft (↫), \looparrowright (↬), \lowint (⨜), \lozenge (◊), \lozengeminus (⟠), \lparenextender (⎜), \lparenlend (⎝), \lparenless (⦓), \lparenuend (⎛), \lq (‘), \lrarc (◞), \lrblacktriangle (◢), \lrcorner (⌟), \lrtriangle (◿), \lrtriangleeq (⧡), \lsime (⪍), \lsimg (⪏), \lsqhook (⫍), \ltcc (⪦), \ltcir (⩹), \ltimes (⋉), \ltlarr (⥶), \ltquest (⩻), \ltrivb (⧏), \lvboxline (⎸), \lvzigzag (⧘).
+
+\male (♂), \maltese (✠), \mapsdown (↧), \mapsfrom (↤), \mapsto (↦), \mapsup (↥), \mdblkdiamond (⬥), \mdblklozenge (⬧), \mdblkrcl (⚫), \mdblksquare (◼), \mdlgblkcircle (●), \mdlgblkdiamond (◆), \mdlgblklozenge (⧫), \mdlgblksquare (■), \mdlgwhtcircle (○), \mdlgwhtdiamond (◇), \mdlgwhtsquare (□), \mdsmblkcircle (⦁), \mdsmblksquare (◾), \mdsmwhtcircl (⚬), \mdsmwhtsquare (◽), \mdwhtcircl (⚪), \mdwhtdiamond (⬦), \mdwhtlozenge (⬨), \mdwhtsquare (◻), \measangledltosw (⦯), \measangledrtose (⦮), \measangleldtosw (⦫), \measanglelutonw (⦩), \measanglerdtose (⦪), \measanglerutone (⦨), \measangleultonw (⦭), \measangleurtone (⦬), \measeq (≞), \measuredangle (∡), \measuredangleleft (⦛), \measuredrightangle (⊾), \medblackstar (⭑), \medmathspace ( ), \medwhitestar (⭐), \mercury (☿), \mho (℧), \mid (∣), \midbarvee (⩝), \midbarwedge (⩜), \midcir (⫰), \minus (−), \minusdot (⨪), \minusfdots (⨫), \minusrdots (⨬), \mlcp (⫛), \models (⊧), \mp (∓), \mu (μ), \multimap (⊸), \multimapinv (⟜).
+
+\nHdownarrow (⇟), \nHuparrow (⇞), \nLeftarrow (⇍), \nLeftrightarrow (⇎), \nRightarrow (⇏), \nVDash (⊯), \nVdash (⊮), \nVleftarrow (⇺), \nVleftarrowtail (⬺), \nVleftrightarrow (⇼), \nVrightarrow (⇻), \nVrightarrowtail (⤕), \nVtwoheadleftarrow (⬵), \nVtwoheadleftarrowtail (⬽), \nVtwoheadrightarrow (⤁), \nVtwoheadrightarrowtail (⤘), \nabla (∇), \napprox (≉), \nasymp (≭), \natural (♮), \ncong (≇), \ne (≠), \nearrow (↗), \neg (¬), \neovnwarrow (⤱), \neovsearrow (⤮), \neptune (♆), \neq (≠), \nequiv (≢), \neswarrow (⤢), \neuter (⚲), \nexists (∄), \ng (ŋ), \ngeq (≱), \ngtr (≯), \ngtrless (≹), \ngtrsim (≵), \nhVvert (⫵), \nhpar (⫲), \ni (∋), \niobar (⋾), \nis (⋼), \nisd (⋺), \nleftarrow (↚), \nleftrightarrow (↮), \nleq (≰), \nless (≮), \nlessgtr (≸), \nlesssim (≴), \nmid (∤), \nni (∌), \nobreakhyphen (‑), \notin (∉), \nparallel (∦), \npolint (⨔), \nprec (⊀), \npreccurlyeq (⋠), \nrightarrow (↛), \nsim (≁), \nsime (≄), \nsqsubseteq (⋢), \nsqsupseteq (⋣), \nsubset (⊄), \nsubseteq (⊈), \nsucc (⊁), \nsucccurlyeq (⋡), \nsupset (⊅), \nsupseteq (⊉), \ntriangleleft (⋪), \ntrianglelefteq (⋬), \ntriangleright (⋫), \ntrianglerighteq (⋭), \nu (ν), \nvDash (⊭), \nvLeftarrow (⤂), \nvLeftrightarrow (⤄), \nvRightarrow (⤃), \nvdash (⊬), \nvinfty (⧞), \nvleftarrow (⇷), \nvleftarrowtail (⬹), \nvleftrightarrow (⇹), \nvrightarrow (⇸), \nvrightarrowtail (⤔), \nvtwoheadleftarrow (⬴), \nvtwoheadleftarrowtail (⬼), \nvtwoheadrightarrow (⤀), \nvtwoheadrightarrowtail (⤗), \nwarrow (↖), \nwovnearrow (⤲), \nwsearrow (⤡).
+
+\o (ø), \obar (⌽), \obot (⦺), \obrbrak (⏠), \obslash (⦸), \odiv (⨸), \odot (⊙), \odotslashdot (⦼), \oe (œ), \ogreaterthan (⧁), \ohorn (ơ), \oiiint (∰), \oiint (∯), \oint (∮), \ointctrclockwise (∳), \olcross (⦻), \oldKoppa (Ϙ), \oldkoppa (ϙ), \olessthan (⧀), \omega (ω), \omicron (ο), \ominus (⊖), \operp (⦹), \oplus (⊕), \opluslhrim (⨭), \oplusrhrim (⨮), \origof (⊶), \oslash (⊘), \otimes (⊗), \otimeshat (⨶), \otimeslhrim (⨴), \otimesrhrim (⨵), \overbrace (⏞), \overbracket (⎴), \overline (‾), \overparen (⏜), \owns (∋).
+
+\parallel (∥), \parallelogram (▱), \parallelogramblack (▰), \parsim (⫳), \partial (∂), \partialmeetcontraction (⪣), \pentagon (⬠), \pentagonblack (⬟), \perp (⟂), \perps (⫡), \phi (ϕ), \phone (☎), \pi (π), \pitchfork (⋔), \plusdot (⨥), \pluseqq (⩲), \plushat (⨣), \plussim (⨦), \plussubtwo (⨧), \plustrif (⨨), \pluto (♇), \pm (±), \pointnt (⨕), \postalmark (〒), \prec (≺), \precapprox (⪷), \preccurlyeq (≼), \preceq (⪯), \preceqq (⪳), \precnapprox (⪹), \precneq (⪱), \precneqq (⪵), \precnsim (⋨), \precsim (≾), \prime (′), \prod (∏), \profalar (⌮), \profline (⌒), \profsurf (⌓), \propto (∝), \prurel (⊰), \psi (ψ), \pullback (⟓), \pushout (⟔).
+
+\qprime (⁗), \quarternote (♩), \questeq (≟), \quotdblbase („), \quotdblright (‟), \quotsinglbase (‚), \quotsinglright (‛).
+
+\rAngle (⟫), \rBrace (⦄), \rBrack (⟧), \rParen (⦆), \rangle (⟩), \rangledot (⦒), \rangledownzigzagarrow (⍼), \rasp (ʼ), \rbag (⟆), \rblkbrbrak (⦘), \rbrace (@}), \rbracelend (⎭), \rbracemid (⎬), \rbraceuend (⎫), \rbrack (]), \rbrackextender (⎥), \rbracklend (⎦), \rbracklrtick (⦎), \rbrackubar (⦌), \rbrackuend (⎤), \rbrackurtick (⦐), \rbrbrak (❳), \rceil (⌉), \rcurvyangle (⧽), \rdiagovfdiag (⤫), \rdiagovsearrow (⤰), \recorder (⌕), \revangle (⦣), \revangleubar (⦥), \revemptyset (⦰), \revnmid (⫮), \rfbowtie (⧒), \rfloor (⌋), \rftimes (⧕), \rhd (⊳), \rho (ρ), \righarrowbsimilar (⭌), \rightangle (∟), \rightanglemdot (⦝), \rightanglesqr (⦜), \rightarrow (→), \rightarrowapprox (⥵), \rightarrowbackapprox (⭈), \rightarrowbar (⇥), \rightarrowdiamond (⤞), \rightarrowgtr (⭃), \rightarrowonoplus (⟴), \rightarrowplus (⥅), \rightarrowshortleftarrow (⥂), \rightarrowsimilar (⥴), \rightarrowsupset (⭄), \rightarrowtail (↣), \rightarrowtriangle (⇾), \rightarrowx (⥇), \rightbkarrow (⤍), \rightcurvedarrow (⤳), \rightdasharrow (⇢), \rightdbltail (⤜), \rightdotarrow (⤑), \rightdowncurvedarrow (⤷), \rightfishtail (⥽), \rightharpoondown (⇁), \rightharpoondownbar (⥗), \rightharpoonsupdown (⥤), \rightharpoonup (⇀), \rightharpoonupbar (⥓), \rightharpoonupdash (⥬), \rightimply (⥰), \rightleftarrows (⇄), \rightleftharpoons (⇌), \rightleftharpoonsdown (⥩), \rightleftharpoonsup (⥨), \rightmoon (☽), \rightouterjoin (⟖), \rightpentagon (⭔), \rightpentagonblack (⭓), \rightrightarrows (⇉), \rightsquigarrow (↝), \rightsquigarrow (⇝), \righttail (⤚), \rightthreearrows (⇶), \rightthreetimes (⋌), \rightwhitearrow (⇨), \ringplus (⨢), \risingdotseq (≓), \rmoustache (⎱), \rparenextender (⎟), \rparengtr (⦔), \rparenlend (⎠), \rparenuend (⎞), \rppolint (⨒), \rq (’), \rrangle (⦊), \rrparenthesis (⦈), \rsolbar (⧷), \rsqhook (⫎), \rsub (⩥), \rtimes (⋊), \rtriltri (⧎), \ruledelayed (⧴), \rvboxline (⎹), \rvzigzag (⧙).
+
+\sampi (ϡ), \sansLmirrored (⅃), \sansLturned (⅂), \saturn (♄), \scissors (✂), \scpolint (⨓), \scrB (ℬ), \scrE (ℰ), \scrF (ℱ), \scrH (ℋ), \scrI (ℐ), \scrL (ℒ), \scrM (ℳ), \scrR (ℛ), \scre (ℯ), \scrg (ℊ), \scro (ℴ), \scurel (⊱), \searrow (↘), \seovnearrow (⤭), \setminus (∖), \setminus (⧵), \sharp (♯), \shortdowntack (⫟), \shortleftarrow (←), \shortlefttack (⫞), \shortrightarrow (→), \shortrightarrowleftarrow (⥄), \shortuptack (⫠), \shuffle (⧢), \sigma (σ), \silon (υ), \silon (ϒ), \sim (∼), \simeq (≃), \simgE (⪠), \simgtr (⪞), \similarleftarrow (⭉), \similarrightarrow (⥲), \simlE (⪟), \simless (⪝), \simminussim (⩬), \simneqq (≆), \simplus (⨤), \simrdots (⩫), \sinewave (∿), \slash (∕), \smallblacktriangleleft (◂), \smallblacktriangleright (▸), \smalldiamond (⋄), \smallin (∊), \smallint (∫), \smallni (∍), \smallsetminus (∖), \smalltriangleleft (◃), \smalltriangleright (▹), \smashtimes (⨳), \smblkdiamond (⬩), \smblklozenge (⬪), \smblksquare (▪), \smeparsl (⧤), \smile (⌣), \smiley (☺), \smt (⪪), \smte (⪬), \smwhitestar (⭒), \smwhtcircle (◦), \smwhtlozenge (⬫), \smwhtsquare (▫), \spadesuit (♠), \sphericalangle (∢), \sphericalangleup (⦡), \sqcap (⊓), \sqcup (⊔), \sqint (⨖), \sqlozenge (⌑), \sqrt (√), \sqrt3 (∛), \sqrt4 (∜), \sqrtbottom (⎷), \sqsubset (⊏), \sqsubseteq (⊑), \sqsubsetneq (⋤), \sqsupset (⊐), \sqsupseteq (⊒), \sqsupsetneq (⋥), \squarecrossfill (▩), \squaregrayfill (▩), \squarehfill (▤), \squarehvfill (▦), \squareleftblack (◧), \squareleftblack (◨), \squarellblack (⬕), \squarellquad (◱), \squarelrblack (◪), \squarelrquad (◲), \squareneswfill (▨), \squarenwsefill (▧), \squareulblack (◩), \squareulquad (◰), \squareurblack (⬔), \squareurquad (◳), \squarevfill (▥), \squoval (▢), \ss (ß), \star (⋆), \stareq (≛), \sterling (£), \stigma (ϛ), \strns (⏤), \subedot (⫃), \submult (⫁), \subrarr (⥹), \subset (⊂), \subsetapprox (⫉), \subsetcirc (⟃), \subsetdot (⪽), \subseteq (⊆), \subseteqq (⫅), \subsetneq (⊊), \subsetneqq (⫋), \subsetplus (⪿), \subsim (⫇), \subsub (⫕), \subsup (⫓), \succ (≻), \succapprox (⪸), \succcurlyeq (≽), \succeq (⪰), \succeqq (⪴), \succnapprox (⪺), \succneq (⪲), \succneqq (⪶), \succnsim (⋩), \succsim (≿), \sum (∑), \sumbottom (⎳), \sumint (⨋), \sumtop (⎲), \sun (☼), \supdsub (⫘), \supedot (⫄), \suphsol (⟉), \suphsub (⫗), \suplarr (⥻), \supmult (⫂), \supn (ⁿ), \supset (⊃), \supsetapprox (⫊), \supsetcirc (⟄), \supsetdot (⪾), \supseteq (⊇), \supseteqq (⫆), \supsetneq (⊋), \supsetneqq (⫌), \supsetplus (⫀), \supsim (⫈), \supsub (⫔), \supsup (⫖), \surd (√), \swarrow (↙).
+
+\talloblong (⫾), \target (⌖), \tau (τ), \taurus (♉), \testhookx (ᶍ), \textAsterisks (⁑), \textacute (ˊ), \textadvanced (˖), \textain (ʿ), \textasciiacute (´), \textasciicircum (^), \textasciidieresis (¨), \textasciigrave (`), \textasciimacron (¯), \textasciitilde (~), \textasterisklow (⁎), \textbackdprime (‶), \textbackprime (‵), \textbacktrprime (‷), \textbardotlessj (ɟ), \textbardotlessjvar (ʄ), \textbarglotstop (ʡ), \textbari (ɨ), \textbarl (ƚ), \textbaro (ɵ), \textbarrevglotstop (ʢ), \textbaru (ʉ), \textbeltl (ɬ), \textbenttailyogh (ƺ), \textbreve (˘), \textbrokenbar (¦), \textbullet (•), \textbullseye (ʘ), \textcent (¢), \textcircledP (℗), \textcloseepsilon (ʚ), \textcloseomega (ɷ), \textcloserevepsilon (ɞ), \textcopyright (©), \textcrb (ƀ), \textcrh (ħ), \textcrinvglotstop (ƾ), \textcrlambda (ƛ), \textcrtwo (ƻ), \textctc (ɕ), \textctd (ȡ), \textctesh (ʆ), \textctj (ʝ), \textctl (ȴ), \textctn (ȵ), \textctt (ȶ), \textctyogh (ʓ), \textctz (ʑ), \textcurrency (¤), \textdctzlig (ʥ), \textdegree (°), \textdiscount (⁒), \textdollar ($), \textdotaccent (˙), \textdotlessj (ȷ), \textdoubleacute (˝), \textdoublebarpipe (ǂ), \textdoublepipe (ǁ), \textdprime (″), \textdptr (˅), \textdyoghlig (ʤ), \textdzlig (ʣ), \textepsilon (ɛ), \textesh (ʃ), \textestimated (℮), \textexclam (ǃ), \textexclamdown (¡), \textfishhookr (ɾ), \textflorin (ƒ), \textfranc (₣), \textgamma (ɣ), \textglotstop (ʔ), \textgrave (ˋ), \texthalflength (ˑ), \texthamza (ʾ), \texthen (ꜧ), \textheng (ꜧ), \texthooks (ᶊ), \texthookz (ᶎ), \texthtb (ɓ), \texthtc (ƈ), \texthtd (ɗ), \texthtg (ɠ), \texthth (ɦ), \texththeng (ɧ), \texthtk (ƙ), \texthtp (ƥ), \texthtq (ʠ), \texthtscg (ʛ), \texthtt (ƭ), \texthvlig (ƕ), \texthyphen (‐), \textinvglotstop (ʖ), \textinvscr (ʁ), \textiota (ɩ), \textlengthmark (ː), \textlhalfring (˓), \textlhookd (ᶁ), \textlhookk (ᶄ), \textlhookl (ᶅ), \textlhookt (ƫ), \textlhti (ɿ), \textlira (₤), \textlonglegr (ɼ), \textlongy (ʮ), \textlongy (ʯ), \textlooptoprevesh (ƪ), \textlowacute (ˏ), \textlowered (˕), \textlowgrave (ˎ), \textlowmacron (ˍ), \textlptr (˂), \textltailm (ɱ), \textltailn (ɲ), \textltilde (ɫ), \textlyoghlig (ɮ), \textmacron (ˉ), \textmu (µ), \textnumero (№), \textogonek (˛), \textohm (Ω), \textonehalf (½), \textonequarter (¼), \textonesuperior (¹), \textopeno (ɔ), \textordfeminine (ª), \textordmasculine (º), \textovercross (˟), \textoz (℥), \textpertenthousand (‱), \textperthousand (‰), \textpesetas (₧), \textphi (ɸ), \textpipe (ǀ), \textprime (′), \textprimstress (ˈ), \textqprime (⁗), \textquestiondown (¿), \textquotedbl ("), \textquotedblleft (“), \textquotedblright (”), \textraised (˔), \textraiseglotstop (ˀ), \textraiserevglotstop (ˁ), \textramshorns (ɤ), \textrecipe (℞), \textreferencemark (※), \textregistered (®), \textretracted (˗), \textreve (ɘ), \textrevepsilon (ɜ), \textrevglotstop (ʕ), \textrhalfring (˒), \textrhookrevepsilon (ɝ), \textrhookschwa (ɚ), \textrhoticity (˞), \textringaccent (˚), \textrptr (˃), \textrtaild (ɖ), \textrtaill (ɭ), \textrtailn (ɳ), \textrtailr (ɽ), \textrtails (ʂ), \textrtailt (ʈ), \textrtailz (ʐ), \textsca (ᴀ), \textscb (ʙ), \textsce (ᴇ), \textscg (ɢ), \textsch (ʜ), \textschwa (ə), \textsci (ɪ), \textscl (ʟ), \textscn (ɴ), \textscoelig (ɶ), \textscr (ʀ), \textscripta (ɑ), \textscriptg (ɡ), \textscriptv (ʋ), \textscu (ᴜ), \textscy (ʏ), \textsecstress (ˌ), \textsemicolonreversed (⁏), \textsilon (Υ), \textsmalltilde (˜), \textstretchcvar (ʗ), \textsubw (w), \textsuph (ʰ), \textsuphth (ʱ), \textsupinvscr (ʶ), \textsupj (ʲ), \textsupr (ʳ), \textsupturnr (ʴ), \textsupturnrrtail (ʵ), \textsupw (ʷ), \textsupy (ʸ), \texttctctlig (ʧ), \texttctctlig (ʨ), \textthreequarters (¾), \textthreesuperior (³), \texttrademark (™), \texttrprime (‴), \texttslig (ʦ), \textturna (ɐ), \textturncomma (ʻ), \textturnh (ɥ), \textturnk (ʞ), \textturnlonglegr (ɺ), \textturnm (ɯ), \textturnmrleg (ɰ), \textturnr (ɹ), \textturnrrtail (ɻ), \textturnscripta (ɒ), \textturnt (ʇ), \textturnv (ʌ), \textturnw (ʍ), \textturny (ʎ), \texttwosuperior (²), \textupsilon (ʊ), \textuptr (˄), \textvibyi (ʅ), \textvisiblespace (␣), \textyogh (ʒ), \th (þ), \therefore (∴), \thermod (⧧), \theta (θ), \thickapprox (≈), \thicksim (∼), \threedangle (⟀), \threedotcolon (⫶), \tieconcat (⁀), \tieinfty (⧝), \times (×), \timesbar (⨱), \tminus (⧿), \to (→), \toea (⤨), \tona (⤧), \tonebarextrahigh (˥), \tonebarextralow (˩), \tonebarhigh (˦), \tonebarlow (˨), \tonebarmid (˧), \top (⊤), \topbot (⌶), \topcir (⫱), \topfork (⫚), \topsemicircle (◠), \tosa (⤩), \towa (⤪), \tplus (⧾), \trapezium (⏢), \trianglecdot (◬), \triangledown (▿), \triangleexclam (⚠), \triangleleft (◁), \triangleleftblack (◭), \trianglelefteq (⊴), \triangleminus (⨺), \triangleodot (⧊), \triangleplus (⨹), \triangleq (≜), \triangleright (▷), \trianglerightblack (◮), \trianglerighteq (⊵), \triangles (⧌), \triangleserifs (⧍), \triangletimes (⨻), \triangleubar (⧋), \tripleplus (⧻), \trprime (‴), \turnangle (⦢), \turnediota (℩), \turnednot (⌙), \twocaps (⩋), \twocups (⩊), \twoheaddownarrow (↡), \twoheadleftarrow (↞), \twoheadleftarrowtail (⬻), \twoheadleftdbkarrow (⬷), \twoheadmapsfrom (⬶), \twoheadmapsto (⤅), \twoheadrightarrow (↠), \twoheadrightarrowtail (⤖), \twoheaduparrow (↟), \twoheaduparrowcircle (⥉), \twolowline (‗), \twonotes (♫), \typecolon (⦂).
+
+\ubrbrak (⏡), \uhorn (ư), \ularc (◜), \ulblacktriangle (◤), \ulcorner (⌜), \ulcrop (⌏), \ultriangle (◸), \uminus (⩁), \underbrace (⏟), \underbracket (⎵), \underparen (⏝), \unlhd (⊴), \unrhd (⊵), \upand (⅋), \uparrow (↑), \uparrowbarred (⤉), \uparrowoncircle (⦽), \updasharrow (⇢), \updownarrow (↕), \updownarrowbar (↨), \updownarrows (⇅), \updownharpoonleftleft (⥑), \updownharpoonleftright (⥍), \updownharpoonrightleft (⥌), \updownharpoonrightright (⥏), \updownharpoonsleftright (⥮), \upfishtail (⥾), \upharpoonleft (↿), \upharpoonleftbar (⥠), \upharpoonright (↾), \upharpoonrightbar (⥜), \upharpoonsleftright (⥣), \upin (⟒), \upint (⨛), \uplus (⊎), \uprightcurvearrow (⤴), \upuparrows (⇈), \upwhitearrow (⇧), \urarc (◝), \urblacktriangle (◥), \urcorner (⌝), \urcrop (⌎), \urtriangle (◹).
+
+\v (ˇ), \vBar (⫨), \vBarv (⫩), \vDash (⊨), \vDdash (⫢), \varTheta (ϴ), \varVdash (⫦), \varbarwedge (⌅), \varbeta (ϐ), \varclubsuit (♧), \vardiamondsuit (♦), \vardoublebarwedge (⌆), \varepsilon (ε), \varheartsuit (♥), \varhexagon (⬡), \varhexagonblack (⬢), \varhexagonlrbonds (⌬), \varin (∈), \varisinobar (⋶), \varisins (⋳), \varkappa (ϰ), \varlrtriangle (⊿), \varni (∋), \varniobar (⋽), \varnis (⋻), \varnothing (∅), \varointclockwise (∲), \varphi (φ), \varpi (ϖ), \varpropto (∝), \varrho (ϱ), \varrowextender (⏐), \varsigma (ς), \varspadesuit (♤), \varstar (✶), \vartheta (ϑ), \vartriangle (▵), \vartriangleleft (⊲), \vartriangleright (⊳), \varveebar (⩡), \vbraceextender (⎪), \vbrtri (⧐), \vdash (⊢), \vdots (⋮), \vectimes (⨯), \vee (∨), \veebar (⊻), \veedot (⟇), \veedoublebar (⩣), \veeeq (≚), \veemidvert (⩛), \veeodot (⩒), \veeonvee (⩖), \veeonwedge (⩙), \vert (|), \viewdata (⌗), \vlongdash (⟝), \vrectangle (▯), \vrectangleblack (▮), \vysmlblksquare (⬝), \vysmlwhtsquare (⬞), \vzigzag (⦚).
+
+\watchicon (⌚), \wedge (∧), \wedgebar (⩟), \wedgedot (⟑), \wedgedoublebar (⩠), \wedgemidvert (⩚), \wedgeodot (⩑), \wedgeonwedge (⩕), \wedgeq (≙), \whitearrowupfrombar (⇪), \whiteinwhitetriangle (⟁), \whitepointerleft (◅), \whitepointerright (▻), \whitesquaretickleft (⟤), \whitesquaretickright (⟥), \whthorzoval (⬭), \whtvertoval (⬯), \wideangledown (⦦), \wideangleup (⦧), \wp (℘), \wr (≀).
+
+\xbsol (⧹), \xi (ξ), \xsol (⧸), \yen (¥), \zeta (ζ), \zpipe (⨠), 
 
 IF ANYBODY WILL CHECK WHETHER ALL NAMES CORRESPOND TO RIGHT TEX SYMBOLS I SHALL APPRECIATE IT GREATLY. 
 
diff --git a/texinfo/appendix_ru.texi b/texinfo/appendix_ru.texi
index 51b049f..beb6c26 100644
--- a/texinfo/appendix_ru.texi
+++ b/texinfo/appendix_ru.texi
@@ -10,7 +10,56 @@
 
 @strong{Акценты}: \hat, \tilde, \dot, \ddot, \dddot, \ddddot, \acute, \check, \grave, \vec, \bar, \breve
 
- at strong{Специальные символы}: \textquotedbl, \textdollar, \And, \textasciigrave, \textsubw, \colon, \less, \greater, \lbrack, \backslash, \rbrack, \textasciicircum, \lbrace, \vert, \rbrace, \textasciitilde, \aa, \ae, \textexclamdown, \textcent, \sterling, \textcurrency, \yen, \textbrokenbar, \S, \textasciidieresis, \textcopyright, \textordfeminine, \guillemotleft, \neg, \textregistered, \textasciimacron, \textdegree, \pm, \texttwosuperior, \textthreesuperior, \textasciiacute, \textmu, \P, \cdotp, \textonesuperior, \textordmasculine, \guillemotright, \textonequarter, \textonehalf, \textthreequarters, \textquestiondown, \AA, \AE, \DH, \times, \O, \TH, \ss, \dh, \div, \o, \th, \DJ, \dj, \textcrh, \L, \l, \OE, \oe, \NG, \ng, \textcrb, \texthtc, \textflorin, \texthvlig, \texthtk, \textctd, \textctl, \textctn, \textctt, \textdotlessj, \textbarl, \textcrlambda, \lambdabar, \Ohorn, \ohorn, \texthtp, \textlooptoprevesh, \textlhookt, \texthtt, \Uhorn, \uhorn, \Zbar, \textbenttailyogh, \textcrtwo, \textcrinvglotstop, \textpipe, \textdoublepipe, \textdoublebarpipe, \textexclam, \textturna, \textscripta, \textturnscripta, \texthtb, \textopeno, \textctc, \textrtaild, \texthtd, \textreve, \textschwa, \texthtg, \textscriptg, \textscg, \textgamma, \textramshorns, \textturnh, \texthth, \texththeng, \textbari, \textiota, \textturnmrleg, \textltailm, \textltailn, \textrtailn, \textscn, \textbaro, \textscoelig, \textcloseomega, \textphi, \textturnr, \textscr, \textinvscr, \textrtails, \textesh, \textbardotlessjvar, \textvibyi, \textctesh, \textturnt, \textrtailt, \textbaru, \textrtailz, \textctz, \textyogh, \textctyogh, \textglotstop, \textrevglotstop, \textinvglotstop, \textstretchcvar, \textbullseye, \textscb, \textrhookschwa, \textepsilon, \textrevepsilon, \textrhookrevepsilon, \textcloserevepsilon, \textbardotlessj, \textsci, \textltilde, \textbeltl, \textrtaill, \textlyoghlig, \textturnm, \textturnlonglegr, \textturnrrtail, \textlonglegr, \textrtailr, \textfishhookr, \textlhti, \textupsilon, \textscriptv, \textturnv, \textturnw, \textturny, \textscy, \textcloseepsilon, \texthtscg, \textsch, \textctj, \textturnk, \textscl, \texthtq, \textbarglotstop, \textbarrevglotstop, \textdzlig, \textdyoghlig, \textdctzlig, \texttslig, \texttctctlig, \texttctctlig, \textlongy, \textlongy, \ipasupgamma, \ipasupl, \ipasups, \ipasupx, \ipasuprerglotstpp, \tonebarextrahigh, \tonebarhigh, \tonebarmid, \tonebarlow, \tonebarextralow, \textsuph, \textsuphth, \textsupj, \textsupr, \textsupturnr, \textsupturnrrtail, \textsupinvscr, \textsupw, \textsupy, \cprime, \cdprime, \textturncomma, \rasp, \lasp, \texthamza, \textain, \textraiseglotstop, \textraiserevglotstop, \textlptr, \textrptr, \textuptr, \textdptr, \$\wedge$, \v, \textprimstress, \textmacron, \textacute, \textgrave, \textsecstress, \textlowmacron, \textlowgrave, \textlowacute, \textlengthmark, \texthalflength, \textrhalfring, \textlhalfring, \textraised, \textlowered, \textadvanced, \textretracted, \textbreve, \textdotaccent, \textringaccent, \textogonek, \textsmalltilde, \textdoubleacute, \textrhoticity, \textovercross, \ipavoicing, \ipaunaspirated, \sampi, \Alpha, \Beta, \Gamma, \Delta, \Epsilon, \Zeta, \Eta, \Theta, \Iota, \Kappa, \Lambda, \Mu, \Nu, \Xi, \Omicron, \Pi, \Rho, \Sigma, \Tau, \textsilon, \Phi, \Chi, \Psi, \Omega, \alpha, \beta, \gamma, \delta, \varepsilon, \zeta, \eta, \theta, \iota, \kappa, \lambda, \mu, \nu, \xi, \omicron, \pi, \rho, \varsigma, \sigma, \tau, \silon, \varphi, \chi, \psi, \omega, \varbeta, \vartheta, \silon, \phi, \varpi, \oldKoppa, \oldkoppa, \Stigma, \stigma, \Digamma, \digamma, \Koppa, \koppa, \varkappa, \varrho, \varTheta, \epsilon, \backepsilon, \textsca, \textsce, \textscu, \textlhookd, \textlhookk, \textlhookl, \texthooks, \testhookx, \texthookz, \texthyphen, \nobreakhyphen, \figdash, \endash, \emdash, \horizbar, \Vert, \twolowline, \lq, \rq, \dagger, \dag, \ddagger, \ddag, \textbullet, \enleadertwodots, \dots, \textperthousand, \textpertenthousand, \textprime, \prime, \textdprime, \dprime, \texttrprime, \trprime, \textbackprime, \backprime, \textbackdprime, \backdprime, \textbacktrprime, \backtrprime, \caretinsert, \guilsinglleft, \tieconcat, \hyphenbullet, \fracslash, \Question, \closure, \textAsterisks, \textdiscount, \textqprime, \qprime, \quotsinglbase, \quotsinglright, \textquotedblleft, \textquotedblright, \quotdblbase, \quotdblright, \guilsinglright, \textreferencemark, \Exclam, \overline, \textasterisklow, \textsemicolonreversed, \medmathspace, \supn, \textfranc, \textlira, \textpesetas, \euro, \BbbC, \incare, \Eulerconst, \scrI, \Im, \scrL, \ell, \BbbN, \textnumero, \textcircledP, \wp, \BbbP, \texttrademark, \BbbZ, \textoz, \textohm, \mho, \frakZ, \turnediota, \scrE, \scrF, \Finv, \scrM, \scro, \aleph, \beth, \gimel, \daleth, \Bbbsum, \Game, \sansLturned, \sansLmirrored, \Yup, \itBbbD, \itBbbd, \itBbbe, \itBbbi, \itBbbj, \scrg, \scrH, \frakH, \BbbH, \Planckconst, \hslash, \hbar, \BbbQ, \scrR, \Re, \BbbR, \textrecipe, \Angstrom, \scrB, \frakC, \textestimated, \scre, \Bbbpi, \Bbbgamma, \BbbGamma, \BbbPi, \PropertyLine, \upand, \fraconethird, \fractwothirds, \fraconefifth, \fractwofifths, \fracthreefifths, \fracfourfifths, \fraconesixth, \fracfivesixths, \fraconeeighth, \fracthreeeighths, \fracfiveeighths, \fracseveneights, \ldasharrhead, \leftdasharrow, \leftdasharrowhead, \rightdasharrow, \updasharrow, \leftarrow, \gets, \shortleftarrow, \uparrow, \rightarrow, \to, \shortrightarrow, \downarrow, \leftrightarrow, \updownarrow, \nwarrow, \nearrow, \searrow, \swarrow, \downdasharrow, \barleftarrow, \rightarrowbar, \leftwhitearrow, \upwhitearrow, \rightwhitearrow, \downwhitearrow, \nleftarrow, \nrightarrow, \leftsquigarrow, \rightsquigarrow, \leadsto, \twoheadleftarrow, \twoheaduparrow, \twoheadrightarrow, \twoheaddownarrow, \leftarrowtail, \rightarrowtail, \mapsfrom, \mapsup, \mapsto, \mapsdown, \updownarrowbar, \hookleftarrow, \hookrightarrow, \looparrowleft, \looparrowright, \leftrightsquigarrow, \nleftrightarrow, \downzigzagarrow, \Lsh, \Rsh, \Ldsh, \Rdsh, \linefeed, \carriagereturn, \curvearrowleft, \curvearrowright, \barovernorthwestarrow, \barleftarrowrightarrowbar, \acwopencirclearrow, \cwopencirclearrow, \leftharpoonup, \leftharpoondown, \upharpoonright, \upharpoonleft, \rightharpoonup, \rightharpoondown, \downharpoonright, \downharpoonleft, \rightleftarrows, \updownarrows, \leftrightarrows, \leftleftarrows, \upuparrows, \rightrightarrows, \downdownarrows, \leftrightharpoons, \rightleftharpoons, \nLeftarrow, \nLeftrightarrow, \nRightarrow, \Leftarrow, \Uparrow, \Rightarrow, \Downarrow, \Leftrightarrow, \Updownarrow, \Nwarrow, \Nearrow, \Searrow, \Swarrow, \Lleftarrow, \Rrightarrow, \leftsquigarrow, \rightsquigarrow, \nHuparrow, \nHdownarrow, \whitearrowupfrombar, \circleonrightarrow, \downuparrows, \rightthreearrows, \nvleftarrow, \nvrightarrow, \nvleftrightarrow, \nVleftarrow, \nVrightarrow, \nVleftrightarrow, \leftarrowtriangle, \rightarrowtriangle, \leftrightarrowtriangle, \forall, \complement, \partial, \exists, \nexists, \varnothing, \emptyset, \increment, \nabla, \in, \varin, \notin, \smallin, \ni, \owns, \varni, \nni, \smallni, \QED, \prod, \coprod, \amalg, \sum, \minus, \mp, \dotplus, \slash, \smallsetminus, \setminus, \ast, \circ, \bullet, \surd, \sqrt, \sqrt3, \sqrt4, \cuberoot, \fourthroot, \propto, \varpropto, \infty, \rightangle, \angle, \measuredangle, \sphericalangle, \mid, \nmid, \parallel, \nparallel, \wedge, \vee, \cap, \cup, \smallint, \int, \iint, \iiint, \oint, \oiint, \oiiint, \intclockwise, \varointclockwise, \ointctrclockwise, \therefore, \because, \colon, \Colon, \dotminus, \dashcolon, \dotsminusdots, \kernelcontraction, \sim, \thicksim, \backsim, \ac, \sinewave, \wr, \nsim, \eqsim, \simeq, \nsime, \cong, \simneqq, \ncong, \approx, \thickapprox, \napprox, \approxeq, \approxident, \backcong, \asymp, \Bumpeq, \bumpeq, \doteq, \Doteq, \fallingdotseq, \risingdotseq, \coloneq, \eqcolon, \eqcirc, \circeq, \arceq, \wedgeq, \veeeq, \stareq, \triangleq, \eqdef, \measeq, \questeq, \ne, \neq, \equiv, \nequiv, \Equiv, \leq, \le, \geq, \ge, \leqq, \geqq, \lneqq, \gneqq, \ll, \gg, \between, \nasymp, \nless, \ngtr, \nleq, \ngeq, \lesssim, \gtrsim, \nlesssim, \ngtrsim, \lessgtr, \gtrless, \nlessgtr, \ngtrless, \prec, \succ, \preccurlyeq, \succcurlyeq, \precsim, \succsim, \nprec, \nsucc, \subset, \supset, \nsubset, \nsupset, \subseteq, \supseteq, \nsubseteq, \nsupseteq, \subsetneq, \supsetneq, \cupleftarrow, \cupdot, \uplus, \sqsubset, \sqsupset, \sqsubseteq, \sqsupseteq, \sqcap, \sqcup, \oplus, \ominus, \otimes, \oslash, \odot, \circledcirc, \circledast, \circledequal, \circleddash, \boxplus, \boxminus, \boxtimes, \boxdot, \vdash, \dashv, \top, \bot, \assert, \models, \vDash, \Vdash, \Vvdash, \VDash, \nvdash, \nvDash, \nVdash, \nVDash, \prurel, \scurel, \vartriangleleft, \lhd, \vartriangleright, \rhd, \trianglelefteq, \unlhd, \trianglerighteq, \unrhd, \origof, \imageof, \multimap, \hermitmatrix, \intercal, \veebar, \barwedge, \barvee, \measuredrightangle, \varlrtriangle, \bigwedge, \bigvee, \bigcap, \bigcup, \smalldiamond, \cdot, \star, \divideontimes, \bowtie, \ltimes, \rtimes, \leftthreetimes, \rightthreetimes, \backsimeq, \curlyvee, \curlywedge, \Subset, \Supset, \Cap, \Cup, \pitchfork, \equalparallel, \lessdot, \gtrdot, \lll, \ggg, \lesseqgtr, \gtreqless, \eqless, \eqgtr, \curlyeqprec, \curlyeqsucc, \npreccurlyeq, \nsucccurlyeq, \nsqsubseteq, \nsqsupseteq, \sqsubsetneq, \sqsupsetneq, \lnsim, \gnsim, \precnsim, \succnsim, \ntriangleleft, \ntriangleright, \ntrianglelefteq, \ntrianglerighteq, \vdots, \cdots, \adots, \ddots, \disin, \varisins, \isins, \isindot, \varisinobar, \isinobar, \isinvb, \isinE, \nisd, \varnis, \nis, \varniobar, \niobar, \bagmember, \diameter, \house, \varbarwedge, \vardoublebarwedge, \lceil, \rceil, \lfloor, \rfloor, \drcrop, \dlcrop, \urcrop, \ulcrop, \invnot, \sqlozenge, \profline, \profsurf, \recorder, \target, \viewdata, \cloverleaf, \turnednot, \watchicon, \ulcorner, \urcorner, \llcorner, \lrcorner, \inttop, \intbottom, \frown, \smile, \clangle, \crangle, \varhexagonlrbonds, \cylcty, \profalar, \conictaper, \topbot, \obar, \APLnotslash, \APLnotbackslash, \APLboxupcaret, \APLboxquestion, \rangledownzigzagarrow, \dircurrent, \hexagon, \lparenuend, \lparenextender, \lparenlend, \rparenuend, \rparenextender, \rparenlend, \lbrackuend, \lbrackextender, \lbracklend, \rbrackuend, \rbrackextender, \rbracklend, \lbraceuend, \lbracemid, \lbracelend, \vbraceextender, \rbraceuend, \rbracemid, \rbracelend, \intextender, \harrowextender, \lmoustache, \rmoustache, \sumtop, \sumbottom, \overbracket, \underbracket, \bbrktbrk, \sqrtbottom, \lvboxline, \rvboxline, \carreturn, \varrowextender, \overparen, \underparen, \overbrace, \underbrace, \obrbrak, \ubrbrak, \trapezium, \benzenr, \strns, \fltns, \accurrent, \elinters, \textvisiblespace, \circledone, \circledtwo, \circledthree, \circledfour, \circledfive, \circledsix, \circledseven, \circledeight, \circlednine, \circledA, \circledB, \circledC, \circledD, \circledE, \circledF, \circledG, \circledH, \circledI, \circledJ, \circledK, \circledL, \circledM, \circledN, \circledO, \circledP, \circledQ, \circledR, \circledS, \circledT, \circledU, \circledV, \circledW, \circledX, \circledY, \circledZ, \circleda, \circledb, \circledc, \circledd, \circlede, \circledf, \circledg, \circledh, \circledi, \circledj, \circledk, \circledl, \circledm, \circledn, \circledo, \circledp, \circledq, \circledr, \circleds, \circledt, \circledu, \circledv, \circledw, \circledx, \circledy, \circledz, \circledzero, \bdhrule, \bdvrule, \bdtriplevdash, \bdquadhdash, \bdquadvdash, \bddvrh, \bddvlh, \bduvrh, \bduvlh, \bdbvrh, \bdbvlh, \bddvbh, \bduvbh, \bdbvbh, \bdHrule, \bdVrule, \bddvrH, \bddVrh, \bddVrH, \bddvlH, \bddVlh, \bddVlH, \bduvrH, \bduVrh, \bduVrH, \bduvlH, \bduVlh, \bduVlH, \bdbvrH, \bdbVrh, \bdbVrH, \bdbvlH, \bdbVlh, \bdbVlH, \bddvbH, \bddVbh, \bddVbH, \bduvbH, \bduVbh, \bduVbH, \bdbvbH, \bdbVbh, \bdbVbH, \bdnesw, \bdnwse, \blockuphalf, \blocklowhalf, \blockfull, \blocklefthalf, \blockrighthalf, \blockqtrshaded, \blockhalfshaded, \blockthreeqtrshaded, \mdlgblksquare, \mdlgwhtsquare, \squoval, \blackinwhitesquare, \squarehfill, \squarevfill, \squarehvfill, \squarenwsefill, \squareneswfill, \squarecrossfill, \squaregrayfill, \smblksquare, \smwhtsquare, \hrectangleblack, \hrectangle, \vrectangleblack, \vrectangle, \parallelogramblack, \parallelogram, \bigblacktriangleup, \bigtriangleup, \blacktriangle, \vartriangle, \blacktriangleright, \triangleright, \smallblacktriangleright, \smalltriangleright, \blackpointerright, \whitepointerright, \bigblacktriangledown, \bigtriangledown, \blacktriangledown, \triangledown, \blacktriangleleft, \triangleleft, \smallblacktriangleleft, \smalltriangleleft, \blackpointerleft, \whitepointerleft, \mdlgblkdiamond, \mdlgwhtdiamond, \diamond, \blackinwhitediamond, \fisheye, \lozenge, \mdlgwhtcircle, \dottedcircle, \circlevertfill, \bullseye, \mdlgblkcircle, \circlelefthalfblack, \circlerighthalfblack, \circlebottomhalfblack, \circletophalfblack, \circleurquadblack, \blackcircleulquadwhite, \blacklefthalfcircle, \blackrighthalfcircle, \inversebullet, \inversewhitecircle, \invwhiteupperhalfcircle, \invwhitelowerhalfcircle, \ularc, \urarc, \lrarc, \llarc, \topsemicircle, \botsemicircle, \lrblacktriangle, \llblacktriangle, \ulblacktriangle, \urblacktriangle, \smwhtcircle, \squareleftblack, \squareleftblack, \squareulblack, \squarelrblack, \boxbar, \trianglecdot, \triangleleftblack, \trianglerightblack, \lgwhtcircle, \squareulquad, \squarellquad, \squarelrquad, \squareurquad, \circleulquad, \circlellquad, \circlelrquad, \circleurquad, \ultriangle, \urtriangle, \lltriangle, \mdwhtsquare, \box, \mdblksquare, \mdsmwhtsquare, \mdsmblksquare, \lrtriangle, \bigstar, \bigwhitestar, \astrosun, \conjunction, \phone, \XBox, \danger, \frownie, \smiley, \blacksmiley, \sun, \rightmoon, \leftmoon, \mercury, \female, \earth, \male, \jupiter, \saturn, \neptune, \pluto, \aries, \taurus, \spadesuit, \heartsuit, \diamondsuit, \clubsuit, \varspadesuit, \varheartsuit, \vardiamondsuit, \varclubsuit, \quarternote, \eighthnote, \twonotes, \flat, \natural, \sharp, \acidfree, \dicei, \diceii, \diceiii, \diceiv, \dicev, \dicevi, \circledrightdot, \circledtwodots, \blackcircledrightdot, \blackcircledtwodots, \triangleexclam, \Hermaphrodite, \mdwhtcircl, \mdblkrcl, \mdsmwhtcircl, \neuter, \scissors, \envelope, \checkmark, \maltese, \circledstar, \varstar, \dingasterisk, \lbrbrak, \rbrbrak, \circledsansone, \circledsanstwo, \circledsansthree, \circledsansfour, \circledsansfive, \circledsanssix, \circledsansseven, \circledsanseight, \circledsansnine, \circledsansten, \blackcircledsansone, \blackcircledsanstwo, \blackcircledsansthree, \blackcircledsansfour, \blackcircledsansfive, \blackcircledsanssix, \blackcircledsansseven, \blackcircledsanseight, \blackcircledsansnine, \blackcircledsansten, \draftingarrow, \threedangle, \whiteinwhitetriangle, \perp, \subsetcirc, \supsetcirc, \lbag, \rbag, \veedot, \bsolhsub, \suphsol, \longdivision, \diamondcdot, \wedgedot, \upin, \pullback, \pushout, \leftouterjoin, \rightouterjoin, \fullouterjoin, \bigbot, \bigtop, \DashVDash, \dashVdash, \multimapinv, \vlongdash, \longdashv, \cirbot, \lozengeminus, \concavediamond, \concavediamondtickleft, \concavediamondtickright, \whitesquaretickleft, \whitesquaretickright, \lBrack, \rBrack, \langle, \rangle, \lAngle, \rAngle, \Lbrbrak, \Rbrbrak, \UUparrow, \DDownarrow, \acwgapcirclearrow, \cwgapcirclearrow, \rightarrowonoplus, \longleftarrow, \longrightarrow, \longleftrightarrow, \Longleftarrow, \Longrightarrow, \Longleftrightarrow, \longmapsfrom, \longmapsto, \Longmapsfrom, \Longmapsto, \longrightsquigarrow, \nvtwoheadrightarrow, \nVtwoheadrightarrow, \nvLeftarrow, \nvRightarrow, \nvLeftrightarrow, \twoheadmapsto, \Mapsfrom, \Mapsto, \downarrowbarred, \uparrowbarred, \Uuparrow, \Ddownarrow, \leftbkarrow, \rightbkarrow, \leftdbkarrow, \dbkarow, \drbkarow, \rightdotarrow, \baruparrow, \downarrowbar, \nvrightarrowtail, \nVrightarrowtail, \twoheadrightarrowtail, \nvtwoheadrightarrowtail, \nVtwoheadrightarrowtail, \lefttail, \righttail, \leftdbltail, \rightdbltail, \diamondleftarrow, \rightarrowdiamond, \diamondleftarrowbar, \barrightarrowdiamond, \nwsearrow, \neswarrow, \hknwarrow, \hknearrow, \hksearow, \hkswarow, \tona, \toea, \tosa, \towa, \rdiagovfdiag, \fdiagovrdiag, \seovnearrow, \neovsearrow, \fdiagovnearrow, \rdiagovsearrow, \neovnwarrow, \nwovnearrow, \rightcurvedarrow, \uprightcurvearrow, \downrightcurvedarrow, \leftdowncurvedarrow, \rightdowncurvedarrow, \cwrightarcarrow, \acwleftarcarrow, \acwoverarcarrow, \acwundercurvearrow, \curvearrowrightminus, \curvearrowleftplus, \cwundercurvearrow, \ccwundercurvearrow, \acwcirclearrow, \cwcirclearrow, \rightarrowshortleftarrow, \leftarrowshortrightarrow, \shortrightarrowleftarrow, \rightarrowplus, \leftarrowplus, \rightarrowx, \leftrightarrowcircle, \twoheaduparrowcircle, \leftrightharpoonupdown, \leftrightharpoondownup, \updownharpoonrightleft, \updownharpoonleftright, \leftrightharpoonupup, \updownharpoonrightright, \leftrightharpoondowndown, \updownharpoonleftleft, \barleftharpoonup, \rightharpoonupbar, \barupharpoonright, \downharpoonrightbar, \barleftharpoondown, \rightharpoondownbar, \barupharpoonleft, \downharpoonleftbar, \leftharpoonupbar, \barrightharpoonup, \upharpoonrightbar, \bardownharpoonright, \leftharpoondownbar, \barrightharpoondown, \upharpoonleftbar, \bardownharpoonleft, \leftharpoonsupdown, \upharpoonsleftright, \rightharpoonsupdown, \downharpoonsleftright, \leftrightharpoonsup, \leftrightharpoonsdown, \rightleftharpoonsup, \rightleftharpoonsdown, \leftharpoonupdash, \dashleftharpoondown, \rightharpoonupdash, \dashrightharpoondown, \updownharpoonsleftright, \downupharpoonsleftright, \rightimply, \equalrightarrow, \similarrightarrow, \leftarrowsimilar, \rightarrowsimilar, \rightarrowapprox, \ltlarr, \leftarrowless, \gtrarr, \subrarr, \leftarrowsubset, \suplarr, \leftfishtail, \rightfishtail, \upfishtail, \downfishtail, \Vvert, \mdsmblkcircle, \typecolon, \lBrace, \rBrace, \lParen, \rParen, \llparenthesis, \rrparenthesis, \llangle, \rrangle, \lbrackubar, \rbrackubar, \lbrackultick, \rbracklrtick, \lbracklltick, \rbrackurtick, \langledot, \rangledot, \lparenless, \rparengtr, \Lparengtr, \Rparenless, \lblkbrbrak, \rblkbrbrak, \fourvdots, \vzigzag, \measuredangleleft, \rightanglesqr, \rightanglemdot, \angles, \angdnr, \gtlpar, \sphericalangleup, \turnangle, \revangle, \angleubar, \revangleubar, \wideangledown, \wideangleup, \measanglerutone, \measanglelutonw, \measanglerdtose, \measangleldtosw, \measangleurtone, \measangleultonw, \measangledrtose, \measangledltosw, \revemptyset, \emptysetobar, \emptysetocirc, \emptysetoarr, \emptysetoarrl, \circlehbar, \circledvert, \circledparallel, \obslash, \operp, \obot, \olcross, \odotslashdot, \uparrowoncircle, \circledwhitebullet, \circledbullet, \olessthan, \ogreaterthan, \cirscir, \cirE, \boxdiag, \boxbslash, \boxast, \boxcircle, \boxbox, \boxonbox, \triangleodot, \triangleubar, \triangles, \triangleserifs, \rtriltri, \ltrivb, \vbrtri, \lfbowtie, \rfbowtie, \fbowtie, \lftimes, \rftimes, \hourglass, \blackhourglass, \lvzigzag, \rvzigzag, \Lvzigzag, \Rvzigzag, \iinfin, \tieinfty, \nvinfty, \dualmap, \laplac, \lrtriangleeq, \shuffle, \eparsl, \smeparsl, \eqvparsl, \gleichstark, \thermod, \downtriangleleftblack, \downtrianglerightblack, \blackdiamonddownarrow, \mdlgblklozenge, \circledownarrow, \blackcircledownarrow, \errbarsquare, \errbarblacksquare, \errbardiamond, \errbarblackdiamond, \errbarcircle, \errbarblackcircle, \ruledelayed, \setminus, \dsol, \rsolbar, \xsol, \xbsol, \doubleplus, \tripleplus, \lcurvyangle, \rcurvyangle, \tplus, \tminus, \sumint, \iiiint, \intbar, \intBar, \fint, \circfint, \awint, \rppolint, \scpolint, \npolint, \pointnt, \sqint, \intlharhk, \intx, \intcap, \intcup, \upint, \lowint, \zpipe, \ringplus, \plushat, \simplus, \plusdot, \plussim, \plussubtwo, \plustrif, \commaminus, \minusdot, \minusfdots, \minusrdots, \opluslhrim, \oplusrhrim, \vectimes, \dottimes, \timesbar, \btimes, \smashtimes, \otimeslhrim, \otimesrhrim, \otimeshat, \Otimes, \odiv, \triangleplus, \triangleminus, \triangletimes, \intprod, \intprodr, \fcmp, \amalg, \capdot, \uminus, \barcup, \barcap, \capwedge, \cupvee, \twocups, \twocaps, \closedvarcup, \closedvarcap, \Sqcap, \Sqcup, \closedvarcupsmashprod, \wedgeodot, \veeodot, \Wedge, \Vee, \wedgeonwedge, \veeonvee, \bigslopedvee, \bigslopedwedge, \veeonwedge, \wedgemidvert, \veemidvert, \midbarwedge, \midbarvee, \doublebarwedge, \wedgebar, \wedgedoublebar, \varveebar, \doublebarvee, \veedoublebar, \dsub, \rsub, \eqdot, \dotequiv, \equivVert, \equivVvert, \dotsim, \simrdots, \simminussim, \congdot, \asteq, \hatapprox, \approxeqq, \eqqplus, \pluseqq, \eqqsim, \Coloneq, \eqeq, \eqeqeq, \ddotseq, \equivDD, \ltcir, \gtcir, \ltquest, \gtquest, \leqslant, \geqslant, \lesdot, \gesdot, \lesdoto, \gesdoto, \lesdotor, \gesdotol, \lessapprox, \gtrapprox, \lneq, \gneq, \lnapprox, \gnapprox, \lesseqqgtr, \gtreqqless, \lsime, \gsime, \lsimg, \gsiml, \lgE, \glE, \lesges, \gesles, \eqslantless, \eqslantgtr, \elsdot, \egsdot, \eqqless, \eqqgtr, \eqqslantless, \eqqslantgtr, \simless, \simgtr, \simlE, \simgE, \Lt, \Gt, \partialmeetcontraction, \glj, \gla, \ltcc, \gtcc, \lescc, \gescc, \smt, \lat, \smte, \late, \bumpeqq, \preceq, \succeq, \precneq, \succneq, \preceqq, \succeqq, \precneqq, \succneqq, \precapprox, \succapprox, \precnapprox, \succnapprox, \Prec, \Sc, \subsetdot, \supsetdot, \subsetplus, \supsetplus, \submult, \supmult, \subedot, \supedot, \subseteqq, \supseteqq, \subsim, \supsim, \subsetapprox, \supsetapprox, \subsetneqq, \supsetneqq, \lsqhook, \rsqhook, \csub, \csup, \csube, \csupe, \subsup, \supsub, \subsub, \supsup, \suphsub, \supdsub, \forkv, \topfork, \mlcp, \forks, \forksnot, \shortlefttack, \shortdowntack, \shortuptack, \perps, \vDdash, \dashV, \Dashv, \DashV, \varVdash, \Barv, \vBar, \vBarv, \barV, \Vbar, \Not, \bNot, \revnmid, \cirmid, \midcir, \topcir, \nhpar, \parsim, \interleave, \nhVvert, \threedotcolon, \lllnest, \gggnest, \leqqslant, \leqqslant, \talloblong, \squareurblack, \squarellblack, \diamondleftblack, \diamondrightblack, \diamondtopblack, \diamondbotblack, \dottedsquare, \lgblksquare, \lgwhtsquare, \vysmlblksquare, \vysmlwhtsquare, \pentagonblack, \pentagon, \varhexagon, \varhexagonblack, \hexagonblack, \lgblkcircle, \mdblkdiamond, \mdwhtdiamond, \mdblklozenge, \mdwhtlozenge, \smblkdiamond, \smblklozenge, \smwhtlozenge, \blkhorzoval, \whthorzoval, \blkvertoval, \whtvertoval, \circleonleftarrow, \leftthreearrows, \leftarrowonoplus, \longleftsquigarrow, \nvtwoheadleftarrow, \nVtwoheadleftarrow, \twoheadmapsfrom, \twoheadleftdbkarrow, \leftdotarrow, \nvleftarrowtail, \nVleftarrowtail, \twoheadleftarrowtail, \nvtwoheadleftarrowtail, \nVtwoheadleftarrowtail, \leftarrowx, \leftcurvedarrow, \equalleftarrow, \bsimilarleftarrow, \leftarrowbackapprox, \rightarrowgtr, \rightarrowsupset, \LLeftarrow, \RRightarrow, \bsimilarrightarrow, \rightarrowbackapprox, \similarleftarrow, \leftarrowapprox, \leftarrowbsimilar, \righarrowbsimilar, \medwhitestar, \medblackstar, \smwhitestar, \rightpentagonblack, \rightpentagon, \postalmark, \hzigzag, \hiraganano, \textheng, \texthen, \calB, \calE, \calF, \calH, \calM, \calR.
+ at strong{Специальные символы}:
+\# (#), \% (%), \& (&), \^ (^).
+
+\AA (Å), \AE (Æ), \APLboxquestion (⍰), \APLboxupcaret (⍓), \APLnotbackslash (⍀), \APLnotslash (⌿), \Alpha (Α), \And (&), \Angstrom (Å), \Barv (⫧), \BbbC (ℂ), \BbbGamma (ℾ), \BbbH (ℍ), \BbbN (ℕ), \BbbP (ℙ), \BbbPi (ℿ), \BbbQ (ℚ), \BbbR (ℝ), \BbbZ (ℤ), \Bbbgamma (ℽ), \Bbbpi (ℼ), \Bbbsum (⅀), \Beta (Β), \Bumpeq (≎), \Cap (⋒), \Chi (Χ), \Colon (∷), \Coloneq (⩴), \Cup (⋓), \DDownarrow (⟱), \DH (Ð), \DJ (Đ), \DashV (⫥), \DashVDash (⟚), \Dashv (⫤), \Ddownarrow (⤋), \Delta (Δ), \Digamma (Ϝ), \Doteq (≑), \Downarrow (⇓), \Epsilon (Ε), \Equiv (≣), \Eta (Η), \Eulerconst (ℇ), \Exclam (‼), \Finv (Ⅎ), \Game (⅁), \Gamma (Γ), \Gt (⪢), \Hermaphrodite (⚥), \Im (ℑ), \Iota (Ι), \Kappa (Κ), \Koppa (Ϟ), \L (Ł), \LLeftarrow (⭅), \Lambda (Λ), \Lbrbrak (⟬), \Ldsh (↲), \Leftarrow (⇐), \Leftrightarrow (⇔), \Lleftarrow (⇚), \Longleftarrow (⟸), \Longleftrightarrow (⟺), \Longmapsfrom (⟽), \Longmapsto (⟾), \Longrightarrow (⟹), \Lparengtr (⦕), \Lsh (↰), \Lt (⪡), \Lvzigzag (⧚), \Mapsfrom (⤆), \Mapsto (⤇), \Mu (Μ), \NG (Ŋ), \Nearrow (⇗), \Not (⫬), \Nu (Ν), \Nwarrow (⇖), \O (Ø), \OE (Œ), \Ohorn (Ơ), \Omega (Ω), \Omicron (Ο), \Otimes (⨷), \P (¶), \Phi (Φ), \Pi (Π), \Planckconst (ℎ), \Prec (⪻), \PropertyLine (⅊), \Psi (Ψ), \QED (∎), \Question (⁇), \RRightarrow (⭆), \Rbrbrak (⟭), \Rdsh (↳), \Re (ℜ), \Rho (Ρ), \Rightarrow (⇒), \Rparenless (⦖), \Rrightarrow (⇛), \Rsh (↱), \Rvzigzag (⧛), \S (§), \Sc (⪼), \Searrow (⇘), \Sigma (Σ), \Sqcap (⩎), \Sqcup (⩏), \Stigma (Ϛ), \Subset (⋐), \Supset (⋑), \Swarrow (⇙), \TH (Þ), \Tau (Τ), \Theta (Θ), \UUparrow (⟰), \Uhorn (Ư), \Uparrow (⇑), \Updownarrow (⇕), \Uuparrow (⤊), \VDash (⊫), \Vbar (⫫), \Vdash (⊩), \Vee (⩔), \Vert (‖), \Vvdash (⊪), \Vvert (⦀), \Wedge (⩓), \XBox (☒), \Xi (Ξ), \Yup (⅄), \Zbar (Ƶ), \Zeta (Ζ).
+
+\aa (å), \ac (∾), \accurrent (⏦), \acidfree (♾), \acwcirclearrow (⥀), \acwgapcirclearrow (⟲), \acwleftarcarrow (⤹), \acwopencirclearrow (↺), \acwoverarcarrow (⤺), \acwundercurvearrow (⤻), \adots (⋰), \ae (æ), \aleph (ℵ), \alpha (α), \amalg (⨿), \angdnr (⦟), \angle (∠), \angles (⦞), \angleubar (⦤), \approx (≈), \approxeq (≊), \approxeqq (⩰), \approxident (≋), \arceq (≘), \aries (♈), \assert (⊦), \ast (∗), \asteq (⩮), \astrosun (☉), \asymp (≍), \awint (⨑).
+
+\bNot (⫭), \backcong (≌), \backdprime (‶), \backepsilon (϶), \backprime (‵), \backsim (∽), \backsimeq (⋍), \backslash (\), \backtrprime (‷), \bagmember (⋿), \barV (⫪), \barcap (⩃), \barcup (⩂), \bardownharpoonleft (⥡), \bardownharpoonright (⥝), \barleftarrow (⇤), \barleftarrowrightarrowbar (↹), \barleftharpoondown (⥖), \barleftharpoonup (⥒), \barovernorthwestarrow (↸), \barrightarrowdiamond (⤠), \barrightharpoondown (⥟), \barrightharpoonup (⥛), \baruparrow (⤒), \barupharpoonleft (⥘), \barupharpoonright (⥔), \barvee (⊽), \barwedge (⊼), \bbrktbrk (⎶), \bdHrule (═), \bdVrule (║), \bdbVbH (╬), \bdbVbh (╫), \bdbVlH (╣), \bdbVlh (╢), \bdbVrH (╠), \bdbVrh (╟), \bdbvbH (╪), \bdbvbh (┼), \bdbvlH (╡), \bdbvlh (┤), \bdbvrH (╞), \bdbvrh (├), \bddVbH (╦), \bddVbh (╥), \bddVlH (╗), \bddVlh (╖), \bddVrH (╔), \bddVrh (╓), \bddvbH (╤), \bddvbh (┬), \bddvlH (╕), \bddvlh (┐), \bddvrH (╒), \bddvrh (┌), \bdhrule (─), \bdnesw (╱), \bdnwse (╲), \bdquadhdash (┈), \bdquadvdash (┊), \bdtriplevdash (┆), \bduVbH (╩), \bduVbh (╨), \bduVlH (╝), \bduVlh (╜), \bduVrH (╚), \bduVrh (╙), \bduvbH (╧), \bduvbh (┴), \bduvlH (╛), \bduvlh (┘), \bduvrH (╘), \bduvrh (└), \bdvrule (│), \because (∵), \benzenr (⏣), \beta (β), \beth (ℶ), \between (≬), \bigblacktriangledown (▼), \bigblacktriangleup (▲), \bigbot (⟘), \bigcap (⋂), \bigcup (⋃), \bigslopedvee (⩗), \bigslopedwedge (⩘), \bigstar (★), \bigtop (⟙), \bigtriangledown (▽), \bigtriangleup (△), \bigvee (⋁), \bigwedge (⋀), \bigwhitestar (☆), \blackcircledownarrow (⧭), \blackcircledrightdot (⚈), \blackcircledsanseight (➑), \blackcircledsansfive (➎), \blackcircledsansfour (➍), \blackcircledsansnine (➒), \blackcircledsansone (➊), \blackcircledsansseven (➐), \blackcircledsanssix (➏), \blackcircledsansten (➓), \blackcircledsansthree (➌), \blackcircledsanstwo (➋), \blackcircledtwodots (⚉), \blackcircleulquadwhite (◕), \blackdiamonddownarrow (⧪), \blackhourglass (⧗), \blackinwhitediamond (◈), \blackinwhitesquare (▣), \blacklefthalfcircle (◖), \blackpointerleft (◄), \blackpointerright (►), \blackrighthalfcircle (◗), \blacksmiley (☻), \blacktriangle (▴), \blacktriangledown (▾), \blacktriangleleft (◀), \blacktriangleright (▶), \blkhorzoval (⬬), \blkvertoval (⬮), \blockfull (█), \blockhalfshaded (▒), \blocklefthalf (▌), \blocklowhalf (▄), \blockqtrshaded (░), \blockrighthalf (▐), \blockthreeqtrshaded (▓), \blockuphalf (▀), \bot (⊥), \botsemicircle (◡), \bowtie (⋈), \box (◻), \boxast (⧆), \boxbar (◫), \boxbox (⧈), \boxbslash (⧅), \boxcircle (⧇), \boxdiag (⧄), \boxdot (⊡), \boxminus (⊟), \boxonbox (⧉), \boxplus (⊞), \boxtimes (⊠), \bsimilarleftarrow (⭁), \bsimilarrightarrow (⭇), \bsolhsub (⟈), \btimes (⨲), \bullet (∙), \bullseye (◎), \bumpeq (≏), \bumpeqq (⪮).
+
+\calB (ℬ), \calE (ℰ), \calF (ℱ), \calH (ℋ), \calM (ℳ), \calR (ℛ), \cap (∩), \capdot (⩀), \capwedge (⩄), \caretinsert (‸), \carreturn (⏎), \carriagereturn (↵), \ccwundercurvearrow (⤿), \cdot (⋅), \cdotp (·), \cdots (⋯), \cdprime (ʺ), \checkmark (✓), \chi (χ), \cirE (⧃), \cirbot (⟟), \circ (∘), \circeq (≗), \circfint (⨐), \circlebottomhalfblack (◒), \circledA (Ⓐ), \circledB (Ⓑ), \circledC (Ⓒ), \circledD (Ⓓ), \circledE (Ⓔ), \circledF (Ⓕ), \circledG (Ⓖ), \circledH (Ⓗ), \circledI (Ⓘ), \circledJ (Ⓙ), \circledK (Ⓚ), \circledL (Ⓛ), \circledM (Ⓜ), \circledN (Ⓝ), \circledO (Ⓞ), \circledP (Ⓟ), \circledQ (Ⓠ), \circledR (Ⓡ), \circledS (Ⓢ), \circledT (Ⓣ), \circledU (Ⓤ), \circledV (Ⓥ), \circledW (Ⓦ), \circledX (Ⓧ), \circledY (Ⓨ), \circledZ (Ⓩ), \circleda (ⓐ), \circledast (⊛), \circledb (ⓑ), \circledbullet (⦿), \circledc (ⓒ), \circledcirc (⊚), \circledd (ⓓ), \circleddash (⊝), \circlede (ⓔ), \circledeight (⑧), \circledequal (⊜), \circledf (ⓕ), \circledfive (⑤), \circledfour (④), \circledg (ⓖ), \circledh (ⓗ), \circledi (ⓘ), \circledj (ⓙ), \circledk (ⓚ), \circledl (ⓛ), \circledm (ⓜ), \circledn (ⓝ), \circlednine (⑨), \circledo (ⓞ), \circledone (①), \circledownarrow (⧬), \circledp (ⓟ), \circledparallel (⦷), \circledq (ⓠ), \circledr (ⓡ), \circledrightdot (⚆), \circleds (ⓢ), \circledsanseight (➇), \circledsansfive (➄), \circledsansfour (➃), \circledsansnine (➈), \circledsansone (➀), \circledsansseven (➆), \circledsanssix (➅), \circledsansten (➉), \circledsansthree (➂), \circledsanstwo (➁), \circledseven (⑦), \circledsix (⑥), \circledstar (✪), \circledt (ⓣ), \circledthree (③), \circledtwo (②), \circledtwodots (⚇), \circledu (ⓤ), \circledv (ⓥ), \circledvert (⦶), \circledw (ⓦ), \circledwhitebullet (⦾), \circledx (ⓧ), \circledy (ⓨ), \circledz (ⓩ), \circledzero (⓪), \circlehbar (⦵), \circlelefthalfblack (◐), \circlellquad (◵), \circlelrquad (◶), \circleonleftarrow (⬰), \circleonrightarrow (⇴), \circlerighthalfblack (◑), \circletophalfblack (◓), \circleulquad (◴), \circleurquad (◷), \circleurquadblack (◔), \circlevertfill (◍), \cirmid (⫯), \cirscir (⧂), \clangle (〈), \closedvarcap (⩍), \closedvarcup (⩌), \closedvarcupsmashprod (⩐), \closure (⁐), \cloverleaf (⌘), \clubsuit (♣), \colon (:), \colon (∶), \coloneq (≔), \commaminus (⨩), \complement (∁), \concavediamond (⟡), \concavediamondtickleft (⟢), \concavediamondtickright (⟣), \cong (≅), \congdot (⩭), \conictaper (⌲), \conjunction (☌), \coprod (∐), \cprime (ʹ), \crangle (〉), \csub (⫏), \csube (⫑), \csup (⫐), \csupe (⫒), \cuberoot (∛), \cup (∪), \cupdot (⊍), \cupleftarrow (⊌), \cupvee (⩅), \curlyeqprec (⋞), \curlyeqsucc (⋟), \curlyvee (⋎), \curlywedge (⋏), \curvearrowleft (↶), \curvearrowleftplus (⤽), \curvearrowright (↷), \curvearrowrightminus (⤼), \cwcirclearrow (⥁), \cwgapcirclearrow (⟳), \cwopencirclearrow (↻), \cwrightarcarrow (⤸), \cwundercurvearrow (⤾), \cylcty (⌭).
+
+\dag (†), \dagger (†), \daleth (ℸ), \danger (☡), \dashV (⫣), \dashVdash (⟛), \dashcolon (∹), \dashleftharpoondown (⥫), \dashrightharpoondown (⥭), \dashv (⊣), \dbkarow (⤏), \ddag (‡), \ddagger (‡), \ddots (⋱), \ddotseq (⩷), \delta (δ), \dh (ð), \diameter (⌀), \diamond (◇), \diamondbotblack (⬙), \diamondcdot (⟐), \diamondleftarrow (⤝), \diamondleftarrowbar (⤟), \diamondleftblack (⬖), \diamondrightblack (⬗), \diamondsuit (♢), \diamondtopblack (⬘), \dicei (⚀), \diceii (⚁), \diceiii (⚂), \diceiv (⚃), \dicev (⚄), \dicevi (⚅), \digamma (ϝ), \dingasterisk (✽), \dircurrent (⎓), \disin (⋲), \div (÷), \divideontimes (⋇), \dj (đ), \dlcrop (⌍), \doteq (≐), \dotequiv (⩧), \dotminus (∸), \dotplus (∔), \dots (…), \dotsim (⩪), \dotsminusdots (∺), \dottedcircle (◌), \dottedsquare (⬚), \dottimes (⨰), \doublebarvee (⩢), \doublebarwedge (⩞), \doubleplus (⧺), \downarrow (↓), \downarrowbar (⤓), \downarrowbarred (⤈), \downdasharrow (⇣), \downdownarrows (⇊), \downfishtail (⥿), \downharpoonleft (⇃), \downharpoonleftbar (⥙), \downharpoonright (⇂), \downharpoonrightbar (⥕), \downharpoonsleftright (⥥), \downrightcurvedarrow (⤵), \downtriangleleftblack (⧨), \downtrianglerightblack (⧩), \downuparrows (⇵), \downupharpoonsleftright (⥯), \downwhitearrow (⇩), \downzigzagarrow (↯), \dprime (″), \draftingarrow (➛), \drbkarow (⤐), \drcrop (⌌), \dsol (⧶), \dsub (⩤), \dualmap (⧟).
+
+\earth (♁), \egsdot (⪘), \eighthnote (♪), \elinters (⏧), \ell (ℓ), \elsdot (⪗), \emdash (—), \emptyset (∅), \emptysetoarr (⦳), \emptysetoarrl (⦴), \emptysetobar (⦱), \emptysetocirc (⦲), \endash (–), \enleadertwodots (‥), \envelope (✉), \eparsl (⧣), \epsilon (ϵ), \eqcirc (≖), \eqcolon (≕), \eqdef (≝), \eqdot (⩦), \eqeq (⩵), \eqeqeq (⩶), \eqgtr (⋝), \eqless (⋜), \eqqgtr (⪚), \eqqless (⪙), \eqqplus (⩱), \eqqsim (⩳), \eqqslantgtr (⪜), \eqqslantless (⪛), \eqsim (≂), \eqslantgtr (⪖), \eqslantless (⪕), \equalleftarrow (⭀), \equalparallel (⋕), \equalrightarrow (⥱), \equiv (≡), \equivDD (⩸), \equivVert (⩨), \equivVvert (⩩), \eqvparsl (⧥), \errbarblackcircle (⧳), \errbarblackdiamond (⧱), \errbarblacksquare (⧯), \errbarcircle (⧲), \errbardiamond (⧰), \errbarsquare (⧮), \eta (η), \euro (€), \exists (∃).
+
+\fallingdotseq (≒), \fbowtie (⧓), \fcmp (⨾), \fdiagovnearrow (⤯), \fdiagovrdiag (⤬), \female (♀), \figdash (‒), \fint (⨏), \fisheye (◉), \flat (♭), \fltns (⏥), \forall (∀), \forks (⫝̸), \forksnot (⫝), \forkv (⫙), \fourthroot (∜), \fourvdots (⦙), \fracfiveeighths (⅝), \fracfivesixths (⅚), \fracfourfifths (⅘), \fraconeeighth (⅛), \fraconefifth (⅕), \fraconesixth (⅙), \fraconethird (⅓), \fracseveneights (⅞), \fracslash (⁄), \fracthreeeighths (⅜), \fracthreefifths (⅗), \fractwofifths (⅖), \fractwothirds (⅔), \frakC (ℭ), \frakH (ℌ), \frakZ (ℨ), \frown (⌢), \frownie (☹), \fullouterjoin (⟗).
+
+\gamma (γ), \ge (≥), \geq (≥), \geqq (≧), \geqslant (⩾), \gescc (⪩), \gesdot (⪀), \gesdoto (⪂), \gesdotol (⪄), \gesles (⪔), \gets (←), \gg (≫), \ggg (⋙), \gggnest (⫸), \gimel (ℷ), \glE (⪒), \gla (⪥), \gleichstark (⧦), \glj (⪤), \gnapprox (⪊), \gneq (⪈), \gneqq (≩), \gnsim (⋧), \greater (>), \gsime (⪎), \gsiml (⪐), \gtcc (⪧), \gtcir (⩺), \gtlpar (⦠), \gtquest (⩼), \gtrapprox (⪆), \gtrarr (⥸), \gtrdot (⋗), \gtreqless (⋛), \gtreqqless (⪌), \gtrless (≷), \gtrsim (≳), \guillemotleft («), \guillemotright (»), \guilsinglleft (‹), \guilsinglright (›).
+
+\harrowextender (⎯), \hatapprox (⩯), \hbar (ℏ), \heartsuit (♡), \hermitmatrix (⊹), \hexagon (⎔), \hexagonblack (⬣), \hiraganano (の), \hknearrow (⤤), \hknwarrow (⤣), \hksearow (⤥), \hkswarow (⤦), \hookleftarrow (↩), \hookrightarrow (↪), \horizbar (―), \hourglass (⧖), \house (⌂), \hrectangle (▭), \hrectangleblack (▬), \hslash (ℏ), \hyphenbullet (⁃), \hzigzag (〰).
+
+\iiiint (⨌), \iiint (∭), \iinfin (⧜), \iint (∬), \imageof (⊷), \in (∈), \incare (℅), \increment (∆), \infty (∞), \int (∫), \intBar (⨎), \intbar (⨍), \intbottom (⌡), \intcap (⨙), \intclockwise (∱), \intcup (⨚), \intercal (⊺), \interleave (⫴), \intextender (⎮), \intlharhk (⨗), \intprod (⨼), \intprodr (⨽), \inttop (⌠), \intx (⨘), \inversebullet (◘), \inversewhitecircle (◙), \invnot (⌐), \invwhitelowerhalfcircle (◛), \invwhiteupperhalfcircle (◚), \iota (ι), \ipasupgamma (ˠ), \ipasupl (ˡ), \ipasuprerglotstpp (ˤ), \ipasups (ˢ), \ipasupx (ˣ), \ipaunaspirated (˭), \ipavoicing (ˬ), \isinE (⋹), \isindot (⋵), \isinobar (⋷), \isins (⋴), \isinvb (⋸), \itBbbD (ⅅ), \itBbbd (ⅆ), \itBbbe (ⅇ), \itBbbi (ⅈ), \itBbbj (ⅉ).
+
+\jupiter (♃), \kappa (κ), \kernelcontraction (∻), \koppa (ϟ).
+
+\l (ł), \lAngle (⟪), \lBrace (⦃), \lBrack (⟦), \lParen (⦅), \lambda (λ), \lambdabar (ƛ), \langle (⟨), \langledot (⦑), \laplac (⧠), \lasp (ʽ), \lat (⪫), \late (⪭), \lbag (⟅), \lblkbrbrak (⦗), \lbrace (@{), \lbracelend (⎩), \lbracemid (⎨), \lbraceuend (⎧), \lbrack ([), \lbrackextender (⎢), \lbracklend (⎣), \lbracklltick (⦏), \lbrackubar (⦋), \lbrackuend (⎡), \lbrackultick (⦍), \lbrbrak (❲), \lceil (⌈), \lcurvyangle (⧼), \ldasharrhead (⇠), \le (≤), \leadsto (↝), \leftarrow (←), \leftarrowapprox (⭊), \leftarrowbackapprox (⭂), \leftarrowbsimilar (⭋), \leftarrowless (⥷), \leftarrowonoplus (⬲), \leftarrowplus (⥆), \leftarrowshortrightarrow (⥃), \leftarrowsimilar (⥳), \leftarrowsubset (⥺), \leftarrowtail (↢), \leftarrowtriangle (⇽), \leftarrowx (⬾), \leftbkarrow (⤌), \leftcurvedarrow (⬿), \leftdasharrow (⇠), \leftdasharrowhead (⇡), \leftdbkarrow (⤎), \leftdbltail (⤛), \leftdotarrow (⬸), \leftdowncurvedarrow (⤶), \leftfishtail (⥼), \leftharpoondown (↽), \leftharpoondownbar (⥞), \leftharpoonsupdown (⥢), \leftharpoonup (↼), \leftharpoonupbar (⥚), \leftharpoonupdash (⥪), \leftleftarrows (⇇), \leftmoon (☾), \leftouterjoin (⟕), \leftrightarrow (↔), \leftrightarrowcircle (⥈), \leftrightarrows (⇆), \leftrightarrowtriangle (⇿), \leftrightharpoondowndown (⥐), \leftrightharpoondownup (⥋), \leftrightharpoons (⇋), \leftrightharpoonsdown (⥧), \leftrightharpoonsup (⥦), \leftrightharpoonupdown (⥊), \leftrightharpoonupup (⥎), \leftrightsquigarrow (↭), \leftsquigarrow (↜), \leftsquigarrow (⇜), \lefttail (⤙), \leftthreearrows (⬱), \leftthreetimes (⋋), \leftwhitearrow (⇦), \leq (≤), \leqq (≦), \leqqslant (⫹), \leqqslant (⫺), \leqslant (⩽), \lescc (⪨), \lesdot (⩿), \lesdoto (⪁), \lesdotor (⪃), \lesges (⪓), \less (<), \lessapprox (⪅), \lessdot (⋖), \lesseqgtr (⋚), \lesseqqgtr (⪋), \lessgtr (≶), \lesssim (≲), \lfbowtie (⧑), \lfloor (⌊), \lftimes (⧔), \lgE (⪑), \lgblkcircle (⬤), \lgblksquare (⬛), \lgwhtcircle (◯), \lgwhtsquare (⬜), \lhd (⊲), \linefeed (↴), \ll (≪), \llangle (⦉), \llarc (◟), \llblacktriangle (◣), \llcorner (⌞), \lll (⋘), \lllnest (⫷), \llparenthesis (⦇), \lltriangle (◺), \lmoustache (⎰), \lnapprox (⪉), \lneq (⪇), \lneqq (≨), \lnsim (⋦), \longdashv (⟞), \longdivision (⟌), \longleftarrow (⟵), \longleftrightarrow (⟷), \longleftsquigarrow (⬳), \longmapsfrom (⟻), \longmapsto (⟼), \longrightarrow (⟶), \longrightsquigarrow (⟿), \looparrowleft (↫), \looparrowright (↬), \lowint (⨜), \lozenge (◊), \lozengeminus (⟠), \lparenextender (⎜), \lparenlend (⎝), \lparenless (⦓), \lparenuend (⎛), \lq (‘), \lrarc (◞), \lrblacktriangle (◢), \lrcorner (⌟), \lrtriangle (◿), \lrtriangleeq (⧡), \lsime (⪍), \lsimg (⪏), \lsqhook (⫍), \ltcc (⪦), \ltcir (⩹), \ltimes (⋉), \ltlarr (⥶), \ltquest (⩻), \ltrivb (⧏), \lvboxline (⎸), \lvzigzag (⧘).
+
+\male (♂), \maltese (✠), \mapsdown (↧), \mapsfrom (↤), \mapsto (↦), \mapsup (↥), \mdblkdiamond (⬥), \mdblklozenge (⬧), \mdblkrcl (⚫), \mdblksquare (◼), \mdlgblkcircle (●), \mdlgblkdiamond (◆), \mdlgblklozenge (⧫), \mdlgblksquare (■), \mdlgwhtcircle (○), \mdlgwhtdiamond (◇), \mdlgwhtsquare (□), \mdsmblkcircle (⦁), \mdsmblksquare (◾), \mdsmwhtcircl (⚬), \mdsmwhtsquare (◽), \mdwhtcircl (⚪), \mdwhtdiamond (⬦), \mdwhtlozenge (⬨), \mdwhtsquare (◻), \measangledltosw (⦯), \measangledrtose (⦮), \measangleldtosw (⦫), \measanglelutonw (⦩), \measanglerdtose (⦪), \measanglerutone (⦨), \measangleultonw (⦭), \measangleurtone (⦬), \measeq (≞), \measuredangle (∡), \measuredangleleft (⦛), \measuredrightangle (⊾), \medblackstar (⭑), \medmathspace ( ), \medwhitestar (⭐), \mercury (☿), \mho (℧), \mid (∣), \midbarvee (⩝), \midbarwedge (⩜), \midcir (⫰), \minus (−), \minusdot (⨪), \minusfdots (⨫), \minusrdots (⨬), \mlcp (⫛), \models (⊧), \mp (∓), \mu (μ), \multimap (⊸), \multimapinv (⟜).
+
+\nHdownarrow (⇟), \nHuparrow (⇞), \nLeftarrow (⇍), \nLeftrightarrow (⇎), \nRightarrow (⇏), \nVDash (⊯), \nVdash (⊮), \nVleftarrow (⇺), \nVleftarrowtail (⬺), \nVleftrightarrow (⇼), \nVrightarrow (⇻), \nVrightarrowtail (⤕), \nVtwoheadleftarrow (⬵), \nVtwoheadleftarrowtail (⬽), \nVtwoheadrightarrow (⤁), \nVtwoheadrightarrowtail (⤘), \nabla (∇), \napprox (≉), \nasymp (≭), \natural (♮), \ncong (≇), \ne (≠), \nearrow (↗), \neg (¬), \neovnwarrow (⤱), \neovsearrow (⤮), \neptune (♆), \neq (≠), \nequiv (≢), \neswarrow (⤢), \neuter (⚲), \nexists (∄), \ng (ŋ), \ngeq (≱), \ngtr (≯), \ngtrless (≹), \ngtrsim (≵), \nhVvert (⫵), \nhpar (⫲), \ni (∋), \niobar (⋾), \nis (⋼), \nisd (⋺), \nleftarrow (↚), \nleftrightarrow (↮), \nleq (≰), \nless (≮), \nlessgtr (≸), \nlesssim (≴), \nmid (∤), \nni (∌), \nobreakhyphen (‑), \notin (∉), \nparallel (∦), \npolint (⨔), \nprec (⊀), \npreccurlyeq (⋠), \nrightarrow (↛), \nsim (≁), \nsime (≄), \nsqsubseteq (⋢), \nsqsupseteq (⋣), \nsubset (⊄), \nsubseteq (⊈), \nsucc (⊁), \nsucccurlyeq (⋡), \nsupset (⊅), \nsupseteq (⊉), \ntriangleleft (⋪), \ntrianglelefteq (⋬), \ntriangleright (⋫), \ntrianglerighteq (⋭), \nu (ν), \nvDash (⊭), \nvLeftarrow (⤂), \nvLeftrightarrow (⤄), \nvRightarrow (⤃), \nvdash (⊬), \nvinfty (⧞), \nvleftarrow (⇷), \nvleftarrowtail (⬹), \nvleftrightarrow (⇹), \nvrightarrow (⇸), \nvrightarrowtail (⤔), \nvtwoheadleftarrow (⬴), \nvtwoheadleftarrowtail (⬼), \nvtwoheadrightarrow (⤀), \nvtwoheadrightarrowtail (⤗), \nwarrow (↖), \nwovnearrow (⤲), \nwsearrow (⤡).
+
+\o (ø), \obar (⌽), \obot (⦺), \obrbrak (⏠), \obslash (⦸), \odiv (⨸), \odot (⊙), \odotslashdot (⦼), \oe (œ), \ogreaterthan (⧁), \ohorn (ơ), \oiiint (∰), \oiint (∯), \oint (∮), \ointctrclockwise (∳), \olcross (⦻), \oldKoppa (Ϙ), \oldkoppa (ϙ), \olessthan (⧀), \omega (ω), \omicron (ο), \ominus (⊖), \operp (⦹), \oplus (⊕), \opluslhrim (⨭), \oplusrhrim (⨮), \origof (⊶), \oslash (⊘), \otimes (⊗), \otimeshat (⨶), \otimeslhrim (⨴), \otimesrhrim (⨵), \overbrace (⏞), \overbracket (⎴), \overline (‾), \overparen (⏜), \owns (∋).
+
+\parallel (∥), \parallelogram (▱), \parallelogramblack (▰), \parsim (⫳), \partial (∂), \partialmeetcontraction (⪣), \pentagon (⬠), \pentagonblack (⬟), \perp (⟂), \perps (⫡), \phi (ϕ), \phone (☎), \pi (π), \pitchfork (⋔), \plusdot (⨥), \pluseqq (⩲), \plushat (⨣), \plussim (⨦), \plussubtwo (⨧), \plustrif (⨨), \pluto (♇), \pm (±), \pointnt (⨕), \postalmark (〒), \prec (≺), \precapprox (⪷), \preccurlyeq (≼), \preceq (⪯), \preceqq (⪳), \precnapprox (⪹), \precneq (⪱), \precneqq (⪵), \precnsim (⋨), \precsim (≾), \prime (′), \prod (∏), \profalar (⌮), \profline (⌒), \profsurf (⌓), \propto (∝), \prurel (⊰), \psi (ψ), \pullback (⟓), \pushout (⟔).
+
+\qprime (⁗), \quarternote (♩), \questeq (≟), \quotdblbase („), \quotdblright (‟), \quotsinglbase (‚), \quotsinglright (‛).
+
+\rAngle (⟫), \rBrace (⦄), \rBrack (⟧), \rParen (⦆), \rangle (⟩), \rangledot (⦒), \rangledownzigzagarrow (⍼), \rasp (ʼ), \rbag (⟆), \rblkbrbrak (⦘), \rbrace (@}), \rbracelend (⎭), \rbracemid (⎬), \rbraceuend (⎫), \rbrack (]), \rbrackextender (⎥), \rbracklend (⎦), \rbracklrtick (⦎), \rbrackubar (⦌), \rbrackuend (⎤), \rbrackurtick (⦐), \rbrbrak (❳), \rceil (⌉), \rcurvyangle (⧽), \rdiagovfdiag (⤫), \rdiagovsearrow (⤰), \recorder (⌕), \revangle (⦣), \revangleubar (⦥), \revemptyset (⦰), \revnmid (⫮), \rfbowtie (⧒), \rfloor (⌋), \rftimes (⧕), \rhd (⊳), \rho (ρ), \righarrowbsimilar (⭌), \rightangle (∟), \rightanglemdot (⦝), \rightanglesqr (⦜), \rightarrow (→), \rightarrowapprox (⥵), \rightarrowbackapprox (⭈), \rightarrowbar (⇥), \rightarrowdiamond (⤞), \rightarrowgtr (⭃), \rightarrowonoplus (⟴), \rightarrowplus (⥅), \rightarrowshortleftarrow (⥂), \rightarrowsimilar (⥴), \rightarrowsupset (⭄), \rightarrowtail (↣), \rightarrowtriangle (⇾), \rightarrowx (⥇), \rightbkarrow (⤍), \rightcurvedarrow (⤳), \rightdasharrow (⇢), \rightdbltail (⤜), \rightdotarrow (⤑), \rightdowncurvedarrow (⤷), \rightfishtail (⥽), \rightharpoondown (⇁), \rightharpoondownbar (⥗), \rightharpoonsupdown (⥤), \rightharpoonup (⇀), \rightharpoonupbar (⥓), \rightharpoonupdash (⥬), \rightimply (⥰), \rightleftarrows (⇄), \rightleftharpoons (⇌), \rightleftharpoonsdown (⥩), \rightleftharpoonsup (⥨), \rightmoon (☽), \rightouterjoin (⟖), \rightpentagon (⭔), \rightpentagonblack (⭓), \rightrightarrows (⇉), \rightsquigarrow (↝), \rightsquigarrow (⇝), \righttail (⤚), \rightthreearrows (⇶), \rightthreetimes (⋌), \rightwhitearrow (⇨), \ringplus (⨢), \risingdotseq (≓), \rmoustache (⎱), \rparenextender (⎟), \rparengtr (⦔), \rparenlend (⎠), \rparenuend (⎞), \rppolint (⨒), \rq (’), \rrangle (⦊), \rrparenthesis (⦈), \rsolbar (⧷), \rsqhook (⫎), \rsub (⩥), \rtimes (⋊), \rtriltri (⧎), \ruledelayed (⧴), \rvboxline (⎹), \rvzigzag (⧙).
+
+\sampi (ϡ), \sansLmirrored (⅃), \sansLturned (⅂), \saturn (♄), \scissors (✂), \scpolint (⨓), \scrB (ℬ), \scrE (ℰ), \scrF (ℱ), \scrH (ℋ), \scrI (ℐ), \scrL (ℒ), \scrM (ℳ), \scrR (ℛ), \scre (ℯ), \scrg (ℊ), \scro (ℴ), \scurel (⊱), \searrow (↘), \seovnearrow (⤭), \setminus (∖), \setminus (⧵), \sharp (♯), \shortdowntack (⫟), \shortleftarrow (←), \shortlefttack (⫞), \shortrightarrow (→), \shortrightarrowleftarrow (⥄), \shortuptack (⫠), \shuffle (⧢), \sigma (σ), \silon (υ), \silon (ϒ), \sim (∼), \simeq (≃), \simgE (⪠), \simgtr (⪞), \similarleftarrow (⭉), \similarrightarrow (⥲), \simlE (⪟), \simless (⪝), \simminussim (⩬), \simneqq (≆), \simplus (⨤), \simrdots (⩫), \sinewave (∿), \slash (∕), \smallblacktriangleleft (◂), \smallblacktriangleright (▸), \smalldiamond (⋄), \smallin (∊), \smallint (∫), \smallni (∍), \smallsetminus (∖), \smalltriangleleft (◃), \smalltriangleright (▹), \smashtimes (⨳), \smblkdiamond (⬩), \smblklozenge (⬪), \smblksquare (▪), \smeparsl (⧤), \smile (⌣), \smiley (☺), \smt (⪪), \smte (⪬), \smwhitestar (⭒), \smwhtcircle (◦), \smwhtlozenge (⬫), \smwhtsquare (▫), \spadesuit (♠), \sphericalangle (∢), \sphericalangleup (⦡), \sqcap (⊓), \sqcup (⊔), \sqint (⨖), \sqlozenge (⌑), \sqrt (√), \sqrt3 (∛), \sqrt4 (∜), \sqrtbottom (⎷), \sqsubset (⊏), \sqsubseteq (⊑), \sqsubsetneq (⋤), \sqsupset (⊐), \sqsupseteq (⊒), \sqsupsetneq (⋥), \squarecrossfill (▩), \squaregrayfill (▩), \squarehfill (▤), \squarehvfill (▦), \squareleftblack (◧), \squareleftblack (◨), \squarellblack (⬕), \squarellquad (◱), \squarelrblack (◪), \squarelrquad (◲), \squareneswfill (▨), \squarenwsefill (▧), \squareulblack (◩), \squareulquad (◰), \squareurblack (⬔), \squareurquad (◳), \squarevfill (▥), \squoval (▢), \ss (ß), \star (⋆), \stareq (≛), \sterling (£), \stigma (ϛ), \strns (⏤), \subedot (⫃), \submult (⫁), \subrarr (⥹), \subset (⊂), \subsetapprox (⫉), \subsetcirc (⟃), \subsetdot (⪽), \subseteq (⊆), \subseteqq (⫅), \subsetneq (⊊), \subsetneqq (⫋), \subsetplus (⪿), \subsim (⫇), \subsub (⫕), \subsup (⫓), \succ (≻), \succapprox (⪸), \succcurlyeq (≽), \succeq (⪰), \succeqq (⪴), \succnapprox (⪺), \succneq (⪲), \succneqq (⪶), \succnsim (⋩), \succsim (≿), \sum (∑), \sumbottom (⎳), \sumint (⨋), \sumtop (⎲), \sun (☼), \supdsub (⫘), \supedot (⫄), \suphsol (⟉), \suphsub (⫗), \suplarr (⥻), \supmult (⫂), \supn (ⁿ), \supset (⊃), \supsetapprox (⫊), \supsetcirc (⟄), \supsetdot (⪾), \supseteq (⊇), \supseteqq (⫆), \supsetneq (⊋), \supsetneqq (⫌), \supsetplus (⫀), \supsim (⫈), \supsub (⫔), \supsup (⫖), \surd (√), \swarrow (↙).
+
+\talloblong (⫾), \target (⌖), \tau (τ), \taurus (♉), \testhookx (ᶍ), \textAsterisks (⁑), \textacute (ˊ), \textadvanced (˖), \textain (ʿ), \textasciiacute (´), \textasciicircum (^), \textasciidieresis (¨), \textasciigrave (`), \textasciimacron (¯), \textasciitilde (~), \textasterisklow (⁎), \textbackdprime (‶), \textbackprime (‵), \textbacktrprime (‷), \textbardotlessj (ɟ), \textbardotlessjvar (ʄ), \textbarglotstop (ʡ), \textbari (ɨ), \textbarl (ƚ), \textbaro (ɵ), \textbarrevglotstop (ʢ), \textbaru (ʉ), \textbeltl (ɬ), \textbenttailyogh (ƺ), \textbreve (˘), \textbrokenbar (¦), \textbullet (•), \textbullseye (ʘ), \textcent (¢), \textcircledP (℗), \textcloseepsilon (ʚ), \textcloseomega (ɷ), \textcloserevepsilon (ɞ), \textcopyright (©), \textcrb (ƀ), \textcrh (ħ), \textcrinvglotstop (ƾ), \textcrlambda (ƛ), \textcrtwo (ƻ), \textctc (ɕ), \textctd (ȡ), \textctesh (ʆ), \textctj (ʝ), \textctl (ȴ), \textctn (ȵ), \textctt (ȶ), \textctyogh (ʓ), \textctz (ʑ), \textcurrency (¤), \textdctzlig (ʥ), \textdegree (°), \textdiscount (⁒), \textdollar ($), \textdotaccent (˙), \textdotlessj (ȷ), \textdoubleacute (˝), \textdoublebarpipe (ǂ), \textdoublepipe (ǁ), \textdprime (″), \textdptr (˅), \textdyoghlig (ʤ), \textdzlig (ʣ), \textepsilon (ɛ), \textesh (ʃ), \textestimated (℮), \textexclam (ǃ), \textexclamdown (¡), \textfishhookr (ɾ), \textflorin (ƒ), \textfranc (₣), \textgamma (ɣ), \textglotstop (ʔ), \textgrave (ˋ), \texthalflength (ˑ), \texthamza (ʾ), \texthen (ꜧ), \textheng (ꜧ), \texthooks (ᶊ), \texthookz (ᶎ), \texthtb (ɓ), \texthtc (ƈ), \texthtd (ɗ), \texthtg (ɠ), \texthth (ɦ), \texththeng (ɧ), \texthtk (ƙ), \texthtp (ƥ), \texthtq (ʠ), \texthtscg (ʛ), \texthtt (ƭ), \texthvlig (ƕ), \texthyphen (‐), \textinvglotstop (ʖ), \textinvscr (ʁ), \textiota (ɩ), \textlengthmark (ː), \textlhalfring (˓), \textlhookd (ᶁ), \textlhookk (ᶄ), \textlhookl (ᶅ), \textlhookt (ƫ), \textlhti (ɿ), \textlira (₤), \textlonglegr (ɼ), \textlongy (ʮ), \textlongy (ʯ), \textlooptoprevesh (ƪ), \textlowacute (ˏ), \textlowered (˕), \textlowgrave (ˎ), \textlowmacron (ˍ), \textlptr (˂), \textltailm (ɱ), \textltailn (ɲ), \textltilde (ɫ), \textlyoghlig (ɮ), \textmacron (ˉ), \textmu (µ), \textnumero (№), \textogonek (˛), \textohm (Ω), \textonehalf (½), \textonequarter (¼), \textonesuperior (¹), \textopeno (ɔ), \textordfeminine (ª), \textordmasculine (º), \textovercross (˟), \textoz (℥), \textpertenthousand (‱), \textperthousand (‰), \textpesetas (₧), \textphi (ɸ), \textpipe (ǀ), \textprime (′), \textprimstress (ˈ), \textqprime (⁗), \textquestiondown (¿), \textquotedbl ("), \textquotedblleft (“), \textquotedblright (”), \textraised (˔), \textraiseglotstop (ˀ), \textraiserevglotstop (ˁ), \textramshorns (ɤ), \textrecipe (℞), \textreferencemark (※), \textregistered (®), \textretracted (˗), \textreve (ɘ), \textrevepsilon (ɜ), \textrevglotstop (ʕ), \textrhalfring (˒), \textrhookrevepsilon (ɝ), \textrhookschwa (ɚ), \textrhoticity (˞), \textringaccent (˚), \textrptr (˃), \textrtaild (ɖ), \textrtaill (ɭ), \textrtailn (ɳ), \textrtailr (ɽ), \textrtails (ʂ), \textrtailt (ʈ), \textrtailz (ʐ), \textsca (ᴀ), \textscb (ʙ), \textsce (ᴇ), \textscg (ɢ), \textsch (ʜ), \textschwa (ə), \textsci (ɪ), \textscl (ʟ), \textscn (ɴ), \textscoelig (ɶ), \textscr (ʀ), \textscripta (ɑ), \textscriptg (ɡ), \textscriptv (ʋ), \textscu (ᴜ), \textscy (ʏ), \textsecstress (ˌ), \textsemicolonreversed (⁏), \textsilon (Υ), \textsmalltilde (˜), \textstretchcvar (ʗ), \textsubw (w), \textsuph (ʰ), \textsuphth (ʱ), \textsupinvscr (ʶ), \textsupj (ʲ), \textsupr (ʳ), \textsupturnr (ʴ), \textsupturnrrtail (ʵ), \textsupw (ʷ), \textsupy (ʸ), \texttctctlig (ʧ), \texttctctlig (ʨ), \textthreequarters (¾), \textthreesuperior (³), \texttrademark (™), \texttrprime (‴), \texttslig (ʦ), \textturna (ɐ), \textturncomma (ʻ), \textturnh (ɥ), \textturnk (ʞ), \textturnlonglegr (ɺ), \textturnm (ɯ), \textturnmrleg (ɰ), \textturnr (ɹ), \textturnrrtail (ɻ), \textturnscripta (ɒ), \textturnt (ʇ), \textturnv (ʌ), \textturnw (ʍ), \textturny (ʎ), \texttwosuperior (²), \textupsilon (ʊ), \textuptr (˄), \textvibyi (ʅ), \textvisiblespace (␣), \textyogh (ʒ), \th (þ), \therefore (∴), \thermod (⧧), \theta (θ), \thickapprox (≈), \thicksim (∼), \threedangle (⟀), \threedotcolon (⫶), \tieconcat (⁀), \tieinfty (⧝), \times (×), \timesbar (⨱), \tminus (⧿), \to (→), \toea (⤨), \tona (⤧), \tonebarextrahigh (˥), \tonebarextralow (˩), \tonebarhigh (˦), \tonebarlow (˨), \tonebarmid (˧), \top (⊤), \topbot (⌶), \topcir (⫱), \topfork (⫚), \topsemicircle (◠), \tosa (⤩), \towa (⤪), \tplus (⧾), \trapezium (⏢), \trianglecdot (◬), \triangledown (▿), \triangleexclam (⚠), \triangleleft (◁), \triangleleftblack (◭), \trianglelefteq (⊴), \triangleminus (⨺), \triangleodot (⧊), \triangleplus (⨹), \triangleq (≜), \triangleright (▷), \trianglerightblack (◮), \trianglerighteq (⊵), \triangles (⧌), \triangleserifs (⧍), \triangletimes (⨻), \triangleubar (⧋), \tripleplus (⧻), \trprime (‴), \turnangle (⦢), \turnediota (℩), \turnednot (⌙), \twocaps (⩋), \twocups (⩊), \twoheaddownarrow (↡), \twoheadleftarrow (↞), \twoheadleftarrowtail (⬻), \twoheadleftdbkarrow (⬷), \twoheadmapsfrom (⬶), \twoheadmapsto (⤅), \twoheadrightarrow (↠), \twoheadrightarrowtail (⤖), \twoheaduparrow (↟), \twoheaduparrowcircle (⥉), \twolowline (‗), \twonotes (♫), \typecolon (⦂).
+
+\ubrbrak (⏡), \uhorn (ư), \ularc (◜), \ulblacktriangle (◤), \ulcorner (⌜), \ulcrop (⌏), \ultriangle (◸), \uminus (⩁), \underbrace (⏟), \underbracket (⎵), \underparen (⏝), \unlhd (⊴), \unrhd (⊵), \upand (⅋), \uparrow (↑), \uparrowbarred (⤉), \uparrowoncircle (⦽), \updasharrow (⇢), \updownarrow (↕), \updownarrowbar (↨), \updownarrows (⇅), \updownharpoonleftleft (⥑), \updownharpoonleftright (⥍), \updownharpoonrightleft (⥌), \updownharpoonrightright (⥏), \updownharpoonsleftright (⥮), \upfishtail (⥾), \upharpoonleft (↿), \upharpoonleftbar (⥠), \upharpoonright (↾), \upharpoonrightbar (⥜), \upharpoonsleftright (⥣), \upin (⟒), \upint (⨛), \uplus (⊎), \uprightcurvearrow (⤴), \upuparrows (⇈), \upwhitearrow (⇧), \urarc (◝), \urblacktriangle (◥), \urcorner (⌝), \urcrop (⌎), \urtriangle (◹).
+
+\v (ˇ), \vBar (⫨), \vBarv (⫩), \vDash (⊨), \vDdash (⫢), \varTheta (ϴ), \varVdash (⫦), \varbarwedge (⌅), \varbeta (ϐ), \varclubsuit (♧), \vardiamondsuit (♦), \vardoublebarwedge (⌆), \varepsilon (ε), \varheartsuit (♥), \varhexagon (⬡), \varhexagonblack (⬢), \varhexagonlrbonds (⌬), \varin (∈), \varisinobar (⋶), \varisins (⋳), \varkappa (ϰ), \varlrtriangle (⊿), \varni (∋), \varniobar (⋽), \varnis (⋻), \varnothing (∅), \varointclockwise (∲), \varphi (φ), \varpi (ϖ), \varpropto (∝), \varrho (ϱ), \varrowextender (⏐), \varsigma (ς), \varspadesuit (♤), \varstar (✶), \vartheta (ϑ), \vartriangle (▵), \vartriangleleft (⊲), \vartriangleright (⊳), \varveebar (⩡), \vbraceextender (⎪), \vbrtri (⧐), \vdash (⊢), \vdots (⋮), \vectimes (⨯), \vee (∨), \veebar (⊻), \veedot (⟇), \veedoublebar (⩣), \veeeq (≚), \veemidvert (⩛), \veeodot (⩒), \veeonvee (⩖), \veeonwedge (⩙), \vert (|), \viewdata (⌗), \vlongdash (⟝), \vrectangle (▯), \vrectangleblack (▮), \vysmlblksquare (⬝), \vysmlwhtsquare (⬞), \vzigzag (⦚).
+
+\watchicon (⌚), \wedge (∧), \wedgebar (⩟), \wedgedot (⟑), \wedgedoublebar (⩠), \wedgemidvert (⩚), \wedgeodot (⩑), \wedgeonwedge (⩕), \wedgeq (≙), \whitearrowupfrombar (⇪), \whiteinwhitetriangle (⟁), \whitepointerleft (◅), \whitepointerright (▻), \whitesquaretickleft (⟤), \whitesquaretickright (⟥), \whthorzoval (⬭), \whtvertoval (⬯), \wideangledown (⦦), \wideangleup (⦧), \wp (℘), \wr (≀).
+
+\xbsol (⧹), \xi (ξ), \xsol (⧸), \yen (¥), \zeta (ζ), \zpipe (⨠), 
 
 Я БУДУ КРАЙНЕ ПРИЗНАТЕЛЕН ЕСЛИ КТО-НИБУДЬ ПРОВЕРИТ СООТВЕТСТВИЕ ВСЕХ ИМЕН ПРАВИЛЬНЫМ ТЕХ-ИМ СИМВОЛАМ. 
 
diff --git a/texinfo/class_en.texi b/texinfo/class_en.texi
index fdf7d4a..4e822e3 100644
--- a/texinfo/class_en.texi
+++ b/texinfo/class_en.texi
@@ -1,6 +1,5 @@
 
 @c ------------------------------------------------------------------
- at node Plotter classes, Widget classes, MathGL core, Top
 @chapter Plotter classes
 @cindex mglGraphAB
 @cindex mglGraphZB
@@ -43,7 +42,7 @@ Class mglGraphIDTF implements plotting function for 1D, 2D and 3D plots  and exp
 
 Generally this class is a bit less abstract class than mglGraph class (@pxref{MathGL core}). It provide many protected methods for handling intermediate data from mglGraph methods and require a few methods to be defined by derived class. The developers of derived classes should look on file @samp{mgl_ab.h} and comments inside it or contact me.
 
-Here I just show new public methods for class mglGraphAB. There are functions returning the created picture (bitmap), its width and height. You may display it by yourself in any graphical library (see also, @ref{Widget classes}) or save in file (see also, @ref{Export to file}).
+Here I just show main public methods for class mglGraphAB. There are functions returning the created picture (bitmap), its width and height. You may display it by yourself in any graphical library (see also, @ref{Widget classes}) or save in file (see also, @ref{Export to file}).
 
 @deftypefn {Method on @code{mglGraphAB} (C++)} @code{const unsigned char *} GetBits ()
 @deftypefnx {Method on @code{mglGraph} (Python)} @code{void} GetRGB (@code{char *}buf, @code{int} size)
@@ -83,7 +82,7 @@ There are some keys handles for manipulating by the plot: 'a', 'd', 'w', 's' for
 @end deftypemethod
 
 @deftypemethod mglGraphAB @code{void} Window (@code{int} argc, @code{char **}argv, @code{mglDraw *}draw, @code{const char *}title, @code{bool} maximize=@code{false})
-This function is mostly the same as previous one. The only difference is that the drawing function and function for data reloading are specified as methods on a class inherited from class @code{mglDraw}. This class is defined in @code{#include <mgl/mgl_data.h>} and have only 2 methods:
+This function is mostly the same as previous one. The only difference is that the drawing function and function for data reloading are specified as methods on a class inherited from class @code{mglDraw}. This class is defined in @code{#include <mgl/mgl_define.h>} and have only 2 methods:
 @verbatim
 class mglDraw
 {
@@ -96,43 +95,59 @@ You should inherit yours class from @code{mglDraw} and reimplement one or both f
 @end deftypemethod
 
 
- at deftypemethod mglGraphAB @code{void} ToggleAlpha ()
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleAlpha ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_alpha (@code{HMGL} gr)
 Switch on/off transparency but do not overwrite switches in user drawing function.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ToggleLight ()
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleLight ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_light (@code{HMGL} gr)
 Switch on/off lighting but do not overwrite switches in user drawing function.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ToggleZoom ()
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleZoom ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_zoom (@code{HMGL} gr)
 Switch on/off zooming by mouse as region selection.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ToggleRotate ()
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleRotate ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_rotate (@code{HMGL} gr)
 Switch on/off rotation by mouse. Usually, left button is used for rotation, middle button for shift, right button for zoom/perspective.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ToggleNo ()
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleNo ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_no (@code{HMGL} gr)
 Switch off all zooming and rotation and restore initial state.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} Update ()
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} Update ()
+ at deftypefnx {C function} @code{int} mgl_wnd_update (@code{HMGL} gr)
 Update window contents.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ReLoad (@code{bool} o)
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ReLoad (@code{bool} o)
+ at deftypefnx {C function} @code{int} mgl_wnd_reload (@code{HMGL} gr, @code{int} val)
 Reload user data and update picture.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} Adjust ()
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} Adjust ()
+ at deftypefnx {C function} @code{int} mgl_wnd_adjust (@code{HMGL} gr)
 Adjust size of bitmap to window size.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} NextFrame ()
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} NextFrame ()
+ at deftypefnx {C function} @code{int} mgl_wnd_next_frame (@code{HMGL} gr)
 Show next frame if one.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} PrevFrame ()
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} PrevFrame ()
+ at deftypefnx {C function} @code{int} mgl_wnd_prev_frame (@code{HMGL} gr)
 Show previous frame if one.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} Animation ()
-Run/stop slideshow (animation) of frames
- at end deftypemethod
+ at end deftypefn
+ at deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} Animation ()
+ at deftypefnx {C function} @code{int} mgl_wnd_animation (@code{HMGL} gr)
+Run/stop slideshow (animation) of frames.
+ at end deftypefn
 
+ at deftypefn {C function} @code{int} mgl_wnd_set_auto_clf (@code{HMGL} gr, @code{int} val)
+ at end deftypefn
 @deftypecv {Widget option} mglGraphAB @code{bool} AutoClf
 Clear canvas between drawing. You may switch it off for accumulate previous drawing (for example some points or parts of a picture).
 @end deftypecv
+
+ at deftypefn {C function} @code{int} mgl_wnd_set_delay (@code{HMGL} gr, @code{int} val)
+ at end deftypefn
 @deftypecv {Widget option} mglGraphAB @code{float} Delay
 Delay for animation in seconds. Default value is 1 sec.
 @end deftypecv
@@ -148,780 +163,13 @@ Calculate 3D coordinate @{x,y,z@} for screen point @{xs,ys@}. At this moment it
 Calculate screen point @{xs,ys@} for 3D coordinate @{x,y,z@}. The calculation are done for the last used InPlot (@pxref{Transformation matrix}).
 @end deftypefn
 
+ at deftypefn {C function} @code{int} mgl_wnd_set_show_mouse_pos (@code{HMGL} gr, @code{int} val)
+ at end deftypefn
 @deftypecv {Widget option} mglGraphAB @code{float} ShowMousePos
 Switch to show or not in the widget the last mouse click position.
 @end deftypecv
+
 @deftypecv {Widget option} mglGraphAB @code{mglPoint} LastMousePos
 Last position of mouse click.
 @end deftypecv
 
- at c ------------------------------------------------------------------
- at node Widget classes, mglData class, Plotter classes, Top
- at chapter Widget classes
- at cindex mglGraphFLTK
- at cindex mglGraphQT
- at cindex mglGraphGLUT
- at cindex Fl_MathGL
- at cindex QMathGL
- at cindex window
- at cindex widgets
-
-There are set of ``window'' classes for making a window with MathGL graphics: @code{mglGraphFLTK}, @code{mglGraphQT}, @code{mglGraphGLUT}. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGraphGLUT}) also have toolbar and menu for simplifying plot manipulation. Usually these classes (except @code{mglGraphGLUT}) are derived from @code{mglGraphZB} class and have a ``connected'' class for widget in corresponding window library. All window classes have the same set of functions (@pxref{mglGraphAB class}). Below the full list of classes with short comments.
-
- at deftp {Class} mglGraphFLTK
-Class @code{mglGraphFLTK} adds the possibility to create plotting window with the help of FLTK library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{Fl_MathGL}. Class is defined in @code{#include <mgl/mgl_fltk.h>}.
- at end deftp
-
- at deftp {Class} Fl_MathGL
-Class is FLTK widget for displaying the MathGL output. Class is defined in @code{#include <mgl/mgl_fltk.h>}.
- at end deftp
-
- at deftp {Class} mglGraphQT
-Class @code{mglGraphQT} adds the possibility to create plotting window with the help of QT library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{QMathGL}. Class is defined in @code{#include <mgl/mgl_qt.h>}.
- at end deftp
-
- at deftp {Class} QMathGL
-Class is Qt widget for dysplaying the MathGL output. Class is defined in @code{#include <mgl/mgl_qt.h>}.
- at end deftp
-
- at deftp {Class} mglGraphGLUT
-Class @code{mglGraphGLUT} adds the possibility to create plotting window with the help of GLUT library. It allows one to show, rotate, export, and change view of the plot only by keyboard. Class is defined in @code{#include <mgl/mgl_glut.h>}.
- at end deftp
-
- at menu
-* Fl_MathGL class::             
-* QMathGL class::               
- at end menu
-
- at c ------------------------------------------------------------------
- at node Fl_MathGL class, QMathGL class, , Widget classes
- at section Fl_MathGL class
- at cindex Fl_MathGL
- at cindex widgets
-
-Class is FLTK widget which display MathGL graphics (defined in @code{#include <mgl/mgl_fltk.h>}
-
- at deftypemethod Fl_MathGL @code{void} set_draw (@code{mglDraw *}dr)
-Sets drawing function from a class inherited from @code{mglDraw}.
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} update (@code{mglGraph *}gr=@code{NULL})
-Update (redraw) plot using grapher @var{gr} (built-in by default).
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_angle (@code{float} t, @code{float} p)
-Set angles for additional plot rotation
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_state (@code{int} f)
-Set bitwise flags for general state (1-Alpha, 2-Light)
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_state (@code{bool} z, @code{bool} r)
-Set flags for handling mouse: @var{z}=@code{true} allow zooming, @var{r}=@code{true} allow rotation/shifting/perspective and so on.
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_zoom (@code{float} X1, @code{float} Y1, @code{float} X2, @code{float} Y2)
-Set zoom in/out region
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} get_zoom (@code{float *}X1, @code{float *}Y1, @code{float *}X2, @code{float *}Y2)
-Get zoom in/out region
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v)
-Set popup menu pointer
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{mglGraph *} get_graph ()
-Get pointer to grapher
- at end deftypemethod
-
- at deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} tet_val
-Pointer to external tet-angle validator.
- at end deftypecv
- at deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} phi_val
-Pointer to external phi-angle validator.
- at end deftypecv
- at deftypecv {Widget option} Fl_MathGL @code{mglGraphAB *} graph
-Pointer to grapher
- at end deftypecv
- at deftypecv {Widget option} Fl_MathGL @code{void *} draw_par
-Parameters for drawing function mglGraph::DrawFunc.
- at end deftypecv
- at deftypecv {Widget option} Fl_MathGL @code{int (*} draw_func @code{)(mglGraph *gr, void *par)}
-Drawing function for window procedure. It should return the number of frames.
- at end deftypecv
-
- at c ------------------------------------------------------------------
- at node QMathGL class, , Fl_MathGL class, Widget classes
- at section QMathGL class
- at cindex QMathGL
- at cindex widgets
-
-Class is Qt widget which display MathGL graphics (defined in @code{#include <mgl/mgl_qt.h>}
-
- at deftypemethod QMathGL @code{double} getRatio ()
-Return aspect ratio of the picture.
- at end deftypemethod
-
- at deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr)
-Sets drawing functions from a class inherited from @code{mglDraw}.
- at end deftypemethod
- at deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{void *}par=@code{NULL})
-Sets the drawing function @var{draw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}.
- at end deftypemethod
-
- at deftypemethod QMathGL @code{void} setGraph (@code{mglGraphAB *}gr)
-Set pointer to external grapher (instead of built-in @code{mglGraphZB}). Note that QMathGL will automatically delete this object at destruction or at new @code{setGraph()} call.
- at end deftypemethod
-
- at deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p)
-Set popup menu pointer.
- at end deftypemethod
- at deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h)
-Set widget/picture sizes
- at end deftypemethod
- at deftypemethod QMathGL @code{double} getRatio ()
-Return aspect ratio of the picture.
- at end deftypemethod
-
- at deftypemethod QMathGL @code{int} getPer ()
-Get perspective value in percents.
- at end deftypemethod
- at deftypemethod QMathGL @code{int} getPhi ()
-Get Phi-angle value in degrees.
- at end deftypemethod
- at deftypemethod QMathGL @code{int} getTet ()
-Get Theta-angle value in degrees.
- at end deftypemethod
- at deftypemethod QMathGL @code{bool} getAlpha ()
-Get transparency state.
- at end deftypemethod
- at deftypemethod QMathGL @code{bool} getLight ()
-Get lightning state.
- at end deftypemethod
- at deftypemethod QMathGL @code{bool} getZoom ()
-Get mouse zooming state.
- at end deftypemethod
- at deftypemethod QMathGL @code{bool} getRotate ()
-Get mouse rotation state.
- at end deftypemethod
-
- at defop Slot QMathGL @code{void} refresh ()
-Redraw saved bitmap without executing drawing function.
- at end defop
- at defop Slot QMathGL @code{void} update (@code{mglGraph *}gr=@code{NULL})
-Update picture by executing drawing function.
- at end defop
- at defop Slot QMathGL @code{void} copy ()
-Copy graphics to clipboard.
- at end defop
- at defop Slot QMathGL @code{void} setPer (@code{int} val)
-Set perspective value.
- at end defop
- at defop Slot QMathGL @code{void} setPhi (@code{int} val)
-Set Phi-angle value.
- at end defop
- at defop Slot QMathGL @code{void} setTet (@code{int} val)
-Set Theta-angle value.
- at end defop
- at defop Slot QMathGL @code{void} setAlpha (@code{bool} val)
-Switch on/off transparency.
- at end defop
- at defop Slot QMathGL @code{void} setLight (@code{bool} val)
-Switch on/off lightning.
- at end defop
- at defop Slot QMathGL @code{void} setZoom (@code{bool} val)
-Switch on/off mouse zooming.
- at end defop
- at defop Slot QMathGL @code{void} setRotate (@code{bool} val)
-Switch on/off mouse rotation.
- at end defop
- at defop Slot QMathGL @code{void} zoomIn ()
-Zoom in graphics.
- at end defop
- at defop Slot QMathGL @code{void} zoomOut ()
-Zoom out graphics.
- at end defop
- at defop Slot QMathGL @code{void} restore ()
-Restore zoom and rotation to default values.
- at end defop
- at defop Slot QMathGL @code{void} reload ()
-Reload data and execute script.
- at end defop
- at defop Slot QMathGL @code{void} shiftLeft ()
-Shift graphics to left direction.
- at end defop
- at defop Slot QMathGL @code{void} shiftRight ()
-Shift graphics to right direction.
- at end defop
- at defop Slot QMathGL @code{void}shiftUp  ()
-Shift graphics to up direction.
- at end defop
- at defop Slot QMathGL @code{void} shiftDown ()
-Shift graphics to down direction.
- at end defop
- at defop Slot QMathGL @code{void} exportPNG (@code{QString} fname=@code{""})
-Export current picture to PNG file.
- at end defop
- at defop Slot QMathGL @code{void} exportPNGs (@code{QString} fname=@code{""})
-Export current picture to PNG file (no transparency).
- at end defop
- at defop Slot QMathGL @code{void} exportJPG (@code{QString} fname=@code{""})
-Export current picture to JPEG file.
- at end defop
- at defop Slot QMathGL @code{void} exportBPS (@code{QString} fname=@code{""})
-Export current picture to bitmap EPS file.
- at end defop
- at defop Slot QMathGL @code{void} exportEPS (@code{QString} fname=@code{""})
-Export current picture to vector EPS file.
- at end defop
- at defop Slot QMathGL @code{void} exportSVG (@code{QString} fname=@code{""})
-Export current picture to SVG file.
- at end defop
- at defop Slot QMathGL @code{void} exportIDTF (@code{QString} fname=@code{""})
-Export current picture to IDTF file.
- at end defop
- at defop Slot QMathGL @code{void} setMGLFont (@code{QString} path)
-Restore (@var{path}=@code{""} or load font for graphics.
- at end defop
- at defop Slot QMathGL @code{void} print ()
-Print current picture
- at end defop
- at defop Slot QMathGL @code{void} adjust ()
-Adjust plot size to fill entire window. This function is executed only if graph is mglGraphQT instance.
- at end defop
- at defop Slot QMathGL @code{void} nextSlide ()
-Show next slide. This function is executed only if graph is mglGraphQT instance.
- at end defop
- at defop Slot QMathGL @code{void} prevSlide ()
-Show previous slide. This function is executed only if graph is mglGraphQT instance.
- at end defop
- at defop Slot QMathGL @code{void} animation (@code{bool} st=@code{true})
-Start animation. This function is executed only if graph is mglGraphQT instance.
- at end defop
- at defop Slot QMathGL @code{void} about ()
-Show about information.
- at end defop
- at defop Slot QMathGL @code{void} aboutQt ()
-Show information about Qt version.
- at end defop
-
- at defop Signal QMathGL @code{void} phiChanged (@code{int} val)
-Phi angle changed (by mouse or by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} tetChanged (@code{int} val)
-Tet angle changed (by mouse or by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} perChanged (@code{int} val)
-Perspective changed (by mouse or by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} alphaChanged (@code{bool} val)
-Transparency changed (by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} lightChanged (@code{bool} val)
-Lighting changed (by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} zoomChanged (@code{bool} val)
-Zooming changed (by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} rotateChanged (@code{bool} val)
-Rotation changed (by toolbar).
- at end defop
-
- at deftypecv {Widget option} QMathGL @code{QString} appName
-Application name for message boxes.
- at end deftypecv
- at deftypecv {Widget option} QMathGL @code{bool} autoResize
-Allow auto resizing (default is false).
- at end deftypecv
- at deftypecv {Widget option} QMathGL @code{int} animDelay
-Animation delay in ms.
- at end deftypecv
-
-
-
- at c ------------------------------------------------------------------
- at c @node mglData class, Other classes, Widget classes, Top
- at c @chapter mglData class
-
- at include data_en.texi
-
-
-
- at c ------------------------------------------------------------------
- at node Other classes, MGL interface, mglData class, Top
- at chapter Other classes
-
- at menu
-* mglParse class::              
-* mglFormula class::            
-* mglFont class::               
-* mglColor class::              
-* mglPoint class::              
-* mglVar class::                
-* mglCommand class::            
-* mglArg class::                
- at end menu
-
- at c ------------------------------------------------------------------
- at node mglParse class, mglFormula class, , Other classes
- at section mglParse class
- at cindex mglParse
-
-Class for parsing and executing MGL script. This class is defined in @code{#include <mgl/mgl_parse.h>}.
-
-Class mglParse is the interpreter for MGL scripts (@pxref{MGL interface}). The main function of mglParse class is @code{Parse()}. Exactly this function parses and executes the script string-by-string. Also there are two subservient functions for the finding and creation of a variable. These functions can be useful for displaying values of variables (arrays) in some external program (in window, for example). The variable @var{DataList} contains full list of variables in script. Flag @var{AllowSetSize} allows one to prevent changing the size of the  picture inside the script (forbids the MGL command @code{setsize}). 
-
-Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}).
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{} mglParse (@code{bool} setsize=@code{false})
- at deftypefnx {C function} @code{HMPR} mgl_create_parser ()
-Constructor initializes all values with zero and set @var{AllowSetSize} value.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{} ~mglParse ()
- at deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p)
-Destructor delete parser
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0})
- at deftypefnx {Method on @code{mglParse} (C++)} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0})
- at deftypefnx {C function} @code{int} mgl_parse (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos)
- at deftypefnx {C function} @code{int} mgl_parsew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos)
-Main function in the class. It parses the string @var{str} and executes it by  using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++)} @code{int} Export (@code{wchar_t} cpp_out at code{[1024]}, @code{mglGraph *}gr, @code{const wchar_t *}str)
-Function parses the string @var{str}, executes it by  using @var{gr} as a graphics plotter and exports it to C++ code. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Output C++ text will be placed in @var{out} variable. If string @var{str} have options (defined after ';' symbol) then the corresponding C++ texts are placed in variables @var{op1}, @var{op2}.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false})
-Function parse and execute line-by-line MGL script in file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. Also this function support the @code{for|next} MGL commands.
- at end deftypefn
- at deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{int} num, @code{const wchar_t **}text, @code{void (*} error @code{)(int line, int kind)=NULL})
-Function parse and execute line-by-line MGL script in array @var{text}. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text, @code{void (*} error @code{)(int line, int kind)=NULL})
- at deftypefnx {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text, @code{void (*} error @code{)(int line, int kind)=NULL})
- at deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text)
- at deftypefnx {C function} @code{void} mgl_parsew_text (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text)
-Function parse and execute line-by-line MGL script in string @var{text}. Lines are separated by @samp{\n} symbol as usual. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{bool} AddParam (@code{int} n, @code{const char *}str, @code{bool} isstr=@code{true})
- at deftypefnx {Method on @code{mglParse} (C++)} @code{bool} AddParam (@code{int} n, @code{const wchar_t *}str, @code{bool} isstr=@code{true})
- at deftypefnx {C function} @code{void} mgl_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val)
- at deftypefnx {C function} @code{void} mgl_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val)
-Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 9). It return @code{true} for success.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} FindVar (@code{const char *}name)
- at deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} FindVar (@code{const wchar_t *}name)
- at deftypefnx {C function} @code{const HMDT} mgl_find_var  (@code{HMPR} p, @code{const char *}name)
-Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script.
- at end deftypefn
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} AddVar (@code{const char *}name)
- at deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} AddVar (@code{const wchar_t *}name)
- at deftypefnx {C function} @code{const HMDT} mgl_add_var (@code{HMPR} p, @code{const char *}name)
-Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{mglVar *}v)
- at deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name)
- at deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name)
-Function delete the variable specified by its name or by its pointer.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{inline void} RestoreOnce ()
- at deftypefnx {C function} @code{void} mgl_restore_once (@code{HMPR} p)
-Restore Once flag.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (Python)} @code{void} AllowSetSize (@code{bool} a)
- at deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a)
-Allow to parse 'setsize' command or not.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++)} @code{void} AddCommand (@code{mglCommand *}cmd, @code{int} num=@code{0})
-Add @var{num} commands @var{cmd} to the defined MGL commands list. Parameter @var{cmd} is array of @code{mglCommand} structures. If parameter @var{num}=0 then it will be determined automatically. At this, array @var{cmd} @strong{must have} last element with @code{name=L""}
- at end deftypefn
-
- at deftypecv {Option} mglParse @code{mglVar *} DataList
-List of variables defined in script.
- at end deftypecv
- at deftypecv {Option} mglParse @code{bool} AllowSetSize
-Flag which allows/forbids the command @code{setsize} in scripts.
- at end deftypecv
- at deftypecv {Option} mglParse @code{bool} Stop
-Flag which interrupt script execution.
- at end deftypecv
- at deftypecv {Option} mglParse @code{mglCommand *} Cmd
-Table (array) of recognizable MGL commands (can be changed by user). Items in the table @strong{MUST be sorted} by @var{name} field !!! Last items must have empty name (i.e. @code{L""}).
- at end deftypecv
- at deftypecv {Option} mglParse @code{wchar_t *} op1
-These strings contain command options and should be placed before the command. These variables are used for MGL->C++ (or other language) conversion.
- at end deftypecv
- at deftypecv {Option} mglParse @code{wchar_t *} op2
-These strings contain command options and should be placed after the command. These variables are used for MGL->C++ (or other language) conversion.
- at end deftypecv
-
- at c ------------------------------------------------------------------
- at node mglFormula class, mglFont class, mglParse class, Other classes
- at section mglFormula class
- at cindex mglFormula
-
-Class for evaluating of formula specified by the string. This class is defined in @code{#include <mgl/mgl_eval.h>}.
-
-It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN.
-
-There are a lot of functions and operators available. The operators are: @samp{+} -- addition, @samp{-} -- subtraction, @samp{*} -- multiplication, @samp{/} -- division, @samp{^} -- integer power. Also there are logical ``operators'': @samp{<} -- true if x<y, @samp{>} -- true if x>y, @samp{=} -- true if x=y, @samp{&} -- true if x and y both nonzero, @samp{|} -- true if x or y nonzero. These logical operators have lowest priority and return 1 if true or 0 if false.
-
-The basic functions are: @samp{sqrt(x)} -- square root of @var{x}, @samp{pow(x,y)} power @var{x} in @var{y}, @samp{ln(x)} -- natural logarithm of @var{x}, @samp{lg(x)} -- decimal logarithm of @var{x}, @samp{log(a,x)} -- logarithm base @var{a} of @var{x}, @samp{abs(x)} -- absolute value of @var{x}, @samp{sign(x)} -- sign of @var{x}, @samp{mod(x,y)} -- x modulo y, @samp{step(x)} -- step function, @samp{rnd} -- random number, @samp{pi} -- number @math{\pi=3.1415926...}.
-
-Trigonometric functions are: @samp{sin(x)}, @samp{cos(x)}, @samp{tan(x)} (or @samp{tg(x)}). Inverse trigonometric functions are: @samp{asin(x)}, @samp{acos(x)}, @samp{atan(x)}. Hyperbolic functions are: @samp{sinh(x)} (or @samp{sh(x)}), @samp{cosh(x)} (or @samp{ch(x)}), @samp{tanh(x)} (or @samp{th(x)}). Inverse hyperbolic functions are: @samp{asinh(x)}, @samp{acosh(x)}, @samp{atanh(x)}.
-
-There are a set of special functions: @samp{gamma(x)} -- Gamma function @math{\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)} , @samp{psi(x)} -- digamma function @math{\psi(x) = \Gamma'(x)/\Gamma(x)} for x!=0, @samp{ai(x)} -- Airy function Ai(x), @samp{bi(x)} -- Airy function Bi(x), @samp{cl(x)} -- Clausen function, @samp{li2(x)} (or @samp{dilog(x)}) -- dilogarithm @math{Li_2(x) = - \Re \int_0^x ds \log(1-s)/s}, @samp{sinc(x)} -- compute @math{sinc(x) = \sin(\pi x) / (\pi x)} for any value of x, @samp{zeta(x)} -- Riemann zeta function @math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}} for arbitrary s!=1, @samp{eta(x)} -- eta function @math{\eta(s) = (1-2^@{1-s@}) \zeta(s)} for arbitrary s, @samp{lp(l,x)} -- Legendre polynomial @math{P_l(x)}, (|x|<=1, l>=0), @samp{w0(x)} -- principal branch of the Lambert @var{W} function, @samp{w1(x)} -- principal branch of the Lambert @var{W} function. Function W(x) is defined to be solution of the equation @math{W \exp(W) = x}.
-
-The exponent integrals are: @samp{ci(x)} -- Cosine integral @math{Ci(x) = \int_0^x dt \cos(t)/t}, @samp{si(x)} -- Sine integral @math{Si(x) = \int_0^x dt \sin(t)/t}, @samp{erf(x)} -- error function @math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}, @samp{ei(x)} -- exponential integral @math{Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)} (where PV denotes the principal value of the integral), @samp{e1(x)} -- exponential integral @math{E_1(x) := Re \int_1^\infty dt \exp(-xt)/t} , @samp{e2(x)} -- exponential integral @math{E_2(x) := Re \int_1^\infty dt \exp(-xt)/t^2}, @samp{ei3(x)} -- exponential integral @math{Ei_3(x) = \int_0^x dt \exp(-t^3)} for x>=0.
-
-Bessel functions are: @samp{j(nu,x)} -- regular cylindrical Bessel function of fractional order @var{nu}, @samp{y(nu,x)} -- irregular cylindrical Bessel function of fractional order @var{nu}, @samp{i(nu,x)} -- regular modified Bessel function of fractional order @var{nu}, @samp{k(nu,x)} -- irregular modified Bessel function of fractional order @var{nu}.
-
-Elliptic integrals are: @samp{ee(k)} -- complete elliptic integral is denoted by @math{E(k) = E(\pi/2, k)}, @samp{ek(k)} -- complete elliptic integral is denoted by @math{K(k) = F(\pi/2, k)}, @samp{e(phi,k)} -- elliptic integral @math{E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))}, @samp{f(phi,k)} -- elliptic integral @math{F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))}.
-
-Jacobi elliptic functions are: @samp{sn(u,m)}, @samp{cn(u,m)}, @samp{dn(u,m)}, @samp{sc(u,m)}, @samp{sd(u,m)}, @samp{ns(u,m)}, @samp{cs(u,m)}, @samp{cd(u,m)}, @samp{nc(u,m)}, @samp{ds(u,m)}, @samp{dc(u,m)}, @samp{nd(u,m)}.
-
-Note, some of these functions are unavailable if NO\_GSL is defined during compilation of MathGL library. 
-
- at deftypemethod mglFormula @code{} mglFormula (@code{const char *}str)
-Parses the formula @var{str} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions.
- at end deftypemethod
- at deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}, @code{float} u=@code{0})
-Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. Error code (if one) can be obtained from function @code{GetError()}.
- at end deftypemethod
- at deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y, @code{float} z, @code{float} u, @code{float} v, @code{float} w)
-Evaluates the formula for @code{'x'}=@var{x}, @code{'y'}=@var{y}, @code{'z'}=@var{z}, @code{'u'}=@var{u}, @code{'v'}=@var{v}, @code{'w'}=@var{w}. Error code (if one) can be obtained from function @code{GetError()}.
- at end deftypemethod
- at deftypemethod mglFormula @code{float} Calc (@code{float} var at code{['z'-'a'+1]})
-Evaluates the formula for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}.
- at end deftypemethod
- at deftypemethod mglFormula @code{float} CalcD (@code{float} var at code{['z'-'a'+1]}, @code{char} diff)
-Evaluates the formula derivation respect to @var{diff} for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}.
- at end deftypemethod
- at deftypemethod mglFormula @code{int} GetError ()
-Returns error code: @code{0} means no error; @code{ERR_LOG} means error in logarithm or power functions; @code{ERR_ARC} means error in inverse functions (like asin); @code{ERR_SQRT} means error in sqrt function.
- at end deftypemethod
-
- at c ------------------------------------------------------------------
- at node mglFont class, mglColor class, mglFormula class, Other classes
- at section mglFont class
- at cindex mglFont
-
-Class for working with font: load, get metrics, parse and draw strings. This class is defined in @code{#include <mgl/mgl_font.h>}.
-
-The class is based on loading and drawing of vector Hershey font. There are two styles of specifying of the font type and aligning: by integer parameters or by string.
-
-The string can be any combination of characters: @samp{rbiLCRwou}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman font (that is @samp{} or @samp{r}) is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wire, @samp{o} -- over-lined, @samp{u} -- underlined.
-
-The over way of font and alignment setting is the using of the integer constant. Integer font Id can be one of predefined constants: @code{MGL_FONT_ITAL, MGL_FONT_BOLD, MGL_FONT_BOLD_ITAL = MGL_FONT_ITAL+MGL_FONT_BOLD}. Default font is @code{MGL_FONT_ROMAN}. Also there are flags @code{MGL_FONT_ULINE, MGL_FONT_OLINE, MGL_FONT_WIRE} for additional font effects. Align parameter controls the text alignment: 0 -- align left, 1 -- align center, 2 -- align right.
-
-Parsing of the string to special (TeX-like) commands will be done if variable @var{parse} is true (it's default). There are commands for the font style changing inside the string (for example, use \b for bold font): \a or \overline -- over-lined, \b or \textbf -- bold, \i or \textit -- italic, \r or \textrm -- roman (disable bold and italic attributes), \u or \underline -- underlined, \w or \wire -- wired, \big -- bigger size, @@ -- smaller size. The lower and upper indexes are specified by @samp{_} and @samp{^} symbols. At this the changed font style is applied only on next symbol or symbols in braces @{@}. The text in braces @{@} are treated as single symbol that allow one to print the index of index. For example, compare the strings @samp{sin (x^@{2^3@})} and @samp{sin (x^2^3)}. You may also change text color inside string by command #? or by \color? where @samp{?} is symbolic id of the color (@pxref{mglColor class}). For example, words @samp{Blue} and @samp{red} will be colored in the string @samp{#b@{Blue@} and \colorr@{red@} text}.
-
-The most of commands for special TeX or AMSTeX symbols, the commands for font style changing (\textrm, \textbf, \textit, \overline, \underline), accents (\hat, \tilde, \dot, \ddot, \acute, \check, \grave, \bar, \breve) and roots (\sqrt, \sqrt3, \sqrt4) are recognized. The full list contain approximately 2000 commands. Note that first space symbol after the command is ignored, but second one is printed as normal symbol (space). For example, the following strings produce the same result @math{\tilde a}: @samp{\tilde@{a@}}; @samp{\tilde a}; @samp{\tilde@{@}a}.
-
- at ifhtml
- at html
-The Greek letters are recognizable special symbols: &alpha; &ndash; \alpha, &beta; &ndash; \beta, &gamma; &ndash; \gamma, &delta; &ndash; \delta, &epsilon; &ndash; \epsilon, &eta; &ndash; \eta, &iota; &ndash; \iota, &chi; &ndash; \chi, &kappa; &ndash; \kappa, &lambda; &ndash; \lambda, &mu; &ndash; \mu, &nu; &ndash; \nu, o &ndash; \o, &omega; &ndash; \omega, &#981; &ndash; \phi, &pi; &ndash; \pi, &psi; &ndash; \psi, &rho; &ndash; \rho, &sigma; &ndash; \sigma, &theta; &ndash; \theta, &tau; &ndash; \tau, &upsilon; &ndash; \upsilon, &xi; &ndash; \xi, &zeta; &ndash; \zeta, &sigmaf; &ndash; \varsigma, &#603; &ndash; \varepsilon, &thetasym; &ndash; \vartheta, &phi; &ndash; \varphi, &#1008; &ndash; \varkappa; A &ndash; \Alpha, B &ndash; \Beta, &Gamma; &ndash; \Gamma, &Delta; &ndash; \Delta, E &ndash; \Epsilon, H &ndash; \Eta, I &ndash; \Iota, C &ndash; \Chi, K &ndash; \Kappa, &Lambda; &ndash; \Lambda, M &ndash; \Mu, N &ndash; \Nu, O &ndash; \O, &Omega; &ndash; \Omega, &Phi; &ndash; \Phi, &Pi; &ndash; \Pi, &Psi; &ndash; \Psi, R &ndash; \Rho, &Sigma; &ndash; \Sigma, &Theta; &ndash; \Theta, T &ndash; \Tau, &Upsilon; &ndash; \Upsilon, &Xi; &ndash; \Xi, Z &ndash; \Zeta.
-
-<p>The small part of most common special TeX symbols are: &ang; &ndash; \angle, &sdot; &ndash; \cdot, &clubs; &ndash; \clubsuit, &#10003; &ndash; \checkmark, &cup; &ndash; \cup, &cap; &ndash; \cap, &#9826; &ndash; \diamondsuit, &#9671; &ndash; \diamond, &divide;
- &ndash; \div, 
-&darr; &ndash; \downarrow, &dagger; &ndash; \dag, &Dagger; &ndash; \ddag, &equiv; &ndash; \equiv, &exist; &ndash; \exists, &#8994; &ndash; \frown, &#9837; &ndash; \flat, &ge; &ndash; \ge, &ge; &ndash; \geq, &#8807; &ndash; \geqq, &larr; &ndash; \gets, &#9825; &ndash; \heartsuit, &infin; &ndash; \infty, &int; &ndash; \int, \Int, &image;  &ndash; \Im, &#9826; &ndash; \lozenge, &#10216; &ndash; \langle, &le; &ndash; \le, &le; &ndash; \leq, &#8806; &ndash; \leqq, &larr; &ndash; \leftarrow, &#8723; &ndash; \mp, &nabla; &ndash; \nabla, &ne; &ndash; \ne, &ne; &ndash; \neq, &#9838; &ndash; \natural, &#8750; &ndash; \oint, &#8857; &ndash; \odot, &oplus; &ndash; \oplus, &part; &ndash; \partial, &#8741; &ndash; \parallel, &perp; &ndash;\perp, &plusmn; &ndash; \pm, &prop; &ndash; \propto, &prod; &ndash; \prod, &real; &ndash; \Re, &rarr; &ndash; \rightarrow, &#10217; &ndash; \rangle, &spades; &ndash; \spadesuit, ~ &ndash; \sim, &#8995; &ndash; \smile, &sub;  &ndash; \subset, &sup; &ndash; \supset, &radic; &ndash; \sqrt or \surd, &sect; &ndash; \S, &#9839; &ndash; \sharp, &sum; &ndash; \sum, &times; &ndash; \times, &rarr; &ndash; \to, &there4; &ndash; \therefore, &uarr; &ndash; \uparrow, &weierp; &ndash; \wp. </p>
- at end html
- at end ifhtml
- at ifnothtml
-The Greek letters are recognizable special symbols: @math{\alpha} -- \alpha, @math{\beta} -- \beta, @math{\gamma} -- \gamma, @math{\delta} -- \delta, @math{\epsilon} -- \epsilon, @math{\eta} -- \eta, @math{\iota} -- \iota, @math{\chi} -- \chi, @math{\kappa} -- \kappa, @math{\lambda} -- \lambda, @math{\mu} -- \mu, @math{\nu} -- \nu, @math{o} -- \o, @math{\omega} -- \omega, @math{\phi} -- \phi, @math{\pi} -- \pi, @math{\psi} -- \psi, @math{\rho} -- \rho, @math{\sigma} -- \sigma, @math{\theta} -- \theta, @math{\tau} -- \tau, @math{\upsilon} -- \upsilon, @math{\xi} -- \xi, @math{\zeta} -- \zeta, @math{\varsigma} -- \varsigma, @math{\varepsilon} -- \varepsilon, @math{\vartheta} -- \vartheta, @math{\varphi} -- \varphi, A -- \Alpha, B -- \Beta, @math{\Gamma} -- \Gamma, @math{\Delta} -- \Delta, E -- \Epsilon, H -- \Eta, I -- \Iota, C -- \Chi, K -- \Kappa, @math{\Lambda} -- \Lambda, M -- \Mu, N -- \Nu, O -- \O, @math{\Omega} -- \Omega, @math{\Phi} -- \Phi, @math{\Pi} -- \Pi, @math{\Psi} -- \Psi, R -- \Rho, @math{\Sigma} -- \Sigma, @math{\Theta} -- \Theta, T -- \Tau, @math{\Upsilon} -- \Upsilon, @math{\Xi} -- \Xi, Z -- \Zeta.
-
-The small part of most common special TeX symbols are: @math{\angle} -- \angle, @math{\aleph} -- \aleph, @math{\cdot} -- \cdot, @math{\clubsuit} -- \clubsuit, @math{\cup} -- \cup, @math{\cap} -- \cap, @math{\diamondsuit} -- \diamondsuit, @math{\diamond} -- \diamond, @math{\div} -- \div, @math{\downarrow} -- \downarrow, @math{\dag} -- \dag, @math{\ddag} -- \ddag, @math{\equiv} -- \equiv, @math{\exists} -- \exists, @math{\frown} -- \frown, @math{\flat} -- \flat, @math{\ge} -- \ge, @math{\geq} -- \geq, @math{\gets} -- \gets, @math{\heartsuit} -- \heartsuit, @math{\infty} -- \infty, @math{\in} -- \in, @math{\int} -- \int, @math{\Im} -- \Im, @math{\langle} -- \langle, @math{\le} -- \le, @math{\leq} -- \leq, @math{\leftarrow} -- \leftarrow, @math{\mp} -- \mp, @math{\nabla} -- \nabla, @math{\ne} -- \ne, @math{\neq} -- \neq, @math{\natural} -- \natural, @math{\oint} -- \oint, @math{\odot} -- \odot, @math{\oplus} -- \oplus, @math{\partial} -- \partial, @math{\parallel} -- \parallel, @math{\perp} -- \perp, @math{\pm} -- \pm, @math{\propto} -- \propto, @math{\prod} -- \prod, @math{\Re} -- \Re, @math{\rightarrow} -- \rightarrow, @math{\rangle} -- \rangle, @math{\spadesuit} -- \spadesuit, @math{\sim} -- \sim, @math{\smile} -- \smile, @math{\subset} -- \subset, @math{\supset} -- \supset, @math{\surd} -- \sqrt or \surd, @math{\S} -- \S, @math{\sharp} -- \sharp, @math{\sum} -- \sum, @math{\times} -- \times, @math{\to} -- \to, @math{\uparrow} -- \uparrow, @math{\wp} -- \wp and so on. 
- at end ifnothtml
-
- at menu
-* Format of font files::        
- at end menu
-
-
- at deftypemethod mglFont @code{} mglFont (@code{const char *}name=@code{MGL_DEF_FONT_NAME}, @code{const char *}path=@code{NULL})
-Initialize the font and load data from file @var{name} (default name is "STIX" for Linux and MacOS) or if  @var{name}=@code{NULL} limited data from memory (default for Windows).
- at end deftypemethod
- at deftypemethod mglFont @code{bool} Load (@code{const char *} base, @code{const char *}path=@code{NULL})
-Load font from file @var{path}/@var{base} into the memory. The font may contain 4 files: @var{base}.vfm, @var{base}_b.vfm, @var{base}_i.vfm, @var{base}_bi.vfm. Appendix contain detailed description of font format.
- at end deftypemethod
- at deftypemethod mglFont @code{void} Restore ()
-Restore default font.
- at end deftypemethod
- at deftypemethod mglFont @code{void}  (@code{mglFont *} fnt)
-Copy data from other font instance.
- at end deftypemethod
- at deftypemethod mglFont @code{void} Clear ()
-Clear memory by deleting the loaded font.
- at end deftypemethod
- at deftypemethod mglFont @code{inline unsigned} GetNumGlyph ()
-Return the number of glyphs in the font.
- at end deftypemethod
- at deftypemethod mglFont @code{inline bool} Ready ()
-Return true if font is loaded and ready for use.
- at end deftypemethod
-
-
- at deftypemethod mglFont @code{float} Height (@code{int} font)
-Gets height of text for font specified by integer constant.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{int} font=@code{0}, @code{int} align=@code{0})
-Prints 8-bit text string for font specified by integer constant.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{int} font=@code{0})
-Gets width of 8-bit text string for font specified by integer constant.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{int} font=@code{0}, @code{int} align=@code{0})
-Prints Unicode text string for font specified by integer constant.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{int} font=@code{0})
-Gets width of Unicode text string for font specified by integer constant.
- at end deftypemethod
-
-
- at deftypemethod mglFont @code{float} Height (@code{const char *}how)
-Gets height of text for font specified by string.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{const char *}how)
-Prints 8-bit text string for font specified by string.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{const char *}how)
-Gets width of 8-bit text string for font specified by string.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{const char *}how)
-Prints Unicode text string for font specified by string.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{const char *}how)
-Gets width of Unicode text string for font specified by string.
- at end deftypemethod
-
- at deftypecv {Parameter} mglFont @code{mglGraph *} gr
-Instance of mglGraph class which is used for character drawing.
- at end deftypecv
- at deftypecv {Parameter} mglFont @code{bool} parse
-Flag for switching on/off the parsing of TeX commands. Default value is @code{true}.
- at end deftypecv
-
- at c ------------------------------------------------------------------
- at node Format of font files, , , mglFont class
- at subsection Format of font files
-
-Starting from v.1.6 the MathGL library uses new font files. The font is defined in 4 files with suffixes @samp{*.vfm}, @samp{*_b.vfm}, @samp{*_i.vfm}, @samp{*_bi.vfm}. These files are text files containing the data for roman font, bold font, italic font and bold italic font. The files (or some symbols in the files) for bold, italic or bold italic fonts can be absent. In this case the roman glyph will be used for them. By analogy, if the bold italic font is absent but the bold font is present then bold glyph will be used for bold italic. You may create these font files by yourself from *.ttf, *.otf files with the help of program @code{font_tools}. This program can be found at MathGL home site.
-
-The format of font files (*.vfm -- vector font for MathGL) is the following.
- at enumerate
- at item
-First string contains human readable comment and is always ignored.
- at item
-Second string contains 3 numbers, delimited by space or tabulation. The order of numbers is the following: @var{numg} -- the number of glyphs in the file (integer), @var{fact} -- the factor for glyph sizing (float), @var{size} -- the size of buffer for glyph description (integer).
- at item
-After it @var{numg}-th strings with glyphs description are placed. Each string contains 6 positive numbers, delimited by space of tabulation. The order of numbers is the following: Unicode glyph ID, glyph width, number of lines in glyph, position of lines coordinates in the buffer (length is 2*number of lines), number of triangles in glyph, position of triangles coordinates in the buffer (length is 6*number of triangles).
- at item
-The end of file contains the buffer with point coordinates at lines or triangles vertexes. The size of buffer (the number of integer) is @var{size}.
- at end enumerate
-
-Note: the closing contour line  is done automatically (so the last segment may be absent). For starting new contour use a point with coordinates @code{@{0x3fff, 0x3fff@}}.
-
-
- at c ------------------------------------------------------------------
- at node mglColor class, mglPoint class, mglFont class, Other classes
- at section mglColor class
- at cindex mglColor
-
-Structure for working with colors. This structure is defined in @code{#include <mgl/mgl.h>}.
-
-There are two ways to set the color in MathGL. First one is using of float values of red, green and blue channels for precise color definition. The second way is the using of character id. There are a set of characters specifying frequently used colors. Normally capital letter gives more dark color than lowercase one. The full list of characters is: @samp{k} -- black, @samp{r} -- red, @samp{R} -- dark red, @samp{g} -- green, @samp{G} -- dark green, @samp{b} -- blue, @samp{B} -- dark blue, @samp{c} -- cyan, @samp{C} -- dark cyan, @samp{m} -- magenta, @samp{M} -- dark magenta, @samp{y} -- yellow, @samp{Y} -- dark yellow (gold), @samp{h} -- gray, @samp{H} -- dark gray, @samp{w} -- white, @samp{W} -- bright gray, @samp{l} -- green-blue, @samp{L} -- dark green-blue, @samp{e} -- green-yellow, @samp{E} -- dark green-yellow, @samp{n} -- sky-blue, @samp{N} -- dark sky-blue, @samp{u} -- blue-violet, @samp{U} -- dark blue-violet, @samp{p} -- purple, @samp{P} -- dark purple, @samp{q} -- orange, @samp{Q} -- dark orange (brown).
-
-Also you may use ``lighted'' colors in color scheme specification (@emph{not in line style!}). The ``lighted'' color contain 2 symbols: first one is usual symbol for color specification, second one is digit for its brightness. The digit can be in range @samp{1}... at samp{9}. At this @samp{5} correspond to normal color, @samp{1} is very dark version of the color (practically black), @samp{9} is very bright version of the color (practically white).
-
- at float
- at image{png/colors, 7cm}
- at caption{Colors and its ids.}
- at end float
-
- at deftypecv {Parameter} mglVar @code{float} {r, g, b}
-Reg, green and blue component of color.
- at end deftypecv
-
- at deftypemethod mglColor @code{} mglColor (@code{float} R, @code{float} G, @code{float} B)
-Constructor sets the color by float values of Red, Green and Blue channels.
- at end deftypemethod
- at deftypemethod mglColor @code{} mglColor (@code{char} c=@code{'k'})
-Constructor sets the color from character id. The black color is used by default.
- at end deftypemethod
- at deftypemethod mglColor @code{void} Set (@code{float} R, @code{float} G, @code{float} B)
-Sets color from values of Red, Green and Blue channels. This values should be in interval [0,1].
- at end deftypemethod
- at deftypemethod mglColor @code{void} Set (@code{mglColor} c, @code{float} bright=@code{1})
-Sets color as ``lighted'' version of color @var{c}.
- at end deftypemethod
- at deftypemethod mglColor @code{void} Set (@code{char} p)
-Sets color from symbolic id.
- at end deftypemethod
- at deftypemethod mglColor @code{bool} Valid ()
-Checks correctness of the color.
- at end deftypemethod
- at deftypemethod mglColor @code{float} Norm ()
-Gets maximal of spectral component.
- at end deftypemethod
- at deftypemethod mglColor @code{bool} operator== (@code{const mglColor &}c)
-Compare with another color
- at end deftypemethod
-
- at deftypefn {Library Function} {inline mglColor} operator+ (@code{const mglColor &}a, @code{const mglColor &}b)
-Adds colors by its RGB values.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator- (@code{const mglColor &}a, @code{const mglColor &}b)
-Subtracts colors by its RGB values.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator* (@code{const mglColor &}a, @code{float} b)
-Multiplies color by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator* (@code{float} a, @code{const mglColor &}b)
-Multiplies color by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator/ (@code{const mglColor &}a, @code{float} b)
-Divide color by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator! (@code{const mglColor &}a)
-Return inverted color.
- at end deftypefn
-
- at c ------------------------------------------------------------------
- at node mglPoint class, mglArg class, mglColor class, Other classes
- at section mglPoint class
- at cindex mglPoint
-
-Structure describes point in space. This structure is defined in @code{#include <mgl/mgl.h>}
-
- at deftypecv {Parameter} mglVar @code{float} {x, y, z}
-Point coordinates. By default all values are zero.
- at end deftypecv
-
- at deftypefn {Library Function} {inline mglPoint} operator+ (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Point of summation (summation of vectors).
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Point of difference (difference of vectors).
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator* (@code{float} a, @code{const mglPoint &}b)
-Multiplies (scale) points by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator* (@code{const mglPoint &}a, @code{float} b)
-Multiplies (scale) points by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator/ (@code{const mglPoint &}a, @code{float} b)
-Multiplies (scale) points by number 1/b.
- at end deftypefn
- at deftypefn {Library Function} {inline float} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Scalar product of vectors.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator^ (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Cross-product of vectors.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator& (@code{const mglPoint &}a, @code{const mglPoint &}b)
-The part of @var{a} which is perpendicular to vector @var{b}.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator| (@code{const mglPoint &}a, @code{const mglPoint &}b)
-The part of @var{a} which is parallel to vector @var{b}.
- at end deftypefn
-
- at deftypefn {Library Function} {inline mglPoint} operator! (@code{const mglPoint &}a)
-Return vector perpendicular to vector @var{a}.
- at end deftypefn
- at deftypefn {Library Function} {inline bool} Norm (@code{const mglPoint &}a)
-Return the norm |@var{a}|^2 of vector @var{a}.
- at end deftypefn
-
- at deftypefn {Library Function} {inline bool} operator== (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Return true if points are the same.
- at end deftypefn
- at deftypefn {Library Function} {inline bool} operator!= (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Return true if points are different.
- at end deftypefn
-
- at c ------------------------------------------------------------------
- at node mglVar class, mglCommand class, mglArg class, Other classes
- at section mglVar class
- at cindex mglVar
-
-Structure describes variable of type @code{mglData} and its name in MGL script. This structure is used by @code{mglParse} and is defined in @code{#include <mgl/mgl_parse.h>}.
-
- at deftypecv {Parameter} mglVar @code{mglData} d
-Data itself
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{wchar_t} s[256]
-Data name
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{void *} o
-Pointer to external object for function @var{func}.
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{mglVar *} next
-Pointer to next instance in list
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{mglVar *} prev
-Pointer to prev instance in list
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{bool} temp
-Flag for temporar variable. Temporal variables will be destroyed after script execution.
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{void (*} func @code{)(void *)}
-Callback function for destroying non-temporal variable.
- at end deftypecv
-
- at deftypemethod mglGraphAB @code{void} MoveAfter (@code{mglVar *}var)
-Move variable after @var{var} and copy @code{func} from @code{var} (if @code{func} is not 0)
- at end deftypemethod
-
-
- at c ------------------------------------------------------------------
- at node mglCommand class, , mglVar class, Other classes
- at section mglCommand class
- at cindex mglCommand
-
-Structure describes MGL command, its name, short description, executable and export functions. The structure is used by @code{mglParse} and is defined in @code{#include <mgl/mgl_parse.h>}.
-
- at deftypecv {Parameter} mglCommand @code{const wchar_t *} name
-Name of command.
- at end deftypecv
- at deftypecv {Parameter} mglCommand @code{const wchar_t *} desc
-Short command description (can be NULL).
- at end deftypecv
- at deftypecv {Parameter} mglCommand @code{const wchar_t *} form
-Format of command arguments (can be NULL).
- at end deftypecv
- at deftypecv {Parameter} mglCommand @code{int (*} exec @code{)(mglGraph *gr, long n, mglArg *a, int k[10])const wchar_t *}
-Function for executing (plotting) the command using grapher @var{gr} and having @var{n}-th arguments @var{a}. Function must return 0 if all is OK; or 1 if arguments are wrong.
- at end deftypecv
- at deftypecv {Parameter} mglCommand @code{void (*} save @code{)(wchar_t out[1024], long n, mglArg *a, int k[10])const wchar_t *}
-Function for exporting in C++ (can be NULL).
- at end deftypecv
-
-
- at c ------------------------------------------------------------------
- at node mglArg class, mglVar class, mglPoint class, Other classes
- at section mglArg class
- at cindex mglArg
-
-Structure describes arguments of functions in the stucture @code{mglCommand}. It is defined in @code{#include <mgl/mgl_parse.h>}.
-
- at deftypecv {Parameter} mglArg @code{int} type
-Type of argument: 0-data, 1-string, 2-number.
- at end deftypecv
- at deftypecv {Parameter} mglArg @code{mglData *} d
-Pointer to data (used if type=0).
- at end deftypecv
- at deftypecv {Parameter} mglArg @code{wchar_t} w[2048]
-String with parameters (used if type=1 or if type=0 as variable name).
- at end deftypecv
- at deftypecv {Parameter} mglArg @code{char} s[2048]
-String with parameters (used if type=1).
- at end deftypecv
- at deftypecv {Parameter} mglArg @code{float} v
-Numerical value (used if type==2)
- at end deftypecv
-
diff --git a/texinfo/class_ru.texi b/texinfo/class_ru.texi
index fdf7d4a..e80f0f4 100644
--- a/texinfo/class_ru.texi
+++ b/texinfo/class_ru.texi
@@ -1,33 +1,32 @@
 
 @c ------------------------------------------------------------------
- at node Plotter classes, Widget classes, MathGL core, Top
- at chapter Plotter classes
+ at chapter Классы для отрисовки
 @cindex mglGraphAB
 @cindex mglGraphZB
 @cindex mglGraphPS
 @cindex mglGraphGL
 @cindex mglGraphIDTF
 
-The class mglGraph (@pxref{MathGL core}) provide the basic tools for creating scientific graphics but it is abstract class. The matter is that there are several possible way to draw a graphics: in bitmap, in vector file, using OpenGL and so on. As result, user should use some of derived classes to do actual drawing. In principle, it is possible to derive a class exactly from mglGraph (and it was in v.1.6). But I recommend to derive from mglGraphAB class for higher compatibility of produced graphics from different classes. Class mglGraphAB is another abstract class which provide basic coordinates transformation, plotting functions and export to bitmap picture. It still require a functions for drawing lines, triangles and quadrangles. So below a set of ``plotter'' classes with short comments.
+Класс mglGraph (@pxref{MathGL core}) обеспечивает базовые функции для создания научной графики, но это абстрактный класс. Причина в том, что существует несколько возможностей вывода/отображения получившегося рисунка: в растровый или в векторный файлы, используя OpenGL и т.д. В результате, для конечной отрисовки необходимо использовать производные классы. В принципе, можно наследовать непосредственно mglGraph (и так было до версии 1.6). Однако, я рекомендую использовать в качестве базового класс mglGraphAB для большего единообразия получающейся графики в различных классах. Класс mglGraphAB -- другой абстрактный класс, обеспечивающий преобразование координат, базовые функции рисования и сохранения в растровое изображение. Он требует доопределения функций рисования линий, треугольников и четырехугольников. Ниже приведены классы ``отрисовки'' с короткими комментариями.
 
- at deftp {Class} mglGraphAB
-Abstract class mglGraphAB implements plotting function for 1D, 2D and 3D plots using Z-ordering and provides base functionality for to screen coordinate transformation, bitmap creation and so on. Class is defined in @code{#include <mgl/mgl_ab.h>}.
+ at deftp {Класс} mglGraphAB
+Абстрактный класс, обеспечивающий отрисовку по глубине, преобразование к экранным координатам, сохранение в растровое изображение и т.д. Класс определен в @code{#include <mgl/mgl_ab.h>}.
 @end deftp
 
- at deftp {Class} mglGraphZB
-Class mglGraphZB implements plotting function for 1D, 2D and 3D plots using Z-Buffer. It is useful for off-screen (for console or SSH terminal) programs. Also this class can be used in any other programs which may draw bitmap on the  screen (for example, by using FLTK, Qt, wxWidgets libraries and so on). Note that bitmap picture is saved while exporting to EPS format. The produced graphics have better quality but slower in comparison with graphics in the class mglGraphPS. Class is defined in @code{#include <mgl/mgl_zb.h>}.
+ at deftp {Класс} mglGraphZB
+Реализует растровую отрисовку изображения используя Z-Buffer. Можно использовать для рисования в памяти (или в консоли/SSH терминале). Также этот класс используется как базовый для рисования в окне (например, используя FLTK, Qt, wxWidgets библиотеки и пр.). При экспорте в EPS формат сохраняется растровая картинка. Получающийся рисунок лучшего качества, но рисуется медленнее чем в классе mglGraphPS. Класс определен в @code{#include <mgl/mgl_zb.h>}.
 @end deftp
 
- at deftp {Class} mglGraphPS
-Class mglGraphPS implements plotting functions for 1D, 2D and 3D plots and exports them to PostScript or SVG file. It is useful for off-screen (for console or SSH terminal) programs. Note that there is no transparency support now and color interpolation and lightning support is limited (not so nice as in class mglGraphZB). As result the plots with transparency (SurfA, Surf3A, CloudP, CloudQ) may look not so good. However the speed of drawing is higher in comparison with one in the class mglGraphZB. Class is defined in @code{#include <mgl/mgl_eps.h>}.
+ at deftp {Класс} mglGraphPS
+Реализует векторную отрисовку изображения с возможностью сохранения в векторный PostScript или SVG файл. Можно использовать для рисования в памяти (или в консоли/SSH терминале). Замечу, что сглаживание цвета не поддерживается, а при экспорте в EPS не поддерживается и прозрачность (в силу ограничения формата). В результате рисунок получается быстрее, но более низкого качества чем в классе mglGraphZB. Класс определен в @code{#include <mgl/mgl_eps.h>}.
 @end deftp
 
- at deftp {Class} mglGraphGL
-Class mglGraphGL implements plotting function for 1D, 2D and 3D plots under OpenGL. This class can not be used in off-screen applications. Note, that several transparent overlapped surfaces are drawn not so correctly due to OpenGL limitations. Class is defined in @code{#include <mgl/mgl_gl.h>}.
+ at deftp {Класс} mglGraphGL
+Реализует векторную графику с использованием OpenGL. Класс не может быть использован для рисования в консоли. В силу ограничения OpenGL возможна проблема корректного отображения нескольких перекрывающихся поверхностей. Класс определен в @code{#include <mgl/mgl_gl.h>}.
 @end deftp
 
- at deftp {Class} mglGraphIDTF
-Class mglGraphIDTF implements plotting function for 1D, 2D and 3D plots  and export it in IDTF format. Later this file can be converted in U3D format. Class is defined in @code{#include <mgl/mgl_idtf.h>}.
+ at deftp {Класс} mglGraphIDTF
+Реализует экспорт графики в IDTF формате, который затем можно преобразовать в формат U3D. Класс определен в @code{#include <mgl/mgl_idtf.h>}.
 @end deftp
 
 @menu
@@ -36,20 +35,20 @@ Class mglGraphIDTF implements plotting function for 1D, 2D and 3D plots  and exp
 
 @c ------------------------------------------------------------------
 @node mglGraphAB class, , , Plotter classes
- at section mglGraphAB class
+ at section Класс mglGraphAB
 @cindex mglGraphAB
 @cindex window
-#cindex mglDraw
+ at cindex mglDraw
 
-Generally this class is a bit less abstract class than mglGraph class (@pxref{MathGL core}). It provide many protected methods for handling intermediate data from mglGraph methods and require a few methods to be defined by derived class. The developers of derived classes should look on file @samp{mgl_ab.h} and comments inside it or contact me.
+Вообще говоря это чуть ``менее абстрактный'' класс чем mglGraph (@pxref{MathGL core}). Он предоставляет много методов для обработки промежуточных данных и требует в производных классах определения только нескольких методов для отрисовки примитивов. Разработчикам, наследующим этот класс, следует посмотреть файл @samp{mgl_ab.h} и комментарии в нем или обратиться к автору.
 
-Here I just show new public methods for class mglGraphAB. There are functions returning the created picture (bitmap), its width and height. You may display it by yourself in any graphical library (see also, @ref{Widget classes}) or save in file (see also, @ref{Export to file}).
+Ниже я только перечислю основные общедоступные методы класса mglGraphAB. В первую очередь это функции, возвращающие созданный растровый рисунок, его ширину и высоту. В дальнейшем его можно использовать в любой графической библиотеке (см. также, @ref{Widget classes}) или сохранить в файл (см. также, @ref{Export to file}).
 
- at deftypefn {Method on @code{mglGraphAB} (C++)} @code{const unsigned char *} GetBits ()
- at deftypefnx {Method on @code{mglGraph} (Python)} @code{void} GetRGB (@code{char *}buf, @code{int} size)
- at deftypefnx {Method on @code{mglGraph} (Python)} @code{void} GetBGRN (@code{char *}buf, @code{int} size)
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{const unsigned char *} GetBits ()
+ at deftypefnx {Метод класса @code{mglGraph} (Python)} @code{void} GetRGB (@code{char *}buf, @code{int} size)
+ at deftypefnx {Метод класса @code{mglGraph} (Python)} @code{void} GetBGRN (@code{char *}buf, @code{int} size)
 @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgb (@code{HMGL} gr)
-Gets RGB bitmap of the current state of the image. Format of each element of bits is: @{red, green, blue@}. Number of elements is Width*Height. Position of element @{i,j@} is [3*i + 3*Width*j] (or is [4*i + 4*Width*j] for @code{GetBGRN()}). For Python you have to provide the proper @var{size} of the buffer, @var{buf} i.e. the code should look like 
+Возвращает растровое изображение в формате RGB для текущего кадра. Формат каждого элемента (пикселя): @{red, green, blue@}. Число элементов Width*Height. Положение элемента @{i,j@} есть [3*i + 3*Width*j] (или [4*i + 4*Width*j] для @code{GetBGRN()}). В Python вы должны предоставить буфер @var{buf} достаточного размера @var{size}, т.е. код должен выглядеть следующим образом 
 @verbatim
 from mathgl import *
 gr = mglGraph();
@@ -59,31 +58,31 @@ gr.GetBGRN(bits, len(bits));
 @end verbatim
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraphAB} (C++)} @code{const unsigned char *} GetRGBA ()
- at deftypefnx {Method on @code{mglGraph} (Python)} @code{void} GetRGBA (@code{char *}buf, @code{int} size)
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{const unsigned char *} GetRGBA ()
+ at deftypefnx {Метод класса @code{mglGraph} (Python)} @code{void} GetRGBA (@code{char *}buf, @code{int} size)
 @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgba (@code{HMGL} gr)
-Gets RGBA bitmap of the current state of the image. Format of each element of bits is: @{red, green, blue, alpha@}. Number of elements is Width*Height. Position of element @{i,j@} is [4*i + 4*Width*j].
+Возвращает растровое изображение в формате RGBA для текущего кадра. Формат каждого элемента (пикселя): @{red, green, blue, alpha@}. Число элементов Width*Height. Положение элемента @{i,j@} есть [4*i + 4*Width*j].
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraphAB} (C++, Python)} @code{int} GetWidth ()
- at deftypefnx {Method on @code{mglGraphAB} (C++, Python)} @code{int} GetHeight ()
+ at deftypefn {Метод класса @code{mglGraphAB} (C++, Python)} @code{int} GetWidth ()
+ at deftypefnx {Метод класса @code{mglGraphAB} (C++, Python)} @code{int} GetHeight ()
 @deftypefnx {C function} @code{int} mgl_get_width (@code{HMGL} gr)
 @deftypefnx {C function} @code{int} mgl_get_height (@code{HMGL} gr)
-Gets width and height of the image.
+Возвращает ширину и высоту изображения.
 @end deftypefn
 
-Class mglGraphAB is the base class for ``widget classes''. So there are set of functions for handling window behavior. Most of them are applicable only for ``window'' classes (like mglGraphFLTK and so on, @pxref{Widget classes}). In all other classes these functions just do nothing. You should provide the corresponding interface in derived ``widget'' classes for user convenience.
+Класс mglGraphAB -- базовый класс для ``оконных классов''. Поэтому он содержит набор функций для создания и управления окном. Большинство из них применимо только в ``оконных классах'' (типа mglGraphFLTK и др, @pxref{Widget classes}). В остальных случаях функции ничего не делают. Если вы создаете оконный класс, то Вам следует предоставить такой же интерфейс для удобства пользователя.
 
 @deftypemethod mglGraphAB @code{void} Window (@code{int} argc, @code{char **}argv, @code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{const char *}title, @code{void *}par=@code{NULL}, @code{void (*}reload)(@code{int} next, @code{void *}p)=@code{NULL}, @code{bool} maximize=@code{false})
-This function creates a window for plotting. Parameters @var{argc}, @var{argv} contain OS specific information and should be the same as in function @code{main(int argc,char **argv)}. Parameter @var{draw} sets a pointer (this is the name of function) to drawing function. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Note, that @var{draw} can be @code{NULL} for displaying static bitmaps only (no animation or slides). Parameter @var{title} sets the title of the window. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. Parameter @var{maximize}=@code{true} open maximized window.
+Создает окно для вывода графика. Параметры @var{argc}, @var{argv} содержат информацию операционной системы и их слеудет передать в эту функцию из функции @code{main(int argc,char **argv)} (хотя они и могут быть равны @code{NULL}). Параметр @var{draw} -- указатель (имя) функции рисования. Есть возможность создания нескольких кадров вначале (требует больше памяти) и их быстрая анимации в дальнейшем. В этом случае функция @var{draw} должна возвращать число кадров или ноль для рисования по запросу. Замечу, что @var{draw} может быть равна @code{NULL} для отображения статической (текущей) картинки. Параметр @var{title} задает заголовок окна. Параметр @var{par} содержит указатель на данные, передаваемые функции рисования @var{draw}. Параметр @var{maximize}=@code{true} открывает окно раскрытым на весь экран.
 
-There are some keys handles for manipulating by the plot: 'a', 'd', 'w', 's' for the rotating; ',', '.' for viewing of the previous or next frames in the list; 'r' for the switching of transparency; 'f' for the switching of lightning; 'x' for hiding (closing) the window.
+В окне просмотра можно использовать клавиши: 'a', 'd', 'w', 's' для вращения; ',', '.' для просмотра предыдущего и следующего кадров; 'r' для переключения прозрачности; 'f' для переключения оспещенности; 'x' для закрытия окна.
 
- at strong{IMPORTANT!!!} You need to add a call of Rotate() (@pxref{Transformation matrix}) function for having possibility of plot rotation. If plot should be unrotated by default just add @code{Rotate(0,0)} in drawing function.
+ at strong{ВАЖНО!!!} Вам не следует вызывать функцию Rotate() (@pxref{Transformation matrix}) если Вы хотите вращать график.
 @end deftypemethod
 
 @deftypemethod mglGraphAB @code{void} Window (@code{int} argc, @code{char **}argv, @code{mglDraw *}draw, @code{const char *}title, @code{bool} maximize=@code{false})
-This function is mostly the same as previous one. The only difference is that the drawing function and function for data reloading are specified as methods on a class inherited from class @code{mglDraw}. This class is defined in @code{#include <mgl/mgl_data.h>} and have only 2 methods:
+В основном аналогична предыдущей. Основное отличие в том, что функции рисования и обновления данных определены в классе наследнике класса @code{mglDraw}. Этот класс определен в @code{#include <mgl/mgl_define.h>} и имеет только 2 метода:
 @verbatim
 class mglDraw
 {
@@ -92,836 +91,88 @@ public:
     virtual void Reload(int) {};
 };
 @end verbatim
-You should inherit yours class from @code{mglDraw} and reimplement one or both functions for using this function.
+Вы можете создать класс-наследник @code{mglDraw} и переопределить один или оба метода для использования с данной функцией.
 @end deftypemethod
 
 
- at deftypemethod mglGraphAB @code{void} ToggleAlpha ()
-Switch on/off transparency but do not overwrite switches in user drawing function.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ToggleLight ()
-Switch on/off lighting but do not overwrite switches in user drawing function.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ToggleZoom ()
-Switch on/off zooming by mouse as region selection.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ToggleRotate ()
-Switch on/off rotation by mouse. Usually, left button is used for rotation, middle button for shift, right button for zoom/perspective.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ToggleNo ()
-Switch off all zooming and rotation and restore initial state.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} Update ()
-Update window contents.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} ReLoad (@code{bool} o)
-Reload user data and update picture.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} Adjust ()
-Adjust size of bitmap to window size.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} NextFrame ()
-Show next frame if one.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} PrevFrame ()
-Show previous frame if one.
- at end deftypemethod
- at deftypemethod mglGraphAB @code{void} Animation ()
-Run/stop slideshow (animation) of frames
- at end deftypemethod
-
- at deftypecv {Widget option} mglGraphAB @code{bool} AutoClf
-Clear canvas between drawing. You may switch it off for accumulate previous drawing (for example some points or parts of a picture).
- at end deftypecv
- at deftypecv {Widget option} mglGraphAB @code{float} Delay
-Delay for animation in seconds. Default value is 1 sec.
- at end deftypecv
-
- at deftypefn {Method on @code{mglGraphAB} (C++, Python)} @code{mglPoint} CalcXYZ (@code{int} xs, @code{int} ys)
- at deftypefnx {C function} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{float *}x, @code{float *}y, @code{float *}z)
-Calculate 3D coordinate @{x,y,z@} for screen point @{xs,ys@}. At this moment it ignore perspective and transformation formulas (curvilinear coordinates). The calculation are done for the last used InPlot (@pxref{Transformation matrix}).
- at end deftypefn
-
- at deftypefn {Method on @code{mglGraphAB} (C++, Python)} @code{mglPoint} CalcScr (@code{mglPoint} p)
- at deftypefnx {Method on @code{mglGraphAB} (C++)} @code{void} CalcScr (@code{mglPoint} p, @code{int *}xs, @code{int *}ys)
- at deftypefnx {C function} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{int *}xs, @code{int *}ys)
-Calculate screen point @{xs,ys@} for 3D coordinate @{x,y,z@}. The calculation are done for the last used InPlot (@pxref{Transformation matrix}).
- at end deftypefn
-
- at deftypecv {Widget option} mglGraphAB @code{float} ShowMousePos
-Switch to show or not in the widget the last mouse click position.
- at end deftypecv
- at deftypecv {Widget option} mglGraphAB @code{mglPoint} LastMousePos
-Last position of mouse click.
- at end deftypecv
-
- at c ------------------------------------------------------------------
- at node Widget classes, mglData class, Plotter classes, Top
- at chapter Widget classes
- at cindex mglGraphFLTK
- at cindex mglGraphQT
- at cindex mglGraphGLUT
- at cindex Fl_MathGL
- at cindex QMathGL
- at cindex window
- at cindex widgets
-
-There are set of ``window'' classes for making a window with MathGL graphics: @code{mglGraphFLTK}, @code{mglGraphQT}, @code{mglGraphGLUT}. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGraphGLUT}) also have toolbar and menu for simplifying plot manipulation. Usually these classes (except @code{mglGraphGLUT}) are derived from @code{mglGraphZB} class and have a ``connected'' class for widget in corresponding window library. All window classes have the same set of functions (@pxref{mglGraphAB class}). Below the full list of classes with short comments.
-
- at deftp {Class} mglGraphFLTK
-Class @code{mglGraphFLTK} adds the possibility to create plotting window with the help of FLTK library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{Fl_MathGL}. Class is defined in @code{#include <mgl/mgl_fltk.h>}.
- at end deftp
-
- at deftp {Class} Fl_MathGL
-Class is FLTK widget for displaying the MathGL output. Class is defined in @code{#include <mgl/mgl_fltk.h>}.
- at end deftp
-
- at deftp {Class} mglGraphQT
-Class @code{mglGraphQT} adds the possibility to create plotting window with the help of QT library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{QMathGL}. Class is defined in @code{#include <mgl/mgl_qt.h>}.
- at end deftp
-
- at deftp {Class} QMathGL
-Class is Qt widget for dysplaying the MathGL output. Class is defined in @code{#include <mgl/mgl_qt.h>}.
- at end deftp
-
- at deftp {Class} mglGraphGLUT
-Class @code{mglGraphGLUT} adds the possibility to create plotting window with the help of GLUT library. It allows one to show, rotate, export, and change view of the plot only by keyboard. Class is defined in @code{#include <mgl/mgl_glut.h>}.
- at end deftp
-
- at menu
-* Fl_MathGL class::             
-* QMathGL class::               
- at end menu
-
- at c ------------------------------------------------------------------
- at node Fl_MathGL class, QMathGL class, , Widget classes
- at section Fl_MathGL class
- at cindex Fl_MathGL
- at cindex widgets
-
-Class is FLTK widget which display MathGL graphics (defined in @code{#include <mgl/mgl_fltk.h>}
-
- at deftypemethod Fl_MathGL @code{void} set_draw (@code{mglDraw *}dr)
-Sets drawing function from a class inherited from @code{mglDraw}.
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} update (@code{mglGraph *}gr=@code{NULL})
-Update (redraw) plot using grapher @var{gr} (built-in by default).
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_angle (@code{float} t, @code{float} p)
-Set angles for additional plot rotation
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_state (@code{int} f)
-Set bitwise flags for general state (1-Alpha, 2-Light)
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_state (@code{bool} z, @code{bool} r)
-Set flags for handling mouse: @var{z}=@code{true} allow zooming, @var{r}=@code{true} allow rotation/shifting/perspective and so on.
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_zoom (@code{float} X1, @code{float} Y1, @code{float} X2, @code{float} Y2)
-Set zoom in/out region
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} get_zoom (@code{float *}X1, @code{float *}Y1, @code{float *}X2, @code{float *}Y2)
-Get zoom in/out region
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v)
-Set popup menu pointer
- at end deftypemethod
- at deftypemethod Fl_MathGL @code{mglGraph *} get_graph ()
-Get pointer to grapher
- at end deftypemethod
-
- at deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} tet_val
-Pointer to external tet-angle validator.
- at end deftypecv
- at deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} phi_val
-Pointer to external phi-angle validator.
- at end deftypecv
- at deftypecv {Widget option} Fl_MathGL @code{mglGraphAB *} graph
-Pointer to grapher
- at end deftypecv
- at deftypecv {Widget option} Fl_MathGL @code{void *} draw_par
-Parameters for drawing function mglGraph::DrawFunc.
- at end deftypecv
- at deftypecv {Widget option} Fl_MathGL @code{int (*} draw_func @code{)(mglGraph *gr, void *par)}
-Drawing function for window procedure. It should return the number of frames.
- at end deftypecv
-
- at c ------------------------------------------------------------------
- at node QMathGL class, , Fl_MathGL class, Widget classes
- at section QMathGL class
- at cindex QMathGL
- at cindex widgets
-
-Class is Qt widget which display MathGL graphics (defined in @code{#include <mgl/mgl_qt.h>}
-
- at deftypemethod QMathGL @code{double} getRatio ()
-Return aspect ratio of the picture.
- at end deftypemethod
-
- at deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr)
-Sets drawing functions from a class inherited from @code{mglDraw}.
- at end deftypemethod
- at deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{void *}par=@code{NULL})
-Sets the drawing function @var{draw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}.
- at end deftypemethod
-
- at deftypemethod QMathGL @code{void} setGraph (@code{mglGraphAB *}gr)
-Set pointer to external grapher (instead of built-in @code{mglGraphZB}). Note that QMathGL will automatically delete this object at destruction or at new @code{setGraph()} call.
- at end deftypemethod
-
- at deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p)
-Set popup menu pointer.
- at end deftypemethod
- at deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h)
-Set widget/picture sizes
- at end deftypemethod
- at deftypemethod QMathGL @code{double} getRatio ()
-Return aspect ratio of the picture.
- at end deftypemethod
-
- at deftypemethod QMathGL @code{int} getPer ()
-Get perspective value in percents.
- at end deftypemethod
- at deftypemethod QMathGL @code{int} getPhi ()
-Get Phi-angle value in degrees.
- at end deftypemethod
- at deftypemethod QMathGL @code{int} getTet ()
-Get Theta-angle value in degrees.
- at end deftypemethod
- at deftypemethod QMathGL @code{bool} getAlpha ()
-Get transparency state.
- at end deftypemethod
- at deftypemethod QMathGL @code{bool} getLight ()
-Get lightning state.
- at end deftypemethod
- at deftypemethod QMathGL @code{bool} getZoom ()
-Get mouse zooming state.
- at end deftypemethod
- at deftypemethod QMathGL @code{bool} getRotate ()
-Get mouse rotation state.
- at end deftypemethod
-
- at defop Slot QMathGL @code{void} refresh ()
-Redraw saved bitmap without executing drawing function.
- at end defop
- at defop Slot QMathGL @code{void} update (@code{mglGraph *}gr=@code{NULL})
-Update picture by executing drawing function.
- at end defop
- at defop Slot QMathGL @code{void} copy ()
-Copy graphics to clipboard.
- at end defop
- at defop Slot QMathGL @code{void} setPer (@code{int} val)
-Set perspective value.
- at end defop
- at defop Slot QMathGL @code{void} setPhi (@code{int} val)
-Set Phi-angle value.
- at end defop
- at defop Slot QMathGL @code{void} setTet (@code{int} val)
-Set Theta-angle value.
- at end defop
- at defop Slot QMathGL @code{void} setAlpha (@code{bool} val)
-Switch on/off transparency.
- at end defop
- at defop Slot QMathGL @code{void} setLight (@code{bool} val)
-Switch on/off lightning.
- at end defop
- at defop Slot QMathGL @code{void} setZoom (@code{bool} val)
-Switch on/off mouse zooming.
- at end defop
- at defop Slot QMathGL @code{void} setRotate (@code{bool} val)
-Switch on/off mouse rotation.
- at end defop
- at defop Slot QMathGL @code{void} zoomIn ()
-Zoom in graphics.
- at end defop
- at defop Slot QMathGL @code{void} zoomOut ()
-Zoom out graphics.
- at end defop
- at defop Slot QMathGL @code{void} restore ()
-Restore zoom and rotation to default values.
- at end defop
- at defop Slot QMathGL @code{void} reload ()
-Reload data and execute script.
- at end defop
- at defop Slot QMathGL @code{void} shiftLeft ()
-Shift graphics to left direction.
- at end defop
- at defop Slot QMathGL @code{void} shiftRight ()
-Shift graphics to right direction.
- at end defop
- at defop Slot QMathGL @code{void}shiftUp  ()
-Shift graphics to up direction.
- at end defop
- at defop Slot QMathGL @code{void} shiftDown ()
-Shift graphics to down direction.
- at end defop
- at defop Slot QMathGL @code{void} exportPNG (@code{QString} fname=@code{""})
-Export current picture to PNG file.
- at end defop
- at defop Slot QMathGL @code{void} exportPNGs (@code{QString} fname=@code{""})
-Export current picture to PNG file (no transparency).
- at end defop
- at defop Slot QMathGL @code{void} exportJPG (@code{QString} fname=@code{""})
-Export current picture to JPEG file.
- at end defop
- at defop Slot QMathGL @code{void} exportBPS (@code{QString} fname=@code{""})
-Export current picture to bitmap EPS file.
- at end defop
- at defop Slot QMathGL @code{void} exportEPS (@code{QString} fname=@code{""})
-Export current picture to vector EPS file.
- at end defop
- at defop Slot QMathGL @code{void} exportSVG (@code{QString} fname=@code{""})
-Export current picture to SVG file.
- at end defop
- at defop Slot QMathGL @code{void} exportIDTF (@code{QString} fname=@code{""})
-Export current picture to IDTF file.
- at end defop
- at defop Slot QMathGL @code{void} setMGLFont (@code{QString} path)
-Restore (@var{path}=@code{""} or load font for graphics.
- at end defop
- at defop Slot QMathGL @code{void} print ()
-Print current picture
- at end defop
- at defop Slot QMathGL @code{void} adjust ()
-Adjust plot size to fill entire window. This function is executed only if graph is mglGraphQT instance.
- at end defop
- at defop Slot QMathGL @code{void} nextSlide ()
-Show next slide. This function is executed only if graph is mglGraphQT instance.
- at end defop
- at defop Slot QMathGL @code{void} prevSlide ()
-Show previous slide. This function is executed only if graph is mglGraphQT instance.
- at end defop
- at defop Slot QMathGL @code{void} animation (@code{bool} st=@code{true})
-Start animation. This function is executed only if graph is mglGraphQT instance.
- at end defop
- at defop Slot QMathGL @code{void} about ()
-Show about information.
- at end defop
- at defop Slot QMathGL @code{void} aboutQt ()
-Show information about Qt version.
- at end defop
-
- at defop Signal QMathGL @code{void} phiChanged (@code{int} val)
-Phi angle changed (by mouse or by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} tetChanged (@code{int} val)
-Tet angle changed (by mouse or by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} perChanged (@code{int} val)
-Perspective changed (by mouse or by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} alphaChanged (@code{bool} val)
-Transparency changed (by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} lightChanged (@code{bool} val)
-Lighting changed (by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} zoomChanged (@code{bool} val)
-Zooming changed (by toolbar).
- at end defop
- at defop Signal QMathGL @code{void} rotateChanged (@code{bool} val)
-Rotation changed (by toolbar).
- at end defop
-
- at deftypecv {Widget option} QMathGL @code{QString} appName
-Application name for message boxes.
- at end deftypecv
- at deftypecv {Widget option} QMathGL @code{bool} autoResize
-Allow auto resizing (default is false).
- at end deftypecv
- at deftypecv {Widget option} QMathGL @code{int} animDelay
-Animation delay in ms.
- at end deftypecv
-
-
-
- at c ------------------------------------------------------------------
- at c @node mglData class, Other classes, Widget classes, Top
- at c @chapter mglData class
-
- at include data_en.texi
-
-
-
- at c ------------------------------------------------------------------
- at node Other classes, MGL interface, mglData class, Top
- at chapter Other classes
-
- at menu
-* mglParse class::              
-* mglFormula class::            
-* mglFont class::               
-* mglColor class::              
-* mglPoint class::              
-* mglVar class::                
-* mglCommand class::            
-* mglArg class::                
- at end menu
-
- at c ------------------------------------------------------------------
- at node mglParse class, mglFormula class, , Other classes
- at section mglParse class
- at cindex mglParse
-
-Class for parsing and executing MGL script. This class is defined in @code{#include <mgl/mgl_parse.h>}.
-
-Class mglParse is the interpreter for MGL scripts (@pxref{MGL interface}). The main function of mglParse class is @code{Parse()}. Exactly this function parses and executes the script string-by-string. Also there are two subservient functions for the finding and creation of a variable. These functions can be useful for displaying values of variables (arrays) in some external program (in window, for example). The variable @var{DataList} contains full list of variables in script. Flag @var{AllowSetSize} allows one to prevent changing the size of the  picture inside the script (forbids the MGL command @code{setsize}). 
-
-Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}).
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{} mglParse (@code{bool} setsize=@code{false})
- at deftypefnx {C function} @code{HMPR} mgl_create_parser ()
-Constructor initializes all values with zero and set @var{AllowSetSize} value.
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{} ~mglParse ()
- at deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p)
-Destructor delete parser
- at end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0})
- at deftypefnx {Method on @code{mglParse} (C++)} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0})
- at deftypefnx {C function} @code{int} mgl_parse (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos)
- at deftypefnx {C function} @code{int} mgl_parsew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos)
-Main function in the class. It parses the string @var{str} and executes it by  using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleAlpha ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_alpha (@code{HMGL} gr)
+Включает/выключает прозрачность, но не перезаписывает настройки пользовательской функции рисования.
 @end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++)} @code{int} Export (@code{wchar_t} cpp_out at code{[1024]}, @code{mglGraph *}gr, @code{const wchar_t *}str)
-Function parses the string @var{str}, executes it by  using @var{gr} as a graphics plotter and exports it to C++ code. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Output C++ text will be placed in @var{out} variable. If string @var{str} have options (defined after ';' symbol) then the corresponding C++ texts are placed in variables @var{op1}, @var{op2}.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleLight ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_light (@code{HMGL} gr)
+Включает/выключает освещение, но не перезаписывает настройки пользовательской функции рисования.
+Switch on/off lighting but do not overwrite switches in user drawing function.
 @end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false})
-Function parse and execute line-by-line MGL script in file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. Also this function support the @code{for|next} MGL commands.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleZoom ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_zoom (@code{HMGL} gr)
+Включает/выключает приближение выбранного мышью области рисунка.
 @end deftypefn
- at deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{int} num, @code{const wchar_t **}text, @code{void (*} error @code{)(int line, int kind)=NULL})
-Function parse and execute line-by-line MGL script in array @var{text}. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleRotate ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_rotate (@code{HMGL} gr)
+Включает/выключает режим вращения мышью. Обычно левая кнопка вращает график, средняя сдвигает, правая приближает и меняет перспективу.
 @end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text, @code{void (*} error @code{)(int line, int kind)=NULL})
- at deftypefnx {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text, @code{void (*} error @code{)(int line, int kind)=NULL})
- at deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text)
- at deftypefnx {C function} @code{void} mgl_parsew_text (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text)
-Function parse and execute line-by-line MGL script in string @var{text}. Lines are separated by @samp{\n} symbol as usual. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleNo ()
+ at deftypefnx {C function} @code{int} mgl_wnd_toggle_no (@code{HMGL} gr)
+Выключает режим приближения/вращения и восстанавливает вид по умолчанию.
+Switch off all zooming and rotation and restore initial state.
 @end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{bool} AddParam (@code{int} n, @code{const char *}str, @code{bool} isstr=@code{true})
- at deftypefnx {Method on @code{mglParse} (C++)} @code{bool} AddParam (@code{int} n, @code{const wchar_t *}str, @code{bool} isstr=@code{true})
- at deftypefnx {C function} @code{void} mgl_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val)
- at deftypefnx {C function} @code{void} mgl_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val)
-Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 9). It return @code{true} for success.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} Update ()
+ at deftypefnx {C function} @code{int} mgl_wnd_update (@code{HMGL} gr)
+Обновляет содержимое окна.
 @end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} FindVar (@code{const char *}name)
- at deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} FindVar (@code{const wchar_t *}name)
- at deftypefnx {C function} @code{const HMDT} mgl_find_var  (@code{HMPR} p, @code{const char *}name)
-Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ReLoad (@code{bool} o)
+ at deftypefnx {C function} @code{int} mgl_wnd_reload (@code{HMGL} gr, @code{int} val)
+Перезагружает данные пользователя и обновляет картинку.
 @end deftypefn
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} AddVar (@code{const char *}name)
- at deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} AddVar (@code{const wchar_t *}name)
- at deftypefnx {C function} @code{const HMDT} mgl_add_var (@code{HMPR} p, @code{const char *}name)
-Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} Adjust ()
+ at deftypefnx {C function} @code{int} mgl_wnd_adjust (@code{HMGL} gr)
+Подгоняет размер картинки под размер окна (виджета).
 @end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{mglVar *}v)
- at deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name)
- at deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name)
-Function delete the variable specified by its name or by its pointer.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} NextFrame ()
+ at deftypefnx {C function} @code{int} mgl_wnd_next_frame (@code{HMGL} gr)
+Показывает следующий кадр.
 @end deftypefn
-
- at deftypefn {Method on @code{mglParse} (C++, Python)} @code{inline void} RestoreOnce ()
- at deftypefnx {C function} @code{void} mgl_restore_once (@code{HMPR} p)
-Restore Once flag.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} PrevFrame ()
+ at deftypefnx {C function} @code{int} mgl_wnd_prev_frame (@code{HMGL} gr)
+Показывает предыдущий кадр.
+Show previous frame if one.
 @end deftypefn
-
- at deftypefn {Method on @code{mglParse} (Python)} @code{void} AllowSetSize (@code{bool} a)
- at deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a)
-Allow to parse 'setsize' command or not.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} Animation ()
+ at deftypefnx {C function} @code{int} mgl_wnd_animation (@code{HMGL} gr)
+Запускает/останавливает слайд-шоу (анимацию) кадров.
 @end deftypefn
 
- at deftypefn {Method on @code{mglParse} (C++)} @code{void} AddCommand (@code{mglCommand *}cmd, @code{int} num=@code{0})
-Add @var{num} commands @var{cmd} to the defined MGL commands list. Parameter @var{cmd} is array of @code{mglCommand} structures. If parameter @var{num}=0 then it will be determined automatically. At this, array @var{cmd} @strong{must have} last element with @code{name=L""}
+ at deftypefn {C function} @code{int} mgl_wnd_set_auto_clf (@code{HMGL} gr, @code{int} val)
 @end deftypefn
-
- at deftypecv {Option} mglParse @code{mglVar *} DataList
-List of variables defined in script.
- at end deftypecv
- at deftypecv {Option} mglParse @code{bool} AllowSetSize
-Flag which allows/forbids the command @code{setsize} in scripts.
- at end deftypecv
- at deftypecv {Option} mglParse @code{bool} Stop
-Flag which interrupt script execution.
- at end deftypecv
- at deftypecv {Option} mglParse @code{mglCommand *} Cmd
-Table (array) of recognizable MGL commands (can be changed by user). Items in the table @strong{MUST be sorted} by @var{name} field !!! Last items must have empty name (i.e. @code{L""}).
- at end deftypecv
- at deftypecv {Option} mglParse @code{wchar_t *} op1
-These strings contain command options and should be placed before the command. These variables are used for MGL->C++ (or other language) conversion.
- at end deftypecv
- at deftypecv {Option} mglParse @code{wchar_t *} op2
-These strings contain command options and should be placed after the command. These variables are used for MGL->C++ (or other language) conversion.
- at end deftypecv
-
- at c ------------------------------------------------------------------
- at node mglFormula class, mglFont class, mglParse class, Other classes
- at section mglFormula class
- at cindex mglFormula
-
-Class for evaluating of formula specified by the string. This class is defined in @code{#include <mgl/mgl_eval.h>}.
-
-It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN.
-
-There are a lot of functions and operators available. The operators are: @samp{+} -- addition, @samp{-} -- subtraction, @samp{*} -- multiplication, @samp{/} -- division, @samp{^} -- integer power. Also there are logical ``operators'': @samp{<} -- true if x<y, @samp{>} -- true if x>y, @samp{=} -- true if x=y, @samp{&} -- true if x and y both nonzero, @samp{|} -- true if x or y nonzero. These logical operators have lowest priority and return 1 if true or 0 if false.
-
-The basic functions are: @samp{sqrt(x)} -- square root of @var{x}, @samp{pow(x,y)} power @var{x} in @var{y}, @samp{ln(x)} -- natural logarithm of @var{x}, @samp{lg(x)} -- decimal logarithm of @var{x}, @samp{log(a,x)} -- logarithm base @var{a} of @var{x}, @samp{abs(x)} -- absolute value of @var{x}, @samp{sign(x)} -- sign of @var{x}, @samp{mod(x,y)} -- x modulo y, @samp{step(x)} -- step function, @samp{rnd} -- random number, @samp{pi} -- number @math{\pi=3.1415926...}.
-
-Trigonometric functions are: @samp{sin(x)}, @samp{cos(x)}, @samp{tan(x)} (or @samp{tg(x)}). Inverse trigonometric functions are: @samp{asin(x)}, @samp{acos(x)}, @samp{atan(x)}. Hyperbolic functions are: @samp{sinh(x)} (or @samp{sh(x)}), @samp{cosh(x)} (or @samp{ch(x)}), @samp{tanh(x)} (or @samp{th(x)}). Inverse hyperbolic functions are: @samp{asinh(x)}, @samp{acosh(x)}, @samp{atanh(x)}.
-
-There are a set of special functions: @samp{gamma(x)} -- Gamma function @math{\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)} , @samp{psi(x)} -- digamma function @math{\psi(x) = \Gamma'(x)/\Gamma(x)} for x!=0, @samp{ai(x)} -- Airy function Ai(x), @samp{bi(x)} -- Airy function Bi(x), @samp{cl(x)} -- Clausen function, @samp{li2(x)} (or @samp{dilog(x)}) -- dilogarithm @math{Li_2(x) = - \Re \int_0^x ds \log(1-s)/s}, @samp{sinc(x)} -- compute @math{sinc(x) = \sin(\pi x) / (\pi x)} for any value of x, @samp{zeta(x)} -- Riemann zeta function @math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}} for arbitrary s!=1, @samp{eta(x)} -- eta function @math{\eta(s) = (1-2^@{1-s@}) \zeta(s)} for arbitrary s, @samp{lp(l,x)} -- Legendre polynomial @math{P_l(x)}, (|x|<=1, l>=0), @samp{w0(x)} -- principal branch of the Lambert @var{W} function, @samp{w1(x)} -- principal branch of the Lambert @var{W} function. Function W(x) is defined to be solution of the equation @math{W \exp(W) = x}.
-
-The exponent integrals are: @samp{ci(x)} -- Cosine integral @math{Ci(x) = \int_0^x dt \cos(t)/t}, @samp{si(x)} -- Sine integral @math{Si(x) = \int_0^x dt \sin(t)/t}, @samp{erf(x)} -- error function @math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}, @samp{ei(x)} -- exponential integral @math{Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)} (where PV denotes the principal value of the integral), @samp{e1(x)} -- exponential integral @math{E_1(x) := Re \int_1^\infty dt \exp(-xt)/t} , @samp{e2(x)} -- exponential integral @math{E_2(x) := Re \int_1^\infty dt \exp(-xt)/t^2}, @samp{ei3(x)} -- exponential integral @math{Ei_3(x) = \int_0^x dt \exp(-t^3)} for x>=0.
-
-Bessel functions are: @samp{j(nu,x)} -- regular cylindrical Bessel function of fractional order @var{nu}, @samp{y(nu,x)} -- irregular cylindrical Bessel function of fractional order @var{nu}, @samp{i(nu,x)} -- regular modified Bessel function of fractional order @var{nu}, @samp{k(nu,x)} -- irregular modified Bessel function of fractional order @var{nu}.
-
-Elliptic integrals are: @samp{ee(k)} -- complete elliptic integral is denoted by @math{E(k) = E(\pi/2, k)}, @samp{ek(k)} -- complete elliptic integral is denoted by @math{K(k) = F(\pi/2, k)}, @samp{e(phi,k)} -- elliptic integral @math{E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))}, @samp{f(phi,k)} -- elliptic integral @math{F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))}.
-
-Jacobi elliptic functions are: @samp{sn(u,m)}, @samp{cn(u,m)}, @samp{dn(u,m)}, @samp{sc(u,m)}, @samp{sd(u,m)}, @samp{ns(u,m)}, @samp{cs(u,m)}, @samp{cd(u,m)}, @samp{nc(u,m)}, @samp{ds(u,m)}, @samp{dc(u,m)}, @samp{nd(u,m)}.
-
-Note, some of these functions are unavailable if NO\_GSL is defined during compilation of MathGL library. 
-
- at deftypemethod mglFormula @code{} mglFormula (@code{const char *}str)
-Parses the formula @var{str} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions.
- at end deftypemethod
- at deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}, @code{float} u=@code{0})
-Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. Error code (if one) can be obtained from function @code{GetError()}.
- at end deftypemethod
- at deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y, @code{float} z, @code{float} u, @code{float} v, @code{float} w)
-Evaluates the formula for @code{'x'}=@var{x}, @code{'y'}=@var{y}, @code{'z'}=@var{z}, @code{'u'}=@var{u}, @code{'v'}=@var{v}, @code{'w'}=@var{w}. Error code (if one) can be obtained from function @code{GetError()}.
- at end deftypemethod
- at deftypemethod mglFormula @code{float} Calc (@code{float} var at code{['z'-'a'+1]})
-Evaluates the formula for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}.
- at end deftypemethod
- at deftypemethod mglFormula @code{float} CalcD (@code{float} var at code{['z'-'a'+1]}, @code{char} diff)
-Evaluates the formula derivation respect to @var{diff} for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}.
- at end deftypemethod
- at deftypemethod mglFormula @code{int} GetError ()
-Returns error code: @code{0} means no error; @code{ERR_LOG} means error in logarithm or power functions; @code{ERR_ARC} means error in inverse functions (like asin); @code{ERR_SQRT} means error in sqrt function.
- at end deftypemethod
-
- at c ------------------------------------------------------------------
- at node mglFont class, mglColor class, mglFormula class, Other classes
- at section mglFont class
- at cindex mglFont
-
-Class for working with font: load, get metrics, parse and draw strings. This class is defined in @code{#include <mgl/mgl_font.h>}.
-
-The class is based on loading and drawing of vector Hershey font. There are two styles of specifying of the font type and aligning: by integer parameters or by string.
-
-The string can be any combination of characters: @samp{rbiLCRwou}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman font (that is @samp{} or @samp{r}) is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wire, @samp{o} -- over-lined, @samp{u} -- underlined.
-
-The over way of font and alignment setting is the using of the integer constant. Integer font Id can be one of predefined constants: @code{MGL_FONT_ITAL, MGL_FONT_BOLD, MGL_FONT_BOLD_ITAL = MGL_FONT_ITAL+MGL_FONT_BOLD}. Default font is @code{MGL_FONT_ROMAN}. Also there are flags @code{MGL_FONT_ULINE, MGL_FONT_OLINE, MGL_FONT_WIRE} for additional font effects. Align parameter controls the text alignment: 0 -- align left, 1 -- align center, 2 -- align right.
-
-Parsing of the string to special (TeX-like) commands will be done if variable @var{parse} is true (it's default). There are commands for the font style changing inside the string (for example, use \b for bold font): \a or \overline -- over-lined, \b or \textbf -- bold, \i or \textit -- italic, \r or \textrm -- roman (disable bold and italic attributes), \u or \underline -- underlined, \w or \wire -- wired, \big -- bigger size, @@ -- smaller size. The lower and upper indexes are specified by @samp{_} and @samp{^} symbols. At this the changed font style is applied only on next symbol or symbols in braces @{@}. The text in braces @{@} are treated as single symbol that allow one to print the index of index. For example, compare the strings @samp{sin (x^@{2^3@})} and @samp{sin (x^2^3)}. You may also change text color inside string by command #? or by \color? where @samp{?} is symbolic id of the color (@pxref{mglColor class}). For example, words @samp{Blue} and @samp{red} will be colored in the string @samp{#b@{Blue@} and \colorr@{red@} text}.
-
-The most of commands for special TeX or AMSTeX symbols, the commands for font style changing (\textrm, \textbf, \textit, \overline, \underline), accents (\hat, \tilde, \dot, \ddot, \acute, \check, \grave, \bar, \breve) and roots (\sqrt, \sqrt3, \sqrt4) are recognized. The full list contain approximately 2000 commands. Note that first space symbol after the command is ignored, but second one is printed as normal symbol (space). For example, the following strings produce the same result @math{\tilde a}: @samp{\tilde@{a@}}; @samp{\tilde a}; @samp{\tilde@{@}a}.
-
- at ifhtml
- at html
-The Greek letters are recognizable special symbols: &alpha; &ndash; \alpha, &beta; &ndash; \beta, &gamma; &ndash; \gamma, &delta; &ndash; \delta, &epsilon; &ndash; \epsilon, &eta; &ndash; \eta, &iota; &ndash; \iota, &chi; &ndash; \chi, &kappa; &ndash; \kappa, &lambda; &ndash; \lambda, &mu; &ndash; \mu, &nu; &ndash; \nu, o &ndash; \o, &omega; &ndash; \omega, &#981; &ndash; \phi, &pi; &ndash; \pi, &psi; &ndash; \psi, &rho; &ndash; \rho, &sigma; &ndash; \sigma, &theta; &ndash; \theta, &tau; &ndash; \tau, &upsilon; &ndash; \upsilon, &xi; &ndash; \xi, &zeta; &ndash; \zeta, &sigmaf; &ndash; \varsigma, &#603; &ndash; \varepsilon, &thetasym; &ndash; \vartheta, &phi; &ndash; \varphi, &#1008; &ndash; \varkappa; A &ndash; \Alpha, B &ndash; \Beta, &Gamma; &ndash; \Gamma, &Delta; &ndash; \Delta, E &ndash; \Epsilon, H &ndash; \Eta, I &ndash; \Iota, C &ndash; \Chi, K &ndash; \Kappa, &Lambda; &ndash; \Lambda, M &ndash; \Mu, N &ndash; \Nu, O &ndash; \O, &Omega; &ndash; \Omega, &Phi; &ndash; \Phi, &Pi; &ndash; \Pi, &Psi; &ndash; \Psi, R &ndash; \Rho, &Sigma; &ndash; \Sigma, &Theta; &ndash; \Theta, T &ndash; \Tau, &Upsilon; &ndash; \Upsilon, &Xi; &ndash; \Xi, Z &ndash; \Zeta.
-
-<p>The small part of most common special TeX symbols are: &ang; &ndash; \angle, &sdot; &ndash; \cdot, &clubs; &ndash; \clubsuit, &#10003; &ndash; \checkmark, &cup; &ndash; \cup, &cap; &ndash; \cap, &#9826; &ndash; \diamondsuit, &#9671; &ndash; \diamond, &divide;
- &ndash; \div, 
-&darr; &ndash; \downarrow, &dagger; &ndash; \dag, &Dagger; &ndash; \ddag, &equiv; &ndash; \equiv, &exist; &ndash; \exists, &#8994; &ndash; \frown, &#9837; &ndash; \flat, &ge; &ndash; \ge, &ge; &ndash; \geq, &#8807; &ndash; \geqq, &larr; &ndash; \gets, &#9825; &ndash; \heartsuit, &infin; &ndash; \infty, &int; &ndash; \int, \Int, &image;  &ndash; \Im, &#9826; &ndash; \lozenge, &#10216; &ndash; \langle, &le; &ndash; \le, &le; &ndash; \leq, &#8806; &ndash; \leqq, &larr; &ndash; \leftarrow, &#8723; &ndash; \mp, &nabla; &ndash; \nabla, &ne; &ndash; \ne, &ne; &ndash; \neq, &#9838; &ndash; \natural, &#8750; &ndash; \oint, &#8857; &ndash; \odot, &oplus; &ndash; \oplus, &part; &ndash; \partial, &#8741; &ndash; \parallel, &perp; &ndash;\perp, &plusmn; &ndash; \pm, &prop; &ndash; \propto, &prod; &ndash; \prod, &real; &ndash; \Re, &rarr; &ndash; \rightarrow, &#10217; &ndash; \rangle, &spades; &ndash; \spadesuit, ~ &ndash; \sim, &#8995; &ndash; \smile, &sub;  &ndash; \subset, &sup; &ndash; \supset, &radic; &ndash; \sqrt or \surd, &sect; &ndash; \S, &#9839; &ndash; \sharp, &sum; &ndash; \sum, &times; &ndash; \times, &rarr; &ndash; \to, &there4; &ndash; \therefore, &uarr; &ndash; \uparrow, &weierp; &ndash; \wp. </p>
- at end html
- at end ifhtml
- at ifnothtml
-The Greek letters are recognizable special symbols: @math{\alpha} -- \alpha, @math{\beta} -- \beta, @math{\gamma} -- \gamma, @math{\delta} -- \delta, @math{\epsilon} -- \epsilon, @math{\eta} -- \eta, @math{\iota} -- \iota, @math{\chi} -- \chi, @math{\kappa} -- \kappa, @math{\lambda} -- \lambda, @math{\mu} -- \mu, @math{\nu} -- \nu, @math{o} -- \o, @math{\omega} -- \omega, @math{\phi} -- \phi, @math{\pi} -- \pi, @math{\psi} -- \psi, @math{\rho} -- \rho, @math{\sigma} -- \sigma, @math{\theta} -- \theta, @math{\tau} -- \tau, @math{\upsilon} -- \upsilon, @math{\xi} -- \xi, @math{\zeta} -- \zeta, @math{\varsigma} -- \varsigma, @math{\varepsilon} -- \varepsilon, @math{\vartheta} -- \vartheta, @math{\varphi} -- \varphi, A -- \Alpha, B -- \Beta, @math{\Gamma} -- \Gamma, @math{\Delta} -- \Delta, E -- \Epsilon, H -- \Eta, I -- \Iota, C -- \Chi, K -- \Kappa, @math{\Lambda} -- \Lambda, M -- \Mu, N -- \Nu, O -- \O, @math{\Omega} -- \Omega, @math{\Phi} -- \Phi, @math{\Pi} -- \Pi, @math{\Psi} -- \Psi, R -- \Rho, @math{\Sigma} -- \Sigma, @math{\Theta} -- \Theta, T -- \Tau, @math{\Upsilon} -- \Upsilon, @math{\Xi} -- \Xi, Z -- \Zeta.
-
-The small part of most common special TeX symbols are: @math{\angle} -- \angle, @math{\aleph} -- \aleph, @math{\cdot} -- \cdot, @math{\clubsuit} -- \clubsuit, @math{\cup} -- \cup, @math{\cap} -- \cap, @math{\diamondsuit} -- \diamondsuit, @math{\diamond} -- \diamond, @math{\div} -- \div, @math{\downarrow} -- \downarrow, @math{\dag} -- \dag, @math{\ddag} -- \ddag, @math{\equiv} -- \equiv, @math{\exists} -- \exists, @math{\frown} -- \frown, @math{\flat} -- \flat, @math{\ge} -- \ge, @math{\geq} -- \geq, @math{\gets} -- \gets, @math{\heartsuit} -- \heartsuit, @math{\infty} -- \infty, @math{\in} -- \in, @math{\int} -- \int, @math{\Im} -- \Im, @math{\langle} -- \langle, @math{\le} -- \le, @math{\leq} -- \leq, @math{\leftarrow} -- \leftarrow, @math{\mp} -- \mp, @math{\nabla} -- \nabla, @math{\ne} -- \ne, @math{\neq} -- \neq, @math{\natural} -- \natural, @math{\oint} -- \oint, @math{\odot} -- \odot, @math{\oplus} -- \oplus, @math{\partial} -- \partial, @math{\parallel} -- \parallel, @math{\perp} -- \perp, @math{\pm} -- \pm, @math{\propto} -- \propto, @math{\prod} -- \prod, @math{\Re} -- \Re, @math{\rightarrow} -- \rightarrow, @math{\rangle} -- \rangle, @math{\spadesuit} -- \spadesuit, @math{\sim} -- \sim, @math{\smile} -- \smile, @math{\subset} -- \subset, @math{\supset} -- \supset, @math{\surd} -- \sqrt or \surd, @math{\S} -- \S, @math{\sharp} -- \sharp, @math{\sum} -- \sum, @math{\times} -- \times, @math{\to} -- \to, @math{\uparrow} -- \uparrow, @math{\wp} -- \wp and so on. 
- at end ifnothtml
-
- at menu
-* Format of font files::        
- at end menu
-
-
- at deftypemethod mglFont @code{} mglFont (@code{const char *}name=@code{MGL_DEF_FONT_NAME}, @code{const char *}path=@code{NULL})
-Initialize the font and load data from file @var{name} (default name is "STIX" for Linux and MacOS) or if  @var{name}=@code{NULL} limited data from memory (default for Windows).
- at end deftypemethod
- at deftypemethod mglFont @code{bool} Load (@code{const char *} base, @code{const char *}path=@code{NULL})
-Load font from file @var{path}/@var{base} into the memory. The font may contain 4 files: @var{base}.vfm, @var{base}_b.vfm, @var{base}_i.vfm, @var{base}_bi.vfm. Appendix contain detailed description of font format.
- at end deftypemethod
- at deftypemethod mglFont @code{void} Restore ()
-Restore default font.
- at end deftypemethod
- at deftypemethod mglFont @code{void}  (@code{mglFont *} fnt)
-Copy data from other font instance.
- at end deftypemethod
- at deftypemethod mglFont @code{void} Clear ()
-Clear memory by deleting the loaded font.
- at end deftypemethod
- at deftypemethod mglFont @code{inline unsigned} GetNumGlyph ()
-Return the number of glyphs in the font.
- at end deftypemethod
- at deftypemethod mglFont @code{inline bool} Ready ()
-Return true if font is loaded and ready for use.
- at end deftypemethod
-
-
- at deftypemethod mglFont @code{float} Height (@code{int} font)
-Gets height of text for font specified by integer constant.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{int} font=@code{0}, @code{int} align=@code{0})
-Prints 8-bit text string for font specified by integer constant.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{int} font=@code{0})
-Gets width of 8-bit text string for font specified by integer constant.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{int} font=@code{0}, @code{int} align=@code{0})
-Prints Unicode text string for font specified by integer constant.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{int} font=@code{0})
-Gets width of Unicode text string for font specified by integer constant.
- at end deftypemethod
-
-
- at deftypemethod mglFont @code{float} Height (@code{const char *}how)
-Gets height of text for font specified by string.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{const char *}how)
-Prints 8-bit text string for font specified by string.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{const char *}how)
-Gets width of 8-bit text string for font specified by string.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{const char *}how)
-Prints Unicode text string for font specified by string.
- at end deftypemethod
- at deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{const char *}how)
-Gets width of Unicode text string for font specified by string.
- at end deftypemethod
-
- at deftypecv {Parameter} mglFont @code{mglGraph *} gr
-Instance of mglGraph class which is used for character drawing.
- at end deftypecv
- at deftypecv {Parameter} mglFont @code{bool} parse
-Flag for switching on/off the parsing of TeX commands. Default value is @code{true}.
- at end deftypecv
-
- at c ------------------------------------------------------------------
- at node Format of font files, , , mglFont class
- at subsection Format of font files
-
-Starting from v.1.6 the MathGL library uses new font files. The font is defined in 4 files with suffixes @samp{*.vfm}, @samp{*_b.vfm}, @samp{*_i.vfm}, @samp{*_bi.vfm}. These files are text files containing the data for roman font, bold font, italic font and bold italic font. The files (or some symbols in the files) for bold, italic or bold italic fonts can be absent. In this case the roman glyph will be used for them. By analogy, if the bold italic font is absent but the bold font is present then bold glyph will be used for bold italic. You may create these font files by yourself from *.ttf, *.otf files with the help of program @code{font_tools}. This program can be found at MathGL home site.
-
-The format of font files (*.vfm -- vector font for MathGL) is the following.
- at enumerate
- at item
-First string contains human readable comment and is always ignored.
- at item
-Second string contains 3 numbers, delimited by space or tabulation. The order of numbers is the following: @var{numg} -- the number of glyphs in the file (integer), @var{fact} -- the factor for glyph sizing (float), @var{size} -- the size of buffer for glyph description (integer).
- at item
-After it @var{numg}-th strings with glyphs description are placed. Each string contains 6 positive numbers, delimited by space of tabulation. The order of numbers is the following: Unicode glyph ID, glyph width, number of lines in glyph, position of lines coordinates in the buffer (length is 2*number of lines), number of triangles in glyph, position of triangles coordinates in the buffer (length is 6*number of triangles).
- at item
-The end of file contains the buffer with point coordinates at lines or triangles vertexes. The size of buffer (the number of integer) is @var{size}.
- at end enumerate
-
-Note: the closing contour line  is done automatically (so the last segment may be absent). For starting new contour use a point with coordinates @code{@{0x3fff, 0x3fff@}}.
-
-
- at c ------------------------------------------------------------------
- at node mglColor class, mglPoint class, mglFont class, Other classes
- at section mglColor class
- at cindex mglColor
-
-Structure for working with colors. This structure is defined in @code{#include <mgl/mgl.h>}.
-
-There are two ways to set the color in MathGL. First one is using of float values of red, green and blue channels for precise color definition. The second way is the using of character id. There are a set of characters specifying frequently used colors. Normally capital letter gives more dark color than lowercase one. The full list of characters is: @samp{k} -- black, @samp{r} -- red, @samp{R} -- dark red, @samp{g} -- green, @samp{G} -- dark green, @samp{b} -- blue, @samp{B} -- dark blue, @samp{c} -- cyan, @samp{C} -- dark cyan, @samp{m} -- magenta, @samp{M} -- dark magenta, @samp{y} -- yellow, @samp{Y} -- dark yellow (gold), @samp{h} -- gray, @samp{H} -- dark gray, @samp{w} -- white, @samp{W} -- bright gray, @samp{l} -- green-blue, @samp{L} -- dark green-blue, @samp{e} -- green-yellow, @samp{E} -- dark green-yellow, @samp{n} -- sky-blue, @samp{N} -- dark sky-blue, @samp{u} -- blue-violet, @samp{U} -- dark blue-violet, @samp{p} -- purple, @samp{P} -- dark purple, @samp{q} -- orange, @samp{Q} -- dark orange (brown).
-
-Also you may use ``lighted'' colors in color scheme specification (@emph{not in line style!}). The ``lighted'' color contain 2 symbols: first one is usual symbol for color specification, second one is digit for its brightness. The digit can be in range @samp{1}... at samp{9}. At this @samp{5} correspond to normal color, @samp{1} is very dark version of the color (practically black), @samp{9} is very bright version of the color (practically white).
-
- at float
- at image{png/colors, 7cm}
- at caption{Colors and its ids.}
- at end float
-
- at deftypecv {Parameter} mglVar @code{float} {r, g, b}
-Reg, green and blue component of color.
+ at deftypecv {Widget option} mglGraphAB @code{bool} AutoClf
+Включает/выключает автоматическую очистку рисунка между перерисовкой. Выключение полезно для рисования с накоплением (например, результатов/точек расчета).
 @end deftypecv
 
- at deftypemethod mglColor @code{} mglColor (@code{float} R, @code{float} G, @code{float} B)
-Constructor sets the color by float values of Red, Green and Blue channels.
- at end deftypemethod
- at deftypemethod mglColor @code{} mglColor (@code{char} c=@code{'k'})
-Constructor sets the color from character id. The black color is used by default.
- at end deftypemethod
- at deftypemethod mglColor @code{void} Set (@code{float} R, @code{float} G, @code{float} B)
-Sets color from values of Red, Green and Blue channels. This values should be in interval [0,1].
- at end deftypemethod
- at deftypemethod mglColor @code{void} Set (@code{mglColor} c, @code{float} bright=@code{1})
-Sets color as ``lighted'' version of color @var{c}.
- at end deftypemethod
- at deftypemethod mglColor @code{void} Set (@code{char} p)
-Sets color from symbolic id.
- at end deftypemethod
- at deftypemethod mglColor @code{bool} Valid ()
-Checks correctness of the color.
- at end deftypemethod
- at deftypemethod mglColor @code{float} Norm ()
-Gets maximal of spectral component.
- at end deftypemethod
- at deftypemethod mglColor @code{bool} operator== (@code{const mglColor &}c)
-Compare with another color
- at end deftypemethod
-
- at deftypefn {Library Function} {inline mglColor} operator+ (@code{const mglColor &}a, @code{const mglColor &}b)
-Adds colors by its RGB values.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator- (@code{const mglColor &}a, @code{const mglColor &}b)
-Subtracts colors by its RGB values.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator* (@code{const mglColor &}a, @code{float} b)
-Multiplies color by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator* (@code{float} a, @code{const mglColor &}b)
-Multiplies color by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator/ (@code{const mglColor &}a, @code{float} b)
-Divide color by number.
+ at deftypefn {C function} @code{int} mgl_wnd_set_delay (@code{HMGL} gr, @code{int} val)
 @end deftypefn
- at deftypefn {Library Function} {inline mglColor} operator! (@code{const mglColor &}a)
-Return inverted color.
- at end deftypefn
-
- at c ------------------------------------------------------------------
- at node mglPoint class, mglArg class, mglColor class, Other classes
- at section mglPoint class
- at cindex mglPoint
-
-Structure describes point in space. This structure is defined in @code{#include <mgl/mgl.h>}
-
- at deftypecv {Parameter} mglVar @code{float} {x, y, z}
-Point coordinates. By default all values are zero.
+ at deftypecv {Widget option} mglGraphAB @code{float} Delay
+Задержка анимации в секундах. По умолчанию равно 1 секунде.
 @end deftypecv
 
- at deftypefn {Library Function} {inline mglPoint} operator+ (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Point of summation (summation of vectors).
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Point of difference (difference of vectors).
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator* (@code{float} a, @code{const mglPoint &}b)
-Multiplies (scale) points by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator* (@code{const mglPoint &}a, @code{float} b)
-Multiplies (scale) points by number.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator/ (@code{const mglPoint &}a, @code{float} b)
-Multiplies (scale) points by number 1/b.
- at end deftypefn
- at deftypefn {Library Function} {inline float} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Scalar product of vectors.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator^ (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Cross-product of vectors.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator& (@code{const mglPoint &}a, @code{const mglPoint &}b)
-The part of @var{a} which is perpendicular to vector @var{b}.
- at end deftypefn
- at deftypefn {Library Function} {inline mglPoint} operator| (@code{const mglPoint &}a, @code{const mglPoint &}b)
-The part of @var{a} which is parallel to vector @var{b}.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++, Python)} @code{mglPoint} CalcXYZ (@code{int} xs, @code{int} ys)
+ at deftypefnx {C function} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{float *}x, @code{float *}y, @code{float *}z)
+Вычисляет 3D координаты @{x,y,z@} для экранной точки @{xs,ys@}. В данный момент игнорируется перспектива графика и формулы перехода в криволинейные координаты. Вычисления производятся для последнего использованного InPlot (@pxref{Transformation matrix}).
 @end deftypefn
 
- at deftypefn {Library Function} {inline mglPoint} operator! (@code{const mglPoint &}a)
-Return vector perpendicular to vector @var{a}.
- at end deftypefn
- at deftypefn {Library Function} {inline bool} Norm (@code{const mglPoint &}a)
-Return the norm |@var{a}|^2 of vector @var{a}.
+ at deftypefn {Метод класса @code{mglGraphAB} (C++, Python)} @code{mglPoint} CalcScr (@code{mglPoint} p)
+ at deftypefnx {Метод класса @code{mglGraphAB} (C++)} @code{void} CalcScr (@code{mglPoint} p, @code{int *}xs, @code{int *}ys)
+ at deftypefnx {C function} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{int *}xs, @code{int *}ys)
+Вычисляет экранные координаты @{xs,ys@} для 3D координат @{x,y,z@}. Вычисления производятся для последнего использованного InPlot (@pxref{Transformation matrix}).
 @end deftypefn
 
- at deftypefn {Library Function} {inline bool} operator== (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Return true if points are the same.
+ at deftypefn {C function} @code{int} mgl_wnd_set_show_mouse_pos (@code{HMGL} gr, @code{int} val)
 @end deftypefn
- at deftypefn {Library Function} {inline bool} operator!= (@code{const mglPoint &}a, @code{const mglPoint &}b)
-Return true if points are different.
- at end deftypefn
-
- at c ------------------------------------------------------------------
- at node mglVar class, mglCommand class, mglArg class, Other classes
- at section mglVar class
- at cindex mglVar
-
-Structure describes variable of type @code{mglData} and its name in MGL script. This structure is used by @code{mglParse} and is defined in @code{#include <mgl/mgl_parse.h>}.
-
- at deftypecv {Parameter} mglVar @code{mglData} d
-Data itself
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{wchar_t} s[256]
-Data name
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{void *} o
-Pointer to external object for function @var{func}.
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{mglVar *} next
-Pointer to next instance in list
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{mglVar *} prev
-Pointer to prev instance in list
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{bool} temp
-Flag for temporar variable. Temporal variables will be destroyed after script execution.
- at end deftypecv
- at deftypecv {Parameter} mglVar @code{void (*} func @code{)(void *)}
-Callback function for destroying non-temporal variable.
- at end deftypecv
-
- at deftypemethod mglGraphAB @code{void} MoveAfter (@code{mglVar *}var)
-Move variable after @var{var} and copy @code{func} from @code{var} (if @code{func} is not 0)
- at end deftypemethod
-
-
- at c ------------------------------------------------------------------
- at node mglCommand class, , mglVar class, Other classes
- at section mglCommand class
- at cindex mglCommand
-
-Structure describes MGL command, its name, short description, executable and export functions. The structure is used by @code{mglParse} and is defined in @code{#include <mgl/mgl_parse.h>}.
-
- at deftypecv {Parameter} mglCommand @code{const wchar_t *} name
-Name of command.
- at end deftypecv
- at deftypecv {Parameter} mglCommand @code{const wchar_t *} desc
-Short command description (can be NULL).
- at end deftypecv
- at deftypecv {Parameter} mglCommand @code{const wchar_t *} form
-Format of command arguments (can be NULL).
- at end deftypecv
- at deftypecv {Parameter} mglCommand @code{int (*} exec @code{)(mglGraph *gr, long n, mglArg *a, int k[10])const wchar_t *}
-Function for executing (plotting) the command using grapher @var{gr} and having @var{n}-th arguments @var{a}. Function must return 0 if all is OK; or 1 if arguments are wrong.
- at end deftypecv
- at deftypecv {Parameter} mglCommand @code{void (*} save @code{)(wchar_t out[1024], long n, mglArg *a, int k[10])const wchar_t *}
-Function for exporting in C++ (can be NULL).
+ at deftypecv {Widget option} mglGraphAB @code{float} ShowMousePos
+Включает/выключает показ координат последнего нажатия кнопки мыши на рисунке.
 @end deftypecv
 
-
- at c ------------------------------------------------------------------
- at node mglArg class, mglVar class, mglPoint class, Other classes
- at section mglArg class
- at cindex mglArg
-
-Structure describes arguments of functions in the stucture @code{mglCommand}. It is defined in @code{#include <mgl/mgl_parse.h>}.
-
- at deftypecv {Parameter} mglArg @code{int} type
-Type of argument: 0-data, 1-string, 2-number.
- at end deftypecv
- at deftypecv {Parameter} mglArg @code{mglData *} d
-Pointer to data (used if type=0).
- at end deftypecv
- at deftypecv {Parameter} mglArg @code{wchar_t} w[2048]
-String with parameters (used if type=1 or if type=0 as variable name).
- at end deftypecv
- at deftypecv {Parameter} mglArg @code{char} s[2048]
-String with parameters (used if type=1).
- at end deftypecv
- at deftypecv {Parameter} mglArg @code{float} v
-Numerical value (used if type==2)
+ at deftypecv {Widget option} mglGraphAB @code{mglPoint} LastMousePos
+Последнее положение нажатия кнопки мыши.
 @end deftypecv
 
diff --git a/texinfo/concept_en.texi b/texinfo/concept_en.texi
new file mode 100644
index 0000000..f05b618
--- /dev/null
+++ b/texinfo/concept_en.texi
@@ -0,0 +1,171 @@
+
+ at node Coordinate axes, Line styles, , General concepts
+ at subsection Coordinate axes
+
+Two axis representations are used in MathGL. The first one consists of normalizing the data point coordinates in a box @var{Min}x at var{Max} (@pxref{Axis settings}). If @var{Cut} is @code{true} then the outlier points are omitted, otherwise they are projected to the bounding box (@pxref{Cutting}). Also, the point will be omitted if it lies inside the box defined by @var{CutMin} x @var{CutMax} or if the value of formula @code{CutOff}() is nonzero for its coordinates. After that, transformation formulas are applied to the data point. Finally, the data point is plotted by one of the functions.
+
+There is a possibility to set members @var{Max}, @var{Min} directly, but one should call @code{RecalcBorder()} function to setup plotting routines. A safer way is to set these values by calling the @code{Axis()} function, which calls @code{RecalcBorder()} automatically. Another way to specify the scaling of the axis is to set it as a minimal or maximal value of the data array. Functions @code{XRange(), YRange(), ZRange()} do it. The second (optional) argument is used to replace the axis range or to join with the existed range.
+
+The axis origin is defined by the variable @var{Org} and is applied to all consequent calls of axes or grid drawing. By default, if this point lies outside the bounding box then it is projected onto the one (variable @var{AutoOrg} controls it). If one of the values of @var{Org} is equal to NAN then the corresponding value will be selected automatically.
+
+There is 4-th axis @emph{c} (color axis or colorbar) in addition to the usual axes @emph{x, y, z}. It sets the range of values for the surface coloring. Its borders are automatically set to values of Min.z, Max.z during the call of @code{Axis()} function. Also, one can directly change the color range by setting variables @var{Cmax}, @var{Cmax}, or calling functions @code{CAxis()} or @code{CRange()}. Use @code{Colorbar()} function for showing the colorbar.
+
+The form (appearence) of tick labels is controlled by @code{SetTicks()} function (@pxref{Axis settings}). It has 3 arguments: first one @var{d} sets the tick step (if positive) or tick number (if negative) or switches logarithmic ticks on (if zero); the second one, @var{ns}, sets the number of subticks; the last one is the starting point for ticks (default is axis origin). Function @var{SetTuneTicks} switches on/off tick enhancing by factoring out acommon multiplier (for small coordinate values, like 0.001 to 0.002, or large, like from 1000 to 2000) or common component (for narrow range, like from 0.999 to 1.000). Finally, you may use functions @code{SetXTT(), SetYTT(), SetZTT(), SetCTT()} for setting templates for tick labels (it supports TeX symbols). Also, there is a possibility to print arbitrary text as tick labels the by help of @code{SetTicksVal()} function.
+
+ at node Line styles, Color scheme, Coordinate axes, General concepts
+ at subsection Line styles
+
+ at cindex Line style
+ at cindex Mark style
+ at cindex Arrows
+
+The line style is defined by the string which may contain specifications for color (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), dashing style (@samp{-|;:ji} or space), width (@samp{0123456789}) and marks (@samp{o+xsd.^v} and @samp{#} modifier). If one of the type of information is omitted then default values used with the previous color or one from palette (for @pxref{1D plotting}) are adopted. 
+ at ifhtml
+ at html
+By default palette contain following colors: <span style="color: rgb(76, 76, 76);">dark gray</span> &lsquo;<samp>H</samp>&rsquo;, <span style="color: rgb(0, 0, 255);">blue</span> &lsquo;<samp>b</samp>&rsquo;, <span style="color: rgb(0, 255, 0);">green</span> &lsquo;<samp>g</samp>&rsquo;, <span style="color: rgb(255, 0, 0);">red</span> &lsquo;<samp>r</samp>&rsquo;, <span style="color: rgb(0, 255, 255);">cyan</span> &lsquo;<samp>c</samp>&rsquo;, <span style="color: rgb(255, 0, 255);">magenta</span> &lsquo;<samp>m</samp>&rsquo;, <span style="color: rgb(255, 255, 0);">yellow</span> &lsquo;<samp>y</samp>&rsquo;, <span style="color: rgb(127, 127, 127);">gray</span> &lsquo;<samp>h</samp>&rsquo;, <span style="color: rgb(0, 255, 127);">green-blue</span> &lsquo;<samp>l</samp>&rsquo;, <span style="color: rgb(0, 127, 255);">sky-blue</span> &lsquo;<samp>n</samp>&rsquo;, <span style="color: rgb(255, 127, 0);">orange</span> &lsquo;<samp>q</samp>&rsquo;, <span style="color: rgb(127, 255, 0);">green-yellow</span> &lsquo;<samp>e</samp>&rsquo;, <span style="color: rgb(127, 0, 255);">blue-violet</span> &lsquo;<samp>u</samp>&rsquo;, <span style="color: rgb(255, 0, 127);">purple</span> &lsquo;<samp>p</samp>&rsquo;.
+
+<p>The color types are: &lsquo;<samp>k</samp>&rsquo; -- black, &lsquo;<samp>r</samp>&rsquo; -- <span style="color: rgb(255, 0, 0);">red</span>, &lsquo;<samp>R</samp>&rsquo; -- <span style="color: rgb(127, 0, 0);">dark red</span>, &lsquo;<samp>g</samp>&rsquo; -- <span style="color: rgb(0, 255, 0);">green</span>, &lsquo;<samp>G</samp>&rsquo; -- <span style="color: rgb(0, 127, 0);">dark green</span>, &lsquo;<samp>b</samp>&rsquo; -- <span style="color: rgb(0, 0, 255);">blue</span>, &lsquo;<samp>B</samp>&rsquo; -- <span style="color: rgb(0, 0, 127);">dark blue</span>, &lsquo;<samp>c</samp>&rsquo; -- <span style="color: rgb(0, 255, 255);">cyan</span>, &lsquo;<samp>C</samp>&rsquo; -- <span style="color: rgb(0, 127, 127);">dark cyan</span>, &lsquo;<samp>m</samp>&rsquo; -- <span style="color: rgb(255, 0, 255);">magenta</span>, &lsquo;<samp>M</samp>&rsquo; -- <span style="color: rgb(127, 0, 127);">dark magenta</span>, &lsquo;<samp>y</samp>&rsquo; -- <span style="color: rgb(255, 255, 0);">yellow</span>, &lsquo;<samp>Y</samp>&rsquo; -- <span style="color: rgb(127, 127, 0);">dark yellow (gold)</span>, &lsquo;<samp>h</samp>&rsquo; -- <span style="color: rgb(127, 127, 127);">gray</span>, &lsquo;<samp>H</samp>&rsquo; -- <span style="color: rgb(76, 76, 76);">dark gray</span>, &lsquo;<samp>w</samp>&rsquo; -- white, &lsquo;<samp>W</samp>&rsquo; -- <span style="color: rgb(178, 178, 178);">bright gray</span>, &lsquo;<samp>l</samp>&rsquo; -- <span style="color: rgb(0, 255, 127);">green-blue</span>, &lsquo;<samp>L</samp>&rsquo; -- <span style="color: rgb(0, 127, 63);">dark green-blue</span>, &lsquo;<samp>e</samp>&rsquo; -- <span style="color: rgb(127, 255, 0);">green-yellow</span>, &lsquo;<samp>E</samp>&rsquo; -- <span style="color: rgb(63, 127, 0);">dark green-yellow</span>, &lsquo;<samp>n</samp>&rsquo; -- <span style="color: rgb(0, 127, 255);">sky-blue</span>, &lsquo;<samp>N</samp>&rsquo; -- <span style="color: rgb(0, 63, 127);">dark sky-blue</span>, &lsquo;<samp>u</samp>&rsquo; -- <span style="color: rgb(127, 0, 255);">blue-violet</span>, &lsquo;<samp>U</samp>&rsquo; -- <span style="color: rgb(63, 0, 127);">dark blue-violet</span>, &lsquo;<samp>p</samp>&rsquo; -- <span style="color: rgb(255, 0, 127);">purple</span>, &lsquo;<samp>P</samp>&rsquo; -- <span style="color: rgb(127, 0, 63);">dark purple</span>, &lsquo;<samp>q</samp>&rsquo; -- <span style="color: rgb(255, 127, 0);">orange</span>, &lsquo;<samp>Q</samp>&rsquo; -- <span style="color: rgb(127, 63, 0);">dark orange (brown)</span>.</p>
+
+Dashing style has the following meaning: space -- no line (usable for plotting only marks), &lsquo;<samp>-</samp>&rsquo; -- solid line (&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;), &lsquo;<samp>|</samp>&rsquo; -- long dashed line (&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9633;&#9633;&#9633;&#9633;&#9633;&#9633;&#9633;&#9633;), &lsquo;<samp>;</samp>&rsquo; -- dashed line (&#9632;&#9632;&#9632;&#9632;&#9633;&#9633;&#9633;&#9633;&#9632;&#9632;&#9632;&#9632;&#9633;&#9633;&#9633;&#9633;), &lsquo;<samp>=</samp>&rsquo; -- small dashed line (&#9632;&#9632;&#9633;&#9633;&#9632;&#9632;&#9633;&#9633;&#9632;&#9632;&#9633;&#9633;&#9632;&#9632;&#9633;&#9633;), &lsquo;<samp>:</samp>&rsquo; -- dotted line (&#9632;&#9633;&#9633;&#9633;&#9632;&#9633;&#9633;&#9633;&#9632;&#9633;&#9633;&#9633;&#9632;&#9633;&#9633;&#9633;), &lsquo;<samp>j</samp>&rsquo; -- dash-dotted line (&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9633;&#9633;&#9633;&#9633;&#9632;&#9633;&#9633;&#9633;&#9633;), &lsquo;<samp>i</samp>&rsquo; -- small dash-dotted line (&#9632;&#9632;&#9632;&#9633;&#9633;&#9632;&#9633;&#9633;&#9632;&#9632;&#9632;&#9633;&#9633;&#9632;&#9633;&#9633;).
+ at end html
+ at end ifhtml
+ at ifnothtml
+The line style is defined by the string which may contain specifications for color (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), dashing style (@samp{-|;:ji} or space), width (@samp{0123456789}) and marks (@samp{o+xsd.^v} and @samp{#} modifier). If one of the type of information is omitted then default values used with the previous color or one from palette (for @pxref{1D plotting}) are adopted. By default palette contain following colors: dark gray @samp{H}, blue @samp{b}, green @samp{g}, red @samp{r}, cyan @samp{c}, magenta @samp{m}, yellow @samp{y}, gray @samp{h}, blue-green @samp{l}, sky-blue @samp{n}, orange @samp{q}, yellow-green @samp{e}, blue-violet @samp{u}, purple @samp{p}.
+
+The color types are: @samp{k} -- black, @samp{r} -- red, @samp{R} -- dark red, @samp{g} -- green, @samp{G} -- dark green, @samp{b} -- blue, @samp{B} -- dark blue, @samp{c} -- cyan, @samp{C} -- dark cyan, @samp{m} -- magenta, @samp{M} -- dark magenta, @samp{y} -- yellow, @samp{Y} -- dark yellow (gold), @samp{h} -- gray, @samp{H} -- dark gray, @samp{w} -- white, @samp{W} -- bright gray, @samp{l} -- green-blue, @samp{L} -- dark green-blue, @samp{e} -- green-yellow, @samp{E} -- dark green-yellow, @samp{n} -- sky-blue, @samp{N} -- dark sky-blue, @samp{u} -- blue-violet, @samp{U} -- dark blue-violet, @samp{p} -- purple, @samp{P} -- dark purple, @samp{q} -- orange, @samp{Q} -- dark orange (brown).
+
+Dashing style has the following meaning: space -- no line (usable for plotting only marks), @samp{-} -- solid line (################), @samp{|} -- long dashed line (########________), @samp{;} -- dashed line (####____####____), @samp{=} -- small dashed line (##__##__##__##__), @samp{:} -- dotted line (#___#___#___#___), @samp{j} -- dash-dotted line (#######____#____), @samp{i} -- small dash-dotted line (###__#__###__#__).
+ at end ifnothtml
+
+Marker types are: @samp{o} -- circle, @samp{+} -- cross, @samp{x} -- skew cross, @samp{s} - square, @samp{d} - rhomb (or diamond), @samp{.} -- dot (point), @samp{^} -- triangle up, @samp{v} -- triangle down, @samp{<} -- triangle left, @samp{>} -- triangle right, @samp{#*} -- Y sign, @samp{#+} -- squared cross, @samp{#x} -- squared skew cross, @samp{#.} -- circled dot. If string contain symbol @samp{#} then the solid versions of markers are used.
+
+ at float
+ at image{../png/sample5, 7cm}
+ at caption{Styles of lines and marks.}
+ at end float
+
+One may specify to draw a special symbol (an arrow) at the beginning and at the end of line. This is done if the specification string contains one of the following symbols: @samp{A} -- outer arrow, @samp{V} -- inner arrow, @samp{I} -- transverse hatches, @samp{K} -- arrow with hatches, @samp{T} -- triangle, @samp{S} -- square, @samp{D} -- rhombus, @samp{O} -- circle, @samp{_} -- nothing (the default). The following rule applies: the first symbol specifies the arrow at the end of line, the second specifies the arrow at the beginning of the line. For example, @samp{r-A} defines a red solid line with usual arrow at the end, @samp{b|AI} defines a blue dash line with an arrow at the end and with hatches at the beginning, @samp{_O} defines a line with the current style and with a circle at the beginning. These styles are applicable during the graphics plotting as well (for example, @ref{1D plotting}).
+
+ at float
+ at image{../png/sampled, 7cm}
+ at caption{Arrow styles.}
+ at end float
+
+ at node Color scheme, Font styles, Line styles, General concepts
+ at subsection Color scheme
+
+ at cindex Color scheme
+
+The color scheme is used for determining the color of surfaces, isolines, isosurfaces and so on. The color scheme is defined by the string, which may contain several characters that are color id (@pxref{Line styles}) or characters @samp{d#:|}. Symbol @samp{d} denotes the interpolation by 3d position instead of the coloring by amplitude. Symbol @samp{#} switches to mesh drawing or to a wire plot. Symbol @samp{|} disables color interpolation in color scheme, which can be useful, for example, for sharp colors during matrix plotting. Symbol @samp{:} finishes the color scheme parsing. Following it, the user may put styles for the text, rotation axis for curves/isocontours, and so on. Color scheme may contain up to 32 color values.
+
+You may also use ``lighted'' colors in the color scheme specification (@emph{not in line style!}). The ``lighted'' color contain 2 symbols: first one is the usual symbol for color specification, the second one is a digit for its brightness. The digit can be in range @samp{1}... at samp{9}. 
+Number @samp{5} corresponds to a normal color, @samp{1} is a very dark version of the color (practically black), and @samp{9} is a very bright version of the color (practically white). For example, the color scheme can be @samp{b2b7wr7r2}.
+
+ at float
+ at image{../png/colors, 7cm}
+ at caption{Colors and its ids.}
+ at end float
+
+For coloring by @emph{amplitude} (most common) the final color is a linear interpolation of color array. The color array is constructed from the string ids. The argument is the amplitude normalized between @var{Cmin} -- @var{Cmax} (@pxref{Axis settings}). For example, string containing 4 characters @samp{bcyr} corresponds to a colorbar from blue (lowest value) through cyan (next value) through yellow (next value) to the red (highest value). String @samp{kw} corresponds to a colorbar from black (lowest value) to white (highest value). String @samp{m} corresponds to a simple magenta color.
+
+There are several useful combinations. String @samp{kw} corresponds to the simplest gray color scheme where higher values are brighter. String @samp{wk} presents the inverse gray color scheme where higher value is darker. Strings @samp{kRryw}, @samp{kGgw}, @samp{kBbcw} present the well-known @emph{hot}, @emph{summer} and @emph{winter} color schemes. Strings @samp{BbwrR} and @samp{bBkRr} allow to view bi-color figure on white or black background, where negative values are blue and positive values are red. String @samp{BbcyrR} gives a color scheme similar to the well-known @emph{jet} color scheme.
+
+ at float
+ at image{../png/color_schemes, 7cm}
+ at caption{Most popular color schemes.}
+ at end float
+
+When coloring by @emph{coordinate}, the final color is determined by the position of the point in 3d space and is calculated from formula c=x*c[1] + y*c[2] + z*c[3]. Here, c[1], c[2], c[3] are the first three elements of color array; x, y, z are normalized to @var{Min} -- @var{Max} coordinates of the point. This type of coloring is useful for isosurface plot where color may show the exact position of a piece of surface.
+
+ at node Font styles, Textual formulas, Color scheme, General concepts
+ at subsection Font styles
+
+ at cindex Font styles
+
+Text style is specified by the string which may contain several characters of font (@samp{ribwou}) and/or alignment (@samp{LRC}) specifications. The string also may contain the color id characters @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) after the symbol @samp{:}. For example, @samp{biC:b} sets the bold italic font text aligned at the center and with blue color.
+
+The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wired, @samp{o} -- over-lined, @samp{u} -- underlined. 
+ at c Also a parsing of the LaTeX-like syntax is provided (for detail, @pxref{mglFont class} and @ref{Font settings}).
+
+Also a parsing of the LaTeX-like syntax is provided. There are commands for the font style changing inside the string (for example, use \b for bold font): \a or \overline -- over-lined, \b or \textbf -- bold, \i or \textit -- italic, \r or \textrm -- roman (disable bold and italic attributes), \u or \underline -- underlined, \w or \wire -- wired, \big -- bigger size, @@ -- smaller size. The lower and upper indexes are specified by @samp{_} and @samp{^} symbols. At this the changed font style is applied only on next symbol or symbols in braces @{@}. The text in braces @{@} are treated as single symbol that allow one to print the index of index. For example, compare the strings @samp{sin (x^@{2^3@})} and @samp{sin (x^2^3)}. You may also change text color inside string by command #? or by \color? where @samp{?} is symbolic id of the color (@pxref{Line styles}). For example, words @samp{Blue} and @samp{red} will be colored in the string @samp{#b@{Blue@} and \colorr@{red@} text}. The most of functions understand the newline symbol @samp{\n} and allows to print multi-line text. Finally, you can use arbitrary UTF codes by command @code{\utf0x????}. For example, @code{\utf0x3b1} will produce
+ at ifhtml
+ at html
+ &alpha; symbol.
+ at end html
+ at end ifhtml
+ at ifnothtml
+ @math{\alpha} symbol.
+ at end ifnothtml
+
+The most of commands for special TeX or AMSTeX symbols, the commands for font style changing (\textrm, \textbf, \textit, \textsc, \overline, \underline), accents (\hat, \tilde, \dot, \ddot, \acute, \check, \grave, \bar, \breve) and roots (\sqrt, \sqrt3, \sqrt4) are recognized. The full list contain approximately 2000 commands. Note that first space symbol after the command is ignored, but second one is printed as normal symbol (space). For example, the following strings produce the same result @math{\tilde a}: @samp{\tilde@{a@}}; @samp{\tilde a}; @samp{\tilde@{@}a}.
+
+ at ifhtml
+ at html
+In particular, the Greek letters are recognizable special symbols: &alpha; &ndash; \alpha, &beta; &ndash; \beta, &gamma; &ndash; \gamma, &delta; &ndash; \delta, &epsilon; &ndash; \epsilon, &eta; &ndash; \eta, &iota; &ndash; \iota, &chi; &ndash; \chi, &kappa; &ndash; \kappa, &lambda; &ndash; \lambda, &mu; &ndash; \mu, &nu; &ndash; \nu, o &ndash; \o, &omega; &ndash; \omega, &#981; &ndash; \phi, &pi; &ndash; \pi, &psi; &ndash; \psi, &rho; &ndash; \rho, &sigma; &ndash; \sigma, &theta; &ndash; \theta, &tau; &ndash; \tau, &upsilon; &ndash; \upsilon, &xi; &ndash; \xi, &zeta; &ndash; \zeta, &sigmaf; &ndash; \varsigma, &#603; &ndash; \varepsilon, &thetasym; &ndash; \vartheta, &phi; &ndash; \varphi, &#1008; &ndash; \varkappa; A &ndash; \Alpha, B &ndash; \Beta, &Gamma; &ndash; \Gamma, &Delta; &ndash; \Delta, E &ndash; \Epsilon, H &ndash; \Eta, I &ndash; \Iota, C &ndash; \Chi, K &ndash; \Kappa, &Lambda; &ndash; \Lambda, M &ndash; \Mu, N &ndash; \Nu, O &ndash; \O, &Omega; &ndash; \Omega, &Phi; &ndash; \Phi, &Pi; &ndash; \Pi, &Psi; &ndash; \Psi, R &ndash; \Rho, &Sigma; &ndash; \Sigma, &Theta; &ndash; \Theta, T &ndash; \Tau, &Upsilon; &ndash; \Upsilon, &Xi; &ndash; \Xi, Z &ndash; \Zeta.
+
+<p>The small part of most common special TeX symbols are: &ang; &ndash; \angle, &sdot; &ndash; \cdot, &clubs; &ndash; \clubsuit, &#10003; &ndash; \checkmark, &cup; &ndash; \cup, &cap; &ndash; \cap, &#9826; &ndash; \diamondsuit, &#9671; &ndash; \diamond, &divide;
+ &ndash; \div, 
+&darr; &ndash; \downarrow, &dagger; &ndash; \dag, &Dagger; &ndash; \ddag, &equiv; &ndash; \equiv, &exist; &ndash; \exists, &#8994; &ndash; \frown, &#9837; &ndash; \flat, &ge; &ndash; \ge, &ge; &ndash; \geq, &#8807; &ndash; \geqq, &larr; &ndash; \gets, &#9825; &ndash; \heartsuit, &infin; &ndash; \infty, &int; &ndash; \int, \Int, &image;  &ndash; \Im, &#9826; &ndash; \lozenge, &#10216; &ndash; \langle, &le; &ndash; \le, &le; &ndash; \leq, &#8806; &ndash; \leqq, &larr; &ndash; \leftarrow, &#8723; &ndash; \mp, &nabla; &ndash; \nabla, &ne; &ndash; \ne, &ne; &ndash; \neq, &#9838; &ndash; \natural, &#8750; &ndash; \oint, &#8857; &ndash; \odot, &oplus; &ndash; \oplus, &part; &ndash; \partial, &#8741; &ndash; \parallel, &perp; &ndash;\perp, &plusmn; &ndash; \pm, &prop; &ndash; \propto, &prod; &ndash; \prod, &real; &ndash; \Re, &rarr; &ndash; \rightarrow, &#10217; &ndash; \rangle, &spades; &ndash; \spadesuit, ~ &ndash; \sim, &#8995; &ndash; \smile, &sub;  &ndash; \subset, &sup; &ndash; \supset, &radic; &ndash; \sqrt or \surd, &sect; &ndash; \S, &#9839; &ndash; \sharp, &sum; &ndash; \sum, &times; &ndash; \times, &rarr; &ndash; \to, &there4; &ndash; \therefore, &uarr; &ndash; \uparrow, &weierp; &ndash; \wp. </p>
+ at end html
+ at end ifhtml
+ at ifnothtml
+In particular, the Greek letters are recognizable special symbols: @math{\alpha} -- \alpha, @math{\beta} -- \beta, @math{\gamma} -- \gamma, @math{\delta} -- \delta, @math{\epsilon} -- \epsilon, @math{\eta} -- \eta, @math{\iota} -- \iota, @math{\chi} -- \chi, @math{\kappa} -- \kappa, @math{\lambda} -- \lambda, @math{\mu} -- \mu, @math{\nu} -- \nu, @math{o} -- \o, @math{\omega} -- \omega, @math{\phi} -- \phi, @math{\pi} -- \pi, @math{\psi} -- \psi, @math{\rho} -- \rho, @math{\sigma} -- \sigma, @math{\theta} -- \theta, @math{\tau} -- \tau, @math{\upsilon} -- \upsilon, @math{\xi} -- \xi, @math{\zeta} -- \zeta, @math{\varsigma} -- \varsigma, @math{\varepsilon} -- \varepsilon, @math{\vartheta} -- \vartheta, @math{\varphi} -- \varphi, A -- \Alpha, B -- \Beta, @math{\Gamma} -- \Gamma, @math{\Delta} -- \Delta, E -- \Epsilon, H -- \Eta, I -- \Iota, C -- \Chi, K -- \Kappa, @math{\Lambda} -- \Lambda, M -- \Mu, N -- \Nu, O -- \O, @math{\Omega} -- \Omega, @math{\Phi} -- \Phi, @math{\Pi} -- \Pi, @math{\Psi} -- \Psi, R -- \Rho, @math{\Sigma} -- \Sigma, @math{\Theta} -- \Theta, T -- \Tau, @math{\Upsilon} -- \Upsilon, @math{\Xi} -- \Xi, Z -- \Zeta.
+
+The small part of most common special TeX symbols are: @math{\angle} -- \angle, @math{\aleph} -- \aleph, @math{\cdot} -- \cdot, @math{\clubsuit} -- \clubsuit, @math{\cup} -- \cup, @math{\cap} -- \cap, @math{\diamondsuit} -- \diamondsuit, @math{\diamond} -- \diamond, @math{\div} -- \div, @math{\downarrow} -- \downarrow, @math{\dag} -- \dag, @math{\ddag} -- \ddag, @math{\equiv} -- \equiv, @math{\exists} -- \exists, @math{\frown} -- \frown, @math{\flat} -- \flat, @math{\ge} -- \ge, @math{\geq} -- \geq, @math{\gets} -- \gets, @math{\heartsuit} -- \heartsuit, @math{\infty} -- \infty, @math{\in} -- \in, @math{\int} -- \int, @math{\Im} -- \Im, @math{\langle} -- \langle, @math{\le} -- \le, @math{\leq} -- \leq, @math{\leftarrow} -- \leftarrow, @math{\mp} -- \mp, @math{\nabla} -- \nabla, @math{\ne} -- \ne, @math{\neq} -- \neq, @math{\natural} -- \natural, @math{\oint} -- \oint, @math{\odot} -- \odot, @math{\oplus} -- \oplus, @math{\partial} -- \partial, @math{\parallel} -- \parallel, @math{\perp} -- \perp, @math{\pm} -- \pm, @math{\propto} -- \propto, @math{\prod} -- \prod, @math{\Re} -- \Re, @math{\rightarrow} -- \rightarrow, @math{\rangle} -- \rangle, @math{\spadesuit} -- \spadesuit, @math{\sim} -- \sim, @math{\smile} -- \smile, @math{\subset} -- \subset, @math{\supset} -- \supset, @math{\surd} -- \sqrt or \surd, @math{\S} -- \S, @math{\sharp} -- \sharp, @math{\sum} -- \sum, @math{\times} -- \times, @math{\to} -- \to, @math{\uparrow} -- \uparrow, @math{\wp} -- \wp and so on. 
+ at end ifnothtml
+
+The font size can be defined explicitly (if @var{size}>0) or relative to a base font size as |@var{size}|*@var{FontSize} (if @var{size}<0). The value @var{size}=0 specifies that the string will not be printed. The base font size is measured in internal ``MathGL'' units. Special functions @code{SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()} allow one to set it in more ``common'' variables for a given dpi value of the picture.
+
+
+ at node Textual formulas, , Font styles, General concepts
+ at subsection Textual formulas
+
+ at cindex Textual formulas
+
+MathGL have the fast variant of textual formula evaluation 
+ at ifclear UDAV
+ (@pxref{mglFormula class})
+ at end ifclear
+. There are a lot of functions and operators available. The operators are: @samp{+} -- addition, @samp{-} -- subtraction, @samp{*} -- multiplication, @samp{/} -- division, @samp{^} -- integer power. Also there are logical ``operators'': @samp{<} -- true if x<y, @samp{>} -- true if x>y, @samp{=} -- true if x=y, @samp{&} -- true if x and y both nonzero, @samp{|} -- true if x or y nonzero. These logical operators have lowest priority and return 1 if true or 0 if false.
+
+The basic functions are: @samp{sqrt(x)} -- square root of @var{x}, @samp{pow(x,y)} -- power @var{x} in @var{y}, @samp{ln(x)} -- natural logarithm of @var{x}, @samp{lg(x)} -- decimal logarithm of @var{x}, @samp{log(a,x)} -- logarithm base @var{a} of @var{x}, @samp{abs(x)} -- absolute value of @var{x}, @samp{sign(x)} -- sign of @var{x}, @samp{mod(x,y)} -- x modulo y, @samp{step(x)} -- step function, @samp{int(x)} -- integer part of @var{x}, @samp{rnd} -- random number, @samp{pi} -- number
+ at ifhtml
+ at html
+&pi; = 3.1415926&hellip;
+ at end html
+ at end ifhtml
+ at ifnothtml
+ at math{\pi=3.1415926...}
+ at end ifnothtml
+
+
+Trigonometric functions are: @samp{sin(x)}, @samp{cos(x)}, @samp{tan(x)} (or @samp{tg(x)}). Inverse trigonometric functions are: @samp{asin(x)}, @samp{acos(x)}, @samp{atan(x)}. Hyperbolic functions are: @samp{sinh(x)} (or @samp{sh(x)}), @samp{cosh(x)} (or @samp{ch(x)}), @samp{tanh(x)} (or @samp{th(x)}). Inverse hyperbolic functions are: @samp{asinh(x)}, @samp{acosh(x)}, @samp{atanh(x)}.
+
+ at ifhtml
+ at html
+<p>There are a set of special functions: &lsquo;<samp>gamma(x)</samp>&rsquo; &ndash; Gamma function &Gamma;(x) = &int;<sub>0</sub><sup>&infin;</sup> t<sup>x-1</sup> exp(-t) dt, &lsquo;<samp>psi(x)</samp>&rsquo; &ndash; digamma function &psi;(x) = &Gamma;&prime;(x)/&Gamma;(x) for x&ne;0, &lsquo;<samp>ai(x)</samp>&rsquo; &ndash; Airy function Ai(x), &lsquo;<samp>bi(x)</samp>&rsquo; &ndash; Airy function Bi(x), &lsquo;<samp>cl(x)</samp>&rsquo; &ndash; Clausen function, &lsquo;<samp>li2(x)</samp>&rsquo; (or &lsquo;<samp>dilog(x)</samp>&rsquo;) &ndash; dilogarithm Li<sub>2</sub>(x) = -&real;&int;<sub>0</sub><sup>x</sup>ds log(1-s)/s, &lsquo;<samp>sinc(x)</samp>&rsquo; &ndash; compute sinc(x) = sin(&pi;x)/(&pi;x) for any value of x, &lsquo;<samp>zeta(x)</samp>&rsquo; &ndash; Riemann zeta function &zeta;(s) = &sum;<sub>k=1</sub><sup>&infin;</sup>k<sup>-s</sup> for arbitrary s&ne;1, &lsquo;<samp>eta(x)</samp>&rsquo; &ndash; eta function &eta;(s) = (1 - 2<sup>1-s</sup>)&zeta;(s) for arbitrary s, &lsquo;<samp>lp(l,x)</samp>&rsquo; &ndash; Legendre polynomial P<sub>l</sub>(x), (|x|&le;1, l&ge;0), &lsquo;<samp>w0(x)</samp>&rsquo; &ndash; principal branch of the Lambert W function, &lsquo;<samp>w1(x)</samp>&rsquo; &ndash; principal branch of the Lambert W function. Function W(x) is defined to be solution of the equation: W exp(W) = x. </p>
+
+<p>The exponent integrals are: &lsquo;<samp>ci(x)</samp>&rsquo; &ndash; Cosine integral Ci(x) = &int;<sub>0</sub><sup>x</sup>dt cos(t)/t, &lsquo;<samp>si(x)</samp>&rsquo; &ndash; Sine integral Si(x) = &int;<sub>0</sub><sup>x</sup>dt sin(t)/t, &lsquo;<samp>erf(x)</samp>&rsquo; &ndash; error function erf(x) = (2/&radic;&pi;) &int;<sub>0</sub><sup>x</sup>dt exp(-t<sup>2</sup>) , &lsquo;<samp>ei(x)</samp>&rsquo; &ndash; exponential integral Ei(x) = -PV(&int;<sub>-x</sub><sup>&infin;</sup>dt exp(-t)/t) (where PV denotes the principal value of the integral), &lsquo;<samp>e1(x)</samp>&rsquo; &ndash; exponential integral E<sub>1</sub>(x) = &real;&int;<sub>1</sub><sup>&infin;</sup>dt exp(-xt)/t, &lsquo;<samp>e2(x)</samp>&rsquo; &ndash; exponential integral E<sub>2</sub>(x) = &real;&int;<sub>1</sub>&infin;</sup>dt exp(-xt)/t<sup>2</sup>, &lsquo;<samp>ei3(x)</samp>&rsquo; &ndash; exponential integral Ei<sub>3</sub>(x) = &int;<sub>0</sub><sup>x</sup>dt exp(-t<sup>3</sup>) for x&ge;0. </p>
+
+<p>Bessel functions are: &lsquo;<samp>j(nu,x)</samp>&rsquo; &ndash; regular cylindrical Bessel function of fractional order <em>nu</em>, &lsquo;<samp>y(nu,x)</samp>&rsquo; &ndash; irregular cylindrical Bessel function of fractional order <em>nu</em>, &lsquo;<samp>i(nu,x)</samp>&rsquo; &ndash; regular modified Bessel function of fractional order <em>nu</em>, &lsquo;<samp>k(nu,x)</samp>&rsquo; &ndash; irregular modified Bessel function of fractional order <em>nu</em>. </p>
+
+<p>Elliptic integrals are: &lsquo;<samp>ee(k)</samp>&rsquo; &ndash; complete elliptic integral is denoted by E(k) = E(&pi;/2,k), &lsquo;<samp>ek(k)</samp>&rsquo; &ndash; complete elliptic integral is denoted by K(k) = F(&pi;/2,k), &lsquo;<samp>e(phi,k)</samp>&rsquo; &ndash; elliptic integral E(&phi;,k) = &int;<sub>0</sub><sup>&phi;</sup>dt &radic;(1 - k<sup>2</sup>sin<sup>2</sup>(t)), &lsquo;<samp>f(phi,k)</samp>&rsquo; &ndash; elliptic integral F(&phi;,k) = &int;<sub>0</sub><sup>&phi;</sup>dt 1/&radic;(1 - k<sup>2</sup>sin<sup>2</sup>(t))</p>
+ at end html
+ at end ifhtml
+ at ifnothtml
+There are a set of special functions: @samp{gamma(x)} -- Gamma function @math{\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)} , @samp{psi(x)} -- digamma function @math{\psi(x) = \Gamma</samp>&rsquo;(x)/\Gamma(x)} for x!=0, @samp{ai(x)} -- Airy function Ai(x), @samp{bi(x)} -- Airy function Bi(x), @samp{cl(x)} -- Clausen function, @samp{li2(x)} (or @samp{dilog(x)}) -- dilogarithm @math{Li_2(x) = - \Re \int_0^x ds \log(1-s)/s}, @samp{sinc(x)} -- compute @math{sinc(x) = \sin(\pi x) / (\pi x)} for any value of x, @samp{zeta(x)} -- Riemann zeta function @math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}} for arbitrary s!=1, @samp{eta(x)} -- eta function @math{\eta(s) = (1-2^@{1-s@}) \zeta(s)} for arbitrary s, @samp{lp(l,x)} -- Legendre polynomial @math{P_l(x)}, (|x|<=1, l>=0), @samp{w0(x)}, @samp{w1(x)} -- principal branch of the Lambert @var{W} functions. Function W(x) is defined to be solution of the equation @math{W \exp(W) = x}.
+
+The exponent integrals are: @samp{ci(x)} -- Cosine integral @math{Ci(x) = \int_0^x dt \cos(t)/t}, @samp{si(x)} -- Sine integral @math{Si(x) = \int_0^x dt \sin(t)/t}, @samp{erf(x)} -- error function @math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}, @samp{ei(x)} -- exponential integral @math{Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)} (where PV denotes the principal value of the integral), @samp{e1(x)} -- exponential integral @math{E_1(x) := Re \int_1^\infty dt \exp(-xt)/t} , @samp{e2(x)} -- exponential integral @math{E_2(x) := Re \int_1^\infty dt \exp(-xt)/t^2}, @samp{ei3(x)} -- exponential integral @math{Ei_3(x) = \int_0^x dt \exp(-t^3)} for x>=0.
+
+Bessel functions are: @samp{j(nu,x)} -- regular cylindrical Bessel function of fractional order @var{nu}, @samp{y(nu,x)} -- irregular cylindrical Bessel function of fractional order @var{nu}, @samp{i(nu,x)} -- regular modified Bessel function of fractional order @var{nu}, @samp{k(nu,x)} -- irregular modified Bessel function of fractional order @var{nu}.
+
+Elliptic integrals are: @samp{ee(k)} -- complete elliptic integral is denoted by @math{E(k) = E(\pi/2, k)}, @samp{ek(k)} -- complete elliptic integral is denoted by @math{K(k) = F(\pi/2, k)}, @samp{e(phi,k)} -- elliptic integral @math{E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))}, @samp{f(phi,k)} -- elliptic integral @math{F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))}.
+ at end ifnothtml
+
+Jacobi elliptic functions are: @samp{sn(u,m)}, @samp{cn(u,m)}, @samp{dn(u,m)}, @samp{sc(u,m)}, @samp{sd(u,m)}, @samp{ns(u,m)}, @samp{cs(u,m)}, @samp{cd(u,m)}, @samp{nc(u,m)}, @samp{ds(u,m)}, @samp{dc(u,m)}, @samp{nd(u,m)}.
+
+Note, some of these functions are unavailable if NO_GSL is defined during compilation of MathGL library. 
+
+There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN.
+
+
diff --git a/texinfo/concept_ru.texi b/texinfo/concept_ru.texi
new file mode 100644
index 0000000..0d988a4
--- /dev/null
+++ b/texinfo/concept_ru.texi
@@ -0,0 +1,169 @@
+
+
+ at node Coordinate axes, Line styles, , General concepts
+ at subsection Оси координат
+
+Представление системы координат в MathGL состоит из двух частей. Вначале координаты нормируются в интервал @var{Min}x at var{Max} (@pxref{Axis settings}). Если флаг @var{Cut} установлен, то точки вне интервала отбрасываются, в противном случае, они проецируются на ограничивающий параллелепипед (@pxref{Cutting}). Кроме того, отбрасываются точки внутри границ, определенных переменными @var{CutMin}x at var{CutMax} и точки, для которых значение функции @code{CutOff}() не равно нулю. После этого формулы перехода в криволинейную систему координат @code{SetFunc()}применяются к каждой точке. Наконец, точка данных отображается с помощью одной из графических функций.
+
+Величины @var{Max}, @var{Min} можно изменять вручную. Однако, после этого необходимо вызвать функцию @code{RecalcBorder()} для настройки графика. Более удобный и безопасный путь состоит в вызове функций @code{Axis(), SetRanges()} и др. В последнем случае функция @code{RecalcBorder()} вызывается автоматически. Размеры осей можно задавать и автоматически по минимальному и максимальному значениям массива данных. Для этого предназначены функции @code{XRange(), YRange(), ZRange()}. Второй не обязательный аргумент указывает, заменять ли новые значения диапазона изменения оси координат (по умолчанию) или только расширить уже существующий диапазон.
+
+Точка пересечения осей координат задается переменной @var{Org} и действует на последующие вызовы функций рисования осей координат и сетки. По умолчанию, если точка пересечения осей координат попадает вне диапазона осей координат, то она проецируется на границу области. Изменить такое поведение можно, задав @var{AutoOrg}=@code{false}. В случае, если одно из значений @var{Org} равно NAN, то соответствующее значение будет выбрано автоматически.
+
+Кроме привычных осей @emph{x, y, z} есть еще одна ось -- цветовая шкала -- ось @emph{c}. Она используется при окрашивании поверхностей и задает границы изменения функции при окрашивании. При вызове @code{Axis()} ее границы автоматически устанавливаются равными Min.z и Max.z. Возможно и ручное изменение границ цветового интервала посредством вызова функции @code{CAxis()} или изменение границ по заданному массиву @code{CRange()}. Используйте @code{Colorbar()} для отображения цветовой шкалы.
+
+Вид меток по осям определяется функцией @code{SetTicks()} (@pxref{Axis settings}). Она имеет 3 аргумента: первый @var{d} задает шаг меток (если положительны) или их число (если отрицательны) или логарифмические метки (если равны нулю); второ @var{ns} задает число "подметок"; последний определяет начальную точку для меток (по умолчанию это точка пересечения осей). Функция @var{SetTuneTicks} включает/выключает выделение общего множителя (большого или малого факторов в диапазоне) для меток осей координат. Наконец, если стандартный вид меток не устраивает пользователя, то их шаблон можно задать явно (можно использовать и ТеХ символы), воспользовавшись функциями  @code{SetXTT(), SetYTT(). SetZTT(). SetCTT()}. Кроме того, в качестве меток можно вывести произвольный текст использовав функцию @code{SetTicksVal()}.
+
+ at node Line styles, Color scheme, Coordinate axes, General concepts
+ at subsection Стиль линий
+
+ at cindex Стиль линий
+ at cindex Стиль маркеров
+ at cindex Стиль стрелок
+
+Стиль линии задается строкой, которая может содержать символ цвета (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), тип пунктира (@samp{-|;:ji} или пробел), ширину линии (@samp{0123456789}) и тип маркера (@samp{o+xsd.^v} и модификатор @samp{#}). Если пропущен цвет или тип пунктира, то используется значение по умолчанию с последним указанным цветом или значение из палитры (для @pxref{1D plotting}). 
+ at ifhtml
+ at html
+По умолчанию палитры содержит следующие цвета: <span style="color: rgb(76, 76, 76);">темно серый</span> &lsquo;<samp>H</samp>&rsquo;, <span style="color: rgb(0, 0, 255);">синий</span> &lsquo;<samp>b</samp>&rsquo;, <span style="color: rgb(0, 255, 0);">зеленый</span> &lsquo;<samp>g</samp>&rsquo;, <span style="color: rgb(255, 0, 0);">красный</span> &lsquo;<samp>r</samp>&rsquo;, <span style="color: rgb(0, 255, 255);">голубой</span> &lsquo;<samp>c</samp>&rsquo;, <span style="color: rgb(255, 0, 255);">пурпурный</span> &lsquo;<samp>m</samp>&rsquo;, <span style="color: rgb(255, 255, 0);">yellow</span> &lsquo;<samp>y</samp>&rsquo;, <span style="color: rgb(127, 127, 127);">серый</span> &lsquo;<samp>h</samp>&rsquo;, <span style="color: rgb(0, 255, 127);">сине-зеленый</span> &lsquo;<samp>l</samp>&rsquo;, <span style="color: rgb(0, 127, 255);">небесно-синий</span> &lsquo;<samp>n</samp>&rsquo;, <span style="color: rgb(255, 127, 0);">оранжевый</span> &lsquo;<samp>q</samp>&rsquo;, <span style="color: rgb(127, 255, 0);">желто-зеленый</span> &lsquo;<samp>e</samp>&rsquo;, <span style="color: rgb(127, 0, 255);">сине-фиолетовый</span> &lsquo;<samp>u</samp>&rsquo;, <span style="color: rgb(255, 0, 127);">фиолетовый</span> &lsquo;<samp>p</samp>&rsquo;.
+
+<p>Символы цвета: &lsquo;<samp>k</samp>&rsquo; -- черный, &lsquo;<samp>r</samp>&rsquo; -- <span style="color: rgb(255, 0, 0);">красный</span>, &lsquo;<samp>R</samp>&rsquo; -- <span style="color: rgb(127, 0, 0);">темно красный</span>, &lsquo;<samp>g</samp>&rsquo; -- <span style="color: rgb(0, 255, 0);">зеленый</span>, &lsquo;<samp>G</samp>&rsquo; -- <span style="color: rgb(0, 127, 0);">темно зеленый</span>, &lsquo;<samp>b</samp>&rsquo; -- <span style="color: rgb(0, 0, 255);">синий</span>, &lsquo;<samp>B</samp>&rsquo; -- <span style="color: rgb(0, 0, 127);">темно синий</span>, &lsquo;<samp>c</samp>&rsquo; -- <span style="color: rgb(0, 255, 255);">голубой</span>, &lsquo;<samp>C</samp>&rsquo; -- <span style="color: rgb(0, 127, 127);">темно голубой</span>, &lsquo;<samp>m</samp>&rsquo; -- <span style="color: rgb(255, 0, 255);">пурпурный</span>, &lsquo;<samp>M</samp>&rsquo; -- <span style="color: rgb(127, 0, 127);">темно пурпурный</span>, &lsquo;<samp>y</samp>&rsquo; -- <span style="color: rgb(255, 255, 0);">желтый</span>, &lsquo;<samp>Y</samp>&rsquo; -- <span style="color: rgb(127, 127, 0);">темно желтый (золотой)</span>, &lsquo;<samp>h</samp>&rsquo; -- <span style="color: rgb(127, 127, 127);">серый</span>, &lsquo;<samp>H</samp>&rsquo; -- <span style="color: rgb(76, 76, 76);">темно серый</span>, &lsquo;<samp>w</samp>&rsquo; -- белый, &lsquo;<samp>W</samp>&rsquo; -- <span style="color: rgb(178, 178, 178);">светло серый</span>, &lsquo;<samp>l</samp>&rsquo; -- <span style="color: rgb(0, 255, 127);">сине-зеленый</span>, &lsquo;<samp>L</samp>&rsquo; -- <span style="color: rgb(0, 127, 63);">темно сине-зеленый</span>, &lsquo;<samp>e</samp>&rsquo; -- <span style="color: rgb(127, 255, 0);">желто-зеленый</span>, &lsquo;<samp>E</samp>&rsquo; -- <span style="color: rgb(63, 127, 0);">темно желто-зеленый</span>, &lsquo;<samp>n</samp>&rsquo; -- <span style="color: rgb(0, 127, 255);">небесно-синий</span>, &lsquo;<samp>N</samp>&rsquo; -- <span style="color: rgb(0, 63, 127);">темно небесно-синий</span>, &lsquo;<samp>u</samp>&rsquo; -- <span style="color: rgb(127, 0, 255);">сине-фиолетовый</span>, &lsquo;<samp>U</samp>&rsquo; -- <span style="color: rgb(63, 0, 127);">темно сине-фиолетовый</span>, &lsquo;<samp>p</samp>&rsquo; -- <span style="color: rgb(255, 0, 127);">фиолетовый</span>, &lsquo;<samp>P</samp>&rsquo; -- <span style="color: rgb(127, 0, 63);">темно фиолетовый</span>, &lsquo;<samp>q</samp>&rsquo; -- <span style="color: rgb(255, 127, 0);">оранжевый</span>, &lsquo;<samp>Q</samp>&rsquo; -- <span style="color: rgb(127, 63, 0);">темно оранжевый (коричневый)</span>.</p>
+
+Тип пунктира: пробел -- нет линии (для рисования только маркеров), &lsquo;<samp>-</samp>&rsquo; -- сплошная линия (&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;), &lsquo;<samp>|</samp>&rsquo; -- длинный пунктир (&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9633;&#9633;&#9633;&#9633;&#9633;&#9633;&#9633;&#9633;), &lsquo;<samp>;</samp>&rsquo; -- пунктир (&#9632;&#9632;&#9632;&#9632;&#9633;&#9633;&#9633;&#9633;&#9632;&#9632;&#9632;&#9632;&#9633;&#9633;&#9633;&#9633;), &lsquo;<samp>=</samp>&rsquo; -- короткий пунктир (&#9632;&#9632;&#9633;&#9633;&#9632;&#9632;&#9633;&#9633;&#9632;&#9632;&#9633;&#9633;&#9632;&#9632;&#9633;&#9633;), &lsquo;<samp>:</samp>&rsquo; -- точки (&#9632;&#9633;&#9633;&#9633;&#9632;&#9633;&#9633;&#9633;&#9632;&#9633;&#9633;&#9633;&#9632;&#9633;&#9633;&#9633;), &lsquo;<samp>j</samp>&rsquo; -- пунктир с точками  (&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9632;&#9633;&#9633;&#9633;&#9633;&#9632;&#9633;&#9633;&#9633;&#9633;), &lsquo;<samp>i</samp>&rsquo; -- мелкий пунктир с точками (&#9632;&#9632;&#9632;&#9633;&#9633;&#9632;&#9633;&#9633;&#9632;&#9632;&#9632;&#9633;&#9633;&#9632;&#9633;&#9633;).
+ at end html
+ at end ifhtml
+ at ifnothtml
+По умолчанию палитры содержит следующие цвета: темно серый @samp{H}, синий @samp{b}, зеленый @samp{g}, красный @samp{r}, голубой @samp{c}, пурпурный @samp{m}, yellow @samp{y}, серый @samp{h}, сине-зеленый @samp{l}, небесно-синий @samp{n}, оранжевый @samp{q}, желто-зеленый @samp{e}, сине-фиолетовый @samp{u}, фиолетовый @samp{p}.
+
+Символы цвета те же, что и в классе mglColor (@pxref{mglColor class}): @samp{k} -- черный, @samp{r} -- красный, @samp{R} -- темно красный, @samp{g} -- зеленый, @samp{G} -- темно зеленый, @samp{b} -- синий, @samp{B} -- темно синий, @samp{c} -- голубой, @samp{C} -- темно голубой, @samp{m} -- пурпурный, @samp{M} -- темно пурпурный, @samp{y} -- желтый, @samp{Y} -- темно желтый (золотой), @samp{h} -- серый, @samp{H} -- темно серый, @samp{w} -- белый, @samp{W} -- светло серый, @samp{l} -- сине-зеленый, @samp{L} -- темно сине-зеленый, @samp{e} -- желто-зеленый, @samp{E} -- темно желто-зеленый, @samp{n} -- небесно-синий, @samp{N} -- темно небесно-синий, @samp{u} -- сине-фиолетовый, @samp{U} -- темно сине-фиолетовый, @samp{p} -- фиолетовый, @samp{P} -- темно фиолетовый, @samp{q} -- оранжевый, @samp{Q} -- темно оранжевый (коричневый).
+
+Тип пунктира: пробел -- нет линии (для рисования только маркеров), @samp{-} -- сплошная линия (################), @samp{|} -- длинный пунктир (########________), @samp{;} -- пунктир (####____####____), @samp{=} -- короткий пунктир (##__##__##__##__), @samp{:} -- точки (#___#___#___#___), @samp{j} -- пунктир с точками  (#######____#____), @samp{i} -- мелкий пунктир с точками (###__#__###__#__).
+ at end ifnothtml
+
+Типы маркеров: @samp{o} -- окружность, @samp{+} -- крест, @samp{x} -- косой крест, @samp{s} - квадрат, @samp{d} - ромб, @samp{.} -- точка, @samp{^} -- треугольник вверх, @samp{v} -- треугольник вниз, @samp{<} -- треугольник влево, @samp{>} -- треугольник вправо, @samp{#*} -- знак Y, @samp{#+} -- крест в квадрате, @samp{#x} -- косой крест в квадрате, @samp{#.} -- точка в окружности. Если в строке присутствует символ @samp{#}, то используются символы с заполнением.
+
+ at float
+ at image{../png/sample5, 7cm}
+ at caption{Стили линий и маркеров.}
+ at end float
+
+На конце и в начале линии можно выводить специальный символ (стрелку), если в строке указать один из символов: @samp{A} -- стрелка наружу, @samp{V} -- стрелка внутрь, @samp{I} -- поперечная черта, @samp{K} -- стрелка с чертой, @samp{T} -- треугольник, @samp{S} -- квадрат, @samp{D} -- ромб, @samp{O} -- круг, @samp{_} -- нет стрелки (по умолчанию). При этом действует следующее правило: первый символ определяет стрелку на конце линии, второй символ -- стрелку в начале линии. Например, @samp{r-A} -- красная сплошная линия со стрелкой на конце, @samp{b|AI} -- синий пунктир со стрелкой на конце и чертой вначале, @samp{_O} -- линия с текущим стилем и кружком вначале. Эти стили действуют и при построении графиков (например, @ref{1D plotting}).
+
+ at float
+ at image{../png/sampled, 7cm}
+ at caption{Стили стрелок.}
+ at end float
+
+ at node Color scheme, Font styles, Line styles, General concepts
+ at subsection Цветовая схема
+
+ at cindex Цветовая схема
+
+Цветовая схема используется для определения цвета поверхностей, линий уровня и пр. Цветовая схема задается строкой @emph{s}, которая содержит символы цвета (@pxref{Line styles}) или символы @samp{d#:|}. Символ @samp{d} указывает на определение цвета в зависимости от положения точки в пространстве, а не по амплитуде данных. Символ @samp{#} переключает рисование поверхности на сетчатое (для трехмерных поверхностей) или включает рисование сетки на поверхности. Символ @samp{|} отключает интерполяцию цвета в цветовой схеме. Это может быть полезно для ``резких'' цветов, например, при рисовании матриц. Если в строке встречается символ @samp{:}, то он принудительно заканчивает разбор строки для стиля поверхности. После этого символа могут идти описание стиля текста или оси вращения кривой/линий уровня. Цветовая схема может содержать до 32 значений цвета.
+
+В цветовой схеме можно использовать тональные (``подсвеченные'') цвета (@emph{не в стиле линий!}). Тональный цвет задается двумя символами: первый -- обычный цвет, второй -- его яркость цифрой. Цифра может быть в диапазоне @samp{1}... at samp{9}. При этом @samp{5} соответствует нормальному цвету, @samp{1} -- очень темная версия цвета (почти черный), @samp{9} -- очень светлая версия цвета (почти белый). Например цветовая схема может быть @samp{b2b7wr7r2}.
+
+ at float
+ at image{../png/colors, 7cm}
+ at caption{Цвета и их идентификаторы.}
+ at end float
+
+При определении цвета по @emph{амплитуде} (наиболее часто используется) окончательный цвет определяется путем линейной интерполяции массива цветов. Массив цветов формируется из цветов, указанных в строке спецификации. Аргумент -- амплитуда, нормированная между @var{Cmin} -- @var{Cmax} (@pxref{Axis settings}). Например, строка из 4 символов @samp{bcyr} соответствует изменению цвета от синего (минимальное значение) через голубой и желтый (промежуточные значения) к красному (максимальное значение). Строка @samp{kw} соответствует изменению цвета от черного (минимальное значение) к белому (максимальное значение). Строка из одного символа (например, @samp{g}) соответствует однотонному цвету (в данному случае зеленому).
+
+Есть несколько полезных цветовых схем. Строка @samp{kw} дает обычную серую (черно-белую) схему, когда большие значения светлее. Строка @samp{wk} представляет обратную серую схему, когда большие значения темнее. Строки @samp{kRryw}, @samp{kGgw}, @samp{kBbcw} представляют собой хорошо известные схемы @emph{hot}, @emph{summer} и @emph{winter}. Строки @samp{BbwrR} и @samp{bBkRr} позволяют рисовать двухцветные фигуры на белом или черном фоне, когда отрицательные значения показаны синим цветом, а положительные -- красным. Строка @samp{BbcyrR} дает цветовую схему, близкую к хорошо известной схеме @emph{jet}.
+
+
+ at float
+ at image{../png/color_schemes, 7cm}
+ at caption{Наиболее популярные цветовые схемы.}
+ at end float
+
+При определении цвета по @emph{положению точки в пространстве} окончательный цвет определяется по формуле c=x*c[1] + y*c[2] + z*c[3]. Здесь c[1], c[2], c[3] -- первые три цвета в цветовом массиве; x, y, z -- координаты точки, нормированные на @var{Min}x at var{Max}. Такой тип определения цвета полезен, например, при построении поверхностей уровня, когда цвет дает представление о положении точки в пространстве.
+
+ at node Font styles, Textual formulas, Color scheme, General concepts
+ at subsection Стиль текста
+
+ at cindex Стиль текста
+
+Стиль текста задается строкой, которая может содержать несколько символов: тип шрифта (@samp{ribwou}) и/или выравнивания (@samp{LRC}), а также цвет текста @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) после символа @samp{:}. Например, @samp{biC:b} соответствует жирному курсиву с выравниванием по центру синего цвета.
+
+Начертания шрифта: @samp{r} -- прямой шрифт, @samp{i} -- курсив, @samp{b} -- жирный. По умолчанию используется прямой шрифт. Типы выравнивания текста: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Дополнительные эффекты шрифта: @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. 
+ at c Синтаксический разбор LaTeX-их команд по умолчанию включен (подробнее см. @pxref{mglFont class} и @ref{Font settings}).
+
+Синтаксический разбор LaTeX-их команд по умолчанию включен. Это команды смены стиля текста (например, \b для жирного текста): \a или \overline -- надчеркивание, \b или \textbf -- жирный, \i или \textit -- курсив, \r или \textrm -- прямой (отменяет стили жирного и курсива), \u или \underline -- подчеркнутый, \w или \wire -- контурный, \big -- большего размера, @@ -- меньшего размера. Нижний и верхний индексы задаются символами @samp{_} и @samp{^}. При этом изменение стиля применяется только к следующему символу или к символам в фигурных скобках @{@}, которые понимаются как единый блок. Например, сравните строки @samp{sin (x^@{2^3@})} и @samp{sin (x^2^3)}. Можно также менять цвет текста внутри строки с помощью команд #? или \color?, где @samp{?} -- символ цвета (@pxref{Line styles}). Например, слова @samp{Blue} и @samp{red} будут окрашены в соответствующий цвет в строке @samp{#b@{Blue@} and \colorr@{red@} text}. Большинство функций понимает символ новой строки @samp{\n} и позволяет выводить много строчный текст. Наконец, можно использовать символы с произвольным UTF кодом с помощью команды @code{\utf0x????}. Например, @code{\utf0x3b1} даст символ 
+ at ifhtml
+ at html
+&alpha;.
+ at end html
+ at end ifhtml
+ at ifnothtml
+ at math{\alpha}.
+ at end ifnothtml
+
+Распознаются также большинство символов TeX и AMSTeX, команды смены стиля текста (\textrm, \textbf, \textit, \textsc, \overline, \underline), акценты (\hat, \tilde, \dot, \ddot, \acute, \check, \grave, \bar, \breve) и корни (\sqrt, \sqrt3, \sqrt4). Полный список содержит около 2000 символов. Отмечу, что первый пробел (пробел, табуляция и пр.) после команды игнорируется, а все остальные пробелы печатаются обычным образом. Например, следующие строки дают одинаковый результат @math{\tilde a}: @samp{\tilde@{a@}}; @samp{\tilde a}; @samp{\tilde@{@}a}.
+
+ at ifhtml
+ at html
+В частности, распознаются греческие буквы: &alpha; &ndash; \alpha, &beta; &ndash; \beta, &gamma; &ndash; \gamma, &delta; &ndash; \delta, &epsilon; &ndash; \epsilon, &eta; &ndash; \eta, &iota; &ndash; \iota, &chi; &ndash; \chi, &kappa; &ndash; \kappa, &lambda; &ndash; \lambda, &mu; &ndash; \mu, &nu; &ndash; \nu, o &ndash; \o, &omega; &ndash; \omega, &#981; &ndash; \phi, &pi; &ndash; \pi, &psi; &ndash; \psi, &rho; &ndash; \rho, &sigma; &ndash; \sigma, &theta; &ndash; \theta, &tau; &ndash; \tau, &upsilon; &ndash; \upsilon, &xi; &ndash; \xi, &zeta; &ndash; \zeta, &sigmaf; &ndash; \varsigma, &#603; &ndash; \varepsilon, &thetasym; &ndash; \vartheta, &phi; &ndash; \varphi, &#1008; &ndash; \varkappa; A &ndash; \Alpha, B &ndash; \Beta, &Gamma; &ndash; \Gamma, &Delta; &ndash; \Delta, E &ndash; \Epsilon, H &ndash; \Eta, I &ndash; \Iota, C &ndash; \Chi, K &ndash; \Kappa, &Lambda; &ndash; \Lambda, M &ndash; \Mu, N &ndash; \Nu, O &ndash; \O, &Omega; &ndash; \Omega, &Phi; &ndash; \Phi, &Pi; &ndash; \Pi, &Psi; &ndash; \Psi, R &ndash; \Rho, &Sigma; &ndash; \Sigma, &Theta; &ndash; \Theta, T &ndash; \Tau, &Upsilon; &ndash; \Upsilon, &Xi; &ndash; \Xi, Z &ndash; \Zeta.
+
+<p>Еще примеры наиболее общеупотребительных TeX-их символов: &ang; &ndash; \angle, &sdot; &ndash; \cdot, &clubs; &ndash; \clubsuit, &#10003; &ndash; \checkmark, &cup; &ndash; \cup, &cap; &ndash; \cap, &#9826; &ndash; \diamondsuit, &#9671; &ndash; \diamond, &divide;
+ &ndash; \div, 
+&darr; &ndash; \downarrow, &dagger; &ndash; \dag, &Dagger; &ndash; \ddag, &equiv; &ndash; \equiv, &exist; &ndash; \exists, &#8994; &ndash; \frown, &#9837; &ndash; \flat, &ge; &ndash; \ge, &ge; &ndash; \geq, &#8807; &ndash; \geqq, &larr; &ndash; \gets, &#9825; &ndash; \heartsuit, &infin; &ndash; \infty, &int; &ndash; \int, \Int, &image;  &ndash; \Im, &#9826; &ndash; \lozenge, &#10216; &ndash; \langle, &le; &ndash; \le, &le; &ndash; \leq, &#8806; &ndash; \leqq, &larr; &ndash; \leftarrow, &#8723; &ndash; \mp, &nabla; &ndash; \nabla, &ne; &ndash; \ne, &ne; &ndash; \neq, &#9838; &ndash; \natural, &#8750; &ndash; \oint, &#8857; &ndash; \odot, &oplus; &ndash; \oplus, &part; &ndash; \partial, &#8741; &ndash; \parallel, &perp; &ndash;\perp, &plusmn; &ndash; \pm, &prop; &ndash; \propto, &prod; &ndash; \prod, &real; &ndash; \Re, &rarr; &ndash; \rightarrow, &#10217; &ndash; \rangle, &spades; &ndash; \spadesuit, ~ &ndash; \sim, &#8995; &ndash; \smile, &sub;  &ndash; \subset, &sup; &ndash; \supset, &radic; &ndash; \sqrt or \surd, &sect; &ndash; \S, &#9839; &ndash; \sharp, &sum; &ndash; \sum, &times; &ndash; \times, &rarr; &ndash; \to, &there4; &ndash; \therefore, &uarr; &ndash; \uparrow, &weierp; &ndash; \wp. </p>
+ at end html
+ at end ifhtml
+ at ifnothtml
+В частности, распознаются греческие буквы: @math{\alpha} -- \alpha, @math{\beta} -- \beta, @math{\gamma} -- \gamma, @math{\delta} -- \delta, @math{\epsilon} -- \epsilon, @math{\eta} -- \eta, @math{\iota} -- \iota, @math{\chi} -- \chi, @math{\kappa} -- \kappa, @math{\lambda} -- \lambda, @math{\mu} -- \mu, @math{\nu} -- \nu, @math{o} -- \o, @math{\omega} -- \omega, @math{\phi} -- \phi, @math{\pi} -- \pi, @math{\psi} -- \psi, @math{\rho} -- \rho, @math{\sigma} -- \sigma, @math{\theta} -- \theta, @math{\tau} -- \tau, @math{\upsilon} -- \upsilon, @math{\xi} -- \xi, @math{\zeta} -- \zeta, @math{\varsigma} -- \varsigma, @math{\varepsilon} -- \varepsilon, @math{\vartheta} -- \vartheta, @math{\varphi} -- \varphi, A -- \Alpha, B -- \Beta, @math{\Gamma} -- \Gamma, @math{\Delta} -- \Delta, E -- \Epsilon, H -- \Eta, I -- \Iota, C -- \Chi, K -- \Kappa, @math{\Lambda} -- \Lambda, M -- \Mu, N -- \Nu, O -- \O, @math{\Omega} -- \Omega, @math{\Phi} -- \Phi, @math{\Pi} -- \Pi, @math{\Psi} -- \Psi, R -- \Rho, @math{\Sigma} -- \Sigma, @math{\Theta} -- \Theta, T -- \Tau, @math{\Upsilon} -- \Upsilon, @math{\Xi} -- \Xi, Z -- \Zeta.
+
+Еще примеры наиболее общеупотребительных TeX-их символов: @math{\angle} -- \angle, @math{\aleph} -- \aleph, @math{\cdot} -- \cdot, @math{\clubsuit} -- \clubsuit, @math{\cup} -- \cup, @math{\cap} -- \cap, @math{\diamondsuit} -- \diamondsuit, @math{\diamond} -- \diamond, @math{\div} -- \div, @math{\downarrow} -- \downarrow, @math{\dag} -- \dag, @math{\ddag} -- \ddag, @math{\equiv} -- \equiv, @math{\exists} -- \exists, @math{\frown} -- \frown, @math{\flat} -- \flat, @math{\ge} -- \ge, @math{\geq} -- \geq, @math{\gets} -- \gets, @math{\heartsuit} -- \heartsuit, @math{\infty} -- \infty, @math{\in} -- \in, @math{\int} -- \int, @math{\Im} -- \Im, @math{\langle} -- \langle, @math{\le} -- \le, @math{\leq} -- \leq, @math{\leftarrow} -- \leftarrow, @math{\mp} -- \mp, @math{\nabla} -- \nabla, @math{\ne} -- \ne, @math{\neq} -- \neq, @math{\natural} -- \natural, @math{\oint} -- \oint, @math{\odot} -- \odot, @math{\oplus} -- \oplus, @math{\partial} -- \partial, @math{\parallel} -- \parallel, @math{\perp} -- \perp, @math{\pm} -- \pm, @math{\propto} -- \propto, @math{\prod} -- \prod, @math{\Re} -- \Re, @math{\rightarrow} -- \rightarrow, @math{\rangle} -- \rangle, @math{\spadesuit} -- \spadesuit, @math{\sim} -- \sim, @math{\smile} -- \smile, @math{\subset} -- \subset, @math{\supset} -- \supset, @math{\surd} -- \sqrt or \surd, @math{\S} -- \S, @math{\sharp} -- \sharp, @math{\sum} -- \sum, @math{\times} -- \times, @math{\to} -- \to, @math{\uparrow} -- \uparrow, @math{\wp} -- \wp and so on. 
+ at end ifnothtml
+
+Размер текста может быть задан явно (если @var{size}>0) или относительно базового размера шрифта для рисунка |@var{size}|*@var{FontSize} при @var{size}<0. Значение @var{size}=0 указывает, что соответствующая строка выводиться не будет. Базовый размер шрифта измеряется во внутренних единицах. Специальные функции @code{SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()} позволяют задавать его в более ``привычных'' единицах.
+
+ at node Textual formulas, , Font styles, General concepts
+ at subsection Текстовые формулы
+
+ at cindex Текстовые формулы
+
+MathGL имеет быстрый парсер текстовых формул
+ at ifclear UDAV
+ (@pxref{mglFormula class})
+ at end ifclear
+, понимающий большое число функций и операций. Базовые операции: @samp{+} -- сложение, @samp{-} -- вычитание, @samp{*} -- умножение, @samp{/} -- деление, @samp{^} -- возведение в целосичленную степень. Также есть логические операции: @samp{<} -- истина если if x<y, @samp{>} -- истина если x>y, @samp{=} -- истина если x=y, @samp{&} -- истина если x и y оба не равны нулю, @samp{|} -- истина если x или y не нуль. Логические операции имеют наинизший приоритет и возвращают 1 если истина или 0 если ложно.
+
+Базовые функции: @samp{sqrt(x)} -- квадратный корень из @var{x}, @samp{pow(x,y)} -- @var{x} в степени @var{y}, @samp{ln(x)} -- натуральный логарифм @var{x}, @samp{lg(x)} -- десятичный логарифм @var{x}, @samp{log(a,x)} -- логарифм по основанию @var{a} от @var{x}, @samp{abs(x)} -- модуль @var{x}, @samp{sign(x)} -- знак @var{x}, @samp{mod(x,y)} -- остаток от деления x на y, @samp{step(x)} -- ступенчатая функция, @samp{int(x)} -- целая часть @var{x}, @samp{rnd} -- случайное число, @samp{pi} -- число 
+ at ifhtml
+ at html
+&pi; = 3.1415926&hellip;
+ at end html
+ at end ifhtml
+ at ifnothtml
+ at math{\pi=3.1415926...}
+ at end ifnothtml
+
+Тригонометрические функции: @samp{sin(x)}, @samp{cos(x)}, @samp{tan(x)} (или @samp{tg(x)}). Обратные тригонометрические функции: @samp{asin(x)}, @samp{acos(x)}, @samp{atan(x)}. Гиперболические функции: @samp{sinh(x)} (или @samp{sh(x)}), @samp{cosh(x)} (или @samp{ch(x)}), @samp{tanh(x)} (или @samp{th(x)}). Обратные гиперболические функции: @samp{asinh(x)}, @samp{acosh(x)}, @samp{atanh(x)}.
+
+ at ifhtml
+ at html
+<p>Специальные функции: &lsquo;<samp>gamma(x)</samp>&rsquo; &ndash; гамма функция &Gamma;(x) = &int;<sub>0</sub><sup>&infin;</sup> t<sup>x-1</sup> exp(-t) dt, &lsquo;<samp>psi(x)</samp>&rsquo; &ndash; дигамма функция &psi;(x) = &Gamma;&prime;(x)/&Gamma;(x) для x&ne;0, &lsquo;<samp>ai(x)</samp>&rsquo; &ndash; Эйри функция Ai(x), &lsquo;<samp>bi(x)</samp>&rsquo; &ndash; Эйри функция Bi(x), &lsquo;<samp>cl(x)</samp>&rsquo; &ndash; функция Клаузена, &lsquo;<samp>li2(x)</samp>&rsquo; (или &lsquo;<samp>dilog(x)</samp>&rsquo;) &ndash; дилогарифм Li<sub>2</sub>(x) = -&real;&int;<sub>0</sub><sup>x</sup>ds log(1-s)/s, &lsquo;<samp>sinc(x)</samp>&rsquo; &ndash; функция sinc(x) = sin(&pi;x)/(&pi;x) для любых x, &lsquo;<samp>zeta(x)</samp>&rsquo; &ndash; зета функция Римана &zeta;(s) = &sum;<sub>k=1</sub><sup>&infin;</sup>k<sup>-s</sup> для s&ne;1, &lsquo;<samp>eta(x)</samp>&rsquo; &ndash; эта функция &eta;(s) = (1 - 2<sup>1-s</sup>)&zeta;(s) для произвольного s, &lsquo;<samp>lp(l,x)</samp>&rsquo; &ndash; полином Лежандра P<sub>l</sub>(x), (|x|&le;1, l&ge;0), &lsquo;<samp>w0(x)</samp>&rsquo;, &lsquo;<samp>w1(x)</samp>&rsquo; &ndash; функции Ламберта W. Функции W(x) определены как решение уравнения: W exp(W) = x. </p>
+
+<p>Экспоненциальные интегралы: &lsquo;<samp>ci(x)</samp>&rsquo; &ndash; cos-интеграл Ci(x) = &int;<sub>0</sub><sup>x</sup>dt cos(t)/t, &lsquo;<samp>si(x)</samp>&rsquo; &ndash; sin-интеграл Si(x) = &int;<sub>0</sub><sup>x</sup>dt sin(t)/t, &lsquo;<samp>erf(x)</samp>&rsquo; &ndash; функция ошибки erf(x) = (2/&radic;&pi;) &int;<sub>0</sub><sup>x</sup>dt exp(-t<sup>2</sup>) , &lsquo;<samp>ei(x)</samp>&rsquo; &ndash; интеграл Ei(x) = -PV(&int;<sub>-x</sub><sup>&infin;</sup>dt exp(-t)/t) (где PV обозначает главное значение), &lsquo;<samp>e1(x)</samp>&rsquo; &ndash; интеграл E<sub>1</sub>(x) = &real;&int;<sub>1</sub><sup>&infin;</sup>dt exp(-xt)/t, &lsquo;<samp>e2(x)</samp>&rsquo; &ndash; интеграл E<sub>2</sub>(x) = &real;&int;<sub>1</sub>&infin;</sup>dt exp(-xt)/t<sup>2</sup>, &lsquo;<samp>ei3(x)</samp>&rsquo; &ndash; интеграл Ei<sub>3</sub>(x) = &int;<sub>0</sub><sup>x</sup>dt exp(-t<sup>3</sup>) для x&ge;0. </p>
+
+<p>Функции Бесселя: &lsquo;<samp>j(nu,x)</samp>&rsquo; &ndash; функция Бесселя первого рода, &lsquo;<samp>y(nu,x)</samp>&rsquo; &ndash; функция Бесселя второго рода, &lsquo;<samp>i(nu,x)</samp>&rsquo; &ndash; модифицированная функция Бесселя первого рода, &lsquo;<samp>k(nu,x)</samp>&rsquo; &ndash; модифицированная функция Бесселя второго рода. </p>
+
+<p>Эллиптические интегралы: &lsquo;<samp>ee(k)</samp>&rsquo; &ndash; полный эллиптический интеграл E(k) = E(&pi;/2,k), &lsquo;<samp>ek(k)</samp>&rsquo; &ndash; полный эллиптический интеграл K(k) = F(&pi;/2,k), &lsquo;<samp>e(phi,k)</samp>&rsquo; &ndash; эллиптический интеграл E(&phi;,k) = &int;<sub>0</sub><sup>&phi;</sup>dt &radic;(1 - k<sup>2</sup>sin<sup>2</sup>(t)), &lsquo;<samp>f(phi,k)</samp>&rsquo; &ndash; эллиптический интеграл F(&phi;,k) = &int;<sub>0</sub><sup>&phi;</sup>dt 1/&radic;(1 - k<sup>2</sup>sin<sup>2</sup>(t))</p>
+ at end html
+ at end ifhtml
+ at ifnothtml
+Специальные функции: @samp{gamma(x)} -- гамма функция @math{\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)} , @samp{psi(x)} -- дигамма функция @math{\psi(x) = \Gamma</samp>&rsquo;(x)/\Gamma(x)} для x!=0, @samp{ai(x)} -- Эйри функция Ai(x), @samp{bi(x)} -- Эйри функция Bi(x), @samp{cl(x)} -- функция Клаузена, @samp{li2(x)} (или @samp{dilog(x)}) -- дилогарифм @math{Li_2(x) = - \Re \int_0^x ds \log(1-s)/s}, @samp{sinc(x)} -- функция @math{sinc(x) = \sin(\pi x) / (\pi x)} для любых x, @samp{zeta(x)} -- зета функция Римана @math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}} для s!=1, @samp{eta(x)} -- эта функция @math{\eta(s) = (1-2^@{1-s@}) \zeta(s)} для произвольного s, @samp{lp(l,x)} -- полином Лежандра @math{P_l(x)}, (|x|<=1, l>=0), @samp{w0(x)}, @samp{w1(x)} -- функции Ламберта @var{W}. Функции W(x) определены как решение уравнения @math{W \exp(W) = x}.
+
+Экспоненциальные интегралы: @samp{ci(x)} -- cos-интеграл @math{Ci(x) = \int_0^x dt \cos(t)/t}, @samp{si(x)} -- sin-интеграл @math{Si(x) = \int_0^x dt \sin(t)/t}, @samp{erf(x)} -- функция ошибки @math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}, @samp{ei(x)} -- интеграл @math{Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)} (где PV обозначает главное значение), @samp{e1(x)} -- интеграл @math{E_1(x) := Re \int_1^\infty dt \exp(-xt)/t} , @samp{e2(x)} -- интеграл @math{E_2(x) := Re \int_1^\infty dt \exp(-xt)/t^2}, @samp{ei3(x)} -- интеграл @math{Ei_3(x) = \int_0^x dt \exp(-t^3)} для x>=0.
+
+Функции Бесселя: @samp{j(nu,x)} -- функция Бесселя первого рода, @samp{y(nu,x)} -- функция Бесселя второго рода, @samp{i(nu,x)} -- модифицированная функция Бесселя первого рода, @samp{k(nu,x)} -- модифицированная функция Бесселя второго рода.
+
+Эллиптические интегралы: @samp{ee(k)} -- полный эллиптический интеграл @math{E(k) = E(\pi/2, k)}, @samp{ek(k)} -- полный эллиптический интеграл @math{K(k) = F(\pi/2, k)}, @samp{e(phi,k)} -- эллиптический интеграл @math{E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))}, @samp{f(phi,k)} -- эллиптический интеграл @math{F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))}.
+ at end ifnothtml
+
+Функции Якоби: @samp{sn(u,m)}, @samp{cn(u,m)}, @samp{dn(u,m)}, @samp{sc(u,m)}, @samp{sd(u,m)}, @samp{ns(u,m)}, @samp{cs(u,m)}, @samp{cd(u,m)}, @samp{nc(u,m)}, @samp{ds(u,m)}, @samp{dc(u,m)}, @samp{nd(u,m)}.
+
+Некоторые из функций могут быть недоступны если флаг NO_GSL был определен при компиляции библиотеки MathGL. 
+
+При разборе формул нет различия между верхним и нижним регистром. Если аргумент лежит вне области определения функции, то возвращается NaN.
+
diff --git a/texinfo/core_en.texi b/texinfo/core_en.texi
index 4a3526b..0103d78 100644
--- a/texinfo/core_en.texi
+++ b/texinfo/core_en.texi
@@ -1,5 +1,4 @@
 @c ------------------------------------------------------------------
- at node MathGL core, Plotter classes, Examples, Top
 @chapter MathGL core
 @cindex mglGraph
 
@@ -82,7 +81,7 @@ Flag which temporary switches transparency on/off for the plot. This is the same
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetTranspType (@code{int} type)
 @deftypefnx {C function} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} enable)
-Set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{SetAlphaDef(0.3)} or less for lamp-like transparency.
+Set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{SetAlphaDef(0.3)} or less for lamp-like transparency. @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}.
 @end deftypefn
 
 @deftypecv {@emph{Obsolete option}} mglGraph @code{float} AlphaDef
@@ -237,7 +236,7 @@ Flag which determines how points outside bounding box are drawn. If it is @code{
 @end deftypefn
 
 @float
- at image{png_static/cut, 7cm}
+ at image{cut, 7cm}
 @caption{Left figure is drawn with parameter @code{Cut=false}. Right one is drawn with parameter @code{Cut=true}.}
 @end float
 
@@ -377,8 +376,9 @@ Number of actual colors in palette. See @code{SetPalette()}.
 @subsection Error handling
 
 @cindex Message
- at cindex WarnCode
+ at c @cindex WarnCode
 @cindex SetWarn
+ at cindex GetWarnCode
 
 There are 2 variables which indicate the warnings/errors presence during plot creation. Normally user should set it to zero by @code{SetWarn(0);} before plotting and check if @var{WarnCode} is not zero after plotting. Only last warning will be saved. All warnings/errors produced by MathGL is not critical -- the plot just will not be drawn.
 
@@ -390,8 +390,9 @@ Set warning code and corresponding message from function @var{who}. Normally you
 Pointer to buffer for writing messages about matters why some plot are not drawn. Set to NULL to disable messages. The buffer length must be at least 1024. If Message[0]==0 then there are no messages
 @end deftypecv
 
- at deftypecv {General option (C++)} mglGraph @code{int} WarnCode
-Numerical ID of warning about the not drawn plot. Possible values are:
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{int} GetWarnCode ()
+ at deftypefnx {C function} @code{int} mgl_get_warn_code (@code{HMGL} gr)
+Return the numerical ID of warning about the not drawn plot. Possible values are:
 @table @code
 @item mglWarnNone=0
 Everything OK
@@ -424,6 +425,10 @@ Setsize: size(s) is zero or negative
 @item mglWarnFmt
 Format is not supported for that build
 @end table
+ at end deftypefn
+
+ at deftypecv {Obsolete option} mglGraph @code{int} WarnCode
+Numerical ID of warning about the not drawn plot.
 @end deftypecv
 
 @c ==================================================================
@@ -577,7 +582,7 @@ Flag for automatic shifting of axes origin @var{Org} if it lies out of range @va
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""})
 @deftypefnx {C function} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ)
 @deftypefnx {C function} @code{void} mgl_set_func_ext (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA)
-Sets transformation formulas for curvilinear coordinate. Each string should contain mathematical expression for real coordinate depending on internal coordinates x, y, z. For example, the cylindrical coordinates are introduced as @code{Axis("x*cos(y)", "x*sin(y)", "z");}. For removing of formulas the corresponding parameter should be empty or @code{NULL}. Using transformation formulas will slightly slowing the program. Parameter @var{EqA} set the similar transformation formula for color scheme. @xref{mglFormula class}.
+Sets transformation formulas for curvilinear coordinate. Each string should contain mathematical expression for real coordinate depending on internal coordinates @samp{x}, @samp{y}, @samp{z} and @samp{a} or @samp{c} for colorbar. For example, the cylindrical coordinates are introduced as @code{Axis("x*cos(y)", "x*sin(y)", "z");}. For removing of formulas the corresponding parameter should be empty or @code{NULL}. Using transformation formulas will slightly slowing the program. Parameter @var{EqA} set the similar transformation formula for color scheme. @xref{Textual formulas}.
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetCoor (@code{int} how)
@@ -683,6 +688,8 @@ The position of common multiplier/component on the axis. See @code{SetTuneTicks(
 @cindex RestoreM
 @cindex View
 @cindex ColumnPlot
+ at cindex Push
+ at cindex Pop
 
 These functions control how and where further plotting will be placed. There is a curtain order of calling of these functions for the better plot view. First one should be SubPlot() or InPlot() for specifying the place. After it a Rotate() and Aspect(). And finally any other plotting functions may be called. Alternatevely you can use ColumnPlot() for position plots in the column one by another without gap between plot axis (bounding boxes).
 
@@ -692,15 +699,21 @@ These functions control how and where further plotting will be placed. There is
 Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. This function set off any aspects or rotations. So it should be used first for creating the subplot. From the aesthetical point of view it is not recommended to use this function with different matrices in the same frame. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}.
 @end deftypefn
 
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style)
+ at deftypefnx {C function} @code{void} mgl_subplot_s (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style)
+The same as previous but space reserved for axis/colorbar is saved only if @var{style} contain: @samp{L} or @samp{<} -- at left side, @samp{R} or @samp{>} -- at right side, @samp{A} or @samp{^} -- at top side, @samp{U} or @samp{_} -- at bottom side.
+ at end deftypefn
+
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} InPlot (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{bool} rel=@code{false})
 @deftypefnx {C function} @code{void} mgl_inplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2)
 @deftypefnx {C function} @code{void} mgl_relplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2)
 Puts further plotting in some region of the whole frame surface. This function allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{true} then the relative position to current SubPlot() (or last InPlot() with @var{rel}=@code{false}) is used. This function set off any aspects or rotations. So it should be used first for creating subplot.
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ColumnPlot (@code{int} num, @code{int} ind)
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{float} d=@code{0})
 @deftypefnx {C function} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind)
-Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous SubPlot() call (or InPlot() with @var{rel}=@code{false}). @sref{ColumnPlot sample}
+ at deftypefnx {C function} @code{void} mgl_columnplot_d (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} d)
+Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous SubPlot() call (or InPlot() with @var{rel}=@code{false}). Parameter @var{d} set extra gap between cells. @sref{ColumnPlot sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{float} tet, @code{float} phi)
@@ -733,10 +746,15 @@ Add (switch on) the perspective to plot. The parameter @math{a ~ 1/z_@{eff@} \in
 Clears transformation matrix. This function clears all previous effects of Aspect(), SubPlot(), InPlot() or Rotate() functions. It is equivalent to the call of @code{InPlot(0,1,0,1,rel)}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} RestoreM ()
-Restore transformation matrix after last @code{InPlot()}. This function clears all previous effects of Aspect(), SubPlot(), InPlot() or Rotate() functions. It is useful to restore back the transformation matrix after @code{Identity()} call.
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Push ()
+ at deftypefnx {C function} @code{void} mgl_mat_push (@code{HMGL} gr)
+Push transformation matrix into stack. Later you can restore its current state by Pop() function. Stack can keep up to 10 matrices.
 @end deftypefn
 
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Pop ()
+ at deftypefnx {C function} @code{void} mgl_mat_pop (@code{HMGL} gr)
+Pop (restore last 'pushed') transformation matrix into stack.
+ at end deftypefn
 
 @c ##################################################################
 @node Export to file, Primitives drawing, Transformation matrix, MathGL core
@@ -784,12 +802,12 @@ Exports current frame to BMP file. Parameter @var{fname} specifies the file name
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} WriteEPS (@code{const char *}fname, @code{const char *}descr=@code{""})
 @deftypefnx {C function} @code{void} mgl_write_eps (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-Exports current frame to EPS file. The vector representation is used if possible. So it is not recommended for the export of large data plot. It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. By default there is no description added.
+Exports current frame to EPS file. The vector representation is used if possible. So it is not recommended for the export of large data plot. It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. By default there is no description added. If file name is terminated by @samp{z} (for example, @samp{fname.eps.gz}) then file will be compressed in gzip format.
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} WriteSVG (@code{const char *}fname, @code{const char *}descr=@code{""})
 @deftypefnx {C function} @code{void} mgl_write_svg (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-Exports current frame to SVG (Scalable Vector Graphics) file. The vector representation is used. In difference of EPS format, SVG format support transparency that allows to correctly draw half-transparent plot (like SurfA(), Surf3A(), CloudQ() or CloudP()). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name).
+Exports current frame to SVG (Scalable Vector Graphics) file. The vector representation is used. In difference of EPS format, SVG format support transparency that allows to correctly draw half-transparent plot (like SurfA(), Surf3A(), CloudQ() or CloudP()). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). If file name is terminated by @samp{z} (for example, @samp{fname.svgz}) then file will be compressed in gzip format.
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} WriteIDTF (@code{const char *}fname, @code{const char *}descr=@code{""})
@@ -918,9 +936,9 @@ Draw a set of triangles (or lines if @var{trig}=@code{NULL}) for glyph which is
 @cindex Text
 @cindex Title
 
-These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. The class mglFont (@pxref{mglFont class}) is used for low-level string parsing and printing. It can use arbitrary font-faces and parse many TeX commands (for detail @pxref{mglFont class}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion in current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The size argument control the size of text: if positive it give the value, if negative it give the value relative to @var{FontSize}. The font type (STIX, arial, courier, times and so on) can be selected by function SetFont(), GetFont(). @xref{Font settings}.
+These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. The class mglFont (@pxref{mglFont class}) is used for low-level string parsing and printing. It can use arbitrary font-faces and parse many TeX commands (for detail @pxref{Font styles}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion in current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The size argument control the size of text: if positive it give the value, if negative it give the value relative to @var{FontSize}. The font type (STIX, arial, courier, times and so on) can be selected by function SetFont(), GetFont(). @xref{Font settings}.
 
-The font parameters are described by string. This string may contain several characters of font type (@samp{rbiwou}) and/or align (@samp{LRC}) specification. Also it may contain the text color @samp{wkrgbcymhRGBCYMHW} (@pxref{mglColor class}) after symbol @samp{:}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style, @samp{w} -- wired style, @samp{o} -- over-lined text, @samp{u} -- underlined text. By default roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. For example, string @samp{iC:b} correspond to italic font style for centered text which printed by blue color.
+The font parameters are described by string. This string may contain several characters of font type (@samp{rbiwou}) and/or align (@samp{LRC}) specification. Also it may contain the text color @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) after symbol @samp{:}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style, @samp{w} -- wired style, @samp{o} -- over-lined text, @samp{u} -- underlined text. By default roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. For example, string @samp{iC:b} correspond to italic font style for centered text which printed by blue color.
 
 If string contains symbols @samp{aA} then text is printed at arbitrary position @{@var{x}, @var{y}@} (supposed to be in range [0,1]) of subplot (for @samp{a}) or picture (for @samp{A}).
 
@@ -975,7 +993,7 @@ Print string @var{text} as title of the picture (at the top of the picture). Can
 @deftypefnx {C function} @code{void} mgl_text_y (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}text, @code{const char *}font, float size)
 @deftypefnx {C function} @code{void} mgl_text_xy (@code{const HMDT} x, @code{const HMDT} y, @code{const char *}text, @code{const char *}font, float size)
 @deftypefnx {C function} @code{void} mgl_text_xyz (@code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}text, @code{const char *}font, float size)
-The function draws @var{text} along the curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} by font style @var{font} and with size @var{size}. The string @var{font} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{x.nx=y.nx=z.nx}. If array @var{x} is not specified then its an automatic array is used with values equidistantly distributed in interval [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). If array @var{z} is not specified then @var{z}[i] = @var{zVal} is used. @sref{Text sample}
+The function draws @var{text} along the curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} by font style @var{font} and with size @var{size}. The string @var{font} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @code{x.nx=y.nx=z.nx}. If array @var{x} is not specified then its an automatic array is used with values equidistantly distributed in interval [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). If array @var{z} is not specified then @var{z}[i] = @var{zVal} is used. @sref{Text sample}
 @end deftypefn
 
 @c ##################################################################
@@ -991,23 +1009,27 @@ These functions draw the ``things for measuring'', like axis with ticks, colorba
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Axis (@code{const char *}dir=@code{"xyz"}, @code{bool} adjust=@code{false})
 @deftypefnx {C function} @code{void} mgl_axis (@code{HMGL} gr, @code{const char *}dir)
-Draws axes with ticks (@pxref{Axis settings}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by @var{FontDef} (@pxref{Font settings}). Ticks will be adjusted if @var{adjust}=@code{true} (by call of @code{AdjustTicks()}). 
+Draws axes with ticks (@pxref{Axis settings}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by @var{FontDef} (@pxref{Font settings}). Ticks will be adjusted if @var{adjust}=@code{true} (by call of @code{AdjustTicks()}). You may specified an arrow at the end of axis (see @pxref{Line styles})
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch=@code{""}, @code{int} where=@code{0})
 @deftypefnx {C function} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch, @code{int} where)
-Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=""}) at edge of plot. Parameter @var{where} specifies the position of the colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample}
+Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=""}) at edge of plot. Parameter @var{where} specifies the position of the colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. If string @var{sch} contains @samp{<>^_} then the parameter @var{pos} is defined as: @code{pos=0} for @samp{>} (right), @code{pos=1} for @samp{<} (left), @code{pos=2} for @samp{^} (top), @code{pos=3} for @samp{_} (bottom). If string have @samp{A} then absolute (relative to picture) coordinates is used. @sref{Dens sample}
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} where=@code{0})
+ at deftypefnx {C function} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}sch, @code{int} where)
+The same as previous but with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v}. @sref{ContD sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
- at deftypefnx {Method on @code{mglGraph} (C++)} @code{void} Colorbar (@code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
+ at deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
 @deftypefnx {C function} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
-Draws colorbar with color scheme @var{sch} (current scheme if not specified) at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameter @var{where} specifies the position of colorbar labels: @samp{0} - at left, @samp{1} - at right, @samp{2} - at bottom, @samp{3} - at top. Parameters @var{w}, @var{h} set the relative width and height of the colorbar.
+The same as first one but at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameters @var{w}, @var{h} set the relative width and height of the colorbar.
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} where=@code{0})
- at deftypefnx {C function} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}sch, @code{int} where)
-Draws colorbar with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v} at edge of plot. Parameter @var{where} specifies the position of the colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{ContD sample}
+ at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
+The same as previous but with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v}. @sref{ContD sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B-"})
@@ -1023,8 +1045,8 @@ Draws grid lines perpendicular to direction determined by string parameter @var{
 Draws bounding box outside the plotting volume with color @var{col}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Label (@code{char} dir, @code{const char *}text, @code{float} pos=@code{+1}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0})
- at deftypefnx {Method on @code{mglGraph} (C++)} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{float} pos=@code{+1}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0})
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Label (@code{char} dir, @code{const char *}text, @code{float} pos=@code{0}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0})
+ at deftypefnx {Method on @code{mglGraph} (C++)} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{float} pos=@code{0}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0})
 @deftypefnx {C function} @code{void} mgl_label (@code{HMGL} gr, @code{char} dir, @code{const char *}text)
 @deftypefnx {C function} @code{void} mgl_label_ext (@code{HMGL} gr, @code{char} dir, @code{const char *}text, @code{float} pos, @code{float} size, @code{float} shift)
 @deftypefnx {C function} @code{void} mgl_labelw_ext (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}text, @code{float} pos, @code{float} size, @code{float} shift)
@@ -1037,8 +1059,10 @@ Prints the label @var{text} for axis @var{dir}=@samp{x}, at samp{y}, at samp{z}, at samp{
 @cindex Legend
 @cindex AddLegend
 @cindex ClearLegend
+ at cindex SetLegendBox
+ at cindex SetLegendMarks
 
-These functions draw legend to the graph (useful for @ref{1D plotting}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included TeX parsing). The arrays of strings may be used directly or by accumulating first to the internal arrays (by function AddLegend()) and further plotting it. The position of the legend can be selected automatic or manually. Parameters @var{font} and @var{size} specify the font style and size (@pxref{Font settings}). Parameter @var{llen} set the relative width of the line sample and the text indent. If line style string for entry is empty then the corresponding text is printed without indent. @sref{Legend sample}
+These functions draw legend to the graph (useful for @ref{1D plotting}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included TeX parsing). The arrays of strings may be used directly or by accumulating first to the internal arrays (by function AddLegend()) and further plotting it. The position of the legend can be selected automatic or manually. Parameters @var{font} and @var{size} specify the font style and size (@pxref{Font settings}). Parameter @var{llen} set the relative width of the line sample and the text indent. If line style string for entry is empty then the corresponding text is printed without indent. If string @var{font} contains symbol @samp{A} then legend coordinates set position in the picture (not in the current subplot). @sref{Legend sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Legend (@code{int} where=@code{0x3}, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1})
 @deftypefnx {C function} @code{void} mgl_legend (@code{HMGL} gr, @code{int} where, @code{const char *}font, @code{float} size, @code{float} llen)
@@ -1075,6 +1099,11 @@ Clears saved legend strings.
 Switch on/off drawing box near legend. By default (=@code{true}) box is drawn.
 @end deftypefn
 
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetLegendMarks (@code{int} num)
+ at deftypefnx {C function} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num)
+Set the number of marks in the legend. By default 1 mark is used.
+ at end deftypefn
+
 @deftypecv {@emph{Obsolete option}} mglGraph @code{bool} LegendBox
 Switch on/off drawing box near legend. See @code{SetLegendBox()}.
 @end deftypecv
@@ -1083,7 +1112,7 @@ Switch on/off drawing box near legend. See @code{SetLegendBox()}.
 @node 1D plotting, 2D plotting, Legend, MathGL core
 @section 1D plotting
 
-These functions perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot (Plot), line plot with filling under it (Area), stairs plot (Step), bar plot (Bars, Barh) and vertical lines (Stem). Each type of plotting has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is "" then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}.
+These functions perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot (Plot), line plot with filling under it (Area), stairs plot (Step), bar plot (Bars, Barh) and vertical lines (Stem). Each type of plotting has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is "" then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}. @sref{1D plot sample}
 
 
 @menu
@@ -1110,7 +1139,7 @@ These functions perform plotting of 1D data. 1D means that data depended from on
 @subsection Plot
 @cindex Plot
 
-These functions draw continuous lines between points. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample}
+These functions draw continuous lines between points. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
@@ -1127,13 +1156,6 @@ The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in
 The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x].
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Plot2 (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN})
-The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}=@var{a}(2*k,:), @var{y}=@var{a}(2*k+1,:), k \in 0 ... @var{a.ny}/2. This function is obsolete -- use Plot() and SubData() functions instead.
- at end deftypefn
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Plot3 (@code{const mglData &}a, @code{const char *}pen=@code{""})
-The function draws continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} in 3D space, where @var{x}=@var{a}(3*k,:), @var{y}=@var{a}(3*k+1,:), @var{z}=@var{a}(3*k+2,:), k \in 0 ... @var{a.ny}/3. This function is obsolete -- use Plot() and SubData() functions instead.
- at end deftypefn
-
 @c ==================================================================
 @node Radar, Tens, Plot, 1D plotting
 @subsection Radar
@@ -1149,7 +1171,7 @@ This functions draws radar chart which is continuous lines between points locate
 @subsection Tens
 @cindex Tens
 
-These functions draw continuous lines between points with color defined by the special array (look like tension plot). The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color scheme (@pxref{Color scheme}) and style and/or width of line (@pxref{Line styles}). By default (@code{pen=""}) solid line with current color scheme is used. See also @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample}
+These functions draw continuous lines between points with color defined by the special array (look like tension plot). The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color scheme (@pxref{Color scheme}) and style and/or width of line (@pxref{Line styles}). By default (@code{pen=""}) solid line with current color scheme is used. See also @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}pen)
@@ -1171,30 +1193,21 @@ The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in
 @subsection Area
 @cindex Area
 
-These functions draw continuous lines between points and fills it to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample}
+These functions draw continuous lines between points and fills it to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). Also you can use gradient filling if number of specified colors is equal to 2*number of curves. If string contain symbol @samp{a} then lines are drawn one above another (like summation) -- you can reach the same effect if call @code{y.CumSum("y");} before plot. See also @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
 The function draws continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} in 3D space and fills it down to @var{z} = Org.z.
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false})
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_area_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
- at deftypefnx {C function} @code{void} mgl_area_xys (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
-The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y. Parameter @var{sum} set to draw a lines one above another (like summation). Note, you can reach the same effect if call @code{y.CumSum("y");} before plot.
+The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y.
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false})
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_area (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen)
- at deftypefnx {C function} @code{void} mgl_area_s (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen)
-The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y, where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x]. Parameter @var{sum} set to draw a lines one above another (like summation). Note, you can reach the same effect if call @code{y.CumSum("y");} before plot.
- at end deftypefn
-
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Area2 (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN})
-The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y, where @var{x}=@var{a}(2*k,:), @var{y}=@var{a}(2*k+1,:), k \in 0 ... @var{a.ny}/2. This function is obsolete -- use Area() and SubData() functions instead.
- at end deftypefn
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Area3 (@code{const mglData &}a, @code{const char *}pen=@code{""})
-The function draws continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} in 3D space and fills it down to @var{z} = Org.z, where @var{x}=@var{a}(3*k,:), @var{y}=@var{a}(3*k+1,:), @var{z}=@var{a}(3*k+2,:), k \in 0 ... @var{a.ny}/3. This function is obsolete -- use Area() and SubData() functions instead.
+The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y, where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x].
 @end deftypefn
 
 @c ==================================================================
@@ -1202,11 +1215,11 @@ The function draws continuous lines between points @{@var{x}[i], @var{y}[i], @va
 @subsection Region
 @cindex Region
 
-These functions fill area between 2 curves. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y1.nx=y2.nx} and all dimensions of arrays @var{y1} and @var{y2} must be equal too. String @var{pen} specifies the color (@pxref{Line styles}). By default (@code{pen=""}) color from palette is used (@pxref{Palette and colors}). See also @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample}
+These functions fill area between 2 curves. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y1.nx=y2.nx} and all dimensions of arrays @var{y1} and @var{y2} must be equal too. String @var{pen} specifies the color (@pxref{Line styles}). By default (@code{pen=""}) color from palette is used (@pxref{Palette and colors}). Also you can use gradient filling if number of specified colors is equal to 2*number of curves. See also @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Region (@code{const mglData &}x, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true})
 @deftypefnx {C function} @code{void} mgl_region_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y1, @code{const HMDT} y2, @code{const char *}pen, @code{int} inside)
-The function fills area between curves @{@var{x}[i], @var{y1}[i]@} and @{@var{x}[i], @var{y2}[i]@} at z=@var{zVal}.
+The function fills area between curves @{@var{x}[i], @var{y1}[i]@} and @{@var{x}[i], @var{y2}[i]@} at z=@var{zVal}. Parameter @code{inside=false} set to fill are with y1<y<y2 else the area with y2<y<y1 will be also filled.
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Region (@code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true})
@@ -1219,7 +1232,7 @@ The function fills area between curves @{@var{x}[i], @var{y1}[i]@} and @{@var{x}
 @subsection Stem
 @cindex Stem
 
-These functions draw vertical lines from points to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Area}, @ref{Bars}, @ref{Plot}. @sref{Stem sample}
+These functions draw vertical lines from points to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Area}, @ref{Bars}, @ref{Plot}, @ref{Mark}. @sref{Stem sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Stem (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_stem_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
@@ -1236,19 +1249,12 @@ The function draws vertical lines from points @{@var{x}[i], @var{y}[i]@} down to
 The function draws vertical lines from points @{@var{x}[i], @var{y}[i]@} down to @var{y} = Org.y in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x].
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Stem2 (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN})
-The function draws vertical lines from points @{@var{x}[i], @var{y}[i]@} down to @var{y} = Org.y in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}=@var{a}(2*k,:), @var{y}=@var{a}(2*k+1,:), k \in 0 ... @var{a.ny}/2. This function is obsolete -- use Stem() and SubData() functions instead.
- at end deftypefn
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Stem3 (@code{const mglData &}a, @code{const char *}pen=@code{""})
-The function draws vertical lines from points @{@var{x}[i], @var{y}[i], @var{z}[i]@} down to @var{z} = Org.z, where @var{x}=@var{a}(3*k,:), @var{y}=@var{a}(3*k+1,:), @var{z}=@var{a}(3*k+2,:), k \in 0 ... @var{a.ny}/3. This function is obsolete -- use Stem() and SubData() functions instead.
- at end deftypefn
-
 @c ==================================================================
 @node Bars, Barh, Stem, 1D plotting
 @subsection Bars
 @cindex Bars
 
-These functions draw vertical bars from points to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Barh}, @ref{Area}, @ref{Stem}, @ref{Chart}, @ref{Default sizes}. @sref{Bars sample}
+These functions draw vertical bars from points to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If string contain symbol @samp{a} then lines are drawn one above another (like summation). If string contain symbol @samp{f} then waterfall chart is drawn for determining the cumulative effect of sequentially introduced positive or negative values. You can different colors for positive and negative values if number of specified colors is equal to 2*number of curves. See also @ref{Barh}, @ref{Area}, @ref{Stem}, @ref{Chart}, @ref{Default sizes}. @sref{Bars sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Bars (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_bars_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
@@ -1265,19 +1271,12 @@ The function draws vertical bars from points @{@var{x}[i], @var{y}[i]@} down to
 The function draws vertical bars from points @{@var{x}[i], @var{y}[i]@} down to @var{y} = Org.y in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x].
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Bars2 (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN})
-The function draws vertical bars from points @{@var{x}[i], @var{y}[i]@} down to @var{y} = Org.y in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}=@var{a}(2*k,:), @var{y}=@var{a}(2*k+1,:), k \in 0 ... @var{a.ny}/2. This function is obsolete -- use Bars() and SubData() functions instead.
- at end deftypefn
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Bars3 (@code{const mglData &}a, @code{const char *}pen=@code{""})
-The function draws vertical bars from points @{@var{x}[i], @var{y}[i], @var{z}[i]@} down to @var{z} = Org.z, where @var{x}=@var{a}(3*k,:), @var{y}=@var{a}(3*k+1,:), @var{z}=@var{a}(3*k+2,:), k \in 0 ... @var{a.ny}/3. This function is obsolete -- use Bars() and SubData() functions instead.
- at end deftypefn
-
 @c ==================================================================
 @node Barh, Chart, Bars, 1D plotting
 @subsection Barh
 @cindex Barh
 
-These functions draw horizontal bars from points to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Barh}, @ref{Default sizes}. @sref{Barh sample}
+These functions draw horizontal bars from points to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If string contain symbol @samp{a} then lines are drawn one above another (like summation). See also @ref{Barh}, @ref{Default sizes}. @sref{Barh sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Barh (@code{const mglData &}y, @code{const mglData &}v, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_barh_xy (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} v, @code{const char *}pen)
@@ -1305,7 +1304,7 @@ The function draws colored stripes (boxes) for data in array @var{a}. The number
 @subsection Step
 @cindex Step
 
-These functions draw continuous stairs for points to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}, @ref{Stem}, @ref{Tile}, @ref{Boxs}. @sref{Step sample}
+These functions draw continuous stairs for points to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}, @ref{Stem}, @ref{Tile}, @ref{Boxs}. @sref{Step sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Step (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_step_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
@@ -1322,13 +1321,6 @@ The function draws continuous stairs for points @{@var{x}[i], @var{y}[i]@} in pl
 The function draws continuous stairs for points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x].
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Step2 (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN})
-The function draws continuous stairs for points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}=@var{a}(2*k,:), @var{y}=@var{a}(2*k+1,:), k \in 0 ... @var{a.ny}/2. This function is obsolete -- use Step() and SubData() functions instead.
- at end deftypefn
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Step3 (@code{const mglData &}a, @code{const char *}pen=@code{""})
-The function draws continuous stairs for points @{@var{x}[i], @var{y}[i], @var{z}[i]@}, where @var{x}=@var{a}(3*k,:), @var{y}=@var{a}(3*k+1,:), @var{z}=@var{a}(3*k+2,:), k \in 0 ... @var{a.ny}/3. This function is obsolete -- use Step() and SubData() functions instead.
- at end deftypefn
-
 @c ==================================================================
 @node Torus, Tube, Step, 1D plotting
 @subsection Torus
@@ -1345,16 +1337,12 @@ The function draws surface which is result of curve @{@var{r}[i], @var{z}[i]@} r
 The function draws surface which is result of curve @{@var{r}[i], @var{z}[i]@} rotation, where @var{r}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x].
 @end deftypefn
 
- at deftypefn {Method on @code{mglGraph} (C++)} @code{void} Torus2 (@code{const mglData &}a, @code{const char *}pen=@code{""})
-The function draws surface which is result of curve @{@var{x}[i], @var{y}[i]@} rotation, where @var{r}=@var{a}(2*k,:), @var{z}=@var{a}(2*k+1,:), k \in 0 ... @var{a.ny}/2. This function is obsolete -- use Torus() and SubData() functions instead.
- at end deftypefn
-
 @c ==================================================================
 @node Tube, Mark, Torus, 1D plotting
 @subsection Tube
 @cindex Tube
 
-These functions draw the tube with variable radius @var{r}[i] along the curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx=r.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}. @sref{Tube sample}
+These functions draw the tube with variable radius @var{r}[i] along the curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx=r.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}. @sref{Tube sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}pen=@code{""})
 @deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{float} r, @code{const char *}pen=@code{""})
@@ -1382,7 +1370,7 @@ The function draws tube with radius @var{r} between points @{@var{x}[i], @var{y}
 @subsection Mark
 @cindex Mark
 
-These functions draw marks with size @var{r}*@var{MarkSize} (@pxref{Default sizes}) at points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx=r.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If you need to draw markers of the same size then you may use @ref{Plot} function. See also @ref{Plot}, @ref{TextMark}, @ref{Stem}, @ref{Error}. @sref{Mark sample}
+These functions draw marks with size @var{r}*@var{MarkSize} (@pxref{Default sizes}) at points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx=r.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If you need to draw markers of the same size then you may use @ref{Plot} function. See also @ref{Plot}, @ref{TextMark}, @ref{Stem}, @ref{Error}. @sref{Mark sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Mark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_mark_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}pen)
@@ -1404,7 +1392,7 @@ The function draws marks for points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=
 @subsection TextMark
 @cindex TextMark
 
-These functions draw string @var{text} as marks with size proportional to @var{r}*@var{MarkSize} (@pxref{Default sizes}) at points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx=r.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}, @ref{Mark}, @ref{Stem}. @sref{TextMark sample}
+These functions draw string @var{text} as marks with size proportional to @var{r}*@var{MarkSize} (@pxref{Default sizes}) at points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx=r.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}, @ref{Mark}, @ref{Stem}. @sref{TextMark sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}text, @code{const char *}fnt=@code{""})
 @deftypefnx {Method on @code{mglGraph} (C++)} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const wchar_t *}text, @code{const char *}fnt=@code{""})
@@ -1439,7 +1427,7 @@ The function draws textual marks for points @{@var{x}[i], @var{y}[i]@} in plane
 @subsection Error
 @cindex Error
 
-These functions draw error boxes at points @{@var{x}[i], @var{y}[i]@} on plane @var{z} = @var{zVal} (by default @var{z}=@var{Min.z}). This can be useful, for example, in experimental points, or to show numeric error or some estimations and so on. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx=r.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}. @sref{Error sample}
+These functions draw error boxes at points @{@var{x}[i], @var{y}[i]@} on plane @var{z} = @var{zVal} (by default @var{z}=@var{Min.z}). This can be useful, for example, in experimental points, or to show numeric error or some estimations and so on. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx=r.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}. @sref{Error sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Error (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ex, @code{const mglData &}ey, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_error_exy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ex, @code{const HMDT} ey, @code{const char *}pen)
@@ -1461,7 +1449,7 @@ Draws a error box @var{ey} (along only one direction) in point position @{@var{x
 @subsection BoxPlot
 @cindex BoxPlot
 
-These functions draw boxplot (also known as a box-and-whisker diagram) at points @var{x}[i] on plane @var{z} = @var{zVal} (by default @var{z}=@var{Min.z}). This is five-number summaries of data @var{a}[i,j] (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction. The sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=a.nx}. String @var{pen} specifies the color and style of line (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}, @ref{Error}, @ref{Bars}, @ref{Default sizes}. @sref{BoxPlot sample}
+These functions draw boxplot (also known as a box-and-whisker diagram) at points @var{x}[i] on plane @var{z} = @var{zVal} (by default @var{z}=@var{Min.z}). This is five-number summaries of data @var{a}[i,j] (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction. The sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=a.nx}. String @var{pen} specifies the color and style of line (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}, @ref{Error}, @ref{Bars}, @ref{Default sizes}. @sref{BoxPlot sample}
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} BoxPlot (@code{const mglData &}x, @code{const mglData &}a, @code{const char *}pen=@code{""})
 @deftypefnx {C function} @code{void} mgl_boxplot_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} a, @code{const char *}pen)
@@ -1477,7 +1465,7 @@ Draws a boxplot with @var{x}[i] values equidistantly distributed in interval [@v
 @node 2D plotting, 3D plotting, 1D plotting, MathGL core
 @section 2D plotting
 
-These functions perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are several generally different types of data representations: simple mesh lines plot (Mesh), surface plot (Surf), surface plot by boxes (Boxs), surface plot by tiles (Tile), waterfall-like plot (Fall), belt plot (Belt), density plot (Dens), contour lines plot (Cont), solid contours plot (ContF) and its rotational figure (Axial). Cont, ContF and Axial functions have variants for automatic and manual selection of level values for contours. Also there are functions for plotting data grid lines according to the data format (Grid) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
+These functions perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are several generally different types of data representations: simple mesh lines plot (Mesh), surface plot (Surf), surface plot by boxes (Boxs), surface plot by tiles (Tile), waterfall-like plot (Fall), belt plot (Belt), density plot (Dens), contour lines plot (Cont), solid contours plot (ContF) and its rotational figure (Axial). Cont, ContF and Axial functions have variants for automatic and manual selection of level values for contours. Also there are functions for plotting data grid lines according to the data format (Grid) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. @sref{2D plot sample}
 
 @menu
 * Mesh:: 
@@ -1491,6 +1479,7 @@ These functions perform plotting of 2D data. 2D means that data depend from 2 in
 * ContF:: 
 * ContD:: 
 * Axial:: 
+* Grad:: 
 * Grid:: 
 @end menu
 
@@ -1501,7 +1490,7 @@ These functions perform plotting of 2D data. 2D means that data depend from 2 in
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Mesh (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_mesh_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-The function draws mesh lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Mesh lines are plotted for each z slice of the data. See also @ref{Surf}, @ref{Fall}, NeshNum (@pxref{Other settings}), @ref{Cont}, @ref{Tens}. @sref{Mesh sample}
+The function draws mesh lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Mesh lines are plotted for each z slice of the data. See also @ref{Surf}, @ref{Fall}, MeshNum (@pxref{Other settings}), @ref{Cont}, @ref{Tens}. @sref{Mesh sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Mesh (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1516,7 +1505,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Fall (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_fall_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-The function draws fall lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. This plot can be used for plotting several curves shifted in depth one from another. String @var{sch} sets the color scheme. Previous color scheme is used by default. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Fall lines are plotted for each z slice of the data. See also @ref{Belt}, @ref{Mesh}, @ref{Tens}, NeshNum (@pxref{Other settings}). @sref{Fall sample}
+The function draws fall lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. This plot can be used for plotting several curves shifted in depth one from another. String @var{sch} sets the color scheme. Previous color scheme is used by default. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Fall lines are plotted for each z slice of the data. See also @ref{Belt}, @ref{Mesh}, @ref{Tens}, MeshNum (@pxref{Other settings}). @sref{Fall sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Fall (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1531,7 +1520,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Belt (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_belt_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-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 Plot (@pxref{Plot}). String @var{sch} sets the color scheme. Previous color scheme is used by default. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) belts are drawn along y-direction. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Belts are plotted for each z slice of the data. See also @ref{Fall}, @ref{Surf}, @ref{Plot}, NeshNum (@pxref{Other settings}). @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 Plot (@pxref{Plot}). String @var{sch} sets the color scheme. Previous color scheme is used by default. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) belts are drawn along y-direction. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Belts are plotted for each z slice of the data. See also @ref{Fall}, @ref{Surf}, @ref{Plot}, MeshNum (@pxref{Other settings}). @sref{Belt sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Belt (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1546,7 +1535,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Surf (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_surf_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Mesh}, @ref{Dens}, @ref{Belt}, @ref{Tile}, @ref{Boxs}, @ref{SurfC}, @ref{SurfA}. @sref{Surf sample}
+The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Mesh}, @ref{Dens}, @ref{Belt}, @ref{Tile}, @ref{Boxs}, @ref{SurfC}, @ref{SurfA}. @sref{Surf sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Surf (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1561,7 +1550,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Boxs (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_boxs_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-The function draws vertical boxes for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{Tile}, @ref{Step}. @sref{Boxs sample}
+The function draws vertical boxes for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{Dens}, @ref{Tile}, @ref{Step}. @sref{Boxs sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Boxs (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1576,7 +1565,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Tile (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_tile_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-The function draws horizontal tiles for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Such plot can be used as 3d generalization of Step (@pxref{Step}). String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{Boxs}, @ref{Step}, @ref{TileS}. @sref{Tile sample}
+The function draws horizontal tiles for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Such plot can be used as 3d generalization of Step (@pxref{Step}). String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{Boxs}, @ref{Step}, @ref{TileS}. @sref{Tile sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Tile (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1591,7 +1580,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Dens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {C function} @code{void} mgl_dens_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-The function draws density plot for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{Cont}, @ref{ContF}, @ref{DensXYZ}. @sref{Dens sample}
+The function draws density plot for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{Cont}, @ref{ContF}, @ref{Boxs}, @ref{Tile}, @ref{DensXYZ}. @sref{Dens sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Dens (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1606,7 +1595,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {C function} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-The function draws contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}). Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{ContF}, @ref{Axial}, @ref{ContXYZ}. @sref{Cont sample}
+The function draws contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}). Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. If string @var{sch} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{ContF}, @ref{ContD}, @ref{Axial}, @ref{ContXYZ}. @sref{Cont sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1631,7 +1620,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {C function} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}). Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{Axial}, @ref{ContFXYZ}. @sref{ContF sample}
+The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}). Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{Axial}, @ref{ContFXYZ}. @sref{ContF sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1656,7 +1645,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {C function} @code{void} mgl_contd_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}) with manual colors. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). String @var{sch} sets the contour colors: the color of k-th contour is determined by character @code{sch[k%strlen(sch)]}. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample}
+The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}) with manual colors. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). String @var{sch} sets the contour colors: the color of k-th contour is determined by character @code{sch[k%strlen(sch)]}. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1675,13 +1664,13 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 @end deftypefn
 
 @c ==================================================================
- at node Axial, Grid, ContD, 2D plotting
+ at node Axial, Grad, ContD, 2D plotting
 @subsection Axial
 @cindex Axial
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-The function draws surface which is result of contour plot rotation for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @var{AxialDir} (@pxref{Other settings}) will be set to specified direction. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample}
+The function draws surface which is result of contour plot rotation for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @var{AxialDir} (@pxref{Other settings}) will be set to specified direction. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1699,14 +1688,35 @@ The same as first one with vector @var{v} of @var{num}-th elements equidistantly
 The same as previous with @var{x}, @var{y} equidistantly distributed in interval [@var{Min}, @var{Max}].
 @end deftypefn
 
+
+ at c ==================================================================
+ at node Grad, Grid, Axial, 2D plotting
+ at subsection Grad
+ at cindex Grad
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}phi, @code{const char *}sch=@code{""}, @code{int} num=@code{5})
+ at deftypefnx {C function} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
+The function draws gradient lines for scalar field @var{phi}[i,j,k] specified parametrically @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. Number of lines is proportional to @var{num}. If @var{num}<0 then lines start from borders only. The minor dimensions of arrays @var{x}, @var{y}, @var{z}, @var{phi} should be equal @code{x.nx=phi.nx && y.nx=phi.ny && z.nx=phi.nz} or @code{x.nx=y.nx=z.nx=phi.nx && x.ny=y.ny=z.ny=phi.ny && x.nz=y.nz=z.nz=phi.nz}. Arrays @var{x}, @var{y} and @var{z} can be vectors (not matrices as @var{phi}). See also @ref{Dens3}, @ref{Cont3}, @ref{Flow}.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN})
+ at deftypefnx {C function} @code{void} mgl_grad_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
+The function draws gradient lines for scalar field @var{phi}[i,j] specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{phi}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. Previous color scheme is used by default. Number of lines is proportional to @var{num}. If @var{num}<0 then lines start from borders only. The minor dimensions of arrays @var{x}, @var{y}, @var{phi} should be equal @code{x.nx=phi.nx && y.nx=phi.ny} or @code{x.nx=y.nx=phi.nx && x.ny=y.ny=phi.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{phi}). Lines are plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}, @ref{Flow}. @sref{Grad sample}
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN})
+ at deftypefnx {C function} @code{void} mgl_grad (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
+The same as previous with @var{x}, @var{y} equidistantly distributed in interval [@var{Min}, @var{Max}].
+ at end deftypefn
+
 @c ==================================================================
- at node Grid, , Axial, 2D plotting
+ at node Grid, , Grad, 2D plotting
 @subsection Grid
 @cindex Grid
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {C function} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Grid is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}.
+The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Grid is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}.
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1719,7 +1729,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 @node 3D plotting, Dual plotting, 2D plotting, MathGL core
 @section 3D plotting
 
-These functions perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 5 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 functions have variants for automatic and manual selection of level values for surfaces/contours. Also there are functions for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
+These functions perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 5 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 functions have variants for automatic and manual selection of level values for surfaces/contours. Also there are functions for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. @sref{3D plot sample}
 
 @menu
 * Surf3:: 
@@ -1790,7 +1800,7 @@ The same as previous with @var{x}, @var{y}, @var{z} equidistantly distributed in
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Cont3 (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}a, @code{char} dir, @code{int} sVal=@code{-1}, @code{const char *}stl=@code{""})
 @deftypefnx {C function} @code{void} mgl_cont3_xyz_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} a, @code{char} dir, @code{int} sVal, @code{const char *}stl)
-The function draws contour plot for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Contours are plotted for values specified in array @var{v} at slice @var{sVal} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{stl} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} must be equal. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). See also @ref{Dens3}, @ref{ContF3}, @ref{Cont}, @ref{Grid3}. @sref{Cont3 sample}
+The function draws contour plot for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Contours are plotted for values specified in array @var{v} at slice @var{sVal} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. String @var{stl} sets the color scheme. Previous color scheme is used by default. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. The minor dimensions of arrays @var{x}, @var{y}, @var{z} must be equal. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). See also @ref{Dens3}, @ref{ContF3}, @ref{Cont}, @ref{Grid3}. @sref{Cont3 sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Cont3 (@code{const mglData &}v, @code{const mglData &}a, @code{char} dir, @code{int} sVal=@code{-1}, @code{const char *}sch=@code{""})
@@ -1947,7 +1957,7 @@ These plotting functions draw @emph{two matrix} simultaneously. There are 5 gene
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SurfC (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_surfc_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
-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]. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. All dimensions of arrays @var{z} and @var{c} must be equal. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{SurfA}, @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]. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. All dimensions of arrays @var{z} and @var{c} must be equal. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{SurfA}, @ref{Surf3C}. @sref{SurfC sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SurfC (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
@@ -1989,7 +1999,7 @@ The same as previous with @var{x}, @var{y}, @var{z} equidistantly distributed in
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SurfA (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_surfa_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
-The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and transparent it by matrix @var{c}[i,j]. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. All dimensions of arrays @var{z} and @var{c} must be equal. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{SurfC}, @ref{Surf3A}, @ref{TileS}. @sref{SurfA sample}
+The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and transparent it by matrix @var{c}[i,j]. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. All dimensions of arrays @var{z} and @var{c} must be equal. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{SurfC}, @ref{Surf3A}, @ref{TileS}. @sref{SurfA sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SurfA (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
@@ -2030,7 +2040,7 @@ The same as previous with @var{x}, @var{y}, @var{z} equidistantly distributed in
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TileS (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_tiles_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}sch)
-The function draws horizontal tiles for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. It is mostly the same as Tile() but the size of tiles is determined by @var{r} array. This is some kind of ``transparency'' useful for exporting to EPS files. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{SurfA}, @ref{Tile}. @sref{TileS sample}
+The function draws horizontal tiles for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. It is mostly the same as Tile() but the size of tiles is determined by @var{r} array. This is some kind of ``transparency'' useful for exporting to EPS files. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{SurfA}, @ref{Tile}. @sref{TileS sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TileS (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
@@ -2060,7 +2070,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} STFA (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}re, @code{const mglData &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {C function} @code{void} mgl_stfa_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} re, @code{const HMDT} im, @code{int} dn, @code{const char *}sch, @code{float} zVal)
-Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. At this array @var{re}, @var{im} parametrically depend on coordinates @var{x}, @var{y}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The size of @var{re} and @var{im} must be the same. The minor dimensions of arrays @var{x}, @var{y}, @var{re} should be equal. Arrays @var{x}, @var{y} can be vectors (not matrix as @var{re}). @xref{Color scheme}.
+Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. At this array @var{re}, @var{im} parametrically depend on coordinates @var{x}, @var{y}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The size of @var{re} and @var{im} must be the same. The minor dimensions of arrays @var{x}, @var{y}, @var{re} should be equal. Arrays @var{x}, @var{y} can be vectors (not matrix as @var{re}).  @sref{STFA sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} STFA (@code{const mglData &}re, @code{const mglData &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -2199,7 +2209,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN})
 @deftypefnx {C function} @code{void} mgl_flow_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ax, @code{const HMDT} ay, @code{const char *}sch, @code{int} num, @code{int} central, @code{float} zVal)
-The function draws flow threads for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level z = @var{zVal}. Number of threads is proportional to @var{num}. Parameter @var{central} sets the thread start from center (if true) or only from edges (if false). The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). String @var{sch} sets the color scheme. Previous color scheme is used by default. The size of @var{ax} and @var{ay} must be equal. The minor dimensions of arrays @var{x}, @var{y} and @var{ax} must be equal too. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{ax}). The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{Pipe}, @ref{VectC}, @ref{Vect}. @sref{Flow sample}
+The function draws flow threads for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level z = @var{zVal}. Number of threads is proportional to @var{num}. Parameter @var{central} sets the thread start from center (if true) or only from edges (if false). From v.1.11 it is ignored and always equal to (@var{num}>0). The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). String @var{sch} sets the color scheme. Previous color scheme is used by default. The size of @var{ax} and @var{ay} must be equal. The minor dimensions of arrays @var{x}, @var{y} and @var{ax} must be equal too. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{ax}). The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{Pipe}, @ref{VectC}, @ref{Vect}. @sref{Flow sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN})
@@ -2254,7 +2264,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Pipe (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} r0=@code{0.05}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN})
 @deftypefnx {C function} @code{void} mgl_pipe_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ax, @code{const HMDT} ay, @code{const char *}sch, @code{float} r0, @code{int} num, @code{int} central, @code{float} zVal)
-The function draws flow pipes for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level z = @var{zVal}. Number of pipes is proportional to @var{num}. Parameter @var{central} sets the pipe start from center (if true) or only from edges (if false). The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). String @var{sch} sets the color scheme. Previous color scheme is used by default. Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. The minor dimensions of arrays @var{x}, @var{y} and @var{ax} must be equal too. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{ax}). The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{Pipe}, @ref{VectC}, @ref{Vect}. @sref{Pipe sample}
+The function draws flow pipes for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level z = @var{zVal}. Number of pipes is proportional to @var{num}. Parameter @var{central} sets the pipe start from center (if true) or only from edges (if false). From v.1.11 it is ignored and always equal to (@var{num}>0). The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). String @var{sch} sets the color scheme. Previous color scheme is used by default. Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. The minor dimensions of arrays @var{x}, @var{y} and @var{ax} must be equal too. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{ax}). The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{Flow}, @ref{VectC}, @ref{Vect}. @sref{Pipe sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Pipe (@code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} r0=@code{0.05}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN})
@@ -2286,6 +2296,8 @@ These functions perform miscelaneous plotting. There is unstructured data points
 * Dots:: 
 * Crust:: 
 * TriPlot:: 
+* TriCont:: 
+* QuadPlot:: 
 * Plots by formula:: 
 * SimplePlot:: 
 @end menu
@@ -2437,7 +2449,7 @@ The same as previous with @var{x=tr}(0,:), @var{y=tr}(1,:), @var{z=tr}(2,:).
 @end deftypefn
 
 @c ==================================================================
- at node TriPlot, Plots by formula, Crust, Other plotting
+ at node TriPlot, TriCont, Crust, Other plotting
 @subsection TriPlot
 @cindex TriPlot
 
@@ -2445,7 +2457,7 @@ The same as previous with @var{x=tr}(0,:), @var{y=tr}(1,:), @var{z=tr}(2,:).
 @deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {C function} @code{void} mgl_triplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
 @deftypefnx {C function} @code{void} mgl_triplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
-The function draws the surface of triangles. Triangle vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string contain @samp{#} then wire plot is produced. First dimensions of @var{id} must be 3 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of triangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{Dots}, @ref{Crust}.
+The function draws the surface of triangles. Triangle vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string contain @samp{#} then wire plot is produced. First dimensions of @var{id} must be 3 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of triangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{Dots}, @ref{Crust}, @ref{QuadPlot}.
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -2454,7 +2466,43 @@ The same as previous with @var{z}[i]=@var{zVal}.
 @end deftypefn
 
 @c ==================================================================
- at node Plots by formula, SimplePlot, TriPlot, Other plotting
+ at node TriCont, QuadPlot, TriPlot, Other plotting
+ at subsection TriCont
+ at cindex TriCont
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+ at deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+ at deftypefnx {C function} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{float} zVal)
+ at deftypefnx {C function} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
+The function draws contour lines for surface of triangles at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}). Triangle vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. String @var{sch} sets the color scheme. Previous color scheme is used by default. Array @var{c} (if specified) is used for contour coloring. First dimensions of @var{id} must be 3 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of triangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{TriPlot}, @ref{Cont}.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN})
+ at deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN})
+ at deftypefnx {C function} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{num}, @code{float} zVal)
+ at deftypefnx {C function} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{num}, @code{float} zVal)
+The same as first one with vector @var{v} of @var{num}-th elements equidistantly distributed in range [@var{Cmin}, @var{Cmax}].
+ at end deftypefn
+
+ at c ==================================================================
+ at node QuadPlot, Plots by formula, TriCont, Other plotting
+ at subsection QuadPlot
+ at cindex QuadPlot
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
+ at deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
+ at deftypefnx {C function} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
+ at deftypefnx {C function} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
+The function draws the surface of quadrangles. Quadrangles vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string contain @samp{#} then wire plot is produced. First dimensions of @var{id} must be 4 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of quadrangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{TriPlot}.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+ at deftypefnx {C function} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}sch, @code{float} zVal)
+The same as previous with @var{z}[i]=@var{zVal}.
+ at end deftypefn
+
+ at c ==================================================================
+ at node Plots by formula, SimplePlot, QuadPlot, Other plotting
 @subsection Plots by formula
 @cindex Plot
 @cindex Surf
diff --git a/texinfo/core_ru.texi b/texinfo/core_ru.texi
index b01c131..1ec64b8 100644
--- a/texinfo/core_ru.texi
+++ b/texinfo/core_ru.texi
@@ -1,5 +1,4 @@
 @c ------------------------------------------------------------------
- at node MathGL core, Plotter classes, Examples, Top
 @chapter Ядро MathGL
 @cindex mglGraph
 
@@ -77,12 +76,12 @@
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetTransparent (@code{bool} val)
 @deftypefnx {Функция С} @code{void} mgl_set_transp (@code{HMGL} gr, @code{int} enable)
-Временно включает/вохвращает прозрачность графиков. Это аналог @code{Alpha(val)}, но работает более корректно для класса mglGraphGL.
+Временно включает/возвращает прозрачность графиков. Это аналог @code{Alpha(val)}, но работает более корректно для класса mglGraphGL.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetTranspType (@code{int} type)
 @deftypefnx {Функция С} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} enable)
-Задает тип прозрачности. Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. Этот режим некорректно отображается в OpenGL (mglGraphGL) для нескольких перекрывающихся поверхностей. "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{SetAlphaDef(0.3)} или меньше в этом случае).
+Задает тип прозрачности. Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. Этот режим некорректно отображается в OpenGL (mglGraphGL) для нескольких перекрывающихся поверхностей. "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{SetAlphaDef(0.3)} или меньше в этом случае). @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}.
 @end deftypefn
 
 @deftypecv {@emph{Устаревшая переменная}} mglGraph @code{float} AlphaDef
@@ -135,7 +134,7 @@
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Fog (@code{float} d, @code{float} dz=@code{0.25})
 @deftypefnx {Функция С} @code{void} mgl_set_fog (@code{HMGL} gr, @code{float} d, @code{float} dz)
-Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~ 1-exp(- at emph{d*z}). Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Surface in fog sample}
+Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~@math{1-exp(-d*z)}. Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Surface in fog sample}
 @end deftypefn
 
 @c ==================================================================
@@ -237,7 +236,7 @@
 @end deftypefn
 
 @float
- at image{png_static/cut, 7cm}
+ at image{cut, 7cm}
 @caption{Левый рисунок нарисован при @code{Cut=false}, правый при @code{Cut=true}.}
 @end float
 
@@ -377,7 +376,7 @@
 @subsection Обработка ошибок
 
 @cindex Message
- at cindex WarnCode
+ at cindex GetWarnCode
 @cindex SetWarn
 
 Есть 2 переменные показывающие наличие предупреждения/ошибки при создании графика. Обычно вы должны сбросить их с помощью @code{SetWarn(0);} перед построением и проверить переменную @var{WarnCode} на наличие ошибок после построения. Только последнее предупреждение сохраняется. Замечу, что все предупреждения/ошибки в MathGL не являются критичными -- в худшем из вариантов соответствующий график просто не будет построен.
@@ -390,8 +389,9 @@
 Указатель на строку для вывода сообщений библиотеки о причине отсутствия графика. Если равен NULL, то сообщения не выводятся. Размер буфера должен быть не менее 1024 байт. Если Message[0]==0, то сообщений нет.
 @end deftypecv
 
- at deftypecv {Переменная(C++)} mglGraph @code{int} WarnCode
-Код сообщения о причине отсутствия графика. Возможные значения:
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{int} GetWarn ()
+ at deftypefnx {C function} @code{int} mgl_get_warn (@code{HMGL} gr)
+Возвращает код сообщения о причине отсутствия графика. Возможные значения:
 @table @code
 @item mglWarnNone=0
 Предупреждений нет
@@ -424,6 +424,10 @@ Setsize: размер(ы) равны нулю или отрицательны
 @item mglWarnFmt
 Формат не поддерживается
 @end table
+ at end deftypefn
+
+ at deftypecv {Устаревшая переменная} mglGraph @code{int} WarnCode
+Код сообщения о причине отсутствия графика. 
 @end deftypecv
 
 @c ==================================================================
@@ -577,7 +581,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ)
 @deftypefnx {Функция С} @code{void} mgl_set_func_ext (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA)
-Задает формулы перехода к криволинейным координатам. Каждая строка является математическим выражением, зависящим от старых координат x, y, z. Например, для цилиндрических координат будет @code{Axis("x*cos(y)", "x*sin(y)", "z");}. Для удаления формул соответствующий параметр должен быть пустым или @code{NULL}. Использование формул преобразования слегка замедляет программу, т.е.. @code{Axis("", "", "")} быстрее чем @code{Axis("1*x", "1*y", "1*z")}. Параметр @var{EqA} задает аналогичную формулу для цветовой шкалы. @xref{mglFormula class}.
+Задает формулы перехода к криволинейным координатам. Каждая строка является математическим выражением, зависящим от старых координат @samp{x}, @samp{y}, @samp{z} и @samp{a} или @samp{c} для цветовой шкалы. Например, для цилиндрических координат будет @code{Axis("x*cos(y)", "x*sin(y)", "z");}. Для удаления формул соответствующий параметр должен быть пустым или @code{NULL}. Использование формул преобразования слегка замедляет программу, т.е.. @code{Axis("", "", "")} быстрее чем @code{Axis("1*x", "1*y", "1*z")}. Параметр @var{EqA} задает аналогичную формулу для цветовой шкалы. @xref{Textual formulas}.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetCoor (@code{int} how)
@@ -613,7 +617,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @deftypefnx {Функция С} @code{void} mgl_set_ticks (@code{HMGL} gr, @code{float} dx, @code{float} dy, @code{float} dz)
 @deftypefnx {Функция С} @code{void} mgl_set_subticks (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} nz)
 @deftypefnx {Функция С} @code{void} mgl_set_tick_origin (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0)
-Задает шаг меток осей @var{d}, число подметок @var{ns} и начальное положение меток @var{org} для оси вдоль направления @var{dir} (используйте 'c' для меток colorbar). Переменная @var{d} задает шаг меток (если положительна) или их число на оси (if отрицательна). Нулевое значение задает логарифмические метки. Если @var{org}=@code{NAN}, то используется значение из переменной @var{Org}.
+Задает шаг меток осей @var{d}, число подметок @var{ns} и начальное положение меток @var{org} для оси вдоль направления @var{dir} (используйте 'c' для меток colorbar). Переменная @var{d} задает шаг меток (если положительна) или их число на оси (если отрицательна). Нулевое значение задает логарифмические метки. Если @var{org}=@code{NAN}, то используется значение из переменной @var{Org}.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetTicksVal (@code{char} dir, @code{int} n, @code{float *}val, @code{const char **}lbl)
@@ -691,15 +695,21 @@ Setsize: размер(ы) равны нулю или отрицательны
 Помещает последующий вывод в @var{m}-ую ячейку сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". С эстетической точки зрения не рекомендуется вызывать эту функцию с различными (или не кратными) размерами сетки. Ячейка может быть дополнительно сдвинута относительно своего обычного положения на относительный размер @var{dx}, @var{dy}.
 @end deftypefn
 
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style)
+ at deftypefnx {C function} @code{void} mgl_subplot_s (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style)
+Аналогично предыдущему, но место для осей/colorbar резервируется только если строка @var{style} содержит: @samp{L} или @samp{<} -- с левого края, @samp{R} или @samp{>} -- с правого края, @samp{A} или @samp{^} -- с верхнего края, @samp{U} или @samp{_} -- с нижнего края.
+ at end deftypefn
+
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} InPlot (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{bool} rel=@code{false})
 @deftypefnx {Функция С} @code{void} mgl_inplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2)
 @deftypefnx {Функция С} @code{void} mgl_relplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2)
-Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунока. Если параметр @var{rel}=@code{true}, то используется позиция относительно текщего SubPlot() (или InPlot() с @var{rel}=@code{false}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика".
+Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунка. Если параметр @var{rel}=@code{true}, то используется позиция относительно текщего SubPlot() (или InPlot() с @var{rel}=@code{false}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика".
 @end deftypefn
 
- at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ColumnPlot (@code{int} num, @code{int} ind)
+ at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{float} d=@code{0})
 @deftypefnx {Функция С} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind)
-Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). @sref{ColumnPlot sample}
+ at deftypefnx {Функция С} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} d)
+Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). Параметр @var{d} задает дополнительный зазор между строк. @sref{ColumnPlot sample}
 @end deftypefn
 
 @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{float} tet, @code{float} phi)
@@ -732,8 +742,14 @@ Setsize: размер(ы) равны нулю или отрицательны
 Сбрасывает матрицу трансформации. Эквивалентно вызову @code{InPlot(0,1,0,1,rel)}.
 @end deftypefn
 
- at deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} RestoreM ()
-Восстанавливает матрицу преобразования к матрице после последнего @code{InPlot()}. Полезна для возвращения состояния после вызова функции @code{Identity()}.
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Push ()
+ at deftypefnx {C function} @code{void} mgl_mat_push (@code{HMGL} gr)
+Помещает матрицу преобразования в стек. Позднее вы можете восстановить текущее состояние с помощью функции Pop(). Стек может содержать до 10 матриц.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Pop ()
+ at deftypefnx {C function} @code{void} mgl_mat_pop (@code{HMGL} gr)
+Заменяет (восстанавливает) матрицу преобразования на последнюю помещенную в стек матрицу.
 @end deftypefn
 
 
@@ -783,12 +799,12 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} WriteEPS (@code{const char *}fname, @code{const char *}descr=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_write_eps (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-Экспортирует текущий кадр в EPS файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) в формате EPS из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла.
+Экспортирует текущий кадр в EPS файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) в формате EPS из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если имя файла оканчивается на @samp{z} (например, @samp{fname.eps.gz}), то файл автоматически архивируется в формате gzip.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} WriteSVG (@code{const char *}fname, @code{const char *}descr=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_write_svg (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr)
-Экспортирует текущий кадр в SVG файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) в формате SVG из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла.
+Экспортирует текущий кадр в SVG файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) в формате SVG из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если имя файла оканчивается на @samp{z} (например, @samp{fname.svgz}), то файл автоматически архивируется в формате gzip.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} WriteIDTF (@code{const char *}fname, @code{const char *}descr=@code{""})
@@ -877,7 +893,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @deftypefnx {Функция С} @code{void} mgl_facex (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2)
 @deftypefnx {Функция С} @code{void} mgl_facey (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2)
 @deftypefnx {Функция С} @code{void} mgl_facez (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl, @code{float} d1, @code{float} d2)
-Рисует заполненный прямоугольник (грань) перпендикулярно оси [x,y,z] в точке @{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl} и шириной @var{wx}, @var{wy}, @var{wz} вдоль соответствующего направления. При этом цвет может быть один для всей грани, или различным если указаны все 4 цвета. Параметры @var{d1}!=0, @var{d2}!=0 задают дополнительный сдвиг последней точки (т.е. рисуют четырехугольник).Грань будет нарисована даже если часть ее лежит вне диапазона осей координат.
+Рисует закрашенный прямоугольник (грань) перпендикулярно оси [x,y,z] в точке @{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl} и шириной @var{wx}, @var{wy}, @var{wz} вдоль соответствующего направления. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета. Параметры @var{d1}!=0, @var{d2}!=0 задают дополнительный сдвиг последней точки (т.е. рисуют четырехугольник).Грань будет нарисована даже если часть ее лежит вне диапазона осей координат.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Sphere (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"})
@@ -917,9 +933,9 @@ Setsize: размер(ы) равны нулю или отрицательны
 @cindex Text
 @cindex Title
 
-Функции для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. Для низкоуровневого вывода и разбора ТеХ-их выражений используется класс mglFont (@pxref{mglFont class}). Он позволяет использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее @pxref{mglFont class}). Все функции вывода текста имеют варианты для 8-bit строк (@code{char *}) и для Unicode строк (@code{wchar_t *}). В первом случае используется конверсия из текущей локали, т.е. иногда вам требуется явно указать локаль с помощью функции @code{setlocale()}. Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=- at var{size}*@var{FontSize}) если отрицателен. Начертание шрифта (STIX, arial, courier, times и др) можно изменить с помощью функций SetFont(), GetFont(). @xref{Font settings}.
+Функции для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. Для низкоуровневого вывода и разбора ТеХ-их выражений используется класс mglFont (@pxref{mglFont class}). Он позволяет использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее @pxref{Font styles}). Все функции вывода текста имеют варианты для 8-bit строк (@code{char *}) и для Unicode строк (@code{wchar_t *}). В первом случае используется конверсия из текущей локали, т.е. иногда вам требуется явно указать локаль с помощью функции @code{setlocale()}. Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=- at var{size}*@var{FontSize}) если отрицателен. Начертание шрифта (STIX, arial, courier, times и др) можно изменить с помощью функций SetFont(), GetFont(). @xref{Font settings}.
 
-Параметры шрифта задаются строкой, которая может содержать символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRC}). Также строка может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (@pxref{mglColor class}) после символа @samp{:}. Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Например, строка @samp{iC:b} соответствует курсиву синего цвета с выравниванием по центру.
+Параметры шрифта задаются строкой, которая может содержать символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRC}). Также строка может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) после символа @samp{:}. Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Например, строка @samp{iC:b} соответствует курсиву синего цвета с выравниванием по центру.
 
 Если строка содержит символы @samp{aA}, то текст выводится в абсолютных координатах (полагаются в диапазоне [0,1]). При этом используются координаты относительно рисунка (если указано @samp{A}) или относительно последнего SubPlot()/InPlot() (если указано @samp{a}).
 
@@ -969,7 +985,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @deftypefnx {Функция С} @code{void} mgl_text_y (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}text, @code{const char *}font, float size)
 @deftypefnx {Функция С} @code{void} mgl_text_xy (@code{const HMDT} x, @code{const HMDT} y, @code{const char *}text, @code{const char *}font, float size)
 @deftypefnx {Функция С} @code{void} mgl_text_xyz (@code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}text, @code{const char *}font, float size)
-Выводит строку @var{text} вдоль кривой @{@var{x}[i], @var{y}[i], @var{z}[i]@} шрифтом @var{font}. Строка @var{font} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста над кривой. Размеры по 1-ой размерности должны быть одинаковы для всех массивов @var{x.nx=y.nx=z.nx}. Если массив @var{x} не указан, то используется "автоматический" массив со значениями в диапазоне [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). Если массив @var{z} не указан, то используется @var{z}[i] = @var{zVal}. @sref{Text sample}
+Выводит строку @var{text} вдоль кривой @{@var{x}[i], @var{y}[i], @var{z}[i]@} шрифтом @var{font}. Строка @var{font} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста над кривой. Размеры по 1-ой размерности должны быть одинаковы для всех массивов @code{x.nx=y.nx=z.nx}. Если массив @var{x} не указан, то используется "автоматический" массив со значениями в диапазоне [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). Если массив @var{z} не указан, то используется @var{z}[i] = @var{zVal}. @sref{Text sample}
 @end deftypefn
 
 @c ##################################################################
@@ -988,20 +1004,24 @@ Setsize: размер(ы) равны нулю или отрицательны
 Рисует оси координат и метки на них (@pxref{Axis settings}) в направлениях, указанных строкой @var{dir}. Если строка содержит символ @samp{_}, то подписи меток отображаться не будут. Шрифт подписей определяется функцией @code{SetFontDef()} (@pxref{Font settings}). Метки будут "подогнаны" если @var{adjust}=@code{true} (с помощью вызова функции @code{AdjustTicks()}). 
 @end deftypefn
 
- at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch=@code{""}, @code{int} where=@code{0})
- at deftypefnx {Функция С} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch, @code{int} where)
-Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) с краю от графика. Параметр @var{where} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. @sref{Dens sample}
+ at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch=@code{""}, @code{int} pos=@code{0})
+ at deftypefnx {Функция С} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch, @code{int} pos)
+Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) с краю от графика. Параметр @var{pos} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. Если строка @var{sch} содержит @samp{<>^_}, то параметр @var{pos} определяется как: @code{pos=0} для @samp{>} (справа), @code{pos=1} для @samp{<} (слева), @code{pos=2} для @samp{^} (сверху), @code{pos=3} для @samp{_} (снизу). Если строка содержит @samp{A}, то используются абсолютные координаты (относительно рисунка). @sref{Dens sample}
+ at end deftypefn
+
+ at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} where=@code{0})
+ at deftypefnx {Функция С} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}sch, @code{int} where)
+Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{v}. @sref{ContD sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
- at deftypefnx {Метод класса @code{mglGraph} (C++)} @code{void} Colorbar (@code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
+ at deftypefnx {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
 @deftypefnx {Функция С} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
-Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) в произвольном месте графика @{@var{x}, @var{y}@} (полагаются в диапазоне [0,1]). Параметр @var{where} задает положение меток: @samp{0} - слева, @samp{1} - справа, @samp{2} - снизу, @samp{3} - сверху. Параметры @var{w}, @var{h} задают относительную ширину и высоту colorbar.
+Аналогично первому, но в произвольном месте графика @{@var{x}, @var{y}@} (полагаются в диапазоне [0,1]). Параметры @var{w}, @var{h} задают относительную ширину и высоту colorbar.
 @end deftypefn
 
- at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} where=@code{0})
- at deftypefnx {Функция С} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}sch, @code{int} where)
-Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы без сглаживания @var{sch} (используется текущая для @code{sch=""}) для значений @var{v} с краю от графика. Параметр @var{where} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. @sref{ContD sample}
+ at deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h)
+Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{v}.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B-"})
@@ -1017,8 +1037,8 @@ Setsize: размер(ы) равны нулю или отрицательны
 Рисует ограничивающий параллелепипед цветом @var{col}.
 @end deftypefn
 
- at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Label (@code{char} dir, @code{const char *}text, @code{float} pos=@code{+1}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0})
- at deftypefnx {Метод класса @code{mglGraph} (C++)} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{float} pos=@code{+1}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0})
+ at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Label (@code{char} dir, @code{const char *}text, @code{float} pos=@code{0}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0})
+ at deftypefnx {Метод класса @code{mglGraph} (C++)} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{float} pos=@code{0}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0})
 @deftypefnx {Функция С} @code{void} mgl_label (@code{HMGL} gr, @code{char} dir, @code{const char *}text)
 @deftypefnx {Функция С} @code{void} mgl_label_ext (@code{HMGL} gr, @code{char} dir, @code{const char *}text, @code{float} pos, @code{float} size, @code{float} shift)
 @deftypefnx {Функция С} @code{void} mgl_labelw_ext (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}text, @code{float} pos, @code{float} size, @code{float} shift)
@@ -1031,12 +1051,14 @@ Setsize: размер(ы) равны нулю или отрицательны
 @cindex Legend
 @cindex AddLegend
 @cindex ClearLegend
+ at cindex SetLegendBox
+ at cindex SetLegendMarks
 
-Эти функции обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд). Можно использовать непосредственно массивы строк, или накопление во внутренние массивы с помощью функции AddLegend() с последующим отображением. Положение легенды можно задать автоматически или вручную. Параметры @var{font} и @var{size} задают стиль и размер шрифта (@pxref{Font settings}). Параметр @var{llen} задает относительную ширину примера линии. Ели стиль линии пустой, то соответствующий текст печатается без отступа. @sref{Legend sample}
+Эти функции обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд). Можно использовать непосредственно массивы строк, или накопление во внутренние массивы с помощью функции AddLegend() с последующим отображением. Положение легенды можно задать автоматически или вручную. Параметры @var{font} и @var{size} задают стиль и размер шрифта (@pxref{Font settings}). Параметр @var{llen} задает относительную ширину примера линии. Ели стиль линии пустой, то соответствующий текст печатается без отступа. Если строка @var{font} содержит символ @samp{A}, то координаты легенды считаются относительно картинки (а не текущего subplot). @sref{Legend sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Legend (@code{int} where=@code{0x3}, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1})
 @deftypefnx {Функция С} @code{void} mgl_legend (@code{HMGL} gr, @code{int} where, @code{const char *}font, @code{float} size, @code{float} llen)
-Рисует легенду из накпленных записей шрифтом @var{font} размером @var{size}. Параметр @var{where} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию).
+Рисует легенду из накопленных записей шрифтом @var{font} размером @var{size}. Параметр @var{where} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию).
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Legend (@code{int} n, @code{wchar_t **}text, @code{char **}style, @code{int} where=@code{0x3}, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1})
@@ -1045,7 +1067,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Legend (@code{float} x, @code{float} y, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1})
 @deftypefnx {Функция С} @code{void} mgl_legend_xy (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}font, @code{float} size, @code{float} llen)
-Рисует легенду из накпленных записей шрифтом @var{font} размером @var{size}. Положение легенды задается параметрами @var{x}, @var{y}, которые полагаются нормированными в диапазоне [0,1].
+Рисует легенду из накопленных записей шрифтом @var{font} размером @var{size}. Положение легенды задается параметрами @var{x}, @var{y}, которые полагаются нормированными в диапазоне [0,1].
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Legend (@code{int} n, @code{wchar_t **}text, @code{char **}style, @code{float} x, @code{float} y, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1})
@@ -1069,11 +1091,16 @@ Setsize: размер(ы) равны нулю или отрицательны
 Включает/выключает рисование прямоугольника вокруг легенды. По умолчанию (=@code{true}) прямоугольник рисуется.
 @end deftypefn
 
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetLegendMarks (@code{int} num)
+ at deftypefnx {C function} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num)
+Задает число маркеров в легенде. По умолчанию используется 1 маркер.
+ at end deftypefn
+
 @c ##################################################################
 @node 1D plotting, 2D plotting, Legend, MathGL core
 @section 1D графики
 
-Эти функции строят графики для одномерных (1D) массивов. Одномерными считаются массивы, зависящие только от одного параметра (индекса) подобно кривой в параметрической форме @{x(i),y(i),z(i)@}, i=1...n. Есть 5 основных типов 1D графиков: линия (Plot), линия с заполнением (Area), ступеньки (Step), прямоугольники (Bars, Barh) и вертикальные линии (Stem). Все эти типы графиков имеют похожий интерфейс. Есть версии для рисования в пространстве и на плоскости. В последнем случае имеется возможность использования только одного массива. Стиль линии и маркеров указывается строковой переменной. Если она равна "", то используется сплошная линия с цветом из палитры (@pxref{Palette and colors}). Кроме того, есть еще несколько типов графиков для одномерных массивов, имеющих другой интерфейс и вид: поверхность вращения кривой (Torus), диаграмма (Chart), размер ошибки (Error), маркеры переменного размера (Mark), трубками (Tube) и т.д. @xref{Line styles}.
+Эти функции строят графики для одномерных (1D) массивов. Одномерными считаются массивы, зависящие только от одного параметра (индекса) подобно кривой в параметрической форме @{x(i),y(i),z(i)@}, i=1...n. Есть 5 основных типов 1D графиков: линия (Plot), линия с заполнением (Area), ступеньки (Step), прямоугольники (Bars, Barh) и вертикальные линии (Stem). Все эти типы графиков имеют похожий интерфейс. Есть версии для рисования в пространстве и на плоскости. В последнем случае имеется возможность использования только одного массива. Стиль линии и маркеров указывается строковой переменной. Если она равна "", то используется сплошная линия с цветом из палитры (@pxref{Palette and colors}). Кроме того, есть еще несколько типов графиков для одномерных массивов, имеющих другой интерфейс и вид: поверхность вращения кривой (Torus), диаграмма (Chart), размер ошибки (Error), маркеры переменного размера (Mark), трубками (Tube) и т.д. @xref{Line styles}. @sref{1D plot sample}
 
 @menu
 * Plot:: 
@@ -1099,7 +1126,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Plot
 @cindex Plot
 
-Функции рисуют ломанную линию по точкам. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) рисуется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample}
+Функции рисуют ломанную линию по точкам. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) рисуется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
@@ -1131,7 +1158,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Tens
 @cindex Tens
 
-Функции рисуют ломанную линию по точкам с цветом, определяемым массивом @var{c} (типа графика натяжений). График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx=c.nx}. Строка @var{pen} задает цветовую схему (@pxref{Color scheme}) и стиль и/или толщину линии (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущей цветовой схемой. См. также @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample}
+Функции рисуют ломанную линию по точкам с цветом, определяемым массивом @var{c} (типа графика натяжений). График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx=c.nx}. Строка @var{pen} задает цветовую схему (@pxref{Color scheme}) и стиль и/или толщину линии (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущей цветовой схемой. См. также @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}pen)
@@ -1153,17 +1180,16 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Area
 @cindex Area
 
-Функции рисуют ломанную линию между точками и закрашивает ее вниз до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample}
+Функции рисуют ломанную линию между точками и закрашивает ее вниз до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). Также можно использовать градиентное закрашивание если число указанных цветов равно удвоенному числу кривых для построения. Если строка содержит символ @samp{a}, то линии рисуются одна поверх другой (с суммированием) -- того же эффекта можно достичь вызовом @code{y.CumSum("y");} перед построением графика. См. также @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
 Рисует в пространстве линию между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@} и закрашивает ее вниз до плоскости @var{z} = Org.z.
 @end deftypefn
 
- at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false})
+ at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_area_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
- at deftypefnx {Функция С} @code{void} mgl_area_xys (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen)
-Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}) и закрашивает ее до прямой @var{y} = Org.y. Параметр @var{sum} задает режим рисования линий одна поверх другой (с сумированием). Замечу, что того же эффекта можно достичь вызовом @code{y.CumSum("y");} перед построением графика.
+Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}) и закрашивает ее до прямой @var{y} = Org.y.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false})
@@ -1177,11 +1203,11 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Region
 @cindex Region
 
-Фунукции закрашивают область между 2 кривыми. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y1.nx=y2.nx} и размеры массивов @var{y1}, @var{y2} должны быть также одинаковы. Строка @var{pen} задает цвет (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется текущий цвет из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample}
+Функции закрашивают область между 2 кривыми. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y1.nx=y2.nx} и размеры массивов @var{y1}, @var{y2} должны быть также одинаковы. Строка @var{pen} задает цвет (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется текущий цвет из палитры (@pxref{Palette and colors}). Также можно использовать градиентное закрашивание если число указанных цветов равно удвоенному числу кривых для построения. См. также @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Region (@code{const mglData &}x, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true})
 @deftypefnx {Функция С} @code{void} mgl_region_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y1, @code{const HMDT} y2, @code{const char *}pen, @code{int} inside)
-Закрашивает область между кривыми @{@var{x}[i], @var{y1}[i]@} и @{@var{x}[i], @var{y2}[i]@} при z=@var{zVal}.
+Закрашивает область между кривыми @{@var{x}[i], @var{y1}[i]@} и @{@var{x}[i], @var{y2}[i]@} при z=@var{zVal}. При  @code{inside=off} закрашивается только область y1<y<y2, в противном случае также будет закращена область y2<y<y1.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Region (@code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true})
@@ -1194,7 +1220,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Stem
 @cindex Stem
 
-Функции рисуют вертикальные линии из точек до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Bars}, @ref{Plot}. @sref{Stem sample}
+Функции рисуют вертикальные линии из точек до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Bars}, @ref{Plot}, @ref{Mark}. @sref{Stem sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Stem (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_stem_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
@@ -1216,7 +1242,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Bars
 @cindex Bars
 
-Функции рисуют вертикальные полосы (прямоугольники) из точек до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Barh}, @ref{Area}, @ref{Stem}, @ref{Chart}, @ref{Default sizes}. @sref{Bars sample}
+Функции рисуют вертикальные полосы (прямоугольники) из точек до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). Если строка содержит символ @samp{a}, то линии рисуются одна поверх другой. Если строка содержит символ @samp{f}, то рисуется график типа waterfall для определения кумулятивного эффекта последовательности положительных и отрицательных значений. Можно использовать разные цвета для положительных и отрицательных значений если число указанных цветов равно удвоенному числу кривых для построения. См. также @ref{Barh}, @ref{Area}, @ref{Stem}, @ref{Chart}, @ref{Default sizes}. @sref{Bars sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Bars (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_bars_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
@@ -1238,7 +1264,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Barh
 @cindex Barh
 
-Функции рисуют горизонтальные полосы (прямоугольники) из точек до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Barh}, @ref{Default sizes}. @sref{Barh sample}
+Функции рисуют горизонтальные полосы (прямоугольники) из точек до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). Если строка содержит символ @samp{a}, то линии рисуются одна поверх другой. Если строка содержит символ @samp{f}, то рисуется график типа waterfall для определения кумулятивного эффекта последовательности положительных и отрицательных значений. Можно использовать разные цвета для положительных и отрицательных значений если число указанных цветов равно удвоенному числу кривых для построения. См. также @ref{Barh}, @ref{Default sizes}. @sref{Barh sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Barh (@code{const mglData &}y, @code{const mglData &}v, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_barh_xy (@code{HMGL} gr, @code{const HMDT} y, @code{const HMDT} v, @code{const char *}pen)
@@ -1266,7 +1292,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Step
 @cindex Step
 
-Функции рисуют ступеньки для точек массива. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}, @ref{Stem}, @ref{Tile}, @ref{Boxs}. @sref{Step sample}
+Функции рисуют ступеньки для точек массива. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}, @ref{Stem}, @ref{Tile}, @ref{Boxs}. @sref{Step sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Step (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_step_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen)
@@ -1304,7 +1330,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Tube
 @cindex Tube
 
-Функции рисуют трубу радиуса @var{r}[i] вдоль кривой между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@}. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx=r.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}. @sref{Tube sample}
+Функции рисуют трубу радиуса @var{r}[i] вдоль кривой между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@}. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx=r.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}. @sref{Tube sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}pen=@code{""})
 @deftypefnx {Метод класса @code{mglGraph} (C++, Python)} @code{void} Tube (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{float} r, @code{const char *}pen=@code{""})
@@ -1332,7 +1358,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Mark
 @cindex Mark
 
-Функции рисуют маркеры размером @var{r}*@var{MarkSize} (@pxref{Default sizes}) в точках @{@var{x}[i], @var{y}[i], @var{z}[i]@}. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx=r.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). Для рисования маркеров одинакового размера можно использовать функцию @ref{Plot} с невидимой линией (со стилем содержащим @samp{ }). См. также @ref{Plot}, @ref{TextMark}, @ref{Stem}, @ref{Error}. @sref{Mark sample}
+Функции рисуют маркеры размером @var{r}*@var{MarkSize} (@pxref{Default sizes}) в точках @{@var{x}[i], @var{y}[i], @var{z}[i]@}. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx=r.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). Для рисования маркеров одинакового размера можно использовать функцию @ref{Plot} с невидимой линией (со стилем содержащим @samp{ }). См. также @ref{Plot}, @ref{TextMark}, @ref{Stem}, @ref{Error}. @sref{Mark sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Mark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_mark_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}pen)
@@ -1354,7 +1380,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection TextMark
 @cindex TextMark
 
-Функции рисуют текстовые маркеры из строки @var{text} с размером пропорциональным @var{r}*@var{MarkSize} (@pxref{Default sizes}) в точках @{@var{x}[i], @var{y}[i], @var{z}[i]@}. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx=r.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}, @ref{Mark}, @ref{Stem}. @sref{TextMark sample}
+Функции рисуют текст @var{text} как маркер с размером пропорциональным @var{r}*@var{MarkSize} (@pxref{Default sizes}) в точках @{@var{x}[i], @var{y}[i], @var{z}[i]@}. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx=r.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}, @ref{Mark}, @ref{Stem}. @sref{TextMark sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}text, @code{const char *}fnt=@code{""})
 @deftypefnx {Метод класса @code{mglGraph} (C++)} @code{void} TextMark (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const wchar_t *}text, @code{const char *}fnt=@code{""})
@@ -1389,7 +1415,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection Error
 @cindex Error
 
-Функции рисуют размер ошибки в точках @{@var{x}[i], @var{y}[i]@} на плоскости @var{z} = @var{zVal} (по умолчанию @var{z}=@var{Min.z}). Такой график полезен для отображения ошибки эксперимента, вычислений и пр. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx=r.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}. @sref{Error sample}
+Функции рисуют размер ошибки в точках @{@var{x}[i], @var{y}[i]@} на плоскости @var{z} = @var{zVal} (по умолчанию @var{z}=@var{Min.z}). Такой график полезен для отображения ошибки эксперимента, вычислений и пр. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx=r.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}. @sref{Error sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Error (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ex, @code{const mglData &}ey, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_error_exy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ex, @code{const HMDT} ey, @code{const char *}pen)
@@ -1411,7 +1437,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @subsection BoxPlot
 @cindex BoxPlot
 
-Функции рисуют boxplot (называемый также как box-and-whisker diagram или как "ящик с усами") в точках @var{x}[i] на плоскости @var{z} = @var{zVal} (по умолчанию @var{z}=@var{Min.z}). Это график, компактно изображающий распределение вероятностей @var{a}[i,j] (минимум, нижний квартиль (Q1), медиана (Q2), верхний квартиль (Q3) и максимум) вдоль второго (j-го) направления. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=a.nx}. Строка @var{pen} задает цвет и стиль линий (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}, @ref{Error}, @ref{Bars}, @ref{Default sizes}. @sref{BoxPlot sample}
+Функции рисуют boxplot (называемый также как box-and-whisker diagram или как "ящик с усами") в точках @var{x}[i] на плоскости @var{z} = @var{zVal} (по умолчанию @var{z}=@var{Min.z}). Это график, компактно изображающий распределение вероятностей @var{a}[i,j] (минимум, нижний квартиль (Q1), медиана (Q2), верхний квартиль (Q3) и максимум) вдоль второго (j-го) направления. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=a.nx}. Строка @var{pen} задает цвет и стиль линий (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}, @ref{Error}, @ref{Bars}, @ref{Default sizes}. @sref{BoxPlot sample}
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} BoxPlot (@code{const mglData &}x, @code{const mglData &}a, @code{const char *}pen=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_boxplot_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} a, @code{const char *}pen)
@@ -1427,7 +1453,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @node 2D plotting, 3D plotting, 1D plotting, MathGL core
 @section 2D графики
 
-Эти функции строят графики для двумерных (2D) массивов. Двумерными считаются массивы, зависящие только от двух параметров (индексов) подобно матрице @math{f(x_i,y_j), i=1...n, j=1...m}. Есть несколько основных типов 2D графиков: сплошная поверхность (Surf), сетчатая поверхность (Mesh), поверхность из ящиков (Boxs), поверхность из плиток (Tile), водопад (Fall), ленточки (Belt), график плотности (Dens), линии уровня (Cont), линии уровня с заполнением (ContF) и результат их вращения (Axial). В функциях Cont(), ContF() и Axial() значения уровней можно задавать автоматически и вручную. Можно также нарисовать сетку (Grid) по массиву данных для улучшения вида графика плотности или линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданной поверхности. Параметры цветовой схемы задаются строкой @xref{Color scheme}.
+Эти функции строят графики для двумерных (2D) массивов. Двумерными считаются массивы, зависящие только от двух параметров (индексов) подобно матрице @math{f(x_i,y_j), i=1...n, j=1...m}. Есть несколько основных типов 2D графиков: сплошная поверхность (Surf), сетчатая поверхность (Mesh), поверхность из ящиков (Boxs), поверхность из плиток (Tile), водопад (Fall), ленточки (Belt), график плотности (Dens), линии уровня (Cont), линии уровня с заполнением (ContF) и результат их вращения (Axial). В функциях Cont(), ContF() и Axial() значения уровней можно задавать автоматически и вручную. Можно также нарисовать сетку (Grid) по массиву данных для улучшения вида графика плотности или линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданной поверхности. Параметры цветовой схемы задаются строкой @xref{Color scheme}. @sref{2D plot sample}
 
 @menu
 * Mesh:: 
@@ -1441,6 +1467,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 * ContF:: 
 * ContD:: 
 * Axial:: 
+* Grad:: 
 * Grid:: 
 @end menu
 
@@ -1451,7 +1478,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Mesh (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_mesh_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-Рисует сетчатую поверхность, заданную параметрически @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{Fall}, NeshNum (@pxref{Other settings}), @ref{Cont}, @ref{Tens}. @sref{Mesh sample}
+Рисует сетчатую поверхность, заданную параметрически @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{Fall}, MeshNum (@pxref{Other settings}), @ref{Cont}, @ref{Tens}. @sref{Mesh sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Mesh (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1466,7 +1493,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Fall (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_fall_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-Рисует водопад для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График удобен для построения нескольких кривых, сдвинутых вглубь друг относительно друга. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{x}, то линии рисуются вдоль x-оси (по умолчанию линии рисуются вдоль y-оси). Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Belt}, @ref{Mesh}, @ref{Tens}, NeshNum (@pxref{Other settings}). @sref{Fall sample}
+Рисует водопад для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График удобен для построения нескольких кривых, сдвинутых вглубь друг относительно друга. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{x}, то линии рисуются вдоль x-оси (по умолчанию линии рисуются вдоль y-оси). Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Belt}, @ref{Mesh}, @ref{Tens}, MeshNum (@pxref{Other settings}). @sref{Fall sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Fall (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1481,7 +1508,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Belt (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_belt_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-Рисует ленточки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График может использоваться как 3d обобщение графика Plot() (@pxref{Plot}). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{x}, то линии рисуются вдоль x-оси (по умолчанию линии рисуются вдоль y-оси). Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Fall}, @ref{Surf}, @ref{Plot}, NeshNum (@pxref{Other settings}). @sref{Belt sample}
+Рисует ленточки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График может использоваться как 3d обобщение графика Plot() (@pxref{Plot}). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{x}, то линии рисуются вдоль x-оси (по умолчанию линии рисуются вдоль y-оси). Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Fall}, @ref{Surf}, @ref{Plot}, MeshNum (@pxref{Other settings}). @sref{Belt sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Belt (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1496,7 +1523,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Surf (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_surf_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Mesh}, @ref{Dens}, @ref{Belt}, @ref{Tile}, @ref{Boxs}, @ref{SurfC}, @ref{SurfA}. @sref{Surf sample}
+Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Mesh}, @ref{Dens}, @ref{Belt}, @ref{Tile}, @ref{Boxs}, @ref{SurfC}, @ref{SurfA}. @sref{Surf sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Surf (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1511,7 +1538,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Boxs (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_boxs_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-Рисует вертикальные ящики для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{Tile}, @ref{Step}. @sref{Boxs sample}
+Рисует вертикальные ящики для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{Dens}, @ref{Tile}, @ref{Step}. @sref{Boxs sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Boxs (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1526,7 +1553,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Tile (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_tile_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График может использоваться как 3d обобщение Step() (@pxref{Step}). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{Boxs}, @ref{Step}, @ref{TileS}. @sref{Tile sample}
+Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. График может использоваться как 3d обобщение Step() (@pxref{Step}). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{Boxs}, @ref{Step}, @ref{TileS}. @sref{Tile sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Tile (@code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1541,7 +1568,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Dens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {Функция С} @code{void} mgl_dens_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Рисует график плотности для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{Cont}, @ref{ContF}, @ref{DensXYZ}. @sref{Dens sample}
+Рисует график плотности для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{Cont}, @ref{ContF}, @ref{Boxs}, @ref{Tile}, @ref{DensXYZ}. @sref{Dens sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Dens (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1556,7 +1583,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {Функция С} @code{void} mgl_cont_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Рисует линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal} (или при @var{z=v}[k] если @code{zVal==NAN}). Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{ContF}, @ref{Axial}, @ref{ContXYZ}. @sref{Cont sample}
+Рисует линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal} (или при @var{z=v}[k] если @code{zVal==NAN}). Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетка. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{v}[k] будут выведены вдоль контуров над (или под) кривой. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{ContF}, @ref{ContD}, @ref{Axial}, @ref{ContXYZ}. @sref{Cont sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Cont (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1581,7 +1608,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {Функция С} @code{void} mgl_contf_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal} (или при @var{z=v}[k] если @code{zVal==NAN}). Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{Axial}, @ref{ContFXYZ}. @sref{ContF sample}
+Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal} (или при @var{z=v}[k] если @code{zVal==NAN}). Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{Axial}, @ref{ContFXYZ}. @sref{ContF sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1606,7 +1633,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {Функция С} @code{void} mgl_contd_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal} (или при @var{z=v}[k] if @code{zVal==NAN}) цветами заданными явно. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k] (должно быть @code{v.nx>2}). Строка @var{sch} задает цвет контуров: цвет k-го контура определяется символом @code{sch[k%strlen(sch)]}. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample}
+Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal} (или при @var{z=v}[k] если @code{zVal==NAN}) цветами заданными явно. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k] (должно быть @code{v.nx>2}). Строка @var{sch} задает цвет контуров: цвет k-го контура определяется символом @code{sch[k%strlen(sch)]}. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1625,13 +1652,13 @@ Setsize: размер(ы) равны нулю или отрицательны
 @end deftypefn
 
 @c ==================================================================
- at node Axial, Grid, ContD, 2D plotting
+ at node Axial, Grad, ContD, 2D plotting
 @subsection Axial
 @cindex Axial
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
-Рисует поверхность вращения линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если строка содержит символы @samp{x}, @samp{y} или @samp{z}, то ось вращения (@pxref{Other settings}) устанавливается в указанное направление. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample}
+Рисует поверхность вращения линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если строка содержит символы @samp{x}, @samp{y} или @samp{z}, то ось вращения (@pxref{Other settings}) устанавливается в указанное направление. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""})
@@ -1650,13 +1677,34 @@ Setsize: размер(ы) равны нулю или отрицательны
 @end deftypefn
 
 @c ==================================================================
- at node Grid, , Axial, 2D plotting
+ at node Grad, Grid, Axial, 2D plotting
+ at subsection Grad
+ at cindex Grad
+
+ at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}phi, @code{const char *}sch=@code{""}, @code{int} num=@code{5})
+ at deftypefnx {Функция С} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
+Рисует линии градиента скалярного поля @var{phi}[i,j,k] заданного параметрически @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Число линий пропорционально @var{num}. Линии рисуются только с границ интервала при @var{num}<0. Младшие размерности массивов @var{x}, @var{y}, @var{z}, @var{phi} должны быть одинаковы @code{x.nx=phi.nx && y.nx=phi.ny && z.nx=phi.nz} или @code{x.nx=y.nx=z.nx=phi.nx && x.ny=y.ny=z.ny=phi.ny && x.nz=y.nz=z.nz=phi.nz}. Массивы @var{x}, @var{y} и @var{z} могут быть векторами (не матрицами как @var{phi}). См. также @ref{Dens3}, @ref{Cont3}, @ref{Flow}.
+ at end deftypefn
+
+
+ at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN})
+ at deftypefnx {Функция С} @code{void} mgl_grad_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
+Рисует линии градиента скалярного поля @var{phi}[i,j] заданного параметрически @{@var{x}[i,j], @var{y}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Число линий пропорционально @var{num}. Линии рисуются только с границ интервала при @var{num}<0. Младшие размерности массивов @var{x}, @var{y}, @var{phi} должны быть одинаковы @code{x.nx=phi.nx && y.nx=phi.ny} или @code{x.nx=y.nx=phi.nx && x.ny=y.ny=phi.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{phi}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}, @ref{Flow}. @sref{Grad sample}
+ at end deftypefn
+
+ at deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN})
+ at deftypefnx {Функция С} @code{void} mgl_grad (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal)
+Как предыдущий с @var{x}, @var{y} равно распределенными в интервале [@var{Min}, @var{Max}].
+ at end deftypefn
+
+ at c ==================================================================
+ at node Grid, , Grad, 2D plotting
 @subsection Grid
 @cindex Grid
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {Функция С} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
-Рисует плоскую сету для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}.
+Рисует плоскую сету для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -1669,7 +1717,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 @node 3D plotting, Dual plotting, 2D plotting, MathGL core
 @section 3D графики
 
-Эти функции строят графики для трехмерных (3D) массивов. Трехмерными считаются массивы, зависящие от трех параметров (индексов) подобно матрице @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. Есть 5 основных типов 3D графиков: поверхность постоянного уровня (Surf3), график плотности на срезе (Dens3), линии уровня на срезе (Cont3), закрашенные контуры уровня на срезе (ContF3) и график объемной прозрачности типа облака (Cloud). В функциях Cont3(), ContF3() и Surf3() значения уровней можно задавать автоматически и вручную. Можно также нарисовать на срезе сетку (Grid3) по массиву данных для улучшения вида графика плотности или линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой @xref{Color scheme}.
+Эти функции строят графики для трехмерных (3D) массивов. Трехмерными считаются массивы, зависящие от трех параметров (индексов) подобно матрице @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. Есть 5 основных типов 3D графиков: поверхность постоянного уровня (Surf3), график плотности на срезе (Dens3), линии уровня на срезе (Cont3), закрашенные контуры уровня на срезе (ContF3) и график объемной прозрачности типа облака (Cloud). В функциях Cont3(), ContF3() и Surf3() значения уровней можно задавать автоматически и вручную. Можно также нарисовать на срезе сетку (Grid3) по массиву данных для улучшения вида графика плотности или линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой @xref{Color scheme}. @sref{3D plot sample}
 
 @menu
 * Surf3:: 
@@ -1740,7 +1788,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Cont3 (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}a, @code{char} dir, @code{int} sVal=@code{-1}, @code{const char *}stl=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_cont3_xyz_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} a, @code{char} dir, @code{int} sVal, @code{const char *}stl)
-Рисует линии уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Линии рисуются для значений из массива @var{v} на срезе @var{sVal} в направлении @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{stl} содержит @samp{#}, то на срезе рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы. Массивы @var{x}, @var{y}, @var{z} могут быть векторами (не 3d массивами как @var{a}). См. также @ref{Dens3}, @ref{ContF3}, @ref{Cont}, @ref{Grid3}. @sref{Cont3 sample}
+Рисует линии уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Линии рисуются для значений из массива @var{v} на срезе @var{sVal} в направлении @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@}. Строка @var{stl} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{stl} содержит @samp{#}, то на срезе рисуется сетка. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{v}[k] будут выведены вдоль контуров над (или под) кривой. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы. Массивы @var{x}, @var{y}, @var{z} могут быть векторами (не 3d массивами как @var{a}). См. также @ref{Dens3}, @ref{ContF3}, @ref{Cont}, @ref{Grid3}. @sref{Cont3 sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Cont3 (@code{const mglData &}v, @code{const mglData &}a, @code{char} dir, @code{int} sVal=@code{-1}, @code{const char *}sch=@code{""})
@@ -1864,7 +1912,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Beam (@code{float} val, @code{const mglData &}tr, @code{const mglData &}g1, @code{const mglData &}g2, @code{const mglData &}a, @code{float} r, @code{const char *}stl=@code{""}, @code{int} flag=@code{0})
 @deftypefnx {Функция С} @code{void} mgl_beam_val (@code{HMGL} gr, @code{float} val, @code{const HMDT} tr, @code{const HMDT} g1, @code{const HMDT} g2, @code{const HMDT} a, @code{float} r, @code{const char *}stl, @code{int} flag)
-Рисует поверхность уровня для 3d массива @var{a} при постоянном значении @var{a}=@var{val}. Это специальный тип графика для @var{a} заданным в сопровождающей системе координат вдоль кривой @var{tr} с ортами @var{g1}, @var{g2} и с поперечным размером @var{r}. Переменная @var{flag} -- битовый флаг: @samp{0x1} - рисовать в сопровождающих (не лабораторных) координатах; @samp{0x2} - рисовать проекцию на плоскость @math{\rho-z}; @samp{0x4} - рисовать нормированное в каждом сечении поле. Размеры массивов по 1-му индексу @var{tr}, @var{g1}, @var{g2} должны быть nx>2. Размеры массивов по 2-му индексу @var{tr}, @var{g1}, @var{g2} и размер по 3-му индексу массива @var{a} должны быть одинаковы. @xref{Surf3}.
+Рисует поверхность уровня для 3d массива @var{a} при постоянном значении @var{a}=@var{val}. Это специальный тип графика для @var{a} заданного в сопровождающей системе координат вдоль кривой @var{tr} с ортами @var{g1}, @var{g2} и с поперечным размером @var{r}. Переменная @var{flag} -- битовый флаг: @samp{0x1} - рисовать в сопровождающих (не лабораторных) координатах; @samp{0x2} - рисовать проекцию на плоскость @math{\rho-z}; @samp{0x4} - рисовать нормированное в каждом сечении поле. Размеры массивов по 1-му индексу @var{tr}, @var{g1}, @var{g2} должны быть nx>2. Размеры массивов по 2-му индексу @var{tr}, @var{g1}, @var{g2} и размер по 3-му индексу массива @var{a} должны быть одинаковы. См. также @ref{Surf3}.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Beam (@code{const mglData &}tr, @code{const mglData &}g1, @code{const mglData &}g2, @code{const mglData &}a, @code{float} r, @code{const char *}stl=@code{""}, @code{int} flag=@code{0}, @code{int} num=@code{3})
@@ -1897,7 +1945,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SurfC (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_surfc_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
-Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Все размеры массивов @var{z} и @var{c} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого 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} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Все размеры массивов @var{z} и @var{c} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{SurfA}, @ref{Surf3C}. @sref{SurfC sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SurfC (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
@@ -1939,7 +1987,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SurfA (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_surfa_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
-Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с прозрачностью, заданным массивом @var{c}[i,j]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Все размеры массивов @var{z} и @var{c} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{SurfC}, @ref{Surf3A}, @ref{TileS}. @sref{SurfA sample}
+Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с прозрачностью, заданным массивом @var{c}[i,j]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Все размеры массивов @var{z} и @var{c} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{SurfC}, @ref{Surf3A}, @ref{TileS}. @sref{SurfA sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SurfA (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
@@ -1980,7 +2028,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} TileS (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_tiles_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}sch)
-Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Аналогично Tile(), но размер плиток задается массивов @var{r}. Это создает эффект "прозрачности" при экспорте в файлы EPS. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{SurfA}, @ref{Tile}. @sref{TileS sample}
+Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Аналогично Tile(), но размер плиток задается массивов @var{r}. Это создает эффект "прозрачности" при экспорте в файлы EPS. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{SurfA}, @ref{Tile}. @sref{TileS sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} TileS (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
@@ -2010,7 +2058,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} STFA (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}re, @code{const mglData &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
 @deftypefnx {Функция С} @code{void} mgl_stfa_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} re, @code{const HMDT} im, @code{int} dn, @code{const char *}sch, @code{float} zVal)
-Рисует спектрограмму комплексного массива @var{re}+i*@code{im} для Фурье размером @var{dn} точек в плоскости @var{z=zVal}. Параметр @var{dn} -- любое четное число. Например в 1D случае, результатом будет график плотности от массива @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} размером @{int(nx/dn), dn, ny@}. Массивы @var{re}, @var{im} параметрически зависят от координат @var{x}, @var{y}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{re} и @var{im} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{re} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{re}). @xref{Color scheme}.
+Рисует спектрограмму комплексного массива @var{re}+i*@code{im} для Фурье размером @var{dn} точек в плоскости @var{z=zVal}. Параметр @var{dn} -- любое четное число. Например в 1D случае, результатом будет график плотности от массива @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} размером @{int(nx/dn), dn, ny@}. Массивы @var{re}, @var{im} параметрически зависят от координат @var{x}, @var{y}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{re} и @var{im} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{re} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{re}).  @sref{STFA sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} STFA (@code{const mglData &}re, @code{const mglData &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -2021,9 +2069,9 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @c ##################################################################
 @node Vector fields, Other plotting, Dual plotting, MathGL core
- at section Векторные графики
+ at section Векторные поля
 
-Эти функции рисуют графики для 2D и 3D векторных полей. Есть несколько 5 типов графиков: просто векторное поле (Vect), вектора вдоль траектории (Traj), векторное поле каплями (Dew), нити тока (Flow, FlowP), трубки тока (Pipe). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой @xref{Color scheme}.
+Эти функции рисуют графики для 2D и 3D векторных полей. Есть несколько типов графиков: просто векторное поле (Vect), вектора вдоль траектории (Traj), векторное поле каплями (Dew), нити тока (Flow, FlowP), трубки тока (Pipe). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой @xref{Color scheme}.
 
 @menu
 * Traj:: 
@@ -2093,7 +2141,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN})
 @deftypefnx {Функция С} @code{void} mgl_flow_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ax, @code{const HMDT} ay, @code{const char *}sch, @code{int} num, @code{int} central, @code{float} zVal)
-Рисует нити тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при z = @var{zVal}. Число нитей пропорционально @var{num}. Параметр @var{central} задает возможность старта нитей изнутри сетки (если true) или только с краев (если false). Цвет нитей пропорционален @math{\sqrt@{ax^2+ay^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay}. См. также @ref{Pipe}, @ref{Vect}. @sref{Flow sample}
+Рисует нити тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при z = @var{zVal}. Число нитей пропорционально @var{num}. Параметр @var{central} задает возможность старта нитей изнутри сетки (если true) или только с краев (если false). С версии 1.11 он игнорируется и всегда равен (@var{num}>0). Цвет нитей пропорционален @math{\sqrt@{ax^2+ay^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay}. См. также @ref{Pipe}, @ref{Vect}. @sref{Flow sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN})
@@ -2103,7 +2151,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}ax, @code{const mglData &}ay, @code{const mglData &}az, @code{const char *}sch=@code{""}, @code{int} num=@code{3}, @code{bool} central=@code{true})
 @deftypefnx {Функция С} @code{void} mgl_flow_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} ax, @code{const HMDT} ay, @code{const HMDT} az, @code{const char *}sch, @code{int} num, @code{int} central)
-Это 3D версия графика. Здесь массивы @var{ax}, @var{ay}, @var{az} должны быть 3d массивами, а цвет пропорциональны @math{\sqrt@{ax^2+ay^2+az^2@}}. @sref{Flow 3D sample}
+Это 3D версия графика. Здесь массивы @var{ax}, @var{ay}, @var{az} должны быть 3d массивами, а цвет пропорционален @math{\sqrt@{ax^2+ay^2+az^2@}}. @sref{Flow 3D sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}ax, @code{const mglData &}ay, @code{const mglData &}az, @code{const char *}sch=@code{""}, @code{int} num=@code{3}, @code{bool} central=@code{true})
@@ -2148,7 +2196,7 @@ Setsize: размер(ы) равны нулю или отрицательны
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Pipe (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} r0=@code{0.05}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN})
 @deftypefnx {Функция С} @code{void} mgl_pipe_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ax, @code{const HMDT} ay, @code{const char *}sch, @code{float} r0, @code{int} num, @code{int} central, @code{float} zVal)
-Рисует трубки тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при z = @var{zVal}. Число трубок пропорционально @var{num}. Параметр @var{central} задает возможность старта трубок изнутри сетки (если true) или только с краев (если false). Цвет и радиус трубок пропорционален @math{\sqrt@{ax^2+ay^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Параметр @var{r0} задает радиус трубок. При @var{r0}<0 радиус трубок обратно пропорционален их амплитуде. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay}. См. также @ref{Pipe}, @ref{Vect}. @sref{Pipe sample}
+Рисует трубки тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при z = @var{zVal}. Число трубок пропорционально @var{num}. Параметр @var{central} задает возможность старта трубок изнутри сетки (если true) или только с краев (если false). С версии 1.11 он игнорируется и всегда равен (@var{num}>0). Цвет и радиус трубок пропорционален @math{\sqrt@{ax^2+ay^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Параметр @var{r0} задает радиус трубок. При @var{r0}<0 радиус трубок обратно пропорционален их амплитуде. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay}. См. также @ref{Flow}, @ref{Vect}. @sref{Pipe sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Pipe (@code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} r0=@code{0.05}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN})
@@ -2180,6 +2228,8 @@ Setsize: размер(ы) равны нулю или отрицательны
 * Dots:: 
 * Crust:: 
 * TriPlot:: 
+* TriCont:: 
+* QuadPlot:: 
 * Plots by formula:: 
 * SimplePlot:: 
 @end menu
@@ -2322,7 +2372,7 @@ gr->ContZ(c.Sum("z"),0,-1);
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Crust (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} er=@code{0})
 @deftypefnx {Функция С} @code{void} mgl_crust (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} er)
-Функция реконструирует и рисует поверхность по произвольно расположенным точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Параметр @var{er} задает радиус ошибки (увеличте для удаления дыр). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. См. также @ref{Dots}, @ref{TriPlot}. @sref{Crust sample}
+Реконструирует и рисует поверхность по произвольно расположенным точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Параметр @var{er} задает радиус ошибки (увеличте для удаления дыр). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. См. также @ref{Dots}, @ref{TriPlot}. @sref{Crust sample}
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Crust (@code{const mglData &}tr, @code{const char *}sch=@code{""}, @code{float} er=@code{0})
@@ -2331,7 +2381,7 @@ gr->ContZ(c.Sum("z"),0,-1);
 @end deftypefn
 
 @c ==================================================================
- at node TriPlot, Plots by formula, Crust, Other plotting
+ at node TriPlot, TriCont, Crust, Other plotting
 @subsection TriPlot
 @cindex TriPlot
 
@@ -2339,7 +2389,7 @@ gr->ContZ(c.Sum("z"),0,-1);
 @deftypefnx {Метод класса @code{mglGraph} (C++, Python)} @code{void} TriPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
 @deftypefnx {Функция С} @code{void} mgl_triplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
 @deftypefnx {Функция С} @code{void} mgl_triplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
-Рисует поверхность из треугольников. Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{Dots}, @ref{Crust}.
+Рисует поверхность из треугольников. Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{Dots}, @ref{Crust}, @ref{QuadPlot}, @ref{TriCont}.
 @end deftypefn
 
 @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} TriPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
@@ -2348,7 +2398,43 @@ gr->ContZ(c.Sum("z"),0,-1);
 @end deftypefn
 
 @c ==================================================================
- at node Plots by formula, SimplePlot, TriPlot, Other plotting
+ at node TriCont, QuadPlot, TriPlot, Other plotting
+ at subsection TriCont
+ at cindex TriCont
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+ at deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+ at deftypefnx {C function} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{float} zVal)
+ at deftypefnx {C function} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal)
+Рисует линии уровня поверхности из треугольников при @var{z} = @var{zVal} (или для @var{z=v}[k] если @code{zVal==NAN}). Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{TriPlot}, @ref{Cont}.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN})
+ at deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN})
+ at deftypefnx {C function} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{num}, @code{float} zVal)
+ at deftypefnx {C function} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{num}, @code{float} zVal)
+Аналогично предыдущему с вектором @var{v} из @var{num} элементов равно распределенных в интервале [@var{Cmin}, @var{Cmax}].
+ at end deftypefn
+
+ at c ==================================================================
+ at node QuadPlot, Plots by formula, TriCont, Other plotting
+ at subsection QuadPlot
+ at cindex QuadPlot
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""})
+ at deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""})
+ at deftypefnx {C function} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch)
+ at deftypefnx {C function} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch)
+Рисует поверхность из четырехугольников. Вершины четырехугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 4 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет четырехугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{TriPlot}.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN})
+ at deftypefnx {C function} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}sch, @code{float} zVal)
+Как предыдущий с @var{z}[i]=@var{zVal}.
+ at end deftypefn
+
+ at c ==================================================================
+ at node Plots by formula, SimplePlot, QuadPlot, Other plotting
 @subsection Графики функций
 @cindex Plot
 @cindex Surf
@@ -2395,7 +2481,7 @@ gr->ContZ(c.Sum("z"),0,-1);
 @cindex Fit2
 @cindex Fit3
 
-Эти функции подбирают параметры функции для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от 1 аргументы @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения. Параметр @var{print}=@code{true} включает вывод найденной формулы в @var{Message} (@pxref{Error handling}).
+Эти функции подбирают параметры функции для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от одного аргумента @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения. Параметр @var{print}=@code{true} включает вывод найденной формулы в @var{Message} (@pxref{Error handling}).
 
 Функции Fit() и FitS() не рисуют полученные массивы. Они заполняют массив @var{fit} по формуле @samp{f} с найденными коэффициентами и возвращают @math{\chi^2} ошибку аппроксимации. При этом, координаты @samp{x,y,z} равнораспределены в интервале @var{Min}-- at var{Max}. Число точек в @var{fit} выбирается максимальным из размера массива @var{fit} и значения переменной @var{FitPnts}. Функции используют библиотеку GSL. @sref{Fitting sample}
 
diff --git a/texinfo/data_en.texi b/texinfo/data_en.texi
index c1a1681..ffc8eeb 100644
--- a/texinfo/data_en.texi
+++ b/texinfo/data_en.texi
@@ -1,8 +1,7 @@
 @c ------------------------------------------------------------------
- at node mglData class, Other classes, Widget classes, Top
 @chapter mglData class
 
-Class for working with data array. This class is defined in @code{#include <mgl/mgl_data.h>}. The class has functions for easy and safe allocation, resizing, loading and saving, modifying of data arrays. Also it can numerically differentiate and integrate data, interpolate, fill data by formula and so on. Class supports data with dimensions up to 3 (like function of 3 variables - x,y,z). The internal representation of numbers is float. Float type was chosen because it has smaller size in memory and usually it has enough precision in plotting purposes.
+Class for working with data array. This class is defined in @code{#include <mgl/mgl_data.h>}. The class has functions for easy and safe allocation, resizing, loading and saving, modifying of data arrays. Also it can numerically differentiate and integrate data, interpolate, fill data by formula and so on. Class supports data with dimensions up to 3 (like function of 3 variables -- x,y,z). The internal representation of numbers is float. Float type was chosen because it has smaller size in memory and usually it has enough precision in plotting purposes.
 
 @menu
 * Public variables::            
@@ -11,7 +10,7 @@ Class for working with data array. This class is defined in @code{#include <mgl/
 * Rearrange::                   
 * File I/O::                    
 * Make another data::           
-* Functions on direction::      
+* Change data::      
 * Interpolation::               
 * Informational functions::     
 * Operators::                   
@@ -88,9 +87,9 @@ Allocates memory and copies the data from the @code{gsl_vector *} structure.
 @deftypefnx {C function} @code{void} mgl_data_set_matrix (@code{HMDT} dat, @code{gsl_matrix *}m)
 Allocates memory and copies the data from the @code{gsl_matrix *} structure.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{inline void} Set (@code{const mglData &}dat)
- at deftypefnx {C function} @code{void} mgl_data_set (@code{HMDT} dat, @code{const HMDT} d)
-Copies the data from mglData instance @var{dat}.
+ at deftypefn {Method on @code{mglData} (C++, Python)} @code{inline void} Set (@code{const mglData &}from)
+ at deftypefnx {C function} @code{void} mgl_data_set (@code{HMDT} dat, @code{const HMDT} from)
+Copies the data from mglData instance @var{from}.
 @end deftypefn
 
 @deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const std::vector<int> &}d)
@@ -122,14 +121,11 @@ Fills the value of array according to the formula in string @var{eq}. Formula is
 @end deftypefn
 
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{int} dim=@code{0})
- at deftypefnx {C function} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim)
-Function fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}.
- at end deftypefn
-
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v)
+ at deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v)
 @deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v, @code{const mglData &}w)
+ at deftypefnx {C function} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim)
 @deftypefnx {C function} @code{void} mgl_data_modify_vw (@code{HMDT} dat, @code{const char *}eq, @code{const HMDT} v, @code{const HMDT} w)
-Function fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}.
+Fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in range [0,1] (in difference from @code{Fill} functions). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat} which can be @code{NULL} (i.e. can be omitted). If @var{dim}>0 is specified then modification will be fulfilled only for slices >=@var{dim}.
 @end deftypefn
 
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Put (@code{float} val, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1})
@@ -202,7 +198,7 @@ Transposes (shift order of) dimensions of the data. New order of dimensions is s
 @end deftypefn
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Squeeze (@code{int} rx, @code{int} ry=@code{1}, @code{int} rz=@code{1}, @code{bool} smooth=@code{false})
 @deftypefnx {C function} @code{void} mgl_data_squeeze (@code{HMDT} dat, @code{int} rx, @code{int} ry, @code{int} rz, @code{int} smooth)
-Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{squeeze} set to use smoothing
+Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{smooth} set to use smoothing
 @iftex
 (i.e. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}).
 @end iftex
@@ -249,15 +245,6 @@ Delete @var{num} slices along @var{dir}-direction at position @var{pos}.
 @node File I/O, Make another data, Rearrange, mglData class
 @section File I/O
 @cindex Read
- at cindex ReadMat
- at cindex ReadAll
- at cindex ReadRange
- at cindex ReadHDF
- at cindex Save
- at cindex SaveHDF
- at cindex Export
- at cindex Import
-
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname)
 @deftypefnx {C function} @code{void} mgl_data_read (@code{HMDT} dat, @code{const char *}fname)
 Reads data from tab-separated text file with auto determining sizes of the data.
@@ -266,58 +253,55 @@ Reads data from tab-separated text file with auto determining sizes of the data.
 @deftypefnx {C function} @code{void} mgl_data_read_dim (@code{HMDT} dat, @code{const char *}fname, @code{int} mx, @code{int} my, @code{int} mz)
 Reads data from text file with specified data sizes. This function does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative.
 @end deftypefn
+ at cindex ReadMat
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadMat (@code{const char *}fname, @code{int} dim=@code{2})
 @deftypefnx {C function} @code{void} mgl_data_read_mat (@code{HMDT} dat, @code{const char *}fname, @code{int} dim)
 Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions.
 @end deftypefn
 
+ at cindex ReadRange
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadRange (@code{const char *}templ, @code{float} from, @code{float} to, @code{float} step=@code{1.f}, @code{bool} as_slice=@code{false})
 Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{from} to @var{to} with step @var{step}. The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}.
 @end deftypefn
+ at cindex ReadAll
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadAll (@code{const char *}templ, @code{bool} as_slice=@code{false})
 Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}.
 @end deftypefn
 
+ at cindex Save
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Save (@code{const char *}fname, @code{int} ns=@code{-1}) @code{const}
 @deftypefnx {C function} @code{void} mgl_data_save (@code{const HMDT} dat, @code{const char *}fname, @code{int} ns)
-Saves the whole data array (for @var{ns}=@code{-1}) or only ns-th slice to text file. If @var{ns}>0 then only @var{ns}-th slice (or column for 2D array) will be saved.
+Saves the whole data array (for @var{ns}=@code{-1}) or only @var{ns}-th slice to text file.
 @end deftypefn
 
+ at cindex ReadHDF
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadHDF (@code{const char *}fname, @code{const char *}dname)
-Reads data array named @var{dname} from HDF file. This function does nothing if NO_HDF5 was defined during library compilation.
+Reads data array named @var{dname} from HDF5 or HDF4 file. This function does nothing if NO_HDF5|NO_HDF4 was defined during library compilation.
 @end deftypefn
+ at cindex SaveHDF
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} SaveHDF (@code{const char *}fname, @code{const char *}dname, @code{bool} rewrite=@code{false}) @code{const}
-Saves data array named @var{dname} from HDF file. This function does nothing if NO_HDF5 was defined during library compilation.
+Saves data array named @var{dname} from HDF5 or HDF4 file. This function does nothing if NO_HDF5|NO_HDF4 was defined during library compilation.
 @end deftypefn
 
+ at cindex Import
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Import (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{1})
 @deftypefnx {C function} @code{void} mgl_data_import (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2)
 Reads data from bitmap file (now support only PNG format). The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{scheme} (@pxref{Color scheme}).
 @end deftypefn
+ at cindex Export
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Export (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{0}, @code{int} ns=@code{-1}) const
 @deftypefnx {C function} @code{void} mgl_data_export (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2, @code{int} ns) const
 Saves data matrix (or @code{ns}-th slice for 3d data) to bitmap file (now support only PNG format). The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{scheme} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array.
 @end deftypefn
 
 @c ------------------------------------------------------------------
- at node Make another data, Functions on direction, File I/O, mglData class
+ at node Make another data, Change data, File I/O, mglData class
 @section Make another data
- at cindex SubData
- at cindex Column
- at cindex SetColumnId
- at cindex Hist
- at cindex Momentum
- at cindex Sum
- at cindex Max
- at cindex Min
- at cindex Combine
- at cindex Evaluate
- at cindex Resize
- at cindex Trace
 
+ at cindex SubData
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} SubData (@code{int} xx, @code{int} yy=@code{-1}, @code{int} zz=@code{-1}) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_subdata (@code{const HMDT} dat, @code{int} xx, @code{int} yy, @code{int} zz)
-Extracts sub-array data from the original data array keeping fixed positive index. For example @code{SubData(-1,2)} extracts 3d row (indexes are zero based), @code{SubData(4,-1)} extracts 5th column, @code{SubData(-1,-1,3)} extracts 4th slice and so on. The most convenient way is to use this function as initialization of other @code{mglData} variable like @code{mglData a1(a.SubData(-1,-1,3))}.
+Extracts sub-array data from the original data array keeping fixed positive index. For example @code{SubData(-1,2)} extracts 3d row (indexes are zero based), @code{SubData(4,-1)} extracts 5th column, @code{SubData(-1,-1,3)} extracts 4th slice and so on.
 @end deftypefn
 
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} SubData (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz) @code{const}
@@ -325,19 +309,24 @@ Extracts sub-array data from the original data array keeping fixed positive inde
 Extracts sub-array data from the original data array for indexes specified by arrays @var{xx}, @var{yy}, @var{zz} (indirect access). The resulting array have the same dimensions as input arrays for 2D and 3D arguments. This function work like previous one for 1D arguments (or numbers). The dimensions of all argument must be the same if they are 2D or 3D arrays.
 @end deftypefn
 
+ at cindex Column
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Column (@code{const char *}eq) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_column (@code{const HMDT} dat, @code{const char *}eq)
 Get column (or slice) of the data filled by formula @var{eq} of other named columns. For example, @code{Column("n*w^2/exp(t)");}. The column ids must be defined first by @code{SetColumnId()} function.
 @end deftypefn
+
+ at cindex SetColumnId
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} SetColumnId (@code{const char *}ids)
 @deftypefnx {C function} @code{void} mgl_data_set_id (@code{HMDT} dat, @code{const char *}ids)
 Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces).
 @end deftypefn
 
+ at cindex Trace
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Trace () @code{const}
 Gets array of diagonal elements a[i,i] (for 2D case) or a[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1.
 @end deftypefn
 
+ at cindex Hist
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Hist (@code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_hist (@code{const HMDT} dat, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub)
 Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram).
@@ -346,6 +335,8 @@ Creates @var{n}-th points distribution of the data values in range [@var{v1}, @v
 @deftypefnx {C function} @code{HMDT} mgl_data_hist_w (@code{const HMDT} dat, @code{const HMDT} w, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub)
 Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Array @var{w} specifies weights of the data elements. Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram).
 @end deftypefn
+
+ at cindex Momentum
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Momentum (@code{char} dir, @code{const char *}how) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_momentum (@code{const HMDT} dat, @code{char} dir, @code{const char *}how)
 Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as
@@ -358,33 +349,39 @@ res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij
 if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1].
 @end deftypefn
 
+ at cindex Sum
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Sum (@code{const char *}dir) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_sum (@code{const HMDT} dat, @code{const char *}dir)
 Gets array which is the result of summation in given direction or direction(s).
 @end deftypefn
+ at cindex Max
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Max (@code{const char *}dir) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_max_dir (@code{const HMDT} dat, @code{const char *}dir)
 Gets array which is the maximal data values in given direction or direction(s).
 @end deftypefn
+ at cindex Min
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Min (@code{const char *}dir) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_min_dir (@code{const HMDT} dat, @code{const char *}dir)
 Gets array which is the maximal data values in given direction or direction(s).
 @end deftypefn
 
+ at cindex Combine
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Combine (@code{const mglData &}a) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_combine (@code{const HMDT} dat, @code{const HMDT} a)
 Return direct multiplication of arrays (like, res[i,j] = this[i]*a[j] and so on).
 @end deftypefn
 
+ at cindex Evaluate
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{bool} norm=@code{true}) @code{const}
 @deftypefnx {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{bool} norm=@code{true}) @code{const}
 @deftypefnx {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{const mglData &}kdat, @code{bool} norm=@code{true}) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_evaluate_i (@code{const HMDT} dat, @code{const HMDT} idat, @code{int} norm)
 @deftypefnx {C function} @code{HMDT} mgl_data_evaluate_ij (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{int} norm)
 @deftypefnx {C function} @code{HMDT} mgl_data_evaluate_ijk (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{const HMDT} kdat, @code{int} norm)
-Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly.
+Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in ranges [0,nx], [0,ny], [0,nz] correspondingly.
 @end deftypefn
 
+ at cindex Resize
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Resize (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}, @code{float} x1=@code{0}, @code{float} x2=@code{1}, @code{float} y1=@code{0}, @code{float} y2=@code{1}, @code{float} z1=@code{0}, @code{float} z2=@code{1}) @code{const}
 @deftypefnx {C function} @code{HMDT} mgl_data_resize (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz)
 @deftypefnx {C function} @code{HMDT} mgl_data_resize_box (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2)
@@ -392,72 +389,108 @@ Resizes the data to new size @var{mx}, @var{my}, @var{mz} from box (part) [@var{
 @end deftypefn
 
 @c ------------------------------------------------------------------
- at node Functions on direction, Interpolation, Make another data, mglData class
- at section Functions on direction
- at cindex CumSum
- at cindex Integral
- at cindex Diff
- at cindex Diff2
- at cindex Swap
- at cindex Mirror
- at cindex Sew
- at cindex Smooth
- at cindex Envelop
- at cindex Norm
- at cindex NormSl
+ at node Change data, Interpolation, Make another data, mglData class
+ at section Change data
 
 These functions change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondengly.
 
+ at cindex CumSum
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} CumSum (@code{const char *}dir)
 @deftypefnx {C function} @code{void} mgl_data_cumsum (@code{HMDT} dat, @code{const char *}dir)
-CCumulative summation of the data in given direction or directions.
+Cumulative summation of the data in given direction or directions.
 @end deftypefn
+
+ at cindex Integral
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Integral (@code{const char *}dir)
 @deftypefnx {C function} @code{void} mgl_data_integral (@code{HMDT} dat, @code{const char *}dir)
 Integrates (like cumulative summation) the data in given direction or directions.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir)
+
+ at cindex Diff
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir)
 Differentiates the data in given direction or directions.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y)
- at deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z)
- at deftypefnx {C function} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{const HMDT} x, @code{const HMDT}y, @code{const HMDT}z)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y)
+ at deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z)
+ at deftypefnx {Функция С} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{const HMDT} x, @code{const HMDT}y, @code{const HMDT}z)
 Differentiates the data specified parametrically in direction @var{x} with @var{y}, @var{z}=constant. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{Diff(x,y);} and usual derivative along @samp{y} will be @code{Diff(y,x);}.
 @end deftypefn
 
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff2 (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_diff2 (@code{const char *}dir)
+ at cindex Diff2
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff2 (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_diff2 (@code{const char *}dir)
 Double-differentiates (like Laplace operator) the data in given direction.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Swap (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir)
+
+ at cindex SinFFT
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} SinFFT (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_sinfft (@code{HMDT} dat, @code{const char *}dir)
+Do Sine transform of the data in given direction or directions. The Sine transform is @math{\sum a_i \sin(k i)}.
+ at end deftypefn
+
+ at cindex CosFFT
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} CosFFT (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_cosfft (@code{HMDT} dat, @code{const char *}dir)
+Do Cosine transform of the data in given direction or directions. The Cosine transform is @math{\sum a_i \cos(k i)}.
+ at end deftypefn
+
+ at cindex Hankel
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Hankel (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_hankel (@code{HMDT} dat, @code{const char *}dir)
+Do Hankel transform of the data in given direction or directions. The Hankel transform is @math{\sum a_i J_0(k i)}.
+ at end deftypefn
+
+
+ at cindex Swap
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Swap (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir)
 Swaps the left and right part of the data in given direction (useful for Fourier spectrum).
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Mirror (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir)
+
+ at cindex Roll
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Roll (@code{char} dir, @code{num})
+ at deftypefnx {Функция С} @code{void} mgl_data_roll (@code{HMDT} dat, @code{char} dir, @code{num})
+Rolls the data along direction @var{dir}. Resulting array will be out[i] = ini[(i+num)%nx] if @code{dir='x'}.
+ at end deftypefn
+
+ at cindex Mirror
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Mirror (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir)
 Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Sew (@code{const char *}dir, @code{float} da=@code{2*M_PI})
- at deftypefnx {C function} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{float} da)
+
+ at cindex Sew
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Sew (@code{const char *}dir, @code{float} da=@code{2*M_PI})
+ at deftypefnx {Функция С} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{float} da)
 Remove value steps (like phase jumps after inverse trigonometric functions) with period @var{da} in given direction.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Smooth (@code{int} Type, @code{const char *}dir, @code{float} delta=@code{0})
- at deftypefnx {C function} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{int} Type, @code{float} delt, @code{const char *}dirs)
+
+ at cindex Smooth
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Smooth (@code{int} Type, @code{const char *}dir, @code{float} delta=@code{0})
+ at deftypefnx {Функция С} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{int} Type, @code{float} delt, @code{const char *}dirs)
 Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @code{SMOOTH_NONE} does nothing for @var{delta}=0 or approaches data to zero with the step @var{delta}, @code{SMOOTH_LINE_3} linear averaging by 3 points, @code{SMOOTH_LINE_5} linear averaging by 5 points, @code{SMOOTH_QUAD_5} quadratic averaging by 5 points. Parameter @var{delta} forbids to change values of array more than @var{delta} from the original ones. String @var{dirs} specifies the dimensions which will be smoothed. It may contain characters: 'x' for 1st dimension, 'y' for 2nd dimension, 'z' for 3d dimension.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Smooth (@code{const char *}dir)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Smooth (@code{const char *}dir)
 Smooths the data on specified direction(s). This is the same as @code{Smooth()} but argument @var{Type} is specified in string as @samp{0} for @code{SMOOTH_NONE}, @samp{3} for @code{SMOOTH_LINE_3}, @samp{5} for @code{SMOOTH_LINE_5}. If string @var{dir} don't contain digits @samp{035} then @var{Type}=@code{SMOOTH_QUAD_5} is used.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Envelop (@code{char} dir=@code{'x'})
- at deftypefnx {C function} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir)
+
+ at cindex Envelop
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Envelop (@code{char} dir=@code{'x'})
+ at deftypefnx {Функция С} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir)
 Find envelop for data values along direction @var{dir}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} NormSl (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep_en=@code{true}, @code{bool} sym=@code{false})
- at deftypefnx {C function} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{float} v1, @code{float} v2, @code{char} dir, @code{int} keep_en, @code{int} sym)
+ at cindex Norm
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Norm (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{bool} sym=@code{false}, @code{int} dim=@code{0})
+Normalizes the data to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}.
+ at end deftypefn
+
+ at cindex NormSl
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} NormSl (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep_en=@code{true}, @code{bool} sym=@code{false})
+ at deftypefnx {Функция С} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{float} v1, @code{float} v2, @code{char} dir, @code{int} keep_en, @code{int} sym)
 Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep_en} is set then maximal value of k-th slice will be limited by 
 @iftex
 @math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}.
@@ -466,40 +499,36 @@ Normalizes data slice-by-slice along direction @var{dir} the data in slices to r
 @math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}.
 @end ifnottex
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Norm (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{bool} sym=@code{false}, @code{int} dim=@code{0})
-Normalizes the data to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}.
- at end deftypefn
 
 @c ------------------------------------------------------------------
- at node Interpolation, Informational functions, Functions on direction, mglData class
+ at node Interpolation, Informational functions, Change data, mglData class
 @section Interpolation
 @cindex Spline
- at cindex Spline1
- at cindex Linear
- at cindex Linear1
- at cindex Spline5
- at cindex v
-
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_spline (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z)
 Interpolates data by cubic spline to the given point @var{x} in [0...nx-1], @var{y} in [0...ny-1], @var{z} in [0...nz-1].
 @end deftypefn
+ at cindex Spline1
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline1 (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_spline1 (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z)
 Interpolates data by cubic spline to the given point @var{x}, @var{y}, @var{z} which assumed to be normalized in range [0, 1].
 @end deftypefn
+ at cindex Linear
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Linear (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_linear (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z)
 Interpolates data by linear function to the given point @var{x} in [0...nx-1], @var{y} in [0...ny-1], @var{z} in [0...nz-1].
 @end deftypefn
+ at cindex Linear1
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Linear1 (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_linear1 (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z)
 Interpolates data by linear function to the given point @var{x}, @var{y}, @var{z} which assumed to be normalized in range [0, 1].
 @end deftypefn
+ at cindex v
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} v (@code{int} i, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_get_value (@code{const HMDT} dat, @code{int} i, @code{int} j, @code{int} k)
 Gets the value in specified cell of the data with border checking.
 @end deftypefn
+ at cindex Spline5
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline5 (@code{float} x, @code{float} y, @code{float} z, @code{float} &dx, @code{float} &dy, @code{float} &dz) @code{const}
 Interpolate by 5-th order splain the data to given point @var{x}, @var{y}, @var{z} which normalized in range [0, 1] and evaluate its derivatives.
 @end deftypefn
@@ -515,68 +544,67 @@ Gets the pointer to internal data array.
 @node Informational functions, Operators, Interpolation, mglData class
 @section Informational functions
 @cindex PrintInfo
- at cindex Maximal
- at cindex Minimal
- at cindex Momentum
- at cindex Find
- at cindex Last
- at cindex FindAny
-
- at deftypefn {Method on @code{mglData} (C++)} @code{void} PrintInfo (@code{char *}buf, @code{bool} all=@code{false}) @code{const}
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} PrintInfo (@code{char *}buf, @code{bool} all=@code{false}) @code{const}
 Print information about the data (sizes and momentum) to string @var{buf}. Parameter @var{all} set to print most of information (if @code{true}) or just basic one like dimensions, maximal an minimal values.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++)} @code{void} PrintInfo (@code{FILE *}fp) @code{const}
-Print information about the data (sizes and momentum) to FILE (for example, stdout)
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} PrintInfo (@code{FILE *}fp) @code{const}
+Print information about the data (sizes and momentum) to FILE (for example, stdout).
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal () @code{const}
- at deftypefnx {C function} @code{float} mgl_data_max (@code{const HMDT} dat)
+ at cindex Maximal
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal () @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_max (@code{const HMDT} dat)
 Gets maximal value of the data.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal () @code{const}
- at deftypefnx {C function} @code{float} mgl_data_min (@code{HMDT} dat) @code{const}
+ at cindex Minimal
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal () @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_min (@code{HMDT} dat) @code{const}
 Gets minimal value of the data.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_max_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_max_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k)
 Gets maximal value of the data and its position in the array to variables @var{i}, @var{j}, @var{k}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_min_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_min_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k)
 Gets minimal value of the data and its position in the array to variables @var{i}, @var{j}, @var{k}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_max_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_max_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z)
 Gets maximal value of the data and its approximated (interpolated) position to variables @var{i}, @var{j}, @var{k}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_min_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_min_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z)
 Gets minimal value of the data and its approximated (interpolated) position to variables @var{i}, @var{j}, @var{k}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_momentum_mw (@code{const HMDT} dat, @code{char} dir, @code{float} *m, @code{float} *w)
+ at cindex Momentum
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_momentum_mw (@code{const HMDT} dat, @code{char} dir, @code{float} *m, @code{float} *w)
 Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}) and second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w, @code{float} &s, @code{float} &k) @code{const}
-Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}), second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}, third momentum (skewness, @math{s = \sum (\xi_i-m)^3 a_i/ I w^3}) and fourth momentum (kurtosis, @math{k = \sum (\xi_i-m)^4 a_i / 3 I w^4})) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N} and so on.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w, @code{float} &s, @code{float} &k) @code{const}
+Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}), second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}), third momentum (skewness, @math{s = \sum (\xi_i-m)^3 a_i/ I w^3}) and fourth momentum (kurtosis, @math{k = \sum (\xi_i-m)^4 a_i / 3 I w^4}) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N} and so on.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Find (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_first (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k)
+ at cindex Find
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Find (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_first (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k)
 Find position (after specified in @var{i}, @var{j}, @var{k}) of first nonzero value of formula @var{cond}. Function return the data value at found position.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Last (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_last (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k)
+ at cindex Last
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Last (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_last (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k)
 Find position (before specified in @var{i}, @var{j}, @var{k}) of last nonzero value of formula @var{cond}. Function return the data value at found position.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{int} Find (@code{const char *}cond, @code{char} dir, @code{int} i=@code{0}, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_find (@code{const HMDT} dat, @code{const char *}cond, @code{int} i, @code{int} j, @code{int} k)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{int} Find (@code{const char *}cond, @code{char} dir, @code{int} i=@code{0}, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_find (@code{const HMDT} dat, @code{const char *}cond, @code{int} i, @code{int} j, @code{int} k)
 Return position of first in direction @var{dir} nonzero value of formula @var{cond}. The search is started from point @{i,j,k@}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{bool} FindAny (@code{const char *}cond) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_find_any (@code{const HMDT} dat, @code{const char *}cond)
+ at cindex FindAny
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{bool} FindAny (@code{const char *}cond) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_find_any (@code{const HMDT} dat, @code{const char *}cond)
 Determines if any nonzero value of formula in the data array.
 @end deftypefn
 
@@ -666,32 +694,32 @@ These functions are not methods of @code{mglData} class. However it have additio
 
 @deftypefn {Global function} @code{mglData} mglTransform (@code{const mglData &}real, @code{const mglData &}imag, @code{const char *}type)
 @deftypefnx {C function} @code{HMDT} mgl_transform (@code{const HMDT} real, @code{const HMDT} imag, @code{const char *}type)
-Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
+Do integral transformation of complex data @var{real}, @var{imag} on specified direction. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{s} is Sine transform, @samp{c} is Cosine transform, @samp{h} is Hankel transform, @samp{n} or @samp{ } is no transformation.
 @end deftypefn
 
 @deftypefn {Global function} @code{mglData} mglTransformA @code{const mglData &}ampl, @code{const mglData &}phase, @code{const char *}type)
 @deftypefnx {C function} @code{HMDT} mgl_transform_a @code{const HMDT} ampl, @code{const HMDT} phase, @code{const char *}type)
-Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
+The same as previous but with specified amplitude @var{ampl} and phase @var{phase} of complex numbers.
 @end deftypefn
 
 @deftypefn {Global function} @code{mglData} mglSTFA (@code{const mglData &}real, @code{const mglData &}imag, @code{int} dn, @code{char} dir=@code{'x'})
 @deftypefnx {C function} @code{HMDT} mgl_data_stfa (@code{const HMDT} real, @code{const HMDT} imag, @code{int} dn, at code{char} dir)
-Short time Fourier analysis for real and imaginary parts. Output  is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
+Short time Fourier transformation for real and imaginary parts. Output  is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
 @end deftypefn
 
 @deftypefn {Global function} @code{mglData} mglPDE (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{mglPoint} Min, @code{mglPoint} Max, @code{float} dz=@code{0.1}, @code{float} k0=@code{100})
 @deftypefnx {C function} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{float} dz, @code{float} k0)
-Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{Min}, @var{Max} set the bounding box for the solution. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE sample} 
+Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{Min}, @var{Max} set the bounding box for the solution. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE sample}  @sref{PDE sample}
 @end deftypefn
 
 @deftypefn {Global function} @code{mglData} mglRay (@code{const char *}ham, @code{mglPoint} r0, @code{mglPoint} p0, @code{float} dt=@code{0.1}, @code{float} tmax=@code{10})
 @deftypefnx {C function} @code{HMDT} mgl_ray_trace (@code{const char *}ham, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} px, @code{float} py, @code{float} pz, @code{float} dt, @code{float} tmax)
-Solves GO ray equation like dr/dt = d @var{ham}/dp, dp/dt = -d @var{ham}/dr. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @var{r0}, @var{p0}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}.
+Solves GO ray equation like dr/dt = d @var{ham}/dp, dp/dt = -d @var{ham}/dr. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @var{r0}, @var{p0}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. @sref{Beam tracing sample}
 @end deftypefn
 
 @deftypefn {Global function} @code{mglData} mglQO2d (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{const mglData &}ray, @code{float} r=@code{1}, @code{float} k0=@code{100}, @code{mglData *}xx=@code{0}, @code{mglData *}yy=@code{0}, @code{bool} UseR=@code{true})
 @deftypefnx {C function} @code{HMDT} mgl_qo2d_solve (@code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{const HMDT} ray, @code{float} r, @code{float} k0, @code{HMDT} xx, @code{HMDT} yy)
-Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} 
+Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. See also @code{mglPDE()}. @sref{Beam tracing sample} 
 @end deftypefn
 
 @deftypefn {Global function} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y)
diff --git a/texinfo/data_ru.texi b/texinfo/data_ru.texi
index c1a1681..7d05004 100644
--- a/texinfo/data_ru.texi
+++ b/texinfo/data_ru.texi
@@ -1,8 +1,7 @@
 @c ------------------------------------------------------------------
- at node mglData class, Other classes, Widget classes, Top
- at chapter mglData class
+ at chapter Класс mglData
 
-Class for working with data array. This class is defined in @code{#include <mgl/mgl_data.h>}. The class has functions for easy and safe allocation, resizing, loading and saving, modifying of data arrays. Also it can numerically differentiate and integrate data, interpolate, fill data by formula and so on. Class supports data with dimensions up to 3 (like function of 3 variables - x,y,z). The internal representation of numbers is float. Float type was chosen because it has smaller size in memory and usually it has enough precision in plotting purposes.
+Это класс для работы с массивами данных, определенный в @code{#include <mgl/mgl_data.h>}. Он содержит функции для выделения памяти и изменения размера данных, чтения данных из файла, численного дифференцирования/интегрирования/интерполяции и пр., заполнения по текстовой формуле и т.д. Класс позволяет работать с данными размерности не более 3 (как функции от трех переменных -- x,y,z). По умолчанию внутреннее представление данных -- float, выбранный в силу меньшего размера занимаемой памяти и достаточной для построения графиков точности. Базовый тип можно сменить на этапе установки (@pxref{Installation and using}) указав опцию @code{--enable-double}. Однако, в дальнейшем в документации будет использован тип @code{float}.
 
 @menu
 * Public variables::            
@@ -11,7 +10,7 @@ Class for working with data array. This class is defined in @code{#include <mgl/
 * Rearrange::                   
 * File I/O::                    
 * Make another data::           
-* Functions on direction::      
+* Change data::      
 * Interpolation::               
 * Informational functions::     
 * Operators::                   
@@ -20,154 +19,151 @@ Class for working with data array. This class is defined in @code{#include <mgl/
 
 @c ------------------------------------------------------------------
 @node Public variables, Create and delete, , mglData class
- at section Public variables
+ at section Переменные
 
 @deftypecv {Variable} mglData @code{float *} a
-Data array itself. The flat data representation is used. For example, matrix [nx x ny] is presented as flat (1d-) array with length nx*ny. The element with indexes @{i, j, k@} is a[i+nx*j+nx*ny*k] (indexes are zero based).
+Указатель на массив данных. Это одномерный массив. Например, матрица [nx x ny x nz] представляется одномерным массивом длиной nx*ny*nz, где элемент с индексами @{i, j, k@} находится как a[i+nx*j+nx*ny*k] (индексы отсчитываются от нуля).
 @end deftypecv
 @deftypecv {Variable} mglData @code{int} nx
-Number of points in 1st dimensions ('x' dimension).
+Размер массива по 1-ой размерности ('x' размерности).
 @end deftypecv
 @deftypecv {Variable} mglData @code{int} ny
-Number of points in 2nd dimensions ('y' dimension).
+Размер массива по 2-ой размерности ('y' размерности).
 @end deftypecv
 @deftypecv {Variable} mglData @code{int} nz
-Number of points in 3d dimensions ('z' dimension).
+Размер массива по 3-ей размерности ('z' размерности).
 @end deftypecv
 @deftypecv {Variable} mglData @code{char *} id
-Column (or slice if nz>1) names -- one character per column.
+Имена колонки (или среза при nz>1) -- один символ на колонку.
 @end deftypecv
 
 
 @c ------------------------------------------------------------------
 @node Create and delete, Fill, Public variables, mglData class
- at section Create and delete
+ at section Создание и удаление
 @cindex mglData
 @cindex Set
 
- at defop Constructor mglData @code{} mglData (@code{int} mx=@code{1}, @code{int} my=@code{1}, @code{int} mz=@code{1})
-Default constructor. Allocates the memory for data array and initializes it by zero.
+ at defop Конструктор @code{mglData} @code{} mglData (@code{int} mx=@code{1}, @code{int} my=@code{1}, @code{int} mz=@code{1})
+Конструктор по умолчанию. Выделяет память для массива данных и заполняет ее нулями.
 @end defop
- at defop Constructor mglData @code{} mglData (@code{const char *}fname)
-Initializes the data by reading from file.
+ at defop Конструктор @code{mglData} @code{} mglData (@code{const char *}fname)
+Читает данные из файла.
 @end defop
- at defop Constructor mglData @code{} mglData (@code{const mglData} &dat)
-Initiates by other @code{mglData} instance.
+ at defop Конструктор @code{mglData} @code{} mglData (@code{const mglData} &dat)
+Копирует данные из другого экземпляра @code{mglData}.
 @end defop
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Create (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1})
- at deftypefnx {C function} @code{void} mgl_data_create (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz)
-Creates or recreates the array with specified size and fills it by zero. This function does nothing if one of parameters @var{mx}, @var{my}, @var{mz} is zero or negative.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Create (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1})
+ at deftypefnx {Функция С} @code{void} mgl_data_create (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz)
+Создает/пересоздает массив данных указанного размера и заполняет его нулями. Ничего не делает при @var{mx}, @var{my}, @var{mz} отрицательных или равных нулю.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const float *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1})
- at deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const double *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1})
- at deftypefnx {C function} @code{void} mgl_data_set_float (@code{HMDT} dat, @code{const float *}A, @code{int} NX, @code{int} NY, @code{int} NZ)
- at deftypefnx {C function} @code{void} mgl_data_set_double (@code{HMDT} dat, @code{const double *}A, @code{int} NX, @code{int} NY, @code{int} NZ)
-Allocates memory and copies the data from the @strong{flat} @code{float*} or @code{double*} array.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const float *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1})
+ at deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const double *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1})
+ at deftypefnx {Функция С} @code{void} mgl_data_set_float (@code{HMDT} dat, @code{const float *}A, @code{int} NX, @code{int} NY, @code{int} NZ)
+ at deftypefnx {Функция С} @code{void} mgl_data_set_double (@code{HMDT} dat, @code{const double *}A, @code{int} NX, @code{int} NY, @code{int} NZ)
+Выделяет память и копирует данные из массивов типа @code{float*} или @code{double*}, т.е. из массивов определенных как @code{float a[NX*NY*NZ];}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const float **}A, @code{int} N1, @code{int} N2)
- at deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const double **}A, @code{int} N1, @code{int} N2)
- at deftypefnx {C function} @code{void} mgl_data_set_float2 (@code{HMDT} dat, @code{const float **}A, @code{int} N1, @code{int} N2)
- at deftypefnx {C function} @code{void} mgl_data_set_double2 (@code{HMDT} dat, @code{const double **}A, @code{int} N1, @code{int} N2)
-Allocates memory and copies the data from the @code{float**} or @code{double**} array with dimensions @var{N1}, @var{N2}, i.e. from array defined as @code{float a[N1][N2];}.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const float **}A, @code{int} N1, @code{int} N2)
+ at deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const double **}A, @code{int} N1, @code{int} N2)
+ at deftypefnx {Функция С} @code{void} mgl_data_set_float2 (@code{HMDT} dat, @code{const float **}A, @code{int} N1, @code{int} N2)
+ at deftypefnx {Функция С} @code{void} mgl_data_set_double2 (@code{HMDT} dat, @code{const double **}A, @code{int} N1, @code{int} N2)
+Выделяет память и копирует данные из массивов типа @code{float**} или @code{double**} с размерностями @var{N1}, @var{N2}, т.е. из массивов определенных как @code{float a[N1][N2];}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const float ***}A, @code{int} N1, @code{int} N2)
- at deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const double ***}A, @code{int} N1, @code{int} N2)
- at deftypefnx {C function} @code{void} mgl_data_set_float3 (@code{HMDT} dat, @code{const float ***}A, @code{int} N1, @code{int} N2)
- at deftypefnx {C function} @code{void} mgl_data_set_double3 (@code{HMDT} dat, @code{const double ***}A, @code{int} N1, @code{int} N2)
-Allocates memory and copies the data from the @code{float***} or @code{double***} array with dimensions @var{N1}, @var{N2}, @var{N3}, i.e. from array defined as @code{float a[N1][N2][N3];}.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const float ***}A, @code{int} N1, @code{int} N2)
+ at deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const double ***}A, @code{int} N1, @code{int} N2)
+ at deftypefnx {Функция С} @code{void} mgl_data_set_float3 (@code{HMDT} dat, @code{const float ***}A, @code{int} N1, @code{int} N2)
+ at deftypefnx {Функция С} @code{void} mgl_data_set_double3 (@code{HMDT} dat, @code{const double ***}A, @code{int} N1, @code{int} N2)
+Выделяет память и копирует данные из массивов типа @code{float***} или @code{double***} с размерностями @var{N1}, @var{N2}, @var{N3}, т.е. из массивов определенных как @code{float a[N1][N2][N3];}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{gsl_vector *}v)
- at deftypefnx {C function} @code{void} mgl_data_set_vector (@code{HMDT} dat, @code{gsl_vector *}v)
-Allocates memory and copies the data from the @code{gsl_vector *} structure.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{gsl_vector *}v)
+ at deftypefnx {Функция С} @code{void} mgl_data_set_vector (@code{HMDT} dat, @code{gsl_vector *}v)
+Выделяет память и копирует данные из структуры типа @code{gsl_vector *}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{gsl_matrix *}m)
- at deftypefnx {C function} @code{void} mgl_data_set_matrix (@code{HMDT} dat, @code{gsl_matrix *}m)
-Allocates memory and copies the data from the @code{gsl_matrix *} structure.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{gsl_matrix *}m)
+ at deftypefnx {Функция С} @code{void} mgl_data_set_matrix (@code{HMDT} dat, @code{gsl_matrix *}m)
+Выделяет память и копирует данные из структуры типа @code{gsl_matrix *}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{inline void} Set (@code{const mglData &}dat)
- at deftypefnx {C function} @code{void} mgl_data_set (@code{HMDT} dat, @code{const HMDT} d)
-Copies the data from mglData instance @var{dat}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{inline void} Set (@code{const mglData &}from)
+ at deftypefnx {Функция С} @code{void} mgl_data_set (@code{HMDT} dat, @code{const HMDT} from)
+Выделяет память и копирует данные из другого экземпляра @var{from}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const std::vector<int> &}d)
- at deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const std::vector<float> &}d)
- at deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const std::vector<double> &}d)
-Allocates memory and copies the data from the @code{std::vector<T>} array.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const std::vector<int> &}d)
+ at deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const std::vector<float> &}d)
+ at deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const std::vector<double> &}d)
+Выделяет память и копирует данные из массива типа @code{std::vector<T>}.
 @end deftypefn
 
 
- at deftypefn {Method on @code{mglData} (C+, Python)} @code{void} Set (@code{const char *}str, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1})
- at deftypefnx {C function} @code{void} mgl_data_set_values (@code{const char *}str, @code{int} NX, @code{int} NY, @code{int} NZ)
-Allocates memory and scanf the data from the string.
+ at deftypefn {Метод класса @code{mglData} (C+, Python)} @code{void} Set (@code{const char *}str, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1})
+ at deftypefnx {Функция С} @code{void} mgl_data_set_values (@code{const char *}str, @code{int} NX, @code{int} NY, @code{int} NZ)
+Выделяет память и сканирует (scanf) данные из строки.
 @end deftypefn
 
 @c ------------------------------------------------------------------
 @node Fill, Rearrange, Create and delete, mglData class
- at section Fill
+ at section Заполнение данных
 @cindex Fill
 @cindex Modify
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Fill (@code{float} x1, @code{float} x2, @code{char} dir=@code{'x'})
- at deftypefnx {C function} @code{void} mgl_data_fill (@code{HMDT} dat, @code{float} x1, @code{float} x2, @code{char} dir)
-Equidistantly fills the data values to range [@var{x1}, @var{x2}] in direction @var{dir}=@{@samp{x}, at samp{y}, at samp{z}@}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Fill (@code{float} x1, @code{float} x2, @code{char} dir=@code{'x'})
+ at deftypefnx {Функция С} @code{void} mgl_data_fill (@code{HMDT} dat, @code{float} x1, @code{float} x2, @code{char} dir)
+Заполняет значениями равно распределенными в диапазоне [@var{x1}, @var{x2}] в направлении @var{dir}=@{@samp{x}, at samp{y}, at samp{z}@}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Fill (@code{const char *}eq, @code{mglPoint} Min, @code{mglPoint} Max, @code{const mglData *}vdat=0, @code{const mglData *}wdat=0)
- at deftypefnx {C function} @code{void} mgl_data_fill (@code{HMGL} gr, @code{HMDT} dat, @code{const char *}eq, @code{const HMDT *}vdat, @code{const HMDT *}wdat)
-Fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in range @var{Min} x @var{Max} (in difference from @code{Modify} functions). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat} which can be @code{NULL} (i.e. can be omitted).
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Fill (@code{const char *}eq, @code{mglPoint} Min, @code{mglPoint} Max, @code{const mglData *}vdat=0, @code{const mglData *}wdat=0)
+ at deftypefnx {Функция С} @code{void} mgl_data_fill (@code{HMGL} gr, @code{HMDT} dat, @code{const char *}eq, @code{const HMDT *}vdat, @code{const HMDT *}wdat)
+Заполняет значениями вычисленными по формуле @var{eq}. Формула представляет собой произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются меняющимися в диапазоне @var{Min} x @var{Max} (в отличие от функции @code{Modify}). Переменная @samp{u} -- значения исходного массива, переменные @samp{v}, @samp{w} -- значения массивов @var{vdat}, @var{wdat}. Последние могут быть @code{NULL}, т.е. опущены.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{int} dim=@code{0})
- at deftypefnx {C function} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim)
-Function fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{int} dim=@code{0})
+ at deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v)
+ at deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v, @code{const mglData &}w)
+ at deftypefnx {Функция С} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim)
+ at deftypefnx {Функция С} @code{void} mgl_data_modify_vw (@code{HMDT} dat, @code{const char *}eq, @code{const HMDT} v, @code{const HMDT} w)
+Заполняет значениями вычисленными по формуле @var{eq}. Формула представляет собой произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются меняющимися в диапазоне [0,1] (в отличие от функции @code{Fill}). Переменная @samp{u} -- значения исходного массива, переменные @samp{v}, @samp{w} -- значения массивов @var{vdat}, @var{wdat}. Последние могут быть @code{NULL}, т.е. опущены. Если указан @var{dim}>0, то изменяются только слои >=@var{dim}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v)
- at deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v, @code{const mglData &}w)
- at deftypefnx {C function} @code{void} mgl_data_modify_vw (@code{HMDT} dat, @code{const char *}eq, @code{const HMDT} v, @code{const HMDT} w)
-Function fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}.
- at end deftypefn
-
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Put (@code{float} val, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1})
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Put (@code{float} val, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1})
 @deftypefnx mglData @code{void} mgl_data_put_val (@code{HMDT} a, @code{float} val, @code{int} i, @code{int} j, @code{int} k)
-Function sets value(s) of array a[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=-1 set the value @var{val} to whole range in corresponding direction(s). For example, @code{Put(val,-1,0,-1);} sets a[i,0,j]=@var{val} for i=0...(nx-1), j=0...(nz-1).
+Присваивает значения (под-)массива @var{dat}[@var{i}, @var{j}, @var{k}] = @var{val}. Индексы @var{i}, @var{j}, @var{k} равные @samp{-1} задают значениия @var{val} для всего диапазона соответствующего направления(ий). Например, @code{Put(val,-1,0,-1);} задает a[i,0,j]=@var{val} для i=0...(nx-1), j=0...(nz-1).
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Put (@code{const mglData &}v, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1})
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Put (@code{const mglData &}v, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1})
 @deftypefnx mglData @code{void} mgl_data_put_dat (@code{HMDT} a, @code{const HMDT} v, @code{int} i, @code{int} j, @code{int} k)
-Function copies value(s) from array @var{v} to the range of original array. Negative indexes @var{i}, @var{j}, @var{k}=-1 set the range in corresponding direction(s). At this minor dimensions of array @var{v} should be large than corresponding dimensions of this array. For example, @code{Put(v,-1,0,-1);} sets a[i,0,j]=v.ny>nz ? v[i,j] : v[i], where i=0...(nx-1), j=0...(nz-1) and condition v.nx>=nx is true.
+Копирует значения из массива @var{v} в диапазон значений данного массива. Индексы @var{i}, @var{j}, @var{k} равные @samp{-1} задают диапазон изменения значений в соответствующих направление(ях). Младшие размерности массива @var{v} должны быть больше выбранного диапазона массива. Например, @code{Put(v,-1,0,-1);} присвоитa[i,0,j]=@var{v}.ny>nz ? @var{v}.a[i,j] : @var{v}.a[i], где i=0...(nx-1), j=0...(nz-1) и условие v.nx>=nx выполнено.
 @end deftypefn
 
- at deftypefn {C function} @code{void} mgl_data_set_value (@code{HMDT} dat, @code{float} v, @code{int} i, @code{int} j, @code{int} k)
-Sets the value in specified cell of the data with border checking.
+ at deftypefn {Функция С} @code{void} mgl_data_set_value (@code{HMDT} dat, @code{float} v, @code{int} i, @code{int} j, @code{int} k)
+Присваивает значение выбранной ячейке массива данных.
 @end deftypefn
 
- at deftypefn {C function} @code{float} mgl_data_get_value (@code{HMDT} dat, @code{int} i, @code{int} j, @code{int} k)
-Gets the value in specified cell of the data with border checking.
+ at deftypefn {Функция С} @code{float} mgl_data_get_value (@code{HMDT} dat, @code{int} i, @code{int} j, @code{int} k)
+Возвращает значение выбранной ячейки массива данных.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C+, Python)} @code{void} GetNx ()
- at deftypefnx {C function} @code{float} mgl_data_get_nx (@code{HMDT} dat)
-Gets the x-size of the data.
+ at deftypefn {Метод класса @code{mglData} (C+, Python)} @code{void} GetNx ()
+ at deftypefnx {Функция С} @code{float} mgl_data_get_nx (@code{HMDT} dat)
+Возвращает размер по x-направлению.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C+, Python)} @code{void} GetNy ()
- at deftypefnx {C function} @code{float} mgl_data_get_ny (@code{HMDT} dat)
-Gets the y-size of the data.
+ at deftypefn {Метод класса @code{mglData} (C+, Python)} @code{void} GetNy ()
+ at deftypefnx {Функция С} @code{float} mgl_data_get_ny (@code{HMDT} dat)
+Возвращает размер по y-направлению.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C+, Python)} @code{void} GetNz ()
- at deftypefnx {C function} @code{float} mgl_data_get_nz (@code{HMDT} dat)
-Gets the z-size of the data.
+ at deftypefn {Метод класса @code{mglData} (C+, Python)} @code{void} GetNz ()
+ at deftypefnx {Функция С} @code{float} mgl_data_get_nz (@code{HMDT} dat)
+Возвращает размер по z-направлению.
 @end deftypefn
 
 @c ------------------------------------------------------------------
 @node Rearrange, File I/O, Fill, mglData class
- at section Rearrange
+ at section Изменение размеров данных
 @cindex Rearrange
 @cindex Extend
 @cindex Transpose
@@ -182,72 +178,76 @@ Gets the z-size of the data.
 @cindex Insert
 @cindex Delete
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Rearrange (@code{int} mx, @code{int} my=@code{0}, @code{int} mz=@code{0})
- at deftypefnx {C function} @code{void} mgl_data_rearrange (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz)
-Rearrange dimensions without changing data array so that resulting sizes should  be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz} will be 1.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Rearrange (@code{int} mx, @code{int} my=@code{0}, @code{int} mz=@code{0})
+ at deftypefnx {Функция С} @code{void} mgl_data_rearrange (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz)
+Изменяет размерность данных без изменения самого массива данных, так что результирующий массив @var{mx}*@var{my}*@var{mz} < nx*ny*nz. Если один из параметров @var{my} или @var{mz} ноль, то он будет выбран оптимальным образом. Например, если @var{my}=0, то будет @var{my}=nx*ny*nz/@var{mx} и @var{mz}=1.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Extend (@code{int} n1, @code{int} n2=@code{0})
- at deftypefnx {C function} @code{void} mgl_data_extend (@code{HMDT} dat, @code{int} n1, @code{int} n2)
-Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be 
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Extend (@code{int} n1, @code{int} n2=@code{0})
+ at deftypefnx {Функция С} @code{void} mgl_data_extend (@code{HMDT} dat, @code{int} n1, @code{int} n2)
+Увеличивает размер данных путем вставки (|@var{n1}|+1) новых срезов после (для @var{n1}>0) или перед (для @var{n1}<0) существующими данными. Можно добавить сразу 2 размерности для 1d массива, используя второй параметр @var{n2}. Данные в новые срезы будут скопированы из существующих. Например, для @var{n1}>0 новый массив будет
 @iftex
- at math{a_{ij}^{new} = a_i^{old}} where j=0... at var{n1}. Correspondingly, for @var{n1}<0 new array will be @math{a_{ij}^{new} = a_j^{old}} where i=0...|@var{n1}|.
+ at math{a_{ij}^{new} = a_i^{old}} where j=0... at var{n1}. Соответственно, для @var{n1}<0 новый массив будет @math{a_{ij}^{new} = a_j^{old}}, где i=0...|@var{n1}|.
 @end iftex
 @ifnottex
-a_ij^new = a_i^old where j=0... at var{n1}. Correspondingly, for @var{n1}<0 new array will be a_ij^new = a_j^old where i=0...|@var{n1}|.
+a_ij^new = a_i^old where j=0... at var{n1}. Соответственно, для @var{n1}<0 новый массив будет a_ij^new = a_j^old, где i=0...|@var{n1}|.
 @end ifnottex
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Transpose (@code{const char *}dim=@code{"yx"})
- at deftypefnx {C function} @code{void} mgl_data_transpose (@code{const char *}dim)
-Transposes (shift order of) dimensions of the data. New order of dimensions is specified int string @var{dim}. This function may be useful also for the reading of one-dimensional data.
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Transpose (@code{const char *}dim=@code{"yx"})
+ at deftypefnx {Функция С} @code{void} mgl_data_transpose (@code{const char *}dim)
+Транспонирует (меняет порядок размерностей) массив данных. Новый порядок размерностей задается строкой @var{dim}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Squeeze (@code{int} rx, @code{int} ry=@code{1}, @code{int} rz=@code{1}, @code{bool} smooth=@code{false})
- at deftypefnx {C function} @code{void} mgl_data_squeeze (@code{HMDT} dat, @code{int} rx, @code{int} ry, @code{int} rz, @code{int} smooth)
-Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{squeeze} set to use smoothing
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Squeeze (@code{int} rx, @code{int} ry=@code{1}, @code{int} rz=@code{1}, @code{bool} smooth=@code{false})
+ at deftypefnx {Функция С} @code{void} mgl_data_squeeze (@code{HMDT} dat, @code{int} rx, @code{int} ry, @code{int} rz, @code{int} smooth)
+Уменьшает размер данных путем удаления элементов с индексами не кратными @var{rx}, @var{ry}, @var{rz} соответственно. Параметр @var{smooth} задает использовать сглаживания
 @iftex
-(i.e. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}).
+(т.е. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) или нет (т.е. @math{a_{out}[i]=a[j*r]}).
 @end iftex
 @ifnottex
-(i.e. out[i]=\sum_@{j=i,i+r@} a[j]/r) or not (i.e. out[i]=a[j*r]).
+(т.е. out[i]=\sum_@{j=i,i+r@} a[j]/r) или нет (т.е. out[i]=a[j*r]).
 @end ifnottex
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Crop (@code{int} n1, @code{int} n2, @code{char} dir=@code{'x'})
- at deftypefnx {C function} @code{void} mgl_data_crop (@code{HMDT} dat, @code{int} n1, @code{int} n2, @code{char} dir)
-Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}- at var{n2} if @var{n2}<=0 along direction @var{dir}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Crop (@code{int} n1, @code{int} n2, @code{char} dir=@code{'x'})
+ at deftypefnx {Функция С} @code{void} mgl_data_crop (@code{HMDT} dat, @code{int} n1, @code{int} n2, @code{char} dir)
+Обрезает границы данных при @var{i}<@var{n1} и @var{i}>@var{n2} (при @var{n2}>0) или @var{i}>@code{n[xyz]}- at var{n2} (при @var{n2}<=0) вдоль направления @var{dir}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} InsertRows (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL})
-Insert @var{num} rows (slice along y-direction) at position @var{at} and fill it by formula @var{eq} (if @var{eq}!=0) or by zeros.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} InsertRows (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL})
+Вставляет @var{num} срезов вдоль направления 'y' (строк) с позиции @var{at} и заполняет их по формуле @var{eq} (при @var{eq}!=0) или нулями.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} InsertColumns (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL})
-Insert @var{num} columns (slice along x-direction) at position @var{at} and fill it by formula @var{eq} (if @var{eq}!=0) or by zeros.
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} InsertColumns (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL})
+Вставляет @var{num} срезов вдоль направления 'x' (колонок) с позиции @var{at} и заполняет их по формуле @var{eq} (при @var{eq}!=0) или нулями.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} InsertSlices (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL})
-Insert @var{num} slices (slice along z-direction) at position @var{at} and fill it by formula @var{eq} (if @var{eq}!=0) or by zeros.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} InsertSlices (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL})
+Вставляет @var{num} срезов вдоль направления 'z' с позиции @var{at} и заполняет их по формуле @var{eq} (при @var{eq}!=0) или нулями.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} DeleteRows (@code{int} at, @code{int} num=@code{1})
-Delete @var{num} rows (slice along y-direction) at position @var{at}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} DeleteRows (@code{int} at, @code{int} num=@code{1})
+Удаляет @var{num} срезов вдоль направления 'y' (строк) с позиции @var{at}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} DeleteColumns (@code{int} at, @code{int} num=@code{1})
-Delete @var{num} columns (slice along x-direction) at position @var{at}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} DeleteColumns (@code{int} at, @code{int} num=@code{1})
+Удаляет @var{num} срезов вдоль направления 'x' (колонок) с позиции @var{at}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} DeleteSlices (@code{int} at, @code{int} num=@code{1})
-Delete @var{num} slices (slice along z-direction) at position @var{at}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} DeleteSlices (@code{int} at, @code{int} num=@code{1})
+Удаляет @var{num} срезов вдоль направления 'z' с позиции @var{at}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Insert (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1})
- at deftypefnx {C function} @code{void} mgl_data_insert (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num)
-Insert @var{num} slices along @var{dir}-direction at position @var{pos} and fill it by zeros.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Insert (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1})
+ at deftypefnx {Функция С} @code{void} mgl_data_insert (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num)
+Вставляет @var{num} срезов вдоль направления @var{dir} с позиции @var{pos} и заполняет их нулями.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Delete (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1})
- at deftypefnx {C function} @code{void} mgl_data_delete (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num)
-Delete @var{num} slices along @var{dir}-direction at position @var{pos}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Delete (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1})
+ at deftypefnx {Функция С} @code{void} mgl_data_delete (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num)
+Удаляет @var{num} срезов вдоль направления @var{dir} с позиции @var{pos}.
 @end deftypefn
 
 @c ------------------------------------------------------------------
 @node File I/O, Make another data, Rearrange, mglData class
- at section File I/O
+ at section Чтение/сохранение данных
 @cindex Read
 @cindex ReadMat
 @cindex ReadAll
@@ -258,50 +258,54 @@ Delete @var{num} slices along @var{dir}-direction at position @var{pos}.
 @cindex Export
 @cindex Import
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname)
- at deftypefnx {C function} @code{void} mgl_data_read (@code{HMDT} dat, @code{const char *}fname)
-Reads data from tab-separated text file with auto determining sizes of the data.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname)
+ at deftypefnx {Функция С} @code{void} mgl_data_read (@code{HMDT} dat, @code{const char *}fname)
+Читает данные из текстового файла с разделителями символом пробела/табуляции с автоматическим определением размера массива. Двойной перевод строки начинает новый срез данных (по направлению z).
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname, @code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1})
- at deftypefnx {C function} @code{void} mgl_data_read_dim (@code{HMDT} dat, @code{const char *}fname, @code{int} mx, @code{int} my, @code{int} mz)
-Reads data from text file with specified data sizes. This function does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative.
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname, @code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1})
+ at deftypefnx {Функция С} @code{void} mgl_data_read_dim (@code{HMDT} dat, @code{const char *}fname, @code{int} mx, @code{int} my, @code{int} mz)
+Читает данные из текстового файла с заданными размерами. Ничего не делается если параметры @var{mx}, @var{my} или @var{mz} равны нулю или отрицательны.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadMat (@code{const char *}fname, @code{int} dim=@code{2})
- at deftypefnx {C function} @code{void} mgl_data_read_mat (@code{HMDT} dat, @code{const char *}fname, @code{int} dim)
-Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions.
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} ReadMat (@code{const char *}fname, @code{int} dim=@code{2})
+ at deftypefnx {Функция С} @code{void} mgl_data_read_mat (@code{HMDT} dat, @code{const char *}fname, @code{int} dim)
+Читает данные из текстового файла с размерами, указанными в первых @var{dim} числах файла. При этом переменная @var{dim} задает размерность (1d, 2d, 3d) данных.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadRange (@code{const char *}templ, @code{float} from, @code{float} to, @code{float} step=@code{1.f}, @code{bool} as_slice=@code{false})
-Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{from} to @var{to} with step @var{step}. The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} ReadRange (@code{const char *}templ, @code{float} from, @code{float} to, @code{float} step=@code{1.f}, @code{bool} as_slice=@code{false})
+Объединяет данные из нескольких текстовых файлов. Имена файлов определяются вызовом функции @code{sprintf(fname,templ,val);}, где @var{val} меняется от @var{from} до @var{to} с шагом @var{step}. Данные загружаются один за другим в один и тот же срез данных (при @var{as_slice}=@code{false}) или срез-за-срезом (при @var{as_slice}=@code{true}).
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadAll (@code{const char *}templ, @code{bool} as_slice=@code{false})
-Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}.
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} ReadAll (@code{const char *}templ, @code{bool} as_slice=@code{false})
+Объединяет данные из нескольких текстовых файлов, чьи имена удовлетворяют шаблону @var{templ} (например, @var{templ}=@code{"t_*.dat"}). Данные загружаются один за другим в один и тот же срез данных (при @var{as_slice}=@code{false}) или срез-за-срезом (при @var{as_slice}=@code{true}).
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Save (@code{const char *}fname, @code{int} ns=@code{-1}) @code{const}
- at deftypefnx {C function} @code{void} mgl_data_save (@code{const HMDT} dat, @code{const char *}fname, @code{int} ns)
-Saves the whole data array (for @var{ns}=@code{-1}) or only ns-th slice to text file. If @var{ns}>0 then only @var{ns}-th slice (or column for 2D array) will be saved.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Save (@code{const char *}fname, @code{int} ns=@code{-1}) @code{const}
+ at deftypefnx {Функция С} @code{void} mgl_data_save (@code{const HMDT} dat, @code{const char *}fname, @code{int} ns)
+Сохраняет весь массив данных при @var{ns}=@code{-1} или только @var{ns}-ый срез в текстовый файл.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadHDF (@code{const char *}fname, @code{const char *}dname)
-Reads data array named @var{dname} from HDF file. This function does nothing if NO_HDF5 was defined during library compilation.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} ReadHDF (@code{const char *}fname, @code{const char *}dname)
+Читает массив с именем @var{dname} из HDF5 или HDF4 файла @var{fname}. Функция ничего не делает если библиотека была собрана с флагами NO_HDF5|NO_HDF4.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} SaveHDF (@code{const char *}fname, @code{const char *}dname, @code{bool} rewrite=@code{false}) @code{const}
-Saves data array named @var{dname} from HDF file. This function does nothing if NO_HDF5 was defined during library compilation.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} SaveHDF (@code{const char *}fname, @code{const char *}dname, @code{bool} rewrite=@code{false}) @code{const}
+Сохраняет массив под именем @var{dname} в HDF5 или HDF4 файл @var{fname}. Функция ничего не делает если библиотека была собрана с флагами NO_HDF5|NO_HDF4.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Import (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{1})
- at deftypefnx {C function} @code{void} mgl_data_import (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2)
-Reads data from bitmap file (now support only PNG format). The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{scheme} (@pxref{Color scheme}).
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Import (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{1})
+ at deftypefnx {Функция С} @code{void} mgl_data_import (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2)
+Читает данные из растрового файла. RGB значения пикселов преобразуются в число в диапазоне [@var{v1}, @var{v2}] используя цветовую схему @var{sch} (@pxref{Color scheme}).
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Export (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{0}, @code{int} ns=@code{-1}) const
- at deftypefnx {C function} @code{void} mgl_data_export (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2, @code{int} ns) const
-Saves data matrix (or @code{ns}-th slice for 3d data) to bitmap file (now support only PNG format). The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{scheme} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array.
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Export (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{0}, @code{int} ns=@code{-1}) const
+ at deftypefnx {Функция С} @code{void} mgl_data_export (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2, @code{int} ns) const
+Сохраняет данные в растровый файл. Числовые значения, нормированные в диапазон [@var{v1}, @var{v2}], преобразуются в RGB значения пикселов, используя цветовую схему @var{sch} (@pxref{Color scheme}). Если @var{v1}>=@var{v2}, то значения @var{v1}, @var{v2} определяются автоматически как минимальное и максимальное значение данных.
 @end deftypefn
 
 @c ------------------------------------------------------------------
- at node Make another data, Functions on direction, File I/O, mglData class
- at section Make another data
+ at node Make another data, Change data, File I/O, mglData class
+ at section Создание новых данных
 @cindex SubData
 @cindex Column
 @cindex SetColumnId
@@ -315,150 +319,190 @@ Saves data matrix (or @code{ns}-th slice for 3d data) to bitmap file (now suppor
 @cindex Resize
 @cindex Trace
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} SubData (@code{int} xx, @code{int} yy=@code{-1}, @code{int} zz=@code{-1}) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_subdata (@code{const HMDT} dat, @code{int} xx, @code{int} yy, @code{int} zz)
-Extracts sub-array data from the original data array keeping fixed positive index. For example @code{SubData(-1,2)} extracts 3d row (indexes are zero based), @code{SubData(4,-1)} extracts 5th column, @code{SubData(-1,-1,3)} extracts 4th slice and so on. The most convenient way is to use this function as initialization of other @code{mglData} variable like @code{mglData a1(a.SubData(-1,-1,3))}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} SubData (@code{int} xx, @code{int} yy=@code{-1}, @code{int} zz=@code{-1}) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_subdata (@code{const HMDT} dat, @code{int} xx, @code{int} yy, @code{int} zz)
+Возвращает в @var{res} подмассив массива данных @var{dat} с фиксированными значениями индексов с положительными значениями. Например, @code{SubData(-1,2)} выделяет третью строку (индексы начинаются с нуля), @code{SubData(4,-1)} выделяет 5-ую колонку, @code{SubData(-1,-1,3)} выделяет 4-ый срез и т.д.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} SubData (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_subdata_ext (@code{const HMDT} dat, @code{const HMDT} xx, @code{const HMDT} yy, @code{const HMDT} zz)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} SubData (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_subdata_ext (@code{const HMDT} dat, @code{const HMDT} xx, @code{const HMDT} yy, @code{const HMDT} zz)
 Extracts sub-array data from the original data array for indexes specified by arrays @var{xx}, @var{yy}, @var{zz} (indirect access). The resulting array have the same dimensions as input arrays for 2D and 3D arguments. This function work like previous one for 1D arguments (or numbers). The dimensions of all argument must be the same if they are 2D or 3D arrays.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Column (@code{const char *}eq) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_column (@code{const HMDT} dat, @code{const char *}eq)
-Get column (or slice) of the data filled by formula @var{eq} of other named columns. For example, @code{Column("n*w^2/exp(t)");}. The column ids must be defined first by @code{SetColumnId()} function.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Column (@code{const char *}eq) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_column (@code{const HMDT} dat, @code{const char *}eq)
+Возвращает массив данных заполненный по формуле @var{eq}, вычисленной для именованных колонок (или срезов). Например, @code{Column("n*w^2/exp(t)");}. Имена колонок задается функцией @code{SetColumnId()} или при чтении файлов данных.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} SetColumnId (@code{const char *}ids)
- at deftypefnx {C function} @code{void} mgl_data_set_id (@code{HMDT} dat, @code{const char *}ids)
-Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces).
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} SetColumnId (@code{const char *}ids)
+ at deftypefnx {Функция С} @code{void} mgl_data_set_id (@code{HMDT} dat, @code{const char *}ids)
+Устанавливает символьные обозначения для колонок данных. Строка должна содержать символы 'a'...'z' один на колонку (без пробелов).
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Trace () @code{const}
-Gets array of diagonal elements a[i,i] (for 2D case) or a[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Trace () @code{const}
+Возвращает массив диагональных элементов a[i,i] (для 2D данных) или a[i,i,i] (для 3D данных) где i=0...nx-1. В 1D случае возвращается сам массив данных. Размеры массива данных должен быть ny,nz >= nx или ny,nz = 1.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Hist (@code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_hist (@code{const HMDT} dat, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub)
-Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram).
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Hist (@code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_hist (@code{const HMDT} dat, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub)
+Возвращает распределение (гистограмму) из @var{n} точек от значений массива в диапазоне [@var{v1}, @var{v2}]. Параметр @var{nsub} задает число дополнительных точек интерполяции (для сглаживания получившейся гистограммы).
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Hist (@code{const mglData &}w, @code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_hist_w (@code{const HMDT} dat, @code{const HMDT} w, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub)
-Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Array @var{w} specifies weights of the data elements. Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram).
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Hist (@code{const mglData &}w, @code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_hist_w (@code{const HMDT} dat, @code{const HMDT} w, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub)
+Возвращает распределение (гистограмму) из @var{n} точек от значений массива в диапазоне [@var{v1}, @var{v2}]. Массив @var{w} задает веса элементов. Параметр @var{nsub} задает число дополнительных точек интерполяции (для сглаживания получившейся гистограммы).
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Momentum (@code{char} dir, @code{const char *}how) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_momentum (@code{const HMDT} dat, @code{char} dir, @code{const char *}how)
-Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Momentum (@code{char} dir, @code{const char *}how) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_momentum (@code{const HMDT} dat, @code{char} dir, @code{const char *}how)
+Возвращает момент (1d массив) данных вдоль направления @var{dir}. Строка @var{how} определяет тип момента. Момент определяется как
 @iftex
 @math{res_k = \sum_{ij} how(x_i,y_j,z_k) a_{ij}/\sum_{ij} a_{ij}}
 @end iftex
 @ifnottex
 res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij
 @end ifnottex
-if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1].
+если @var{dir}=@samp{z} и т.д. Координаты @samp{x}, @samp{y}, @samp{z} -- индексы массива в диапазоне [0,1].
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Sum (@code{const char *}dir) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_sum (@code{const HMDT} dat, @code{const char *}dir)
-Gets array which is the result of summation in given direction or direction(s).
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Sum (@code{const char *}dir) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_sum (@code{const HMDT} dat, @code{const char *}dir)
+Возвращает результат суммирования данных вдоль направления(ий) @var{dir}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Max (@code{const char *}dir) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_max_dir (@code{const HMDT} dat, @code{const char *}dir)
-Gets array which is the maximal data values in given direction or direction(s).
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Max (@code{const char *}dir) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_max_dir (@code{const HMDT} dat, @code{const char *}dir)
+Возвращает максимальное значение данных вдоль направления(ий) @var{dir}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Min (@code{const char *}dir) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_min_dir (@code{const HMDT} dat, @code{const char *}dir)
-Gets array which is the maximal data values in given direction or direction(s).
+
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Min (@code{const char *}dir) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_min_dir (@code{const HMDT} dat, @code{const char *}dir)
+Возвращает минимальное значение данных вдоль направления(ий) @var{dir}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Combine (@code{const mglData &}a) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_combine (@code{const HMDT} dat, @code{const HMDT} a)
-Return direct multiplication of arrays (like, res[i,j] = this[i]*a[j] and so on).
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Combine (@code{const mglData &}a) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_combine (@code{const HMDT} dat, @code{const HMDT} a)
+Возвращает прямое произведение массивов (наподобие, res[i,j] = adat[i]*bdat[j] и т.д.).
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{bool} norm=@code{true}) @code{const}
- at deftypefnx {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{bool} norm=@code{true}) @code{const}
- at deftypefnx {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{const mglData &}kdat, @code{bool} norm=@code{true}) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_evaluate_i (@code{const HMDT} dat, @code{const HMDT} idat, @code{int} norm)
- at deftypefnx {C function} @code{HMDT} mgl_data_evaluate_ij (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{int} norm)
- at deftypefnx {C function} @code{HMDT} mgl_data_evaluate_ijk (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{const HMDT} kdat, @code{int} norm)
-Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{bool} norm=@code{true}) @code{const}
+ at deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{bool} norm=@code{true}) @code{const}
+ at deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{const mglData &}kdat, @code{bool} norm=@code{true}) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_evaluate_i (@code{const HMDT} dat, @code{const HMDT} idat, @code{int} norm)
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_evaluate_ij (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{int} norm)
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_evaluate_ijk (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{const HMDT} kdat, @code{int} norm)
+Возвращает массив данных, полученный в результате интерполяции исходного массива в точках других массивов (например, res[i,j]=dat[idat[i,j],jdat[i,j]]). Размеры массивов @var{idat}, @var{jdat}, @var{kdat} должны совпадать. Координаты в @var{idat}, @var{jdat}, @var{kdat} полагаются нормированными в диапазон [0,1] (при @var{norm}=@code{true}) или в диапазоны [0,nx], [0,ny], [0,nz] соответственно.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Resize (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}, @code{float} x1=@code{0}, @code{float} x2=@code{1}, @code{float} y1=@code{0}, @code{float} y2=@code{1}, @code{float} z1=@code{0}, @code{float} z2=@code{1}) @code{const}
- at deftypefnx {C function} @code{HMDT} mgl_data_resize (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz)
- at deftypefnx {C function} @code{HMDT} mgl_data_resize_box (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2)
-Resizes the data to new size @var{mx}, @var{my}, @var{mz} from box (part) [@var{x1}, at var{x2}] x [@var{y1}, at var{y2}] x [@var{z1}, at var{z2}] of original array. Initially x,y,z coordinates are supposed to be in [0,1].
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Resize (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}, @code{float} x1=@code{0}, @code{float} x2=@code{1}, @code{float} y1=@code{0}, @code{float} y2=@code{1}, @code{float} z1=@code{0}, @code{float} z2=@code{1}) @code{const}
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_resize (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz)
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_resize_box (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2)
+Возвращает массив данных размером @var{mx}, @var{my}, @var{mz} со значениями полученными интерполяцией значений из части [@var{x1}, at var{x2}] x [@var{y1}, at var{y2}] x [@var{z1}, at var{z2}] исходного массива. Величины x,y,z полагаются нормированными в диапазоне [0,1].
 @end deftypefn
 
 @c ------------------------------------------------------------------
- at node Functions on direction, Interpolation, Make another data, mglData class
- at section Functions on direction
+ at node Change data, Interpolation, Make another data, mglData class
+ at section Изменение данных
+
+Эти функции изменяют данные вдоль заданного направления(ий) типа например дифференцирования, интегрирования и т.д. Направление указывается строкой @var{dir}, которая может содержать символы @samp{x}, @samp{y} и/или @samp{z}, вдоль которых изменения будут применены.
+
 @cindex CumSum
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} CumSum (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_cumsum (@code{HMDT} dat, @code{const char *}dir)
+Суммирует с накоплением в выбранном направлении(ях).
+ at end deftypefn
+
 @cindex Integral
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Integral (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_integral (@code{HMDT} dat, @code{const char *}dir)
+Выполняет интегрирование (подобно суммированию с накоплением) в выбранном направлении(ях).
+ at end deftypefn
+
 @cindex Diff
- at cindex Diff2
- at cindex Swap
- at cindex Mirror
- at cindex Sew
- at cindex Smooth
- at cindex Envelop
- at cindex Norm
- at cindex NormSl
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir)
+Выполняет дифференцирование в выбранном направлении(ях).
+ at end deftypefn
 
-These functions change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondengly.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y)
+ at deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z)
+ at deftypefnx {Функция С} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{const HMDT} x, @code{const HMDT}y, @code{const HMDT}z)
+Выполняет дифференцирование данных, параметрически зависящих от координат, в направлении @var{x} с @var{y}, @var{z}=constant. Параметр @var{z} может быть опущен, что соответствует 2D случаю. Используются следующие формулы (2D случай): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)}, где @math{a_i=da/di, a_j=da/dj} обозначает дифференцирование вдоль 1-ой и 2-ой размерности. Похожие формулы используются и в 3D случае. Порядок аргументов можно менять -- например, если данные a(i,j) зависят от координат @{x(i,j), y(i,j)@}, то обычная производная по @samp{x} будет равна @code{Diff(x,y);}, а обычная производная по @samp{y} будет равна @code{Diff(y,x);}.
+ at end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} CumSum (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_cumsum (@code{HMDT} dat, @code{const char *}dir)
-CCumulative summation of the data in given direction or directions.
+
+ at cindex Diff2
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff2 (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_diff2 (@code{const char *}dir)
+Выполняет двойное дифференцирование (как в операторе Лапласа) в выбранном направлении(ях).
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Integral (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_integral (@code{HMDT} dat, @code{const char *}dir)
-Integrates (like cumulative summation) the data in given direction or directions.
+
+ at cindex SinFFT
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} SinFFT (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_sinfft (@code{HMDT} dat, @code{const char *}dir)
+Выполняет синус преобразование в выбранном направлении(ях). Синус преобразование есть @math{\sum a_i \sin(k i)}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir)
-Differentiates the data in given direction or directions.
+
+ at cindex CosFFT
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} CosFFT (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_cosfft (@code{HMDT} dat, @code{const char *}dir)
+Выполняет косинус преобразование в выбранном направлении(ях). Синус преобразование есть @math{\sum a_i \cos(k i)}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y)
- at deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z)
- at deftypefnx {C function} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{const HMDT} x, @code{const HMDT}y, @code{const HMDT}z)
-Differentiates the data specified parametrically in direction @var{x} with @var{y}, @var{z}=constant. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{Diff(x,y);} and usual derivative along @samp{y} will be @code{Diff(y,x);}.
+ at cindex Hankel
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Hankel (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_hankel (@code{HMDT} dat, @code{const char *}dir)
+Выполняет преобразование Ханкеля в выбранном направлении(ях). Преобразование Ханкеля есть @math{\sum a_i J_0(k i)}.
 @end deftypefn
 
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff2 (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_diff2 (@code{const char *}dir)
-Double-differentiates (like Laplace operator) the data in given direction.
+ at cindex Swap
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Swap (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir)
+Меняет местами левую и правую части данных в выбранном направлении(ях). Полезно для отображения результата FFT.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Swap (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir)
-Swaps the left and right part of the data in given direction (useful for Fourier spectrum).
+
+ at cindex Roll
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Roll (@code{char} dir, @code{num})
+ at deftypefnx {Функция С} @code{void} mgl_data_roll (@code{HMDT} dat, @code{char} dir, @code{num})
+Сдвигает данные на @var{num} ячеек в выбранном направлении(ях). Соответствует замене индекса на @var{i}->(@var{i}+ at var{num})%@var{n}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Mirror (@code{const char *}dir)
- at deftypefnx {C function} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir)
-Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}.
+
+ at cindex Mirror
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Mirror (@code{const char *}dir)
+ at deftypefnx {Функция С} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir)
+Отражает данные в выбранном направлении(ях). Соответствует замене индекса на @var{i}->@var{n}- at var{i}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Sew (@code{const char *}dir, @code{float} da=@code{2*M_PI})
- at deftypefnx {C function} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{float} da)
-Remove value steps (like phase jumps after inverse trigonometric functions) with period @var{da} in given direction.
+
+ at cindex Sew
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Sew (@code{const char *}dir, @code{float} da=@code{2*M_PI})
+ at deftypefnx {Функция С} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{float} da)
+Удаляет скачки данных (например, скачки фазы после обратных тригонометрических функций) с периодом @var{da} в выбранном направлении(ях).
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Smooth (@code{int} Type, @code{const char *}dir, @code{float} delta=@code{0})
- at deftypefnx {C function} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{int} Type, @code{float} delt, @code{const char *}dirs)
-Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @code{SMOOTH_NONE} does nothing for @var{delta}=0 or approaches data to zero with the step @var{delta}, @code{SMOOTH_LINE_3} linear averaging by 3 points, @code{SMOOTH_LINE_5} linear averaging by 5 points, @code{SMOOTH_QUAD_5} quadratic averaging by 5 points. Parameter @var{delta} forbids to change values of array more than @var{delta} from the original ones. String @var{dirs} specifies the dimensions which will be smoothed. It may contain characters: 'x' for 1st dimension, 'y' for 2nd dimension, 'z' for 3d dimension.
+
+ at cindex Smooth
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Smooth (@code{int} Type, @code{const char *}dir, @code{float} delta=@code{0})
+ at deftypefnx {Функция С} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{int} Type, @code{float} delt, @code{const char *}dirs)
+Сглаживает данные в выбранном направлении(ях) @var{dir} методом @var{Type}. Сейчас поддерживаются 4 метода: @code{SMOOTH_NONE=0} ничего не делает при @var{delta}=0 или сдвигает данные к нулю на шагом @var{delta}, @code{SMOOTH_LINE_3=1} линейное усреднение по 3 точкам, @code{SMOOTH_LINE_5=2} линейное усреднение по 5 точкам, @code{SMOOTH_QUAD_5=3} квадратичное усреднение по 5 точкам. Параметр @var{delta} запрещает изменение значений на величину большую @var{delta}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Smooth (@code{const char *}dir)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Smooth (@code{const char *}dir)
 Smooths the data on specified direction(s). This is the same as @code{Smooth()} but argument @var{Type} is specified in string as @samp{0} for @code{SMOOTH_NONE}, @samp{3} for @code{SMOOTH_LINE_3}, @samp{5} for @code{SMOOTH_LINE_5}. If string @var{dir} don't contain digits @samp{035} then @var{Type}=@code{SMOOTH_QUAD_5} is used.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Envelop (@code{char} dir=@code{'x'})
- at deftypefnx {C function} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir)
-Find envelop for data values along direction @var{dir}.
+
+ at cindex Envelop
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Envelop (@code{char} dir=@code{'x'})
+ at deftypefnx {Функция С} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir)
+Находит огибающую данных в выбранном направлении @var{dir}.
+ at end deftypefn
+
+ at cindex Norm
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Norm (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{bool} sym=@code{false}, @code{int} dim=@code{0})
+Нормирует данные в интервал [@var{v1}, at var{v2}]. Если @var{sym}=@code{true}, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Изменения применяются только к срезам >=@var{dim}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} NormSl (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep_en=@code{true}, @code{bool} sym=@code{false})
- at deftypefnx {C function} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{float} v1, @code{float} v2, @code{char} dir, @code{int} keep_en, @code{int} sym)
-Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep_en} is set then maximal value of k-th slice will be limited by 
+ at cindex NormSl
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} NormSl (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep_en=@code{true}, @code{bool} sym=@code{false})
+ at deftypefnx {Функция С} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{float} v1, @code{float} v2, @code{char} dir, @code{int} keep_en, @code{int} sym)
+Нормирует данные срез-за-срезом в выбранном направлении @var{dir} в интервал [@var{v1}, at var{v2}]. Если @var{sym}=@code{true}, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Если @var{keep}=@code{true}, то максимальное значение k-го среза ограничено величиной
 @iftex
 @math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}.
 @end iftex
@@ -466,238 +510,228 @@ Normalizes data slice-by-slice along direction @var{dir} the data in slices to r
 @math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}.
 @end ifnottex
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Norm (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{bool} sym=@code{false}, @code{int} dim=@code{0})
-Normalizes the data to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}.
- at end deftypefn
 
 @c ------------------------------------------------------------------
- at node Interpolation, Informational functions, Functions on direction, mglData class
- at section Interpolation
+ at node Interpolation, Informational functions, Change data, mglData class
+ at section Интерполяция
 @cindex Spline
- at cindex Spline1
- at cindex Linear
- at cindex Linear1
- at cindex Spline5
- at cindex v
-
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_spline (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z)
-Interpolates data by cubic spline to the given point @var{x} in [0...nx-1], @var{y} in [0...ny-1], @var{z} in [0...nz-1].
+Интерполирует данные кубическим сплайном в точке @var{x} в [0...nx-1], @var{y} в [0...ny-1], @var{z} в [0...nz-1].
 @end deftypefn
+ at cindex Spline1
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline1 (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_spline1 (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z)
-Interpolates data by cubic spline to the given point @var{x}, @var{y}, @var{z} which assumed to be normalized in range [0, 1].
+Интерполирует данные кубическим сплайном в точке @var{x}, @var{y}, @var{z}, где координаты полагаются в интервале [0, 1].
 @end deftypefn
+ at cindex Linear
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Linear (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_linear (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z)
-Interpolates data by linear function to the given point @var{x} in [0...nx-1], @var{y} in [0...ny-1], @var{z} in [0...nz-1].
+Интерполирует данные линейной функцией в точке @var{x} в [0...nx-1], @var{y} в [0...ny-1], @var{z} в [0...nz-1].
 @end deftypefn
+ at cindex Linear1
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Linear1 (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_linear1 (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z)
-Interpolates data by linear function to the given point @var{x}, @var{y}, @var{z} which assumed to be normalized in range [0, 1].
+Интерполирует данные линейной функцией в точке @var{x}, @var{y}, @var{z}, где координаты полагаются в интервале [0, 1].
 @end deftypefn
+ at cindex v
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} v (@code{int} i, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const}
 @deftypefnx {C function} @code{float} mgl_data_get_value (@code{const HMDT} dat, @code{int} i, @code{int} j, @code{int} k)
-Gets the value in specified cell of the data with border checking.
+Возвращает значение ячейки с проверкой на границы массива данных.
 @end deftypefn
+ at cindex Spline5
 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline5 (@code{float} x, @code{float} y, @code{float} z, @code{float} &dx, @code{float} &dy, @code{float} &dz) @code{const}
-Interpolate by 5-th order splain the data to given point @var{x}, @var{y}, @var{z} which normalized in range [0, 1] and evaluate its derivatives.
+Интерполирует данные сплайном 5-го порядка в точке @var{x}, @var{y}, @var{z}, где координаты полагаются в интервале [0, 1].
 @end deftypefn
 
 @deftypefn {C function} @code{float *} mgl_data_value (@code{HMDT} dat, @code{int} i, @code{int} j, @code{int} k)
-Gets the pointer to data element.
+Возвращает указатель на ячейку данных. Может быть не действителен после вызова любой функции изменяющей данные.
 @end deftypefn
 @deftypefn {C function} @code{const float *} mgl_data_data (@code{const HMDT} dat)
-Gets the pointer to internal data array.
+Возвращает указатель на весь массив данных. Может быть не действителен после вызова любой функции изменяющей данные.
 @end deftypefn
 
 @c ------------------------------------------------------------------
 @node Informational functions, Operators, Interpolation, mglData class
- at section Informational functions
+ at section Информационные функции
 @cindex PrintInfo
- at cindex Maximal
- at cindex Minimal
- at cindex Momentum
- at cindex Find
- at cindex Last
- at cindex FindAny
-
- at deftypefn {Method on @code{mglData} (C++)} @code{void} PrintInfo (@code{char *}buf, @code{bool} all=@code{false}) @code{const}
-Print information about the data (sizes and momentum) to string @var{buf}. Parameter @var{all} set to print most of information (if @code{true}) or just basic one like dimensions, maximal an minimal values.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} PrintInfo (@code{char *}buf, @code{bool} all=@code{false}) @code{const}
+Печатает информацию о данных (размеры, моменты и пр.) в строку @var{buf}. Параметр @var{all} устанавливает печатать ли подробную информацию (если @code{true}) или только базовую информацию.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++)} @code{void} PrintInfo (@code{FILE *}fp) @code{const}
-Print information about the data (sizes and momentum) to FILE (for example, stdout)
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{void} PrintInfo (@code{FILE *}fp) @code{const}
+Аналогично, но выводит в файл (или, например, в stdout).
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal () @code{const}
- at deftypefnx {C function} @code{float} mgl_data_max (@code{const HMDT} dat)
-Gets maximal value of the data.
+ at cindex Maximal
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal () @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_max (@code{const HMDT} dat)
+Возвращает максимальное значение массива данных.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal () @code{const}
- at deftypefnx {C function} @code{float} mgl_data_min (@code{HMDT} dat) @code{const}
-Gets minimal value of the data.
+ at cindex Minimal
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal () @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_min (@code{HMDT} dat) @code{const}
+Возвращает минимальное значение массива данных.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_max_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k)
-Gets maximal value of the data and its position in the array to variables @var{i}, @var{j}, @var{k}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_max_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k)
+Возвращает максимальное значение массива данных и его положение в переменные @var{i}, @var{j}, @var{k}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_min_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k)
-Gets minimal value of the data and its position in the array to variables @var{i}, @var{j}, @var{k}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_min_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k)
+Возвращает минимальное значение массива данных и его положение в переменные @var{i}, @var{j}, @var{k}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_max_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z)
-Gets maximal value of the data and its approximated (interpolated) position to variables @var{i}, @var{j}, @var{k}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_max_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z)
+Возвращает максимальное значение массива данных и его приближенное (интерполированное) положение в переменные @var{i}, @var{j}, @var{k}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_min_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z)
-Gets minimal value of the data and its approximated (interpolated) position to variables @var{i}, @var{j}, @var{k}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_min_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z)
+Возвращает минимальное значение массива данных и его приближенное (интерполированное) положение в переменные @var{i}, @var{j}, @var{k}.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_momentum_mw (@code{const HMDT} dat, @code{char} dir, @code{float} *m, @code{float} *w)
-Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}) and second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N}.
+ at cindex Momentum
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_momentum_mw (@code{const HMDT} dat, @code{char} dir, @code{float} *m, @code{float} *w)
+Возвращает нулевой момент (энергию, @math{I=\sum a_i}) и записывает первый (среднее, @math{m = \sum \xi_i a_i/I}) и второй момент (ширину, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}). Здесь @math{\xi} -- соответствующая кордината если @var{dir} равно @samp{'x'}, @samp{'y'}, @samp{'z'}. В противном случае среднее и ширина равны @math{m = \sum a_i/N}, @math{w^2 = \sum (a_i-m)^2/N}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w, @code{float} &s, @code{float} &k) @code{const}
-Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}), second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}, third momentum (skewness, @math{s = \sum (\xi_i-m)^3 a_i/ I w^3}) and fourth momentum (kurtosis, @math{k = \sum (\xi_i-m)^4 a_i / 3 I w^4})) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N} and so on.
+ at deftypefn {Метод класса @code{mglData} (C++)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w, @code{float} &s, @code{float} &k) @code{const}
+Возвращает нулевой момент (энергию, @math{I=\sum a_i}) и записывает первый (среднее, @math{m = \sum \xi_i a_i/I}), второй (ширину, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}), третий (асимметрия, @math{s = \sum (\xi_i-m)^3 a_i/ I w^3}) и четвертый моменты (эксцесс, @math{k = \sum (\xi_i-m)^4 a_i / 3 I w^4})). Здесь @math{\xi} -- соответствующая кордината если @var{dir} равно @samp{'x'}, @samp{'y'}, @samp{'z'}. В противном случае среднее, ширина, асимметрия, эксцесс равны @math{m = \sum a_i/N}, @math{w^2 = \sum (a_i-m)^2/N} и т.д.
 @end deftypefn
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Find (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_first (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k)
-Find position (after specified in @var{i}, @var{j}, @var{k}) of first nonzero value of formula @var{cond}. Function return the data value at found position.
+ at cindex Find
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Find (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_first (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k)
+Находит положение (после заданного в @var{i}, @var{j}, @var{k}) первого не нулевого значения формулы @var{cond}. Функция возвращает найденное значение и записывает его положение в @var{i}, @var{j}, @var{k}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Last (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_last (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k)
-Find position (before specified in @var{i}, @var{j}, @var{k}) of last nonzero value of formula @var{cond}. Function return the data value at found position.
+ at cindex Last
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Last (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_last (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k)
+Находит положение (перед заданного в @var{i}, @var{j}, @var{k}) последнего не нулевого значения формулы @var{cond}. Функция возвращает найденное значение и записывает его положение в @var{i}, @var{j}, @var{k}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{int} Find (@code{const char *}cond, @code{char} dir, @code{int} i=@code{0}, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_find (@code{const HMDT} dat, @code{const char *}cond, @code{int} i, @code{int} j, @code{int} k)
-Return position of first in direction @var{dir} nonzero value of formula @var{cond}. The search is started from point @{i,j,k@}.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{int} Find (@code{const char *}cond, @code{char} dir, @code{int} i=@code{0}, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_find (@code{const HMDT} dat, @code{const char *}cond, @code{int} i, @code{int} j, @code{int} k)
+Возвращает положение первого в направлении @var{dir} не нулевого значения формулы @var{cond}. Поиск начинается с точки @{i,j,k@}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{bool} FindAny (@code{const char *}cond) @code{const}
- at deftypefnx {C function} @code{float} mgl_data_find_any (@code{const HMDT} dat, @code{const char *}cond)
-Determines if any nonzero value of formula in the data array.
+ at cindex FindAny
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{bool} FindAny (@code{const char *}cond) @code{const}
+ at deftypefnx {Функция С} @code{float} mgl_data_find_any (@code{const HMDT} dat, @code{const char *}cond)
+Определяет есть ли хоть одно значение массива, удовлетворяющее условию @var{cond}.
 @end deftypefn
 
 @c ------------------------------------------------------------------
 @node Operators, Global functions, Informational functions, mglData class
- at section Operators
+ at section Операторы
 
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator= (@code{const mglData &}d)
-Copies data from other variable.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator= (@code{const mglData &}d)
+Копирует данные из другого экземпляра.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator*= (@code{const mglData &}d)
- at deftypefnx {C function} @code{void} mgl_data_mul_dat (@code{HMDT} dat, @code{const HMDT} d)
-Multiplies the data by the other one for each element.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator*= (@code{const mglData &}d)
+ at deftypefnx {Функция С} @code{void} mgl_data_mul_dat (@code{HMDT} dat, @code{const HMDT} d)
+Поэлементно умножает массив @var{d}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator/= (@code{const mglData &}d)
- at deftypefnx {C function} @code{void} mgl_data_div_dat (@code{HMDT} dat, @code{const HMDT} d)
-Divides the data by the other one for each element.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator/= (@code{const mglData &}d)
+ at deftypefnx {Функция С} @code{void} mgl_data_div_dat (@code{HMDT} dat, @code{const HMDT} d)
+Поэлементно делит массив @var{d}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator+= (@code{const mglData &}d)
- at deftypefnx {C function} @code{void} mgl_data_add_dat (@code{HMDT} dat, @code{const HMDT} d)
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator+= (@code{const mglData &}d)
+ at deftypefnx {Функция С} @code{void} mgl_data_add_dat (@code{HMDT} dat, @code{const HMDT} d)
+Поэлементно прибавляет @var{d}.
 Adds the other data.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator-= (@code{const mglData &}d)
- at deftypefnx {C function} @code{void} mgl_data_sub_dat (@code{HMDT} dat, @code{const HMDT} d)
-Subtracts the other data.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator-= (@code{const mglData &}d)
+ at deftypefnx {Функция С} @code{void} mgl_data_sub_dat (@code{HMDT} dat, @code{const HMDT} d)
+Поэлементно вычитает @var{d}.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator*= (@code{float} d)
- at deftypefnx {C function} @code{void} mgl_data_mul_num (@code{HMDT} dat, @code{float} d)
-Multiplies each element by the number.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator*= (@code{float} d)
+ at deftypefnx {Функция С} @code{void} mgl_data_mul_num (@code{HMDT} dat, @code{float} d)
+Умножает каждый элемент на число.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator/= (@code{float} d)
- at deftypefnx {C function} @code{void} mgl_data_div_num (@code{HMDT} dat, @code{float} d)
-Divides each element by the number.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator/= (@code{float} d)
+ at deftypefnx {Функция С} @code{void} mgl_data_div_num (@code{HMDT} dat, @code{float} d)
+Делит каждый элемент на число.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator+= (@code{float} d)
- at deftypefnx {C function} @code{void} mgl_data_add_num (@code{HMDT} dat, @code{float} d)
-Adds the number to each element.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator+= (@code{float} d)
+ at deftypefnx {Функция С} @code{void} mgl_data_add_num (@code{HMDT} dat, @code{float} d)
+Прибавляет число к каждому элементу.
 @end deftypefn
- at deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator-= (@code{float} d)
- at deftypefnx {C function} @code{void} mgl_data_sub_num (@code{HMDT} dat, @code{float} d)
-Subtracts the number to each element.
+ at deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator-= (@code{float} d)
+ at deftypefnx {Функция С} @code{void} mgl_data_sub_num (@code{HMDT} dat, @code{float} d)
+Вычитает число из каждого элемента.
 @end deftypefn
 
 
- at deftypefn {Library Function} mglData operator+ (@code{const mglData &}a, @code{const mglData &}b)
-Adds the other data.
- at end deftypefn
- at deftypefn {Library Function} mglData operator+ (@code{float} a, @code{const mglData &}b)
-Adds the number.
+ at deftypefn {Функция библиотеки} mglData operator+ (@code{const mglData &}a, @code{const mglData &}b)
+Возвращает поэлементную сумму данных.
 @end deftypefn
- at deftypefn {Library Function} mglData operator+ (@code{const mglData &}a, @code{float} b)
-Adds the number.
+ at deftypefn {Функция библиотеки} mglData operator+ (@code{float} a, @code{const mglData &}b)
+ at deftypefnx {Функция библиотеки} mglData operator+ (@code{const mglData &}a, @code{float} b)
+Возвращает поэлементную сумму данных и числа.
 @end deftypefn
 
- at deftypefn {Library Function} mglData operator- (@code{const mglData &}a, @code{const mglData &}b)
-Subtracts the other data.
+ at deftypefn {Функция библиотеки} mglData operator- (@code{const mglData &}a, @code{const mglData &}b)
+Возвращает поэлементную разность данных.
 @end deftypefn
- at deftypefn {Library Function} mglData operator- (@code{float} a, @code{const mglData &}b)
-Subtracts from the number.
- at end deftypefn
- at deftypefn {Library Function} mglData operator- (@code{const mglData &}a, @code{float} b)
-Subtracts the number.
+ at deftypefn {Функция библиотеки} mglData operator- (@code{float} a, @code{const mglData &}b)
+ at deftypefnx {Функция библиотеки} mglData operator- (@code{const mglData &}a, @code{float} b)
+Возвращает поэлементную разность числа и данных.
 @end deftypefn
 
- at deftypefn {Library Function} mglData operator* (@code{const mglData &}a, @code{const mglData &}b)
-Multiplies by the other data.
- at end deftypefn
- at deftypefn {Library Function} mglData operator* (@code{float} a, @code{const mglData &}b)
-Multiplies by the number.
+ at deftypefn {Функция библиотеки} mglData operator* (@code{const mglData &}a, @code{const mglData &}b)
+Возвращает поэлементное произведение данных.
 @end deftypefn
- at deftypefn {Library Function} mglData operator* (@code{const mglData &}a, @code{float} b)
-Multiplies by the number.
+ at deftypefn {Функция библиотеки} mglData operator* (@code{float} a, @code{const mglData &}b)
+ at deftypefnx {Функция библиотеки} mglData operator* (@code{const mglData &}a, @code{float} b)
+Возвращает поэлементное произведение данных на число.
 @end deftypefn
 
- at deftypefn {Library Function} mglData operator/ (@code{const mglData &}a, @code{const mglData &}b)
-Divides by the other data.
+ at deftypefn {Функция библиотеки} mglData operator/ (@code{const mglData &}a, @code{const mglData &}b)
+Возвращает поэлементное деление данных.
 @end deftypefn
- at deftypefn {Library Function} mglData operator/ (@code{const mglData &}a, @code{float} b)
-Divides by the number.
+ at deftypefn {Функция библиотеки} mglData operator/ (@code{const mglData &}a, @code{float} b)
+Возвращает поэлементное деление данных на число.
 @end deftypefn
 
 @c ------------------------------------------------------------------
 @node Global functions, , Operators, mglData class
- at section Global functions
+ at section Глобальные функции
 
-These functions are not methods of @code{mglData} class. However it have additional functionality to handle data. So I put it in this chapter.
+Эти функции не методы класса @code{mglData}, но они дают дополнительные возможности по обработке данных. Поэтому я поместил их в эту главу.
 
- at deftypefn {Global function} @code{mglData} mglTransform (@code{const mglData &}real, @code{const mglData &}imag, @code{const char *}type)
- at deftypefnx {C function} @code{HMDT} mgl_transform (@code{const HMDT} real, @code{const HMDT} imag, @code{const char *}type)
-Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
+ at deftypefn {Функция библиотеки} @code{mglData} mglTransform (@code{const mglData &}real, @code{const mglData &}imag, @code{const char *}type)
+ at deftypefnx {Функция С} @code{HMDT} mgl_transform (@code{const HMDT} real, @code{const HMDT} imag, @code{const char *}type)
+Выполняет интегральное преобразование комплексных данных @var{real}, @var{imag} в выбранном направлении и возвращает модуль результата. Порядок и тип преобразований задается строкой @var{type}: первый символ для x-направления, второй для y-направления, третий для z-направления. Возможные символы: @samp{f} -- прямое преобразование Фурье, @samp{i} -- обратное преобразование Фурье, @samp{s} -- синус преобразование, @samp{c} -- косинус преобразование, @samp{h} -- преобразование Ханкеля, @samp{n} или @samp{ } -- нет преобразования.
 @end deftypefn
 
- at deftypefn {Global function} @code{mglData} mglTransformA @code{const mglData &}ampl, @code{const mglData &}phase, @code{const char *}type)
- at deftypefnx {C function} @code{HMDT} mgl_transform_a @code{const HMDT} ampl, @code{const HMDT} phase, @code{const char *}type)
-Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
+ at deftypefn {Функция библиотеки} @code{mglData} mglTransformA @code{const mglData &}ampl, @code{const mglData &}phase, @code{const char *}type)
+ at deftypefnx {Функция С} @code{HMDT} mgl_transform_a @code{const HMDT} ampl, @code{const HMDT} phase, @code{const char *}type)
+Аналогично предыдущему с заданными амплитудой @var{ampl} и фазой @var{phase} комплексных чисел.
 @end deftypefn
 
- at deftypefn {Global function} @code{mglData} mglSTFA (@code{const mglData &}real, @code{const mglData &}imag, @code{int} dn, @code{char} dir=@code{'x'})
- at deftypefnx {C function} @code{HMDT} mgl_data_stfa (@code{const HMDT} real, @code{const HMDT} imag, @code{int} dn, at code{char} dir)
-Short time Fourier analysis for real and imaginary parts. Output  is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
+ at deftypefn {Функция библиотеки} @code{mglData} mglSTFA (@code{const mglData &}real, @code{const mglData &}imag, @code{int} dn, @code{char} dir=@code{'x'})
+ at deftypefnx {Функция С} @code{HMDT} mgl_data_stfa (@code{const HMDT} real, @code{const HMDT} imag, @code{int} dn, at code{char} dir)
+Выполняет оконное преобразование Фурье длиной @var{dn} для комплексных данных @var{real}, @var{imag} и возвращает модуль результата. Например, для @var{dir}=@samp{x} результат будет иметь размер @{int(nx/dn), dn, ny@} и будет равен @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
 @end deftypefn
 
- at deftypefn {Global function} @code{mglData} mglPDE (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{mglPoint} Min, @code{mglPoint} Max, @code{float} dz=@code{0.1}, @code{float} k0=@code{100})
- at deftypefnx {C function} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{float} dz, @code{float} k0)
-Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{Min}, @var{Max} set the bounding box for the solution. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE sample} 
+ at deftypefn {Функция библиотеки} @code{mglData} mglPDE (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{mglPoint} Min, @code{mglPoint} Max, @code{float} dz=@code{0.1}, @code{float} k0=@code{100})
+ at deftypefnx {Функция С} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{float} dz, @code{float} k0)
+Решает уравнение в частных производных du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные операторы. Параметры @var{ini_re}, @var{ini_im} задают начальное распределение поля. Координаты в уравнении и в решении полагаются в диапазоне осей координат. Замечу, что внутри этот диапазон увеличивается в 3/2 раза для уменьшения отражения от границ расчетного интервала. Параметр @var{dz} задает шаг по эволюционной координате z. В данный момент использован упрощенный алгоритм, когда все ``смешанные'' члена (типа @samp{x*p}->x*d/dx) исключаются. Например, в 2D случае это функции типа @math{ham = f(p,z) + g(x,z,u)}. При этом допускаются коммутирующие комбинации (типа @samp{x*q}->x*d/dy). Переменная @samp{u} используется для обозначения амплитуды поля |u|. Это позволяет решать нелинейные задачи -- например, нелинейное уравнение Шредингера @code{ham='p^2+q^2-u^2'}. Также можно указать мнимую часть для поглощения (типа @code{ham = 'p^2+i*x*(x>0)'}), но только если зависимость от @samp{i} линейная, т.е. @math{ham = hre+i*him}. @sref{PDE sample}
 @end deftypefn
 
- at deftypefn {Global function} @code{mglData} mglRay (@code{const char *}ham, @code{mglPoint} r0, @code{mglPoint} p0, @code{float} dt=@code{0.1}, @code{float} tmax=@code{10})
- at deftypefnx {C function} @code{HMDT} mgl_ray_trace (@code{const char *}ham, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} px, @code{float} py, @code{float} pz, @code{float} dt, @code{float} tmax)
-Solves GO ray equation like dr/dt = d @var{ham}/dp, dp/dt = -d @var{ham}/dr. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @var{r0}, @var{p0}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}.
+ at deftypefn {Функция библиотеки} @code{mglData} mglRay (@code{const char *}ham, @code{mglPoint} r0, @code{mglPoint} p0, @code{float} dt=@code{0.1}, @code{float} tmax=@code{10})
+ at deftypefnx {Функция С} @code{HMDT} mgl_ray_trace (@code{const char *}ham, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} px, @code{float} py, @code{float} pz, @code{float} dt, @code{float} tmax)
+Решает систему геометрооптических уравнений d at emph{r}/dt = d @var{ham}/d at emph{p}, d at emph{p}/dt = -d @var{ham}/d at emph{r}. Это гамильтоновы уравнения для траектории частицы в 3D случае. Гамильтониан @var{ham} может зависеть от координат @samp{x}, @samp{y}, @samp{z}, импульсов @samp{p}=px, @samp{q}=py, @samp{v}=pz и времени @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. Начальная точка (при @code{t=0}) задается переменными @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Параметры @var{dt} и @var{tmax} задают шаг и максимальное время интегрирования. Результат -- массив @{x,y,z,p,q,v,t@} с размером @{7 * int(@var{tmax}/@var{dt}+1) @}. @sref{Beam tracing sample}
 @end deftypefn
 
- at deftypefn {Global function} @code{mglData} mglQO2d (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{const mglData &}ray, @code{float} r=@code{1}, @code{float} k0=@code{100}, @code{mglData *}xx=@code{0}, @code{mglData *}yy=@code{0}, @code{bool} UseR=@code{true})
- at deftypefnx {C function} @code{HMDT} mgl_qo2d_solve (@code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{const HMDT} ray, @code{float} r, @code{float} k0, @code{HMDT} xx, @code{HMDT} yy)
-Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} 
+ at deftypefn {Функция библиотеки} @code{mglData} mglQO2d (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{const mglData &}ray, @code{float} r=@code{1}, @code{float} k0=@code{100}, @code{mglData *}xx=@code{0}, @code{mglData *}yy=@code{0}, @code{bool} UseR=@code{true})
+ at deftypefnx {Функция С} @code{HMDT} mgl_qo2d_solve (@code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{const HMDT} ray, @code{float} r, @code{float} k0, @code{HMDT} xx, @code{HMDT} yy)
+Решает уравнение в частных производных du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u] в сопровождающей системе координат, где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные операторы. Параметры @var{ini_re}, @var{ini_im} задают начальное распределение поля. Параметр @var{ray} задает опорный луч для сопровождающей системы координат. Можно использовать луч найденный с помощью @code{mglRay()}. Опорный луч должен быть достаточно гладкий, чтобы система координат была однозначной и для исключения ошибок интегрирования. Если массивы @var{xx} и @var{yy} указаны, то в них записываются декартовы координаты для каждой точки найденного решения. См. также @code{mglPDE()}. @sref{Beam tracing sample}
 @end deftypefn
 
- at deftypefn {Global function} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y)
- at deftypefnx {Global function} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z)
- at deftypefnx {C function} @code{HMDT} mgl_jacobian_2d (@code{const HMDT} x, @code{const HMDT} y)
- at deftypefnx {C function} @code{HMDT} mgl_jacobian_3d (@code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z)
-Computates the Jacobian for transformation @{i,j,k@} to @{@var{x}, at var{y}, at var{z}@} where initial coordinates  @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{x}, at var{y}, at var{z}@} and @math{\xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{x}, at var{y}, at var{z}@} are specified or 2D if only 2 arrays @{@var{x}, at var{y}@} are specified.
+ at deftypefn {Функция библиотеки} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y)
+ at deftypefnx {Функция библиотеки} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z)
+ at deftypefnx {Функция С} @code{HMDT} mgl_jacobian_2d (@code{const HMDT} x, @code{const HMDT} y)
+ at deftypefnx {Функция С} @code{HMDT} mgl_jacobian_3d (@code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z)
+Вычисляет якобиан преобразования @{i,j,k@} в @{@var{x}, at var{y}, at var{z}@}, где координаты @{i,j,k@} полагаются нормированными в интервал [0,1]. Якобиан находится по формуле det||@math{dr_\alpha/d\xi_\beta}||, где @math{r}=@{@var{x}, at var{y}, at var{z}@} и @math{\xi}=@{i,j,k@}. Все размерности всех массивов должны быть одинаковы. Данные должны быть трехмерными если указаны все 3 массива @{@var{x}, at var{y}, at var{z}@} или двумерными если только 2 массива @{@var{x}, at var{y}@}.
 @end deftypefn
 
diff --git a/texinfo/ex_mgl_en.texi b/texinfo/ex_mgl_en.texi
new file mode 100644
index 0000000..5dab290
--- /dev/null
+++ b/texinfo/ex_mgl_en.texi
@@ -0,0 +1,774 @@
+ at c ------------------------------------------------------------------
+ at chapter MathGL examples
+
+This chapter contain information about basic and advanced MathGL, hints and samples for all types of graphics. I recommend you read first 2 sections one after another and at least look on ``Hints'' section. Also I recommend you to look at @ref{General concepts}. Sample code for some of these examples can be found in @uref{http://mathgl.sf.net/pictures.html} and in @ref{Samples}.
+
+ at menu
+* Basic usage:: 
+* Advanced usage:: 
+* Data handling:: 
+* Data plotting:: 
+* Hints::
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Basic usage, Advanced usage, , Examples
+ at section Basic usage
+
+MGL script can be used by several manners. Each has positive and negative sides:
+ at itemize @bullet
+ at item
+ at emph{The using of MGL in UDAV.}
+
+Positive side is the possibility to view the plot at once and to modify it, rotate, zoom or switch on transparency or lighting) by hand or by mouse. Negative sides are: the need of X-terminal.
+
+ at item
+ at emph{Direct writing to file in bitmap or vector format without creation of graphical window.}
+
+Positive aspects are: batch processing of similar data set, for example, a set of resulting data files for different calculation parameters), running from the console program, including the cluster calculation), fast and automated drawing, saving pictures for further analysis, or demonstration). Negative sides are: the usage of the external program for picture viewing. Also, the data plotting is non-visual. So, you have to imagine the picture, view angles, lighting and so on) before the plotting. I recommend to use graphical window for determining the optimal parameters of plotting on the base of some typical data set. And later use these parameters for batch processing in console program.
+
+In this case you can use a set of programs: @code{mgl2png}, @code{mgl2gif}, @code{mgl2eps}, @code{mgl2svg} or @code{mglview} for viewing.
+ at end itemize
+
+The simplest script is
+ at verbatim
+box         # draw bounding box
+axis        # draw axis
+fplot 'x^3' # draw some function
+ at end verbatim
+
+Just type it in UDAV and press F5. Also you can save it in text file @samp{test.mgl} and type in the console @code{mgl2png test.mgl} what produce file @samp{test.mgl.png} with resulting picture.
+
+ at c ------------------------------------------------------------------
+ at node Advanced usage, Data handling, Basic usage, Examples
+ at section Advanced usage
+
+Now I show several non-obvious features of MGL: several subplots in a single picture, curvilinear coordinates, text printing and so on. Generally you may miss this section at first reading, but I don't recommend it.
+
+ at menu
+* Subplots:: 
+* Axis and grids:: 
+* Curvilinear coordinates:: 
+* Text printing example:: 
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Subplots, Axis and grids, , Advanced usage
+ at subsection Subplots
+
+Let me demonstrate possibilities of axes transformation. MathGL has the following functions: @code{SubPlot}, @code{InPlot}, @code{Aspect} and @code{Rotate}, @pxref{Transformation matrix}). The order of their calling is strictly determined. First, one changes the position of axes in image area, functions @code{SubPlot} and @code{InPlot}). After that one may rotate the plot, function @code{Rotate}). Finally, one may change aspects of axes, function @code{Aspect}). The following code illustrates the aforesaid it:
+ at verbatim
+subplot 2 2 0:box
+text -1 1.1 'Just box' 'L'
+inplot 0.2 0.5 0.7 1:box
+text 0 1.2 'Inplot example'
+
+subplot 2 2 1
+rotate 60 40:aspect 1 1 1
+box:text 1 1 1.5 'rotate only' 'R'
+
+subplot 2 2 2
+rotate 60 40:aspect 1 1 2
+box:text 0 0 2 'aspect and rotate'
+
+subplot 2 2 3
+rotate 60 40:aspect 1 2 2
+box:text 0 0 1.5 'Aspect in other direction'
+ at end verbatim
+Here I used function @code{text} for printing the text in arbitrary position of picture, @pxref{Text printing}). Text coordinates and size are connected with axes. However, text coordinates may be everywhere, including the outside the bounding box. I shall show its features later in @xref{Text printing example}.
+
+Note that several commands can be placed in a string if they are separated by @samp{:} symbol.
+
+ at float
+ at image{../png/sample1, 7cm}
+ at caption{Example of several subplots on the single picture.}
+ at end float
+
+ at c ------------------------------------------------------------------
+ at node Axis and grids, Curvilinear coordinates, Subplots, Advanced usage
+ at subsection Axis and grids
+
+MathGL library can draw not only the bounding box but also the axes, grids, labels and so on. The limits of axes and their origin (the point of intersection) are determined by function @code{axis}. Also you can use @code{xrange, yrange, zrange} functions (@pxref{Axis settings}). Ticks on axis are specified by functions @code{xtick, ytick, ztick, ttick}. First argument the direction for each change will be applied. Second argument gives the step between ticks (if positive) or gives the number of ticks on the axis (if negative) or set to use logarithmic ticks (if zero). Third argument gives numbers of sub-ticks between ticks (default is zero). Last argument define the initial ticks position.
+
+Function @code{Axis} draws axes. Its textual string shows in which directions the axis or axes will be drawn (by default @code{'xyz'}, function draws axes in all directions). Function @code{Grid} draws grid perpendicularly to specified directions. Example of axes and grid drawing is:
+ at verbatim
+subplot 2 2 0
+xtick 0.4 3     # sets tick step to 0.5
+ytick 0.4 3     # and draws 3 subticks
+box             # should be after the ticks change
+axis 'xy': grid
+text 0 1.3 1 'axis and grid'
+
+xtick -5: ytick -5  # restore back
+subplot 2 2 1:rotate 60 40
+origin 0 0 0
+axis
+xlabel 'x' 1
+ylabel 'y' 1
+zlabel 'z' 1
+text 0 0 1.5 'axis and labels'
+
+subplot 2 2 2:rotate 60 40
+xtick 0.2: ytick 0.2: ztick 0.2 # too low step of ticks
+origin -1 -1 -1
+axis:grid
+text 0 0 1.5 'shift origin and add grid'
+text 0 0 1.2 '(note, too many ticks)'
+
+subplot 2 2 3:rotate 60 40
+xtick -6: ytick -6  # decrease the number of ticks
+axis 'yz'
+ylabel 'y axis'
+zlabel 'z axis'
+text 0 0 1.5 'remove x axis, and'
+text 0 0 1.2 'decrease number of ticks'
+ at end verbatim
+
+This example shows the importance of the correct choosing of the number of ticks on axis. If tick step is too small then its text may overlap and becomes unreadable. This code has the example of @code{Label} function. It draws label for axis in specified direction. The text position on axis is specified by third argument of @code{Label} function. If it is positive then then text is drawn near the axis maximum, if negative then the same takes place near the minimum of axis, if zero - then at the center of axis.
+
+ at float
+ at image{../png/sample2, 7cm}
+ at caption{Example of setting up axis range and axis ticks.}
+ at end float
+
+ at c ------------------------------------------------------------------
+ at node Curvilinear coordinates, Text printing example, Axis and grids, Advanced usage
+ at subsection Curvilinear coordinates
+
+
+Now let use curvilinear coordinates. In difference from other systems of plot creation, MathGL uses textual formulas for connection of the old (data) and new (output) coordinates. This allows one to plot in arbitrary coordinates. The following code plots the line @var{y}=0, @var{z}=0 in Cartesian, polar, parabolic and spiral coordinates:
+ at verbatim
+new x 50: new y 50: new z 50
+fill y 0.5 0.5: fill x -1 1 # creates data arrays
+origin -1 1 -1
+
+subplot 2 2 0:rotate 60 40
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'cartesian'
+
+subplot 2 2 1:rotate 60 40
+axis 'y*sin(pi*x)' 'y*cos(pi*x)' ''
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'cylindrical'
+
+subplot 2 2 2:rotate 60 40
+axis '2*y*x' 'y*y - x*x' ''
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'parabolic'
+
+subplot 2 2 3:rotate 60 40
+axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z'
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'spiral'
+ at end verbatim
+
+ at float
+ at image{../png/sample3, 7cm}
+ at caption{Example of curvilinear coordinates}
+ at end float
+
+
+ at c ------------------------------------------------------------------
+ at node Text printing example, , Curvilinear coordinates, Advanced usage
+ at subsection Text printing example
+
+MathGL prints text by vector font. There are functions for manual specifying of text position (like @code{Puts}) and for its automatic selection (like @code{Label}, @code{legend} and so on). MathGL prints text always in specified position even if it lies outside the bounding box. The default size of font is specified by command @var{fontsize}. However, the actual size of output string depends on position of axes (depends on functions @code{SubPlot}, @code{InPlot}). The switching of the font style (italic, bold, wire and so on) can be done for the whole string (by function parameter) or inside the string. By default MathGL parses TeX-like commands for symbols and indexes (see @pxref{Font styles}). Example of MathGL font drawing is:
+ at verbatim
+text 0 1 'Text can be in ASCII and in Unicode'
+text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}'
+text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}'
+text 0 -0.2 'Easy to \a{overline} or \u{underline}'
+text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}'
+text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx'
+ at end verbatim
+
+ at float
+ at image{../png/sample4, 7cm}
+ at caption{Example of text printing with different font effects}
+ at end float
+
+Another example demonstrate the features of TeX formula parsing.
+ at verbatim
+text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}', 0, -4
+ at end verbatim
+
+ at float
+ at image{../png/samplee, 7cm}
+ at caption{Example of TeX formula parsing}
+ at end float
+
+
+ at c ------------------------------------------------------------------
+ at node Data handling, Data plotting, Advanced usage, Examples
+ at section Data handling
+
+ at c Class @code{mglData} contains all functions for the data handling in MathGL (@pxref{mglData class}). There are several matters why I use class @code{mglData} but not a single array: it does not depend on type of data (float or double), sizes of data arrays are kept with data, memory working is simpler and safer.
+
+ at menu
+* Array creation::              
+* Data changing::               
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Array creation, Data changing, , Data handling
+ at subsection Array creation
+
+One can put numbers into the data instance by several ways. Let us do it for sinus function:
+ at itemize @bullet
+ at item
+one can create array by @code{list} command
+ at verbatim
+list a 0 0.04 0.16 0.36 0.64 1
+ at end verbatim
+
+ at item
+another way is to copy from ``inline'' array
+ at verbatim
+copy a [0,0.04,0.16,0.36,0.64,1]
+ at end verbatim
+
+ at item
+next way is to fill the data by textual formula with the help of @code{modify} function
+ at verbatim
+new a 6
+modify a 'x^2'
+ at end verbatim
+
+ at item
+or one may fill the array in some interval and modify it later
+ at verbatim
+new a 6
+fill a 0 1
+modify a 'u^2'
+ at end verbatim
+
+ at item
+or fill the array using current axis range
+ at verbatim
+new a 6
+fill a '(x+1)^2/4'
+ at end verbatim
+
+ at item
+finally it can be loaded from file
+ at verbatim
+new s 6: modify s 'x^2'
+save s 'sqr.dat'    # create file first
+read a 'sqr.dat'    # load it
+ at end verbatim
+
+ at item
+at this one can read only part of data
+ at verbatim
+new s 6: modify s 'x^2'
+save s 'sqr.dat'    # create file first
+read a 'sqr.dat' 5  # load it
+ at end verbatim
+ at end itemize
+
+Creation of 2d- and 3d-arrays is mostly the same. One can use direct data filling by @code{list} command
+ at verbatim
+list a 11 12 13 | 21 22 23 | 31 32 33
+ at end verbatim
+or by inline arrays
+ at verbatim
+copy a [[11,12,13],[21,22,23],[31,32,33]]
+ at end verbatim
+Also data can be filled by formula
+ at verbatim
+new z 30 40
+fill z 'sin(pi*x)*cos(pi*y)'
+ at end verbatim
+or loaded from file.
+
+The only non-obvious thing here is using multidimensional arrays in C/C++, i.e. arrays defined like @code{float dat[40][30];}. Since, formaly this arrays element @code{dat[i]} can address the memory in arbitrary place you should use the proper function to convert such arrays to @code{mglData} object. For C++ this is functions like @code{mglData::Set(float **dat, int N1, int N2}. For C this is functions like @code{mgl_data_set_float2(HMDT d, const float **dat, int N1, int N2}. At this, you should keep in mind that @code{nx=N2} and @code{ny=N1} after conversion.
+
+ at c ------------------------------------------------------------------
+ at node Data changing, , Array creation, Data handling
+ at subsection Data changing
+
+MathGL has functions for data processing: differentiating, integrating, smoothing and so on. Let us consider some examples. The simplest ones are integration and differentiation. The direction in which operation will be performed is specified by textual string, which may contain symbols @samp{x}, @samp{y} or @samp{z}. For example, the call of @code{diff a 'x'} will differentiate data along @samp{x} direction; the call of @code{integrate a 'xy'} perform the double integration of data along @samp{x} and @samp{y} directions; the call of @code{diff2 a 'xyz'} will apply 3d Laplace operator to data and so on. Example of this operations on 2d array a=x*y is presented in code:
+ at verbatim
+new a 30 40: modify a 'x*y'
+axis 0 0 0 1 1 1
+subplot 2 2 0:rotate 60 40
+surf a: box
+text 0.7 1 1.2 'a(x,y)'
+subplot 2 2 1:rotate 60 40
+diff a 'x': surf a: box
+text 0.7 1 1.2 'da/dx'
+subplot 2 2 2:rotate 60 40
+integrate a 'xy': surf a: box
+text 0.7 1 1.2 '\int da/dx dxdy'
+subplot 2 2 3:rotate 60 40
+diff2 a 'y': surf a: box
+text 0.7 1 1.2 '\int {d^2}a/dxdy dx'
+ at end verbatim
+
+ at float
+ at image{../png/sample6, 7cm}
+ at caption{Example of data differentiation and integration}
+ at end float
+
+Data smoothing (function @code{Smooth}) is more interesting and important. This function has 2 main arguments: type of smoothing and its direction. Now 4 methods are supported: @code{0} does nothing for delta=0 or approaches data to zero with the step delta, @code{1} linear averaging by 3 points, @code{2} linear averaging by 5 points, @code{3} quadratic averaging by 5 points. Let me demonstrate it for 1d case:
+ at verbatim
+new y0 30
+modify y0 '0.4*sin(2*pi*x)+0.3*cos(3*pi*x)-0.4*sin(4*pi*x)+0.2*rnd'
+copy y1 y0: smooth y1 1
+copy y2 y0: smooth y2 2
+copy y3 y0: smooth y3 3
+
+plot y0 'k': addlegend 'none' 'k'
+plot y1 'r': addlegend 'line 3' 'r'
+plot y2 'g': addlegend 'line 5' 'g'
+plot y3 'b': addlegend 'quad 5' 'b'
+legend: box
+ at end verbatim
+
+ at float
+ at image{../png/sample7, 7cm}
+ at caption{Example of data smoothing}
+ at end float
+
+Finally one can create new data arrays on base of the existing one: extract slice, row or column of data (@code{SubData}), summarize along some of direction(s) (@code{Sum}), find distribution of data elements (@code{Hist}). Note, that all these functions are not thread-safe because they use static internal variable for output array. In particular, the using of several of them in arguments of the same function will lead to unpredictable result.
+
+ at c ------------------------------------------------------------------
+ at node Data plotting, Hints, Data handling, Examples
+ at section Data plotting
+
+Let me now show how to plot the data. MathGL generally has 2 types of plotting functions. Simple variant requires a single data array for plotting, other data (coordinates) are considered uniformly distributed in interval @var{Min}*@var{Max}. Second variant requires data arrays for all coordinates. It allows one to plot rather complex multivalent curves and surfaces (in case of parametric dependencies). Argument setting to default values allows one to plot data in standard form. Manual arguments setting gives possibility for fine tuning of colors, positions and view of graphics. Note, that the call of drawing function adds something to picture but does not clear the previous plots (as it does in Matlab). Another difference from Matlab is that all setup (like transparency, lightning, axis borders and so on) must be specified @strong{before} plotting functions.
+
+ at menu
+* Plots for 1D data::           
+* Plots for 2D data::           
+* Plots for 3D data::           
+* Surface transparency::        
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Plots for 1D data, Plots for 2D data, , Data plotting
+ at subsection Plots for 1D data
+
+Term ``1D data'' means that data depend on single index (parameter) like curve in parametric form @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot, line plot with filling under it, stairs plot, bar plot and vertical lines (@pxref{1D plotting}). Each type of plotting has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks (@pxref{Line styles}) are specified by the string argument. If the string parameter is @code{NULL} then solid line with color from palette is used.
+
+Below I shall show the features of 1D plotting on base of @code{plot} function (@pxref{1D plotting}). Let us start from sinus plot:
+ at verbatim
+new y0 50: modify y0 'sin(pi*(2*x-1))'
+subplot 2 2 0
+plot y0: box
+ at end verbatim
+Style of line is not specified in @code{plot} function. So MathGL uses the solid line with first color of palette (this is blue). Next subplot shows array @var{y1} with 2 rows:
+ at verbatim
+subplot 2 2 1
+new y1 50 2
+modify y1 'sin(pi*2*x-pi)'
+modify y1 'cos(pi*2*x-pi)/2' 1
+plot y1: box
+ at end verbatim
+As previously I did not specify the style of lines. As a result, MathGL again uses solid line with next colors in palette (there are green and red). Now let us plot a circle on the same subplot. The circle is parametric curve @math{x=cos(\pi t), y=sin(\pi t)}. I will set the color of the circle (dark yellow, @samp{Y}) and put marks @samp{+} at point position:
+ at verbatim
+new x 50: modify x 'cos(pi*2*x-pi)'
+plot x y0 'Y+'
+ at end verbatim
+Note that solid line is used because I did not specify the type of line. The same picture can be achieved by @code{Plot2} function. Let us draw ellipse by orange dash line:
+ at verbatim
+plot y1(:,0) y(:,1) 'q|'
+ at end verbatim
+
+Drawing in 3D space is mostly the same. Let us draw spiral with default line style. Now its color is 4-th color from palette (this is cyan):
+ at verbatim
+subplot 2 2 2:rotate 60 40
+new z 50: modify z '2*x-1'
+plot x y0 z:box
+ at end verbatim
+Function @code{Plot3} does 3D curve plot but for single array. Use it to put circle marks on the previous plot:
+ at verbatim
+new y2 10 3:modify y2 'cos(pi*(2*x-1+y))'
+modify y2 '2*x-1' 2
+plot y2(:,0) y2(:,1) y2(:,2) 'bo '
+ at end verbatim
+Note that line style is empty @samp{ } here. Usage of other 1D plotting functions looks similar:
+ at verbatim
+subplot 2 2 3:rotate 60 40
+bars x y0 z 'r':box
+ at end verbatim
+
+ at float
+ at image{../png/sample8, 7cm}
+ at caption{Example of 1D data plot}
+ at end float
+
+ at c ------------------------------------------------------------------
+ at node Plots for 2D data, Plots for 3D data, Plots for 1D data, Data plotting
+ at subsection Plots for 2D data
+
+Surfaces @code{Surf} and other 2D plots (@pxref{2D plotting}) are drown the same simpler as 1D one. The difference is that the string parameter specifies not by line style but by the color scheme of the plot (@pxref{Color scheme}). Here I draw attention on 4 most interesting color schemes. There is gray scheme where color is changed from black to white (string @samp{kw}) or from white to black (string @samp{wk}). Another scheme is useful for accentuation of negative (by blue color) and positive (by red color) regions on plot (string @samp{'BbwrR'}). Last one is the popular ``jet'' scheme (string @samp{'BbcyrR'}).
+
+Now I shall show the example of a surface drawing. At first let us switch lightning on
+ at verbatim
+light on: light 0 0 0 1
+ at end verbatim
+and draw the surface, considering coordinates x,y to be uniformly distributed in interval @var{Min}*@var{Max}
+ at verbatim
+new a0 50 40
+modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+subplot 2 2 0:rotate 60 40
+surf a0: box
+ at end verbatim
+Color scheme was not specified. So previous color scheme is used. In this case it is default color scheme (``jet'') for the first plot. Next example is a sphere. The sphere is parametrically specified surface:
+ at verbatim
+new x 50 40: new y 50 40: new z 50 40
+modify x '0.8*sin(2*pi*x)*sin(pi*y)'
+modify y '0.8*cos(2*pi*x)*sin(pi*y)'
+modify z '0.8*cos(pi*y)'
+subplot 2 2 1:rotate 60 40
+surf x y z 'bbwrr': box
+ at end verbatim
+I set color scheme to @code{'BbwrR'} that corresponds to red top and blue bottom of the sphere.
+
+Surfaces will be plotted for each of slice of the data if @var{nz}>1. Next example draws surfaces for data arrays with @var{nz}=3:
+ at verbatim
+new a1 50 40 3
+modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2
+subplot 2 2 2:rotate 60 40
+alpha on
+surf a1: box
+ at end verbatim
+Note, that it may entail a confusion. However, if one will use density plot then the picture will look better:
+ at verbatim
+subplot 2 2 3: rotate 60 40
+dens a1: box
+ at end verbatim
+Note, that the previous color scheme is used in last plots because there are no direct specification of the one.
+
+ at float
+ at image{../png/sample9, 7cm}
+ at caption{Example of surface plot for 2D data}
+ at end float
+
+Drawing of other 2D plots is analogous. The only peculiarity is the usage of flag @samp{#}. By default this flag switches on the drawing of a grid on plot (@code{grid} or @code{mesh} for plots in plain or in volume). However, for isosurfaces (including surfaces of rotation @code{axial}) this flag switches the  face drawing off. Figure becomes wired. The following code gives example of flag @samp{#} using (compare with normal function drawing as in its description):
+ at verbatim
+alpha on: light on: light 0 0 0 1
+new a 30 20
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+subplot 2 2 0: rotate 40 60
+surf a 'bbcyrr#': box
+subplot 2 2 1: rotate 40 60
+dens a 'bbcyrr#': box
+subplot 2 2 2: rotate 40 60
+cont a 'bbcyrr#': box
+subplot 2 2 3: rotate 40 60
+axial a 'bbcyrr#': box
+ at end verbatim
+
+ at float
+ at image{../png/samplea, 7cm}
+ at caption{Example of 2D data plot with color scheme contained @samp{#} symbol}
+ at end float
+
+ at c ------------------------------------------------------------------
+ at node Plots for 3D data, Surface transparency, Plots for 2D data, Data plotting
+ at subsection Plots for 3D data
+
+Drawing procedures for 3D plot looks similarly to 1D and 2D plots described above. There are 3 general types of 3D plots (@pxref{3D plotting}): (i) plots on slices or on projections, (ii) isosurfaces, (iii) cloud-like plots. Plots on slice are clear enough -- one specifies a slice (as its index or as coordinate value) and MathGL draws contour lines or density plot on slice plane. Isosurface gives more information. Isosurface is 3D analogue of the contour line @code{cont}. It shows the region where data array values exceed specified isosurface level. Plot becomes more informative if one adds transparency, lightning or sets color scheme depending on coordinates. Generalization of isosurface is the cloud-like plot. For this plot the darker color and less transparent regions correspond to higher values of data. Contrary, the regions with low values are transparent. For plotting of the phase of fields (or beams or pulses) one can use isosurface which transparency depends on the other data array (see function @code{surf3a}). As example of 3D data plots let us draw the Gaussian beam diffraction in space. Beam propagates along @var{x} axis:
+ at verbatim
+alpha on: light on
+light 0 0 0 1
+new a 30 30 30: new b 30 30 30
+modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))'
+modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)'
+caxis 0 1
+
+subplot 2 2 0: rotate 40 60
+surf3 a 'wgk': box
+subplot 2 2 1: rotate 40 60
+densa a: box: axis
+subplot 2 2 2: rotate 40 60
+cloud a: box
+subplot 2 2 3: rotate 40 60
+surf3a b a 'q': box
+ at end verbatim
+
+ at float
+ at image{../png/sampleb, 7cm}
+ at caption{Example of Gaussian beam diffraction (3D data)}
+ at end float
+
+
+ at c ------------------------------------------------------------------
+ at node Surface transparency, , Plots for 3D data, Data plotting
+ at subsection Surface transparency
+
+MathGL library has advanced features for setting and handling the surface transparency. The simplest way to add transparency is the using of function @code{Alpha}. As a result, all further surfaces (and isosurfaces, density plots and so on) become transparent. However, their  look can be additionally improved.
+
+First, the selected surface will be non-transparent if one sets the flag @code{transparent} before the surface drawing and sets it off after the drawing.
+
+Second, the value of transparency can be different from surface to surface. To do it just change the value of @code{alphadef} before the drawing of the selected surface. If its value is close to 0 then the surface becomes more and more transparent. Contrary, if its value is close to 1 then the surface becomes practically non-transparent. This is some analogue of @code{transparent on}.
+
+Third feature is the changing of the way how the light goes through overlapped surfaces. The variable @code{transptype} defines it. By default the usual transparency is used (@code{transptype 0}) -- surfaces below is less visible than the upper ones. A ``glass-like'' transparency (@code{transptype 1}) has a different look when the surface just decreases the background light (the surfaces are commutable in this case).
+
+A ``neon-like'' transparency (@code{transptype 2}) has more interesting look. In this case a surface is the light source (like a lamp on the dark background) and just adds some intensity to the color. At this, the library sets automatically the black color for the background and changes the default line color to white.
+
+As example I shall show the variant of plot from @ref{Plots for 2D data} (grid drawing is disabled) for different types of transparency.
+ at float
+ at image{../png/type0, 7cm}
+ at caption{Example of @code{TranspType=0}.}
+ at end float
+ at float
+ at image{../png/type1, 7cm}
+ at caption{Example of @code{TranspType=1}.}
+ at end float
+ at float
+ at image{../png/type2, 7cm}
+ at caption{Example of @code{TranspType=2}.}
+ at end float
+
+
+
+ at c ------------------------------------------------------------------
+ at node Hints, , Data plotting, Examples
+ at section Hints
+
+In this section I have included some small hints and advices for the improving of the quality of plots and for the demonstration of some non-trivial features of MathGL library. In contrast to previous examples I showed mostly the idea but not the whole drawing function. More examples with the source code can be find at @uref{http://mathgl.sf.net/} or in section @ref{Samples}.
+
+ at menu
+* ``Compound'' graphics::       
+* Two axes in one plot::        
+* Titles for the plot::         
+* Changing of the color range:: 
+* Management of a point cutting::
+* Vector field visualization::  
+* Several light sources::       
+* CutMin and CutMax features::  
+* Mapping visualization::       
+* Log-scaled plot::             
+* Nonlinear fitting hints::     
+* PDE solving hints::           
+* Stereo image::                
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node ``Compound'' graphics, Two axes in one plot, , Hints
+ at subsection ``Compound'' graphics
+
+As I noted above, MathGL functions (except the special one, like @code{clf}) do  not erase the previous plotting but just add the new one. It allows one to draw ``compound'' plots easily. For example, popular Matlab command @code{surfc} can be emulated in MathGL by 2 calls:
+ at verbatim
+surf a
+cont a 0 7 -1   # draw contours at z = -1
+ at end verbatim
+Here @var{a} is 2-dimensional data for the plotting, @code{-1} is the value of z-coordinate at which the contour should be plotted (at the bottom in this example). Analogously, one can draw density plot instead of contour lines and so on.
+
+Another nice plot is contour lines plotted directly on the surface:
+ at verbatim
+light on        # switch on light for the surface
+surf a 'bbcyrr' # select 'jet' colormap for the surface
+cont a 'y'      # and yellow color for contours
+ at end verbatim
+The possible difficulties arise in black&white case, when the color of the surface can be close to the color of a contour line. In that case I may suggest the following code:
+ at verbatim
+light on        # switch on light for the surface
+surf a 'kw'     # select 'gray' colormap for the surface
+caxis -1 0      # first draw for darker surface colors
+conta 'w'       # white contours
+caxis 0 1       # now draw for brighter surface colors
+cont a 'k'      # black contours
+ at end verbatim
+The idea is to divide the color range on 2 parts (dark and bright) and to select the contrasting color for contour lines for each of part.
+
+Similarly, one can plot flow thread over density plot of vector field amplitude (this is another amusing plot from Matlab) and so on. The list of compound graphics can be prolonged but I hope that the general idea is clear.
+
+ at c ------------------------------------------------------------------
+ at node Two axes in one plot, Titles for the plot, ``Compound'' graphics, Hints
+ at subsection Two axes in one plot
+
+Developing the previous hint one can make a plot with 2 or more axes. The idea is that the change of settings does not influence on the already drawn graphics. So, for 2-axes plot let us set the first axis and draw everything concerning it. Then let us setup the second axis and draw things for the second axis. The corresponding code is (@pxref{2-axes sample}):
+ at verbatim
+# set up first axis
+axis -1 -1 1 1: origin -1 -1
+axis:fplot 'sin(pi*x)'      # draw something in first axis
+# set up second axis
+axis 0 0 1 1: origin 1 1
+axis: fplot 'cos(4*pi*x^2)' # draw something in second axis
+ at end verbatim
+Note, that the first and the second axes look better if being placed in different corners. In the code presented above the first axis is placed in the left-bottom corner, and the second one is placed in the right-top corner.
+
+ at c ------------------------------------------------------------------
+ at node Titles for the plot, Changing of the color range, Two axes in one plot, Hints
+ at subsection Titles for the plot
+
+The printing of nice titles for the plot is not so trivial task in general case. The problem is that the rotation and aspect change lead to different looks for titles of different subplots. So, the resulting look is not so good as it could be. The solution is simple -- to print titles exactly after @code{subplot} call and before any rotation, aspect change and so on! Analogously, the title for the whole picture looks better if it is printed first (before any @code{subplot} calls). Alternatively you can use function @code{title} for plotting title for the picture at any time.
+
+ at c ------------------------------------------------------------------
+ at node Changing of the color range, Management of a point cutting, Titles for the plot, Hints
+ at subsection Changing of the color range
+
+By default (for the user comfort), the color range is set equal to z-range of the plot. However, there are different ranges. So, one can obtain amusing plot by the change of color range manually. For example, there are plots with one-color bottom (or top) or practically bi-color picture and so on.
+
+For example, compare 2 surfaces:
+ at verbatim
+subplot 2 1 0
+surf a          # usual coloring range
+subplot 2 1 1
+caxis 0 1
+surf a          # bottom of the surface have one-colour filling
+ at end verbatim
+
+ at c ------------------------------------------------------------------
+ at node Management of a point cutting, Vector field visualization, Changing of the color range, Hints
+ at subsection Management of a point cutting
+
+Sometimes an experimental or numerical surface has outstanding points. Visualization of such surface will lead to the hole(s) in place of such points. The standard method of ``fighting'' -- to change data values -- is not always good and is not so convenient. MathGL library has another method -- to set variable @code{cut off}. As a consequence, all outstanding points will be projected on the bounding box.
+
+Such method is good not only for outstanding points but also for the case when one need to plane the bottom or the top of the plot. Exactly such case is demonstrated in the code:
+ at verbatim
+new a 20 30     # create some data
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+# set lower border above the data minimal value
+axis -1 -1 0 1 1 1:rotate 40 60
+cut off         # set off cutting flag
+surf a          # and draw the surface
+ at end verbatim
+It is an interesting result, is not it?
+
+ at c ------------------------------------------------------------------
+ at node Vector field visualization, Several light sources, Management of a point cutting, Hints
+ at subsection Vector field visualization
+
+Vector field visualization (especially in 3d case @code{vect3} or @code{vectc}) may look tangly -- there are too many overlapping lines. I may suggest 2 ways to solve this problem. The first one is to change @code{meshnum} for decreasing the number of hachures. The second way is to use the flow thread chart @code{Flow}. Unfortunately, I don't know any other methods to visualize 3d vector field. If you know any, e-mail me and I shall add it to MatGL.
+
+ at c ------------------------------------------------------------------
+ at node Several light sources, CutMin and CutMax features, Vector field visualization, Hints
+ at subsection Several light sources
+
+In contrast to the most of other programs, MathGL supports several (up to 10) light sources. Moreover, the color each of them can be different: white (this is usual), yellow, red, cyan, green and so on. The use of several light sources may be interesting for the highlighting of some peculiarities of the plot or just to make an amusing picture. Note, each light source can be switched on/off individually (@pxref{Several light sample}).
+
+ at c ------------------------------------------------------------------
+ at node CutMin and CutMax features, Mapping visualization, Several light sources, Hints
+ at subsection CutMin and CutMax features
+
+MathGL library has a feature for cutting of points in some region @var{CutMin*CutMax}. Such an excision can be used to improve the look of the graphics. Moreover, this cutting may help to show an internal structure of an object (like @code{isocaps} plot in Matlab). For example, let us use the standard 3D data array and show its interior (@pxref{CutMinMax sample}).
+
+ at verbatim
+new c 61 51 40      # create the data
+new v 10: fill v -0.5 1
+modify c '(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))'
+cut 0 -1 -1 1 0 1.1
+rotate 40 60:       surf3 c -0.5 'bbcyrr'
+contf3 v c 'x' -1 'bbcyrr': contf3 v c 'y' -1 'bbcyrr'
+contf3 v c 'z' 0 'bbcyrr':  contf3 v c 'z' 39 'bbcyrr'
+ at end verbatim
+
+One can also exclude points from arbitrary area in space. This area defined by textual formula @code{cut} (@pxref{Cutting}). The algorithm is the same as shown for ``rectangular cutting''.
+
+ at c ------------------------------------------------------------------
+ at node Mapping visualization, Log-scaled plot, CutMin and CutMax features, Hints
+ at subsection Mapping visualization
+
+Sometime ago I worked with mapping and have a question about its visualization. Let me remember you that mapping is some transformation rule for one set of number to another one. The 1d mapping is just an ordinary function -- it takes a number and transforms it to another one. The 2d mapping (which I used) is a pair of functions which take 2 numbers and transform them to another 2 ones. Except general plots (like @code{surfc}, @code{surfa}) there is a special plot -- Arnold diagram. It shows the area which is the result of mapping of some initial area (usually square).
+
+I tried to make such plot in @code{map}. It shows the set of points or set of faces, which final position is the result of mapping. At this, the color gives information about their initial position and the height describes Jacobian value of the transformation. Unfortunately, it looks good only for the simplest mapping but for the real multivalent quasi-chaotic mapping it produces a confusion. So, use it if you like :).
+
+ at c ------------------------------------------------------------------
+ at node Log-scaled plot, Nonlinear fitting hints, Mapping visualization, Hints
+ at subsection Log-scaled plot
+
+Log-scaled plot can be drawn by 2 steps. First, one should change the scale of axis by call @code{axis 'lg(x)' 'lg(y)'} (in this example, x- and y-axis will be log-scaled). Second, one should set logarithmic scale for axis ticks by changing variables: @code{xtick 0: yticks 0}. Finally, one should check (or change) the axis ranges and origin so that their values to be positive. For example of log-log plot @pxref{Log-log sample}.
+
+ at c ------------------------------------------------------------------
+ at node Nonlinear fitting hints, PDE solving hints, Log-scaled plot, Hints
+ at subsection Nonlinear fitting hints
+
+Nonlinear fitting is rather simple. All that you need is the data to fit, the approximation formula and the list of coefficients to fit (better with its initial guess values). Let me demonstrate it on the following simple example (@pxref{Fitting sample}). First, let us use sin function with some random noise:
+ at verbatim
+new rnd 100: new idl 50 # data to be fitted and ideal data
+modify rnd '0.4*rnd+0.1+sin(4*pi*x)'
+modify idl '0.3+sin(4*pi*x)'
+ at end verbatim
+and plot it to see that data we will fit
+ at verbatim
+axis -1 -2 1 2
+plot rnd '. ':plot idl 'b'
+box:text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1
+ at end verbatim
+
+The next step is the fitting itself. For that let me specify an initial values @var{ini} for coefficients @samp{abc} and do the fitting for approximation formula @samp{a+b*sin(c*x)}
+ at verbatim
+new res     # The data for found formula
+fit res rnd 'a+b*sin(c*x)' 'abc' [1, 1, 3]
+ at end verbatim
+Now display it
+ at verbatim
+plot res 'r'
+text -1 -1.3 'fitted:' 'L:r' -1
+putsfit 0 -1.8 'y = ' 'C:r' -1
+ at end verbatim
+
+NOTE! the fitting results may have strong dependence on initial values for coefficients due to algorithm features. The problem is that in general case there are several local 'optimums' for coefficients and the program returns only first found one! There are no guaranties that it will be the best. Try for example to set @code{ini = [0, 0, 0]} in the code above.
+
+ at c ------------------------------------------------------------------
+ at node PDE solving hints, Stereo image, Nonlinear fitting hints, Hints
+ at subsection PDE solving hints
+
+Solving of Partial Differential Equations (PDE, including beam tracing) and ray tracing (or finding particle trajectory) are more or less common task. So, MathGL have several functions for that. There are @code{ray} for ray tracing, @code{pde} for PDE solving, @code{qo2d} for beam tracing in 2D case. Note, that these functions take ``Hamiltonian'' or equations as string values. And I don't plan now to allow one to use user-defined functions. There are 2 reasons: the complexity of corresponding interface; and the basic nature of used methods which are good for samples but may not good for serious scientific calculations.
+
+The ray tracing can be done by @code{ray} function. Really ray tracing equation is Hamiltonian equation for 3D space. So, the function can be also used for finding a particle trajectory (i.e. solve Hamiltonian ODE) for 1D, 2D or 3D cases. The function have a set of arguments. First of all, it is Hamiltonian which defined the media (or the equation) you are planning to use. The Hamiltonian is defined by string which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, time @samp{t} (for particle dynamics) and momentums @samp{p}=@math{p_x}, @samp{q}=@math{p_y}, @samp{v}=@math{p_z}. Next, you have to define the initial conditions for coordinates and momentums at @samp{t}=0 and set the integrations step (default is 0.1) and its duration (default is 10). The Runge-Kutta method of 4-th order is used for integration.
+ at verbatim
+new re 128:new im 128
+ray r 'p^2+q^2-x-1' -0.7 -1 0 0 0.5 0
+plot r(0) r(1)
+ at end verbatim
+This example calculate the reflection from linear layer (media with Hamiltonian @samp{p^2+q^2-x-1}=@math{p_x^2+p_y^2-x-1}). This is parabolic curve. The resulting array have 7 columns which contain data for @{x,y,z,p,q,v,t@}.
+
+The solution of PDE is a bit more complicated. As previous you have to specify the equation as pseudo-differential operator @math{\hat H(x, \nabla)} which is called sometime as ``Hamiltonian'' (for example, in beam tracing). As previously, it is defined by string which may depend on coordinates @samp{x}, @samp{y}, @samp{z} (but not time!), momentums @samp{p}=@math{(d/dx)/i k_0}, @samp{q}=@math{(d/dy)/i k_0} and field amplitude @samp{u}=@math{|u|}. The evolutionary coordinate is @samp{z} in all cases. So that, the equation look like @math{du/dz = ik_0 H(x,y,\hat p, \hat q, |u|)[u]}. Dependence on field amplitude @samp{u}=@math{|u|} allows one to solve nonlinear problems too. For example, for nonlinear Shrodinger equation you may set @code{ham='p^2 + q^2 - u^2'}. Also you may specify imaginary part for wave absorption, like @code{ham = 'p^2 + i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{H = Hre+i*Him}).
+
+Next step is specifing the initial conditions at @samp{z}=@code{Min.z}. The function need 2 arrays for real and for imaginary part. Note, that coordinates x,y,z are supposed to be in specified range [Min, Max]. So, the data arrays should have corresponding scales. Finally, you may set the integration step and paramter k0=@math{k_0}. Also keep in mind, that internally the 2 times large box is used (for suppressing numerical reflection from boundaries) and the equation should well defined even in this extended range.
+
+Final comment is concerning the possible form of pseudo-differential operator @math{H}. At this moment, simplified form of operator @math{H} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this operator is effectively @math{H = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed for 3D case. 
+
+So, for example let solve the equation for beam deflected from linear layer and absorbed later. The operator will have the form @samp{'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)'} that correspond to equation @math{ik_0 \partial_z u + \Delta u + x \cdot u + i (x+z)/2 \cdot u = 0}. This is typical equation for Electron Cyclotron (EC) absorption in magnetized plasmas. For initial conditions let me select the beam with plane phase front @math{exp(-48*(x+0.7)^2)}. The corresponding code looks like this (@pxref{PDE sample}):
+ at verbatim
+new re 128: new im 128
+fill re 'exp(-48*(x+0.7)^2)'
+pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01, 30
+transpose a 'yxz'
+caxis 0 1
+dens a 'wyrRk'
+ at end verbatim
+
+The last example is example of beam tracing. Beam tracing equation is special kind of PDE equation written in coordinates accompanied to a ray. Generally this is the same parameters and limitation as for PDE solving but the coordinates are defined by the ray and by parameter of grid width @var{w} in direction transverse the ray. So, you don't need to specify the range of coordinates. @strong{BUT} there is limitation. The accompanied coordinates are well defined only for smooth enough rays, i.e. then the ray curvature @math{K} (which is defined as @math{1/K^2 = (|\ddot r|^2 |\dot r|^2 - (\ddot r, \dot r)^2)/|\dot r|^6}) is much large then the grid width: @math{K>>w}. So, you may receive incorrect results if this condition will be broken.
+
+You may use following code for obtaining the same solution as in previous example:
+ at verbatim
+new re 128: new im 128
+define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
+ray r $1 -0.7 -1 0 0 0.5 0 0.02 2
+# now start beam tracing
+fill re 'exp(-48*x^2)'
+new xx: new yy
+qo2d a $1 re im r 1 30 xx yy
+caxis 0 1
+dens xx yy a 'wyrRk'
+ at end verbatim
+
+
+ at c ------------------------------------------------------------------
+ at node Stereo image, , PDE solving hints, Hints
+ at subsection Stereo image
+
+One can easily create stereo image in MathGL. Stereo image can be produced by making two subplots with slightly different rotation angles. The corresponding code looks like this (@pxref{Stereo image sample}):
+ at verbatim
+subplot 2 1 0   # left image
+rotate 40 60+3
+# draw something here
+subplot 2 1 1   # right image
+rotate 40 60-3
+# draw the same here
+ at end verbatim
+
diff --git a/texinfo/ex_mgl_ru.texi b/texinfo/ex_mgl_ru.texi
new file mode 100644
index 0000000..3e77faf
--- /dev/null
+++ b/texinfo/ex_mgl_ru.texi
@@ -0,0 +1,775 @@
+ at c ------------------------------------------------------------------
+ at chapter MathGL examples
+
+This chapter contain information about basic and advanced MathGL, hints and samples for all types of graphics. I recommend you read first 2 sections one after another and at least look on ``Hints'' section. Also I recommend you to look at @ref{General concepts}. Sample code for some of these examples can be found in @uref{http://mathgl.sf.net/pictures.html} and in @ref{Samples}.
+
+ at menu
+* Basic usage:: 
+* Advanced usage:: 
+* Data handling:: 
+* Data plotting:: 
+* Hints::
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Basic usage, Advanced usage, , Examples
+ at section Basic usage
+
+MGL script can be used by several manners. Each has positive and negative sides:
+ at itemize @bullet
+ at item
+ at emph{The using of MGL in UDAV.}
+
+Positive side is the possibility to view the plot at once and to modify it, rotate, zoom or switch on transparency or lighting) by hand or by mouse. Negative sides are: the need of X-terminal.
+
+ at item
+ at emph{Direct writing to file in bitmap or vector format without creation of graphical window.}
+
+Positive aspects are: batch processing of similar data set, for example, a set of resulting data files for different calculation parameters), running from the console program, including the cluster calculation), fast and automated drawing, saving pictures for further analysis, or demonstration). Negative sides are: the usage of the external program for picture viewing. Also, the data plotting is non-visual. So, you have to imagine the picture, view angles, lighting and so on) before the plotting. I recommend to use graphical window for determining the optimal parameters of plotting on the base of some typical data set. And later use these parameters for batch processing in console program.
+
+In this case you can use a set of programs: @code{mgl2png}, @code{mgl2gif}, @code{mgl2eps}, @code{mgl2svg} or @code{mglview} for viewing.
+ at end itemize
+
+The simplest script is
+ at verbatim
+box         # draw bounding box
+axis        # draw axis
+fplot 'x^3' # draw some function
+ at end verbatim
+
+Just type it in UDAV and press F5. Also you can save it in text file @samp{test.mgl} and type in the console @code{mgl2png test.mgl} what produce file @samp{test.mgl.png} with resulting picture.
+
+ at c ------------------------------------------------------------------
+ at node Advanced usage, Data handling, Basic usage, Examples
+ at section Advanced usage
+
+Now I show several non-obvious features of MGL: several subplots in a single picture, curvilinear coordinates, text printing and so on. Generally you may miss this section at first reading, but I don't recommend it.
+
+ at menu
+* Subplots:: 
+* Axis and grids:: 
+* Curvilinear coordinates:: 
+* Text printing example:: 
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Subplots, Axis and grids, , Advanced usage
+ at subsection Subplots
+
+Let me demonstrate possibilities of axes transformation. MathGL has the following functions: @code{SubPlot}, @code{InPlot}, @code{Aspect} and @code{Rotate}, @pxref{Transformation matrix}). The order of their calling is strictly determined. First, one changes the position of axes in image area, functions @code{SubPlot} and @code{InPlot}). After that one may rotate the plot, function @code{Rotate}). Finally, one may change aspects of axes, function @code{Aspect}). The following code illustrates the aforesaid it:
+ at verbatim
+subplot 2 2 0:box
+text -1 1.1 'Just box' 'L'
+inplot 0.2 0.5 0.7 1:box
+text 0 1.2 'Inplot example'
+
+subplot 2 2 1
+rotate 60 40:aspect 1 1 1
+box:text 1 1 1.5 'rotate only' 'R'
+
+subplot 2 2 2
+rotate 60 40:aspect 1 1 2
+box:text 0 0 2 'aspect and rotate'
+
+subplot 2 2 3
+rotate 60 40:aspect 1 2 2
+box:text 0 0 1.5 'Aspect in other direction'
+ at end verbatim
+Here I used function @code{text} for printing the text in arbitrary position of picture, @pxref{Text printing}). Text coordinates and size are connected with axes. However, text coordinates may be everywhere, including the outside the bounding box. I shall show its features later in @xref{Text printing example}.
+
+Note that several commands can be placed in a string if they are separated by @samp{:} symbol.
+
+ at float
+ at image{../png/sample1, 7cm}
+ at caption{Example of several subplots on the single picture.}
+ at end float
+
+ at c ------------------------------------------------------------------
+ at node Axis and grids, Curvilinear coordinates, Subplots, Advanced usage
+ at subsection Axis and grids
+
+MathGL library can draw not only the bounding box but also the axes, grids, labels and so on. The limits of axes and their origin (the point of intersection) are determined by function @code{axis}. Also you can use @code{xrange, yrange, zrange} functions (@pxref{Axis settings}). Ticks on axis are specified by functions @code{xtick, ytick, ztick, ttick}. First argument the direction for each change will be applied. Second argument gives the step between ticks (if positive) or gives the number of ticks on the axis (if negative) or set to use logarithmic ticks (if zero). Third argument gives numbers of sub-ticks between ticks (default is zero). Last argument define the initial ticks position.
+
+Function @code{Axis} draws axes. Its textual string shows in which directions the axis or axes will be drawn (by default @code{'xyz'}, function draws axes in all directions). Function @code{Grid} draws grid perpendicularly to specified directions. Example of axes and grid drawing is:
+ at verbatim
+subplot 2 2 0
+xtick 0.4 3     # sets tick step to 0.5
+ytick 0.4 3     # and draws 3 subticks
+box             # should be after the ticks change
+axis 'xy': grid
+text 0 1.3 1 'axis and grid'
+
+xtick -5: ytick -5  # restore back
+subplot 2 2 1:rotate 60 40
+origin 0 0 0
+axis
+xlabel 'x' 1
+ylabel 'y' 1
+zlabel 'z' 1
+text 0 0 1.5 'axis and labels'
+
+subplot 2 2 2:rotate 60 40
+xtick 0.2: ytick 0.2: ztick 0.2 # too low step of ticks
+origin -1 -1 -1
+axis:grid
+text 0 0 1.5 'shift origin and add grid'
+text 0 0 1.2 '(note, too many ticks)'
+
+subplot 2 2 3:rotate 60 40
+xtick -6: ytick -6  # decrease the number of ticks
+axis 'yz'
+ylabel 'y axis'
+zlabel 'z axis'
+text 0 0 1.5 'remove x axis, and'
+text 0 0 1.2 'decrease number of ticks'
+ at end verbatim
+
+This example shows the importance of the correct choosing of the number of ticks on axis. If tick step is too small then its text may overlap and becomes unreadable. This code has the example of @code{Label} function. It draws label for axis in specified direction. The text position on axis is specified by third argument of @code{Label} function. If it is positive then then text is drawn near the axis maximum, if negative then the same takes place near the minimum of axis, if zero - then at the center of axis.
+
+ at float
+ at image{../png/sample2, 7cm}
+ at caption{Example of setting up axis range and axis ticks.}
+ at end float
+
+ at c ------------------------------------------------------------------
+ at node Curvilinear coordinates, Text printing example, Axis and grids, Advanced usage
+ at subsection Curvilinear coordinates
+
+
+Now let use curvilinear coordinates. In difference from other systems of plot creation, MathGL uses textual formulas for connection of the old (data) and new (output) coordinates. This allows one to plot in arbitrary coordinates. The following code plots the line @var{y}=0, @var{z}=0 in Cartesian, polar, parabolic and spiral coordinates:
+ at verbatim
+new x 50: new y 50: new z 50
+fill y 0.5 0.5: fill x -1 1 # creates data arrays
+origin -1 1 -1
+
+subplot 2 2 0:rotate 60 40
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'cartesian'
+
+subplot 2 2 1:rotate 60 40
+axis 'y*sin(pi*x)' 'y*cos(pi*x)' ''
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'cylindrical'
+
+subplot 2 2 2:rotate 60 40
+axis '2*y*x' 'y*y - x*x' ''
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'parabolic'
+
+subplot 2 2 3:rotate 60 40
+axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z'
+plot x y z 'r2'
+axis: grid
+text 0 1.3 1 'spiral'
+ at end verbatim
+
+ at float
+ at image{../png/sample3, 7cm}
+ at caption{Example of curvilinear coordinates}
+ at end float
+
+
+ at c ------------------------------------------------------------------
+ at node Text printing example, , Curvilinear coordinates, Advanced usage
+ at subsection Text printing example
+
+MathGL prints text by vector font. There are functions for manual specifying of text position (like @code{Puts}) and for its automatic selection (like @code{Label}, @code{legend} and so on). MathGL prints text always in specified position even if it lies outside the bounding box. The default size of font is specified by command @var{fontsize}. However, the actual size of output string depends on position of axes (depends on functions @code{SubPlot}, @code{InPlot}). The switching of the font style (italic, bold, wire and so on) can be done for the whole string (by function parameter) or inside the string. By default MathGL parses TeX-like commands for symbols and indexes (see @pxref{Font styles}). Example of MathGL font drawing is:
+ at verbatim
+text 0 1 'Text can be in ASCII and in Unicode'
+text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}'
+text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}'
+text 0 -0.2 'Easy to \a{overline} or \u{underline}'
+text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}'
+text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx'
+ at end verbatim
+
+ at float
+ at image{../png/sample4, 7cm}
+ at caption{Example of text printing with different font effects}
+ at end float
+
+Another example demonstrate the features of TeX formula parsing.
+ at verbatim
+text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}', 0, -4
+ at end verbatim
+
+ at float
+ at image{../png/samplee, 7cm}
+ at caption{Example of TeX formula parsing}
+ at end float
+
+
+ at c ------------------------------------------------------------------
+ at node Data handling, Data plotting, Advanced usage, Examples
+ at section Data handling
+
+ at c Class @code{mglData} contains all functions for the data handling in MathGL (@pxref{mglData class}). There are several matters why I use class @code{mglData} but not a single array: it does not depend on type of data (float or double), sizes of data arrays are kept with data, memory working is simpler and safer.
+
+ at menu
+* Array creation::              
+* Data changing::               
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Array creation, Data changing, , Data handling
+ at subsection Array creation
+
+One can put numbers into the data instance by several ways. Let us do it for sinus function:
+ at itemize @bullet
+ at item
+one can create array by @code{list} command
+ at verbatim
+list a 0 0.04 0.16 0.36 0.64 1
+ at end verbatim
+
+ at item
+another way is to copy from ``inline'' array
+ at verbatim
+copy a [0,0.04,0.16,0.36,0.64,1]
+ at end verbatim
+
+ at item
+next way is to fill the data by textual formula with the help of @code{modify} function
+ at verbatim
+new a 6
+modify a 'x^2'
+ at end verbatim
+
+ at item
+or one may fill the array in some interval and modify it later
+ at verbatim
+new a 6
+fill a 0 1
+modify a 'u^2'
+ at end verbatim
+
+ at item
+or fill the array using current axis range
+ at verbatim
+new a 6
+fill a '(x+1)^2/4'
+ at end verbatim
+
+ at item
+finally it can be loaded from file
+ at verbatim
+new s 6: modify s 'x^2'
+save s 'sqr.dat'    # create file first
+read a 'sqr.dat'    # load it
+ at end verbatim
+
+ at item
+at this one can read only part of data
+ at verbatim
+new s 6: modify s 'x^2'
+save s 'sqr.dat'    # create file first
+read a 'sqr.dat' 5  # load it
+ at end verbatim
+ at end itemize
+
+Creation of 2d- and 3d-arrays is mostly the same. One can use direct data filling by @code{list} command
+ at verbatim
+list a 11 12 13 | 21 22 23 | 31 32 33
+ at end verbatim
+or by inline arrays
+ at verbatim
+copy a [[11,12,13],[21,22,23],[31,32,33]]
+ at end verbatim
+Also data can be filled by formula
+ at verbatim
+new z 30 40
+fill z 'sin(pi*x)*cos(pi*y)'
+ at end verbatim
+or loaded from file.
+
+The only non-obvious thing here is using multidimensional arrays in C/C++, i.e. arrays defined like @code{float dat[40][30];}. Since, formaly this arrays element @code{dat[i]} can address the memory in arbitrary place you should use the proper function to convert such arrays to @code{mglData} object. For C++ this is functions like @code{mglData::Set(float **dat, int N1, int N2}. For C this is functions like @code{mgl_data_set_float2(HMDT d, const float **dat, int N1, int N2}. At this, you should keep in mind that @code{nx=N2} and @code{ny=N1} after conversion.
+
+ at c ------------------------------------------------------------------
+ at node Data changing, , Array creation, Data handling
+ at subsection Data changing
+
+MathGL has functions for data processing: differentiating, integrating, smoothing and so on. Let us consider some examples. The simplest ones are integration and differentiation. The direction in which operation will be performed is specified by textual string, which may contain symbols @samp{x}, @samp{y} or @samp{z}. For example, the call of @code{diff a 'x'} will differentiate data along @samp{x} direction; the call of @code{integrate a 'xy'} perform the double integration of data along @samp{x} and @samp{y} directions; the call of @code{diff2 a 'xyz'} will apply 3d Laplace operator to data and so on. Example of this operations on 2d array a=x*y is presented in code:
+ at verbatim
+new a 30 40: modify a 'x*y'
+axis 0 0 0 1 1 1
+subplot 2 2 0:rotate 60 40
+surf a: box
+text 0.7 1 1.2 'a(x,y)'
+subplot 2 2 1:rotate 60 40
+diff a 'x': surf a: box
+text 0.7 1 1.2 'da/dx'
+subplot 2 2 2:rotate 60 40
+integrate a 'xy': surf a: box
+text 0.7 1 1.2 '\int da/dx dxdy'
+subplot 2 2 3:rotate 60 40
+diff2 a 'y': surf a: box
+text 0.7 1 1.2 '\int {d^2}a/dxdy dx'
+ at end verbatim
+
+ at float
+ at image{../png/sample6, 7cm}
+ at caption{Example of data differentiation and integration}
+ at end float
+
+Data smoothing (function @code{Smooth}) is more interesting and important. This function has 2 main arguments: type of smoothing and its direction. Now 4 methods are supported: @code{0} does nothing for delta=0 or approaches data to zero with the step delta, @code{1} linear averaging by 3 points, @code{2} linear averaging by 5 points, @code{3} quadratic averaging by 5 points. Let me demonstrate it for 1d case:
+ at verbatim
+new y0 30
+modify y0 '0.4*sin(2*pi*x)+0.3*cos(3*pi*x)-0.4*sin(4*pi*x)+0.2*rnd'
+copy y1 y0: smooth y1 1
+copy y2 y0: smooth y2 2
+copy y3 y0: smooth y3 3
+
+plot y0 'k': addlegend 'none' 'k'
+plot y1 'r': addlegend 'line 3' 'r'
+plot y2 'g': addlegend 'line 5' 'g'
+plot y3 'b': addlegend 'quad 5' 'b'
+legend: box
+ at end verbatim
+
+ at float
+ at image{../png/sample7, 7cm}
+ at caption{Example of data smoothing}
+ at end float
+
+Finally one can create new data arrays on base of the existing one: extract slice, row or column of data (@code{SubData}), summarize along some of direction(s) (@code{Sum}), find distribution of data elements (@code{Hist}). Note, that all these functions are not thread-safe because they use static internal variable for output array. In particular, the using of several of them in arguments of the same function will lead to unpredictable result.
+
+ at c ------------------------------------------------------------------
+ at node Data plotting, Hints, Data handling, Examples
+ at section Data plotting
+
+Let me now show how to plot the data. MathGL generally has 2 types of plotting functions. Simple variant requires a single data array for plotting, other data (coordinates) are considered uniformly distributed in interval @var{Min}*@var{Max}. Second variant requires data arrays for all coordinates. It allows one to plot rather complex multivalent curves and surfaces (in case of parametric dependencies). Argument setting to default values allows one to plot data in standard form. Manual arguments setting gives possibility for fine tuning of colors, positions and view of graphics. Note, that the call of drawing function adds something to picture but does not clear the previous plots (as it does in Matlab). Another difference from Matlab is that all setup (like transparency, lightning, axis borders and so on) must be specified @strong{before} plotting functions.
+
+ at menu
+* Plots for 1D data::           
+* Plots for 2D data::           
+* Plots for 3D data::           
+* Surface transparency::        
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Plots for 1D data, Plots for 2D data, , Data plotting
+ at subsection Plots for 1D data
+
+Term ``1D data'' means that data depend on single index (parameter) like curve in parametric form @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot, line plot with filling under it, stairs plot, bar plot and vertical lines (@pxref{1D plotting}). Each type of plotting has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks (@pxref{Line styles}) are specified by the string argument. If the string parameter is @code{NULL} then solid line with color from palette is used.
+
+Below I shall show the features of 1D plotting on base of @code{plot} function (@pxref{1D plotting}). Let us start from sinus plot:
+ at verbatim
+new y0 50: modify y0 'sin(pi*(2*x-1))'
+subplot 2 2 0
+plot y0: box
+ at end verbatim
+Style of line is not specified in @code{plot} function. So MathGL uses the solid line with first color of palette (this is blue). Next subplot shows array @var{y1} with 2 rows:
+ at verbatim
+subplot 2 2 1
+new y1 50 2
+modify y1 'sin(pi*2*x-pi)'
+modify y1 'cos(pi*2*x-pi)/2' 1
+plot y1: box
+ at end verbatim
+As previously I did not specify the style of lines. As a result, MathGL again uses solid line with next colors in palette (there are green and red). Now let us plot a circle on the same subplot. The circle is parametric curve @math{x=cos(\pi t), y=sin(\pi t)}. I will set the color of the circle (dark yellow, @samp{Y}) and put marks @samp{+} at point position:
+ at verbatim
+new x 50: modify x 'cos(pi*2*x-pi)'
+plot x y0 'Y+'
+ at end verbatim
+Note that solid line is used because I did not specify the type of line. The same picture can be achieved by @code{Plot2} function. Let us draw ellipse by orange dash line:
+ at verbatim
+plot y1(:,0) y(:,1) 'q|'
+ at end verbatim
+
+Drawing in 3D space is mostly the same. Let us draw spiral with default line style. Now its color is 4-th color from palette (this is cyan):
+ at verbatim
+subplot 2 2 2:rotate 60 40
+new z 50: modify z '2*x-1'
+plot x y0 z 'g':box
+ at end verbatim
+Function @code{Plot3} does 3D curve plot but for single array. Use it to put circle marks on the previous plot:
+ at verbatim
+new y2 10 3
+modify y2 'cos(pi*(2*x-1-y))'
+modify y2 '2*x-1' 2
+plot y2(:,0) y2(:,1) y2(:,2) 'bo '
+ at end verbatim
+Note that line style is empty @samp{ } here. Usage of other 1D plotting functions looks similar:
+ at verbatim
+subplot 2 2 3:rotate 60 40
+bars x y0 z 'r':box
+ at end verbatim
+
+ at float
+ at image{../png/sample8, 7cm}
+ at caption{Example of 1D data plot}
+ at end float
+
+ at c ------------------------------------------------------------------
+ at node Plots for 2D data, Plots for 3D data, Plots for 1D data, Data plotting
+ at subsection Plots for 2D data
+
+Surfaces @code{Surf} and other 2D plots (@pxref{2D plotting}) are drown the same simpler as 1D one. The difference is that the string parameter specifies not by line style but by the color scheme of the plot (@pxref{Color scheme}). Here I draw attention on 4 most interesting color schemes. There is gray scheme where color is changed from black to white (string @samp{kw}) or from white to black (string @samp{wk}). Another scheme is useful for accentuation of negative (by blue color) and positive (by red color) regions on plot (string @samp{'BbwrR'}). Last one is the popular ``jet'' scheme (string @samp{'BbcyrR'}).
+
+Now I shall show the example of a surface drawing. At first let us switch lightning on
+ at verbatim
+light on
+ at end verbatim
+and draw the surface, considering coordinates x,y to be uniformly distributed in interval @var{Min}*@var{Max}
+ at verbatim
+new a0 50 40
+modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+subplot 2 2 0:rotate 60 40
+surf a0: box
+ at end verbatim
+Color scheme was not specified. So previous color scheme is used. In this case it is default color scheme (``jet'') for the first plot. Next example is a sphere. The sphere is parametrically specified surface:
+ at verbatim
+new x 50 40: new y 50 40: new z 50 40
+modify x '0.8*sin(2*pi*x)*sin(pi*y)'
+modify y '0.8*cos(2*pi*x)*sin(pi*y)'
+modify z '0.8*cos(pi*y)'
+subplot 2 2 1:rotate 60 40
+surf x y z 'bbwrr': box
+ at end verbatim
+I set color scheme to @code{'BbwrR'} that corresponds to red top and blue bottom of the sphere.
+
+Surfaces will be plotted for each of slice of the data if @var{nz}>1. Next example draws surfaces for data arrays with @var{nz}=3:
+ at verbatim
+new a1 50 40 3
+modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2
+subplot 2 2 2:rotate 60 40
+alpha on
+surf a1: box
+ at end verbatim
+Note, that it may entail a confusion. However, if one will use density plot then the picture will look better:
+ at verbatim
+subplot 2 2 3: rotate 60 40
+dens a1: box
+ at end verbatim
+Note, that the previous color scheme is used in last plots because there are no direct specification of the one.
+
+ at float
+ at image{../png/sample9, 7cm}
+ at caption{Example of surface plot for 2D data}
+ at end float
+
+Drawing of other 2D plots is analogous. The only peculiarity is the usage of flag @samp{#}. By default this flag switches on the drawing of a grid on plot (@code{grid} or @code{mesh} for plots in plain or in volume). However, for isosurfaces (including surfaces of rotation @code{axial}) this flag switches the  face drawing off. Figure becomes wired. The following code gives example of flag @samp{#} using (compare with normal function drawing as in its description):
+ at verbatim
+alpha on: light on: light 0 0 0 1
+new a 30 20
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+subplot 2 2 0: rotate 40 60
+surf a 'bbcyrr#': box
+subplot 2 2 1: rotate 40 60
+dens a 'bbcyrr#': box
+subplot 2 2 2: rotate 40 60
+cont a 'bbcyrr#': box
+subplot 2 2 3: rotate 40 60
+axial a 'bbcyrr#': box
+ at end verbatim
+
+ at float
+ at image{../png/samplea, 7cm}
+ at caption{Example of 2D data plot with color scheme contained @samp{#} symbol}
+ at end float
+
+ at c ------------------------------------------------------------------
+ at node Plots for 3D data, Surface transparency, Plots for 2D data, Data plotting
+ at subsection Plots for 3D data
+
+Drawing procedures for 3D plot looks similarly to 1D and 2D plots described above. There are 3 general types of 3D plots (@pxref{3D plotting}): (i) plots on slices or on projections, (ii) isosurfaces, (iii) cloud-like plots. Plots on slice are clear enough -- one specifies a slice (as its index or as coordinate value) and MathGL draws contour lines or density plot on slice plane. Isosurface gives more information. Isosurface is 3D analogue of the contour line @code{cont}. It shows the region where data array values exceed specified isosurface level. Plot becomes more informative if one adds transparency, lightning or sets color scheme depending on coordinates. Generalization of isosurface is the cloud-like plot. For this plot the darker color and less transparent regions correspond to higher values of data. Contrary, the regions with low values are transparent. For plotting of the phase of fields (or beams or pulses) one can use isosurface which transparency depends on the other data array (see function @code{surf3a}). As example of 3D data plots let us draw the Gaussian beam diffraction in space. Beam propagates along @var{x} axis:
+ at verbatim
+alpha on: light on
+light 0 0 0 1
+new a 30 30 30: new b 30 30 30
+modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))'
+modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)'
+caxis 0 1
+
+subplot 2 2 0: rotate 40 60
+surf3 a 'wgk': box
+subplot 2 2 1: rotate 40 60
+densa a: box: axis
+subplot 2 2 2: rotate 40 60
+cloud a: box
+subplot 2 2 3: rotate 40 60
+surf3a b a 'q': box
+ at end verbatim
+
+ at float
+ at image{../png/sampleb, 7cm}
+ at caption{Example of Gaussian beam diffraction (3D data)}
+ at end float
+
+
+ at c ------------------------------------------------------------------
+ at node Surface transparency, , Plots for 3D data, Data plotting
+ at subsection Surface transparency
+
+MathGL library has advanced features for setting and handling the surface transparency. The simplest way to add transparency is the using of function @code{Alpha}. As a result, all further surfaces (and isosurfaces, density plots and so on) become transparent. However, their  look can be additionally improved.
+
+First, the selected surface will be non-transparent if one sets the flag @code{transparent} before the surface drawing and sets it off after the drawing.
+
+Second, the value of transparency can be different from surface to surface. To do it just change the value of @code{alphadef} before the drawing of the selected surface. If its value is close to 0 then the surface becomes more and more transparent. Contrary, if its value is close to 1 then the surface becomes practically non-transparent. This is some analogue of @code{transparent on}.
+
+Third feature is the changing of the way how the light goes through overlapped surfaces. The variable @code{transptype} defines it. By default the usual transparency is used (@code{transptype 0}) -- surfaces below is less visible than the upper ones. A ``glass-like'' transparency (@code{transptype 1}) has a different look when the surface just decreases the background light (the surfaces are commutable in this case).
+
+A ``neon-like'' transparency (@code{transptype 2}) has more interesting look. In this case a surface is the light source (like a lamp on the dark background) and just adds some intensity to the color. At this, the library sets automatically the black color for the background and changes the default line color to white.
+
+As example I shall show the variant of plot from @ref{Plots for 2D data} (grid drawing is disabled) for different types of transparency.
+ at float
+ at image{../png/type0, 7cm}
+ at caption{Example of @code{TranspType=0}.}
+ at end float
+ at float
+ at image{../png/type1, 7cm}
+ at caption{Example of @code{TranspType=1}.}
+ at end float
+ at float
+ at image{../png/type2, 7cm}
+ at caption{Example of @code{TranspType=2}.}
+ at end float
+
+
+
+ at c ------------------------------------------------------------------
+ at node Hints, , Data plotting, Examples
+ at section Hints
+
+In this section I have included some small hints and advices for the improving of the quality of plots and for the demonstration of some non-trivial features of MathGL library. In contrast to previous examples I showed mostly the idea but not the whole drawing function. More examples with the source code can be find at @uref{http://mathgl.sf.net/} or in section @ref{Samples}.
+
+ at menu
+* ``Compound'' graphics::       
+* Two axes in one plot::        
+* Titles for the plot::         
+* Changing of the color range:: 
+* Management of a point cutting::
+* Vector field visualization::  
+* Several light sources::       
+* CutMin and CutMax features::  
+* Mapping visualization::       
+* Log-scaled plot::             
+* Nonlinear fitting hints::     
+* PDE solving hints::           
+* Stereo image::                
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node ``Compound'' graphics, Two axes in one plot, , Hints
+ at subsection ``Compound'' graphics
+
+As I noted above, MathGL functions (except the special one, like @code{clf}) do  not erase the previous plotting but just add the new one. It allows one to draw ``compound'' plots easily. For example, popular Matlab command @code{surfc} can be emulated in MathGL by 2 calls:
+ at verbatim
+surf a
+cont a 0 7 -1   # draw contours at z = -1
+ at end verbatim
+Here @var{a} is 2-dimensional data for the plotting, @code{-1} is the value of z-coordinate at which the contour should be plotted (at the bottom in this example). Analogously, one can draw density plot instead of contour lines and so on.
+
+Another nice plot is contour lines plotted directly on the surface:
+ at verbatim
+light on        # switch on light for the surface
+surf a 'bbcyrr' # select 'jet' colormap for the surface
+cont a 'y'      # and yellow color for contours
+ at end verbatim
+The possible difficulties arise in black&white case, when the color of the surface can be close to the color of a contour line. In that case I may suggest the following code:
+ at verbatim
+light on        # switch on light for the surface
+surf a 'kw'     # select 'gray' colormap for the surface
+caxis -1 0      # first draw for darker surface colors
+conta 'w'       # white contours
+caxis 0 1       # now draw for brighter surface colors
+cont a 'k'      # black contours
+ at end verbatim
+The idea is to divide the color range on 2 parts (dark and bright) and to select the contrasting color for contour lines for each of part.
+
+Similarly, one can plot flow thread over density plot of vector field amplitude (this is another amusing plot from Matlab) and so on. The list of compound graphics can be prolonged but I hope that the general idea is clear.
+
+ at c ------------------------------------------------------------------
+ at node Two axes in one plot, Titles for the plot, ``Compound'' graphics, Hints
+ at subsection Two axes in one plot
+
+Developing the previous hint one can make a plot with 2 or more axes. The idea is that the change of settings does not influence on the already drawn graphics. So, for 2-axes plot let us set the first axis and draw everything concerning it. Then let us setup the second axis and draw things for the second axis. The corresponding code is (@pxref{2-axes sample}):
+ at verbatim
+# set up first axis
+axis -1 -1 1 1: origin -1 -1
+axis:fplot 'sin(pi*x)'      # draw something in first axis
+# set up second axis
+axis 0 0 1 1: origin 1 1
+axis: fplot 'cos(4*pi*x^2)' # draw something in second axis
+ at end verbatim
+Note, that the first and the second axes look better if being placed in different corners. In the code presented above the first axis is placed in the left-bottom corner, and the second one is placed in the right-top corner.
+
+ at c ------------------------------------------------------------------
+ at node Titles for the plot, Changing of the color range, Two axes in one plot, Hints
+ at subsection Titles for the plot
+
+The printing of nice titles for the plot is not so trivial task in general case. The problem is that the rotation and aspect change lead to different looks for titles of different subplots. So, the resulting look is not so good as it could be. The solution is simple -- to print titles exactly after @code{subplot} call and before any rotation, aspect change and so on! Analogously, the title for the whole picture looks better if it is printed first (before any @code{subplot} calls). Alternatively you can use function @code{title} for plotting title for the picture at any time.
+
+ at c ------------------------------------------------------------------
+ at node Changing of the color range, Management of a point cutting, Titles for the plot, Hints
+ at subsection Changing of the color range
+
+By default (for the user comfort), the color range is set equal to z-range of the plot. However, there are different ranges. So, one can obtain amusing plot by the change of color range manually. For example, there are plots with one-color bottom (or top) or practically bi-color picture and so on.
+
+For example, compare 2 surfaces:
+ at verbatim
+subplot 2 1 0
+surf a          # usual coloring range
+subplot 2 1 1
+caxis 0 1
+surf a          # bottom of the surface have one-colour filling
+ at end verbatim
+
+ at c ------------------------------------------------------------------
+ at node Management of a point cutting, Vector field visualization, Changing of the color range, Hints
+ at subsection Management of a point cutting
+
+Sometimes an experimental or numerical surface has outstanding points. Visualization of such surface will lead to the hole(s) in place of such points. The standard method of ``fighting'' -- to change data values -- is not always good and is not so convenient. MathGL library has another method -- to set variable @code{cut off}. As a consequence, all outstanding points will be projected on the bounding box.
+
+Such method is good not only for outstanding points but also for the case when one need to plane the bottom or the top of the plot. Exactly such case is demonstrated in the code:
+ at verbatim
+new a 20 30     # create some data
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+# set lower border above the data minimal value
+axis -1 -1 0 1 1 1:rotate 40 60
+cut off         # set off cutting flag
+surf a          # and draw the surface
+ at end verbatim
+It is an interesting result, is not it?
+
+ at c ------------------------------------------------------------------
+ at node Vector field visualization, Several light sources, Management of a point cutting, Hints
+ at subsection Vector field visualization
+
+Vector field visualization (especially in 3d case @code{vect3} or @code{vectc}) may look tangly -- there are too many overlapping lines. I may suggest 2 ways to solve this problem. The first one is to change @code{meshnum} for decreasing the number of hachures. The second way is to use the flow thread chart @code{Flow}. Unfortunately, I don't know any other methods to visualize 3d vector field. If you know any, e-mail me and I shall add it to MatGL.
+
+ at c ------------------------------------------------------------------
+ at node Several light sources, CutMin and CutMax features, Vector field visualization, Hints
+ at subsection Several light sources
+
+In contrast to the most of other programs, MathGL supports several (up to 10) light sources. Moreover, the color each of them can be different: white (this is usual), yellow, red, cyan, green and so on. The use of several light sources may be interesting for the highlighting of some peculiarities of the plot or just to make an amusing picture. Note, each light source can be switched on/off individually (@pxref{Several light sample}).
+
+ at c ------------------------------------------------------------------
+ at node CutMin and CutMax features, Mapping visualization, Several light sources, Hints
+ at subsection CutMin and CutMax features
+
+MathGL library has a feature for cutting of points in some region @var{CutMin*CutMax}. Such an excision can be used to improve the look of the graphics. Moreover, this cutting may help to show an internal structure of an object (like @code{isocaps} plot in Matlab). For example, let us use the standard 3D data array and show its interior (@pxref{CutMinMax sample}).
+
+ at verbatim
+new c 61 51 40      # create the data
+new v 10: fill v -0.5 1
+modify c '(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))'
+cut 0 -1 -1 1 0 1.1
+rotate 40 60:       surf3 c -0.5 'bbcyrr'
+contf3 v c 'x' -1 'bbcyrr': contf3 v c 'y' -1 'bbcyrr'
+contf3 v c 'z' 0 'bbcyrr':  contf3 v c 'z' 39 'bbcyrr'
+ at end verbatim
+
+One can also exclude points from arbitrary area in space. This area defined by textual formula @code{cut} (@pxref{Cutting}). The algorithm is the same as shown for ``rectangular cutting''.
+
+ at c ------------------------------------------------------------------
+ at node Mapping visualization, Log-scaled plot, CutMin and CutMax features, Hints
+ at subsection Mapping visualization
+
+Sometime ago I worked with mapping and have a question about its visualization. Let me remember you that mapping is some transformation rule for one set of number to another one. The 1d mapping is just an ordinary function -- it takes a number and transforms it to another one. The 2d mapping (which I used) is a pair of functions which take 2 numbers and transform them to another 2 ones. Except general plots (like @code{surfc}, @code{surfa}) there is a special plot -- Arnold diagram. It shows the area which is the result of mapping of some initial area (usually square).
+
+I tried to make such plot in @code{map}. It shows the set of points or set of faces, which final position is the result of mapping. At this, the color gives information about their initial position and the height describes Jacobian value of the transformation. Unfortunately, it looks good only for the simplest mapping but for the real multivalent quasi-chaotic mapping it produces a confusion. So, use it if you like :).
+
+ at c ------------------------------------------------------------------
+ at node Log-scaled plot, Nonlinear fitting hints, Mapping visualization, Hints
+ at subsection Log-scaled plot
+
+Log-scaled plot can be drawn by 2 steps. First, one should change the scale of axis by call @code{axis 'lg(x)' 'lg(y)'} (in this example, x- and y-axis will be log-scaled). Second, one should set logarithmic scale for axis ticks by changing variables: @code{xtick 0: yticks 0}. Finally, one should check (or change) the axis ranges and origin so that their values to be positive. For example of log-log plot @pxref{Log-log sample}.
+
+ at c ------------------------------------------------------------------
+ at node Nonlinear fitting hints, PDE solving hints, Log-scaled plot, Hints
+ at subsection Nonlinear fitting hints
+
+Nonlinear fitting is rather simple. All that you need is the data to fit, the approximation formula and the list of coefficients to fit (better with its initial guess values). Let me demonstrate it on the following simple example (@pxref{Fitting sample}). First, let us use sin function with some random noise:
+ at verbatim
+new rnd 100: new idl 50 # data to be fitted and ideal data
+modify rnd '0.4*rnd+0.1+sin(4*pi*x)'
+modify idl '0.3+sin(4*pi*x)'
+ at end verbatim
+and plot it to see that data we will fit
+ at verbatim
+axis -1 -2 1 2
+plot rnd '. ':plot idl 'b'
+box:text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1
+ at end verbatim
+
+The next step is the fitting itself. For that let me specify an initial values @var{ini} for coefficients @samp{abc} and do the fitting for approximation formula @samp{a+b*sin(c*x)}
+ at verbatim
+new res     # The data for found formula
+fit res rnd 'a+b*sin(c*x)' 'abc' [1, 1, 3]
+ at end verbatim
+Now display it
+ at verbatim
+plot res 'r'
+text -1 -1.3 'fitted:' 'L:r' -1
+putsfit 0 -1.8 'y = ' 'C:r' -1
+ at end verbatim
+
+NOTE! the fitting results may have strong dependence on initial values for coefficients due to algorithm features. The problem is that in general case there are several local 'optimums' for coefficients and the program returns only first found one! There are no guaranties that it will be the best. Try for example to set @code{ini = [0, 0, 0]} in the code above.
+
+ at c ------------------------------------------------------------------
+ at node PDE solving hints, Stereo image, Nonlinear fitting hints, Hints
+ at subsection PDE solving hints
+
+Solving of Partial Differential Equations (PDE, including beam tracing) and ray tracing (or finding particle trajectory) are more or less common task. So, MathGL have several functions for that. There are @code{ray} for ray tracing, @code{pde} for PDE solving, @code{qo2d} for beam tracing in 2D case. Note, that these functions take ``Hamiltonian'' or equations as string values. And I don't plan now to allow one to use user-defined functions. There are 2 reasons: the complexity of corresponding interface; and the basic nature of used methods which are good for samples but may not good for serious scientific calculations.
+
+The ray tracing can be done by @code{ray} function. Really ray tracing equation is Hamiltonian equation for 3D space. So, the function can be also used for finding a particle trajectory (i.e. solve Hamiltonian ODE) for 1D, 2D or 3D cases. The function have a set of arguments. First of all, it is Hamiltonian which defined the media (or the equation) you are planning to use. The Hamiltonian is defined by string which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, time @samp{t} (for particle dynamics) and momentums @samp{p}=@math{p_x}, @samp{q}=@math{p_y}, @samp{v}=@math{p_z}. Next, you have to define the initial conditions for coordinates and momentums at @samp{t}=0 and set the integrations step (default is 0.1) and its duration (default is 10). The Runge-Kutta method of 4-th order is used for integration.
+ at verbatim
+new re 128:new im 128
+ray r 'p^2+q^2-x-1' -0.7 -1 0 0 0.5 0
+plot r(0) r(1)
+ at end verbatim
+This example calculate the reflection from linear layer (media with Hamiltonian @samp{p^2+q^2-x-1}=@math{p_x^2+p_y^2-x-1}). This is parabolic curve. The resulting array have 7 columns which contain data for @{x,y,z,p,q,v,t@}.
+
+The solution of PDE is a bit more complicated. As previous you have to specify the equation as pseudo-differential operator @math{\hat H(x, \nabla)} which is called sometime as ``Hamiltonian'' (for example, in beam tracing). As previously, it is defined by string which may depend on coordinates @samp{x}, @samp{y}, @samp{z} (but not time!), momentums @samp{p}=@math{(d/dx)/i k_0}, @samp{q}=@math{(d/dy)/i k_0} and field amplitude @samp{u}=@math{|u|}. The evolutionary coordinate is @samp{z} in all cases. So that, the equation look like @math{du/dz = ik_0 H(x,y,\hat p, \hat q, |u|)[u]}. Dependence on field amplitude @samp{u}=@math{|u|} allows one to solve nonlinear problems too. For example, for nonlinear Shrodinger equation you may set @code{ham='p^2 + q^2 - u^2'}. Also you may specify imaginary part for wave absorption, like @code{ham = 'p^2 + i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{H = Hre+i*Him}).
+
+Next step is specifing the initial conditions at @samp{z}=@code{Min.z}. The function need 2 arrays for real and for imaginary part. Note, that coordinates x,y,z are supposed to be in specified range [Min, Max]. So, the data arrays should have corresponding scales. Finally, you may set the integration step and paramter k0=@math{k_0}. Also keep in mind, that internally the 2 times large box is used (for suppressing numerical reflection from boundaries) and the equation should well defined even in this extended range.
+
+Final comment is concerning the possible form of pseudo-differential operator @math{H}. At this moment, simplified form of operator @math{H} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this operator is effectively @math{H = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed for 3D case. 
+
+So, for example let solve the equation for beam deflected from linear layer and absorbed later. The operator will have the form @samp{'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)'} that correspond to equation @math{ik_0 \partial_z u + \Delta u + x \cdot u + i (x+z)/2 \cdot u = 0}. This is typical equation for Electron Cyclotron (EC) absorption in magnetized plasmas. For initial conditions let me select the beam with plane phase front @math{exp(-48*(x+0.7)^2)}. The corresponding code looks like this (@pxref{PDE sample}):
+ at verbatim
+new re 128: new im 128
+fill re 'exp(-48*(x+0.7)^2)'
+pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01, 30
+transpose a 'yxz'
+caxis 0 1
+dens a 'wyrRk'
+ at end verbatim
+
+The last example is example of beam tracing. Beam tracing equation is special kind of PDE equation written in coordinates accompanied to a ray. Generally this is the same parameters and limitation as for PDE solving but the coordinates are defined by the ray and by parameter of grid width @var{w} in direction transverse the ray. So, you don't need to specify the range of coordinates. @strong{BUT} there is limitation. The accompanied coordinates are well defined only for smooth enough rays, i.e. then the ray curvature @math{K} (which is defined as @math{1/K^2 = (|\ddot r|^2 |\dot r|^2 - (\ddot r, \dot r)^2)/|\dot r|^6}) is much large then the grid width: @math{K>>w}. So, you may receive incorrect results if this condition will be broken.
+
+You may use following code for obtaining the same solution as in previous example:
+ at verbatim
+new re 128: new im 128
+define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
+ray r $1 -0.7 -1 0 0 0.5 0 0.02 2
+# now start beam tracing
+fill re 'exp(-48*x^2)'
+new xx: new yy
+qo2d a $1 re im r 1 30 xx yy
+caxis 0 1
+dens xx yy a 'wyrRk'
+ at end verbatim
+
+
+ at c ------------------------------------------------------------------
+ at node Stereo image, , PDE solving hints, Hints
+ at subsection Stereo image
+
+One can easily create stereo image in MathGL. Stereo image can be produced by making two subplots with slightly different rotation angles. The corresponding code looks like this (@pxref{Stereo image sample}):
+ at verbatim
+subplot 2 1 0   # left image
+rotate 40 60+3
+# draw something here
+subplot 2 1 1   # right image
+rotate 40 60-3
+# draw the same here
+ at end verbatim
+
diff --git a/texinfo/example_en.texi b/texinfo/example_en.texi
index 210e189..f5886bd 100644
--- a/texinfo/example_en.texi
+++ b/texinfo/example_en.texi
@@ -1,5 +1,4 @@
 @c ------------------------------------------------------------------
- at node Examples, MathGL core, Overview, Top
 @chapter MathGL examples
 
 This chapter contain information about basic and advanced MathGL, hints and samples for all types of graphics. I recommend you read first 2 sections one after another and at least look on ``Hints'' section. Also I recommend you to look at @ref{General concepts} and @ref{FAQ}. Sample code for some of these examples can be found in @uref{http://mathgl.sf.net/pictures.html} and in @ref{Samples}.
@@ -46,11 +45,11 @@ Let me consider the aforesaid in more detail.
 
 @c ------------------------------------------------------------------
 @node Using FLTK/GLUT window, Drawing to file, , Basic usage
- at subsection Using FLTK/GLUT window
+ at subsection Using FLTK/Qt/GLUT window
 @cindex window
 @cindex widgets
 
-The ``interactive'' way of drawing in MathGL consists in window creation  with help of class @code{mglGraphGLUT} or @code{mglGraphGLUT} (@pxref{Widget classes}) and the following drawing in this window. There is a corresponding code:
+The ``interactive'' way of drawing in MathGL consists in window creation  with help of class @code{mglGraphFLTK}, @code{mglGraphQT} or @code{mglGraphGLUT} (@pxref{Widget classes}) and the following drawing in this window. There is a corresponding code:
 @verbatim
     int sample(mglGraph *gr, void *)
     {
@@ -91,7 +90,7 @@ Alternatively you can create yours own class inherited from class @code{mglDraw}
     }
 @end verbatim
 
-The similar code can be written for @code{mglGraphGLUT} or for @code{mglGraphQT} window (function @code{sample()} is the same):
+The similar code can be written for @code{mglGraphQT} or for @code{mglGraphGLUT} window (function @code{sample()} is the same):
 @verbatim
     int main(int argc,char **argv)
     {
@@ -177,7 +176,47 @@ The last way of MathGL using is the drawing in memory. Class @code{mglGraphZB} a
         dc.DrawBitmap(wxBitmap(img),0,y);
     }
 @end verbatim
-The drawing in other libraries is most the same. Moreover, I excluded the support of TIFF and JPEG files from MathGL by default for compatibility with wxWidgets library.
+The drawing in other libraries is most the same.
+ at c Moreover, I excluded the support of TIFF and JPEG files from MathGL by default for compatibility with wxWidgets library.
+
+For example, FLTK code will look like
+ at verbatim
+    void Fl_MyWidget::draw()
+    {
+        mglGraphZB gr(w(),h());
+        gr.Alpha(true);         // draws something using MathGL
+        gr.Light(true);         gr.Light(0,mglPoint(1,0,-1));
+        sample(&gr,NULL);
+        fl_draw_image(gr.GetBits(), x(), y(), gr.GetWidth(), gr.GetHeight(), 3);
+    }
+ at end verbatim
+Qt code will look like
+ at verbatim
+    void MyWidget::paintEvent(QPaintEvent *)
+    {
+        mglGraphZB gr(w(),h());
+        gr.Alpha(true);         // draws something using MathGL
+        gr.Light(true);         gr.Light(0,mglPoint(1,0,-1));
+        sample(&gr,NULL);
+
+        // Qt don't support RGB format as is. So, let convert it to BGRN.
+        const uchar *bb = gr.GetBits();
+        register long i, w=gr.GetWidth(), h=gr.GetHeight();
+        *buf = new uchar[4*w*h];
+        for(i=0;i<w*h;i++)
+        {
+            (*buf)[4*i]   = bb[3*i+2];
+            (*buf)[4*i+1] = bb[3*i+1];
+            (*buf)[4*i+2] = bb[3*i];
+            (*buf)[4*i+3] = 255;
+        }
+        QPixmap pic = QPixmap::fromImage(QImage(*buf, w, h, QImage::Format_RGB32));
+
+        QPainter paint;
+        paint.begin(this);  paint.drawPixmap(0,0,pic);  paint.end();
+        delete []buf;
+    }
+ at end verbatim
 
 @c ------------------------------------------------------------------
 @node Using QMathGL, , Drawing in memory, Basic usage
@@ -266,7 +305,7 @@ Let me demonstrate possibilities of axes transformation. MathGL has the followin
 Here I used function @code{Puts} for printing the text in arbitrary position of picture (@pxref{Text printing}). Text coordinates and size are connected with axes. However, text coordinates may be everywhere, including the outside the bounding box. I shall show its features later in @xref{Text printing example}.
 
 @float
- at image{png/sample1, 7cm}
+ at image{../png/sample1, 7cm}
 @caption{Example of several subplots on the single picture.}
 @end float
 
@@ -325,7 +364,7 @@ Function @code{Axis} draws axes. Its textual string shows in which directions th
 This example shows the importance of the correct choosing of the number of ticks on axis. If tick step is too small then its text may overlap and becomes unreadable. This code has the example of @code{Label} function. It draws label for axis in specified direction. The text position on axis is specified by third argument of @code{Label} function. If it is positive then then text is drawn near the axis maximum, if negative then the same takes place near the minimum of axis, if zero - then at the center of axis.
 
 @float
- at image{png/sample2, 7cm}
+ at image{../png/sample2, 7cm}
 @caption{Example of setting up axis range and axis ticks.}
 @end float
 
@@ -376,7 +415,7 @@ Now let use curvilinear coordinates. In difference from other systems of plot cr
 @end verbatim
 
 @float
- at image{png/sample3, 7cm}
+ at image{../png/sample3, 7cm}
 @caption{Example of curvilinear coordinates}
 @end float
 
@@ -385,7 +424,7 @@ Now let use curvilinear coordinates. In difference from other systems of plot cr
 @node Text printing example, Animation, Curvilinear coordinates, Advanced usage
 @subsection Text printing example
 
-MathGL prints text by vector font. There are functions for manual specifying of text position (like @code{Puts}) and for its automatic selection (like @code{Label}, @code{Legend} and so on). MathGL prints text always in specified position even if it lies outside the bounding box. The default size of font is specified by variables @var{FontSize} (@pxref{Font settings}). However, the actual size of output string depends on position of axes (depends on functions @code{SubPlot}, @code{InPlot}). The switching of the font style (italic, bold, wire and so on) can be done for the whole string (by function parameter) or inside the string. By default MathGL parses TeX-like commands for symbols and indexes (see @pxref{mglFont class}). Example of MathGL font drawing is:
+MathGL prints text by vector font. There are functions for manual specifying of text position (like @code{Puts}) and for its automatic selection (like @code{Label}, @code{Legend} and so on). MathGL prints text always in specified position even if it lies outside the bounding box. The default size of font is specified by variables @var{FontSize} (@pxref{Font settings}). However, the actual size of output string depends on position of axes (depends on functions @code{SubPlot}, @code{InPlot}). The switching of the font style (italic, bold, wire and so on) can be done for the whole string (by function parameter) or inside the string. By default MathGL parses TeX-like commands for symbols and indexes (see @pxref{Font styles}). Example of MathGL font drawing is:
 @verbatim
     int sample(mglGraph *gr, void *)
     {
@@ -406,7 +445,7 @@ MathGL prints text by vector font. There are functions for manual specifying of
 @end verbatim
 
 @float
- at image{png/sample4, 7cm}
+ at image{../png/sample4, 7cm}
 @caption{Example of text printing with different font effects}
 @end float
 
@@ -421,7 +460,7 @@ Another example demonstrate the features of TeX formula parsing.
 @end verbatim
 
 @float
- at image{png/samplee, 7cm}
+ at image{../png/samplee, 7cm}
 @caption{Example of TeX formula parsing}
 @end float
 
@@ -444,7 +483,7 @@ Finally you can change font during execution (this work well for mglGraphZB clas
 @end verbatim
 
 @float
- at image{png/fonts, 7cm}
+ at image{../png/fonts, 7cm}
 @caption{Example of font face changing.}
 @end float
 
@@ -611,7 +650,7 @@ MathGL has functions for data processing: differentiating, integrating, smoothin
 @end verbatim
 
 @float
- at image{png/sample6, 7cm}
+ at image{../png/sample6, 7cm}
 @caption{Example of data differentiation and integration}
 @end float
 
@@ -636,7 +675,7 @@ Data smoothing (function @code{Smooth()}) is more interesting and important. Thi
 @end verbatim
 
 @float
- at image{png/sample7, 7cm}
+ at image{../png/sample7, 7cm}
 @caption{Example of data smoothing}
 @end float
 
@@ -665,9 +704,9 @@ Below I shall show the features of 1D plotting on base of @code{Plot()} function
 @verbatim
     int sample(mglGraph *gr, void *)
     {
-        mglData y0(50);		y0.Modify("sin(pi*(2*x-1))");
+        mglData y0(50); 	y0.Modify("sin(pi*(2*x-1))");
         gr->SubPlot(2,2,0);
-        gr->Plot(y0);		gr->Box();
+        gr->Plot(y0);   	gr->Box();
 @end verbatim
 Style of line is not specified in @code{Plot()} function. So MathGL uses the solid line with first color of palette (this is blue). Next subplot shows array @var{y1} with 2 rows:
 @verbatim
@@ -675,11 +714,11 @@ Style of line is not specified in @code{Plot()} function. So MathGL uses the sol
         mglData y1(50,2);
         y1.Modify("sin(pi*2*x-pi)");
         y1.Modify("cos(pi*2*x-pi)/2",1);
-        gr->Plot(y1);		gr->Box();
+        gr->Plot(y1);   	gr->Box();
 @end verbatim
 As previously I did not specify the style of lines. As a result, MathGL again uses solid line with next colors in palette (there are green and red). Now let us plot a circle on the same subplot. The circle is parametric curve @math{x=cos(\pi t), y=sin(\pi t)}. I will set the color of the circle (dark yellow, @samp{Y}) and put marks @samp{+} at point position:
 @verbatim
-        mglData x(50);		x.Modify("cos(pi*2*x-pi)");
+        mglData x(50);  	x.Modify("cos(pi*2*x-pi)");
         gr->Plot(x,y0,"Y+");
 @end verbatim
 Note that solid line is used because I did not specify the type of line. The same picture can be achieved by @code{Plot2()} function. Let us draw ellipse by orange dash line:
@@ -690,7 +729,7 @@ Note that solid line is used because I did not specify the type of line. The sam
 Drawing in 3D space is mostly the same. Let us draw spiral with default line style. Now its color is 4-th color from palette (this is cyan):
 @verbatim
         gr->SubPlot(2,2,2);	gr->Rotate(60,40);
-        mglData z(50);		z.Modify("2*x-1");
+        mglData z(50);  	z.Modify("2*x-1");
         gr->Plot(x,y0,z);	gr->Box();
 @end verbatim
 Function @code{Plot3()} does 3D curve plot but for single array. Use it to put circle marks on the previous plot:
@@ -708,7 +747,7 @@ Note that line style is empty @samp{ } here. Usage of other 1D plotting function
 @end verbatim
 
 @float
- at image{png/sample8, 7cm}
+ at image{../png/sample8, 7cm}
 @caption{Example of 1D data plot}
 @end float
 
@@ -762,7 +801,7 @@ Note, that it may entail a confusion. However, if one will use density plot then
 Note, that the previous color scheme is used in last plots because there are no direct specification of the one.
 
 @float
- at image{png/sample9, 7cm}
+ at image{../png/sample9, 7cm}
 @caption{Example of surface plot for 2D data}
 @end float
 
@@ -787,7 +826,7 @@ Drawing of other 2D plots is analogous. The only peculiarity is the usage of fla
 @end verbatim
 
 @float
- at image{png/samplea, 7cm}
+ at image{../png/samplea, 7cm}
 @caption{Example of 2D data plot with color scheme contained @samp{#} symbol}
 @end float
 
@@ -819,7 +858,7 @@ Drawing procedures for 3D plot looks similarly to 1D and 2D plots described abov
 @end verbatim
 
 @float
- at image{png/sampleb, 7cm}
+ at image{../png/sampleb, 7cm}
 @caption{Example of Gaussian beam diffraction (3D data)}
 @end float
 
@@ -840,15 +879,15 @@ A ``neon-like'' transparency (@code{TranspType=2}) has more interesting look. In
 
 As example I shall show the variant of plot from @ref{Plots for 2D data} (grid drawing is disabled) for different types of transparency.
 @float
- at image{png/type0, 7cm}
+ at image{../png/type0, 7cm}
 @caption{Example of @code{TranspType=0}.}
 @end float
 @float
- at image{png/type1, 7cm}
+ at image{../png/type1, 7cm}
 @caption{Example of @code{TranspType=1}.}
 @end float
 @float
- at image{png/type2, 7cm}
+ at image{../png/type2, 7cm}
 @caption{Example of @code{TranspType=2}.}
 @end float
 
@@ -1010,8 +1049,8 @@ In this section I have included some small hints and advices for the improving o
 * ``Compound'' graphics::       
 * Two axes in one plot::        
 * Titles for the plot::         
-* Changing of the color range::  
-* Management of the point cutting::  
+* Changing of the color range:: 
+* Management of a point cutting::
 * Vector field visualization::  
 * Several light sources::       
 * CutMin and CutMax features::  
@@ -1021,6 +1060,7 @@ In this section I have included some small hints and advices for the improving o
 * Nonlinear fitting hints::     
 * PDE solving hints::           
 * MGL parser using::            
+* Stereo image::                
 @end menu
 
 @c ------------------------------------------------------------------
@@ -1078,7 +1118,7 @@ Note, that the first and the second axes look better if being placed in differen
 The printing of nice titles for the plot is not so trivial task in general case. The problem is that the rotation and aspect change lead to different looks for titles of different subplots. So, the resulting look is not so good as it could be. The solution is simple -- to print titles exactly after @code{SubPlot}() call and before any rotation, aspect change and so on! Analogously, the title for the whole picture looks better if it is printed first (before any @code{SubPlot()} calls). Alternatively you can use function @code{Title()} for plotting title for the picture at any time.
 
 @c ------------------------------------------------------------------
- at node Changing of the color range, Management of the point cutting, Titles for the plot, Hints
+ at node Changing of the color range, Management of a point cutting, Titles for the plot, Hints
 @subsection Changing of the color range
 
 By default (for the user comfort), the color range is set equal to z-range of the plot. However, there are different ranges. So, one can obtain amusing plot by the change of color range manually. For example, there are plots with one-color bottom (or top) or practically bi-color picture and so on.
@@ -1086,7 +1126,6 @@ By default (for the user comfort), the color range is set equal to z-range of th
 For example, compare 2 surfaces:
 @verbatim
     SubPlot(2,1,0)
-    Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,-1,-1));
     Surf(a);           // usual coloring range
     SubPlot(2,1,1)
     CAxis(0,1);
@@ -1094,15 +1133,15 @@ For example, compare 2 surfaces:
 @end verbatim
 
 @c ------------------------------------------------------------------
- at node Management of the point cutting, Vector field visualization, Changing of the color range, Hints
- at subsection Management of the point cutting
+ at node Management of a point cutting, Vector field visualization, Changing of the color range, Hints
+ at subsection Management of a point cutting
 
 Sometimes an experimental or numerical surface has outstanding points. Visualization of such surface will lead to the hole(s) in place of such points. The standard method of ``fighting''  -- to change data values -- is not always good and is not so convenient. MathGL library has another method -- to set variable @code{Cut=false}. As a consequence, all outstanding points will be projected on the bounding box.
 
 Such method is good not only for outstanding points but also for the case when one need to plane the bottom or the top of the plot. Exactly such case is demonstrated in the code:
 @verbatim
         mglData a(20,30);  // create some data
-        a.a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+        a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
         // set lower border above the data minimal value
         Axis(mglPoint(-1,-1,0),mglPoint(1,1,1));
         Cut = false;       // set off cutting flag
@@ -1111,7 +1150,7 @@ Such method is good not only for outstanding points but also for the case when o
 It is an interesting result, is not it?
 
 @c ------------------------------------------------------------------
- at node Vector field visualization, Several light sources, Management of the point cutting, Hints
+ at node Vector field visualization, Several light sources, Management of a point cutting, Hints
 @subsection Vector field visualization
 
 Vector field visualization (especially in 3d case @code{Vect3} or @code{VectC}) may look tangly -- there are too many overlapping lines. I may suggest 2 ways to solve this problem. The first one is to change @code{MeshNum} for decreasing the number of hachures. The second way is to use the flow thread chart @code{Flow}. Unfortunately, I don't know any other methods to visualize 3d vector field. If you know any, e-mail me and I shall add it to MatGL.
@@ -1263,7 +1302,7 @@ You may use following code for obtaining the same solution as in previous exampl
 
 
 @c ------------------------------------------------------------------
- at node MGL parser using, , PDE solving hints, Hints
+ at node MGL parser using, Stereo image, PDE solving hints, Hints
 @subsection MGL parser using
 
 Sometimes you may prefer to use MGL scripts in yours code. It is simpler (especially in comparison with C/Fortran interfaces) and fast way to plot the data with annotations, labels and so on. Class @code{mglParse} (@pxref{mglParse class} parse MGL scripts in C++. It have also the corresponding interface for C/Fortran.
@@ -1303,3 +1342,19 @@ The code in C/Fortran looks practically the same:
     mgl_parse_text(gr, parser, "for $0 -1 1 0.1\nline 0 0 -1 $0 'r'\nnext");
     mgl_write_png(gr, "test.png", "");  // don't forgot to save picture
 @end verbatim
+
+ at c ------------------------------------------------------------------
+ at node Stereo image, , MGL parser using, Hints
+ at subsection Stereo image
+
+One can easily create stereo image in MathGL. Stereo image can be produced by making two subplots with slightly different rotation angles. The corresponding code looks like this (@pxref{Stereo image sample}):
+ at verbatim
+    gr->SubPlot(2,1,0);     // left image
+    gr->Rotate(40,60+3);
+    // draw something here
+    
+    gr->SubPlot(2,1,1);     // right image
+    gr->Rotate(40,60-3);
+    // draw the same here
+ at end verbatim
+
diff --git a/texinfo/example_ru.texi b/texinfo/example_ru.texi
index 210e189..f5886bd 100644
--- a/texinfo/example_ru.texi
+++ b/texinfo/example_ru.texi
@@ -1,5 +1,4 @@
 @c ------------------------------------------------------------------
- at node Examples, MathGL core, Overview, Top
 @chapter MathGL examples
 
 This chapter contain information about basic and advanced MathGL, hints and samples for all types of graphics. I recommend you read first 2 sections one after another and at least look on ``Hints'' section. Also I recommend you to look at @ref{General concepts} and @ref{FAQ}. Sample code for some of these examples can be found in @uref{http://mathgl.sf.net/pictures.html} and in @ref{Samples}.
@@ -46,11 +45,11 @@ Let me consider the aforesaid in more detail.
 
 @c ------------------------------------------------------------------
 @node Using FLTK/GLUT window, Drawing to file, , Basic usage
- at subsection Using FLTK/GLUT window
+ at subsection Using FLTK/Qt/GLUT window
 @cindex window
 @cindex widgets
 
-The ``interactive'' way of drawing in MathGL consists in window creation  with help of class @code{mglGraphGLUT} or @code{mglGraphGLUT} (@pxref{Widget classes}) and the following drawing in this window. There is a corresponding code:
+The ``interactive'' way of drawing in MathGL consists in window creation  with help of class @code{mglGraphFLTK}, @code{mglGraphQT} or @code{mglGraphGLUT} (@pxref{Widget classes}) and the following drawing in this window. There is a corresponding code:
 @verbatim
     int sample(mglGraph *gr, void *)
     {
@@ -91,7 +90,7 @@ Alternatively you can create yours own class inherited from class @code{mglDraw}
     }
 @end verbatim
 
-The similar code can be written for @code{mglGraphGLUT} or for @code{mglGraphQT} window (function @code{sample()} is the same):
+The similar code can be written for @code{mglGraphQT} or for @code{mglGraphGLUT} window (function @code{sample()} is the same):
 @verbatim
     int main(int argc,char **argv)
     {
@@ -177,7 +176,47 @@ The last way of MathGL using is the drawing in memory. Class @code{mglGraphZB} a
         dc.DrawBitmap(wxBitmap(img),0,y);
     }
 @end verbatim
-The drawing in other libraries is most the same. Moreover, I excluded the support of TIFF and JPEG files from MathGL by default for compatibility with wxWidgets library.
+The drawing in other libraries is most the same.
+ at c Moreover, I excluded the support of TIFF and JPEG files from MathGL by default for compatibility with wxWidgets library.
+
+For example, FLTK code will look like
+ at verbatim
+    void Fl_MyWidget::draw()
+    {
+        mglGraphZB gr(w(),h());
+        gr.Alpha(true);         // draws something using MathGL
+        gr.Light(true);         gr.Light(0,mglPoint(1,0,-1));
+        sample(&gr,NULL);
+        fl_draw_image(gr.GetBits(), x(), y(), gr.GetWidth(), gr.GetHeight(), 3);
+    }
+ at end verbatim
+Qt code will look like
+ at verbatim
+    void MyWidget::paintEvent(QPaintEvent *)
+    {
+        mglGraphZB gr(w(),h());
+        gr.Alpha(true);         // draws something using MathGL
+        gr.Light(true);         gr.Light(0,mglPoint(1,0,-1));
+        sample(&gr,NULL);
+
+        // Qt don't support RGB format as is. So, let convert it to BGRN.
+        const uchar *bb = gr.GetBits();
+        register long i, w=gr.GetWidth(), h=gr.GetHeight();
+        *buf = new uchar[4*w*h];
+        for(i=0;i<w*h;i++)
+        {
+            (*buf)[4*i]   = bb[3*i+2];
+            (*buf)[4*i+1] = bb[3*i+1];
+            (*buf)[4*i+2] = bb[3*i];
+            (*buf)[4*i+3] = 255;
+        }
+        QPixmap pic = QPixmap::fromImage(QImage(*buf, w, h, QImage::Format_RGB32));
+
+        QPainter paint;
+        paint.begin(this);  paint.drawPixmap(0,0,pic);  paint.end();
+        delete []buf;
+    }
+ at end verbatim
 
 @c ------------------------------------------------------------------
 @node Using QMathGL, , Drawing in memory, Basic usage
@@ -266,7 +305,7 @@ Let me demonstrate possibilities of axes transformation. MathGL has the followin
 Here I used function @code{Puts} for printing the text in arbitrary position of picture (@pxref{Text printing}). Text coordinates and size are connected with axes. However, text coordinates may be everywhere, including the outside the bounding box. I shall show its features later in @xref{Text printing example}.
 
 @float
- at image{png/sample1, 7cm}
+ at image{../png/sample1, 7cm}
 @caption{Example of several subplots on the single picture.}
 @end float
 
@@ -325,7 +364,7 @@ Function @code{Axis} draws axes. Its textual string shows in which directions th
 This example shows the importance of the correct choosing of the number of ticks on axis. If tick step is too small then its text may overlap and becomes unreadable. This code has the example of @code{Label} function. It draws label for axis in specified direction. The text position on axis is specified by third argument of @code{Label} function. If it is positive then then text is drawn near the axis maximum, if negative then the same takes place near the minimum of axis, if zero - then at the center of axis.
 
 @float
- at image{png/sample2, 7cm}
+ at image{../png/sample2, 7cm}
 @caption{Example of setting up axis range and axis ticks.}
 @end float
 
@@ -376,7 +415,7 @@ Now let use curvilinear coordinates. In difference from other systems of plot cr
 @end verbatim
 
 @float
- at image{png/sample3, 7cm}
+ at image{../png/sample3, 7cm}
 @caption{Example of curvilinear coordinates}
 @end float
 
@@ -385,7 +424,7 @@ Now let use curvilinear coordinates. In difference from other systems of plot cr
 @node Text printing example, Animation, Curvilinear coordinates, Advanced usage
 @subsection Text printing example
 
-MathGL prints text by vector font. There are functions for manual specifying of text position (like @code{Puts}) and for its automatic selection (like @code{Label}, @code{Legend} and so on). MathGL prints text always in specified position even if it lies outside the bounding box. The default size of font is specified by variables @var{FontSize} (@pxref{Font settings}). However, the actual size of output string depends on position of axes (depends on functions @code{SubPlot}, @code{InPlot}). The switching of the font style (italic, bold, wire and so on) can be done for the whole string (by function parameter) or inside the string. By default MathGL parses TeX-like commands for symbols and indexes (see @pxref{mglFont class}). Example of MathGL font drawing is:
+MathGL prints text by vector font. There are functions for manual specifying of text position (like @code{Puts}) and for its automatic selection (like @code{Label}, @code{Legend} and so on). MathGL prints text always in specified position even if it lies outside the bounding box. The default size of font is specified by variables @var{FontSize} (@pxref{Font settings}). However, the actual size of output string depends on position of axes (depends on functions @code{SubPlot}, @code{InPlot}). The switching of the font style (italic, bold, wire and so on) can be done for the whole string (by function parameter) or inside the string. By default MathGL parses TeX-like commands for symbols and indexes (see @pxref{Font styles}). Example of MathGL font drawing is:
 @verbatim
     int sample(mglGraph *gr, void *)
     {
@@ -406,7 +445,7 @@ MathGL prints text by vector font. There are functions for manual specifying of
 @end verbatim
 
 @float
- at image{png/sample4, 7cm}
+ at image{../png/sample4, 7cm}
 @caption{Example of text printing with different font effects}
 @end float
 
@@ -421,7 +460,7 @@ Another example demonstrate the features of TeX formula parsing.
 @end verbatim
 
 @float
- at image{png/samplee, 7cm}
+ at image{../png/samplee, 7cm}
 @caption{Example of TeX formula parsing}
 @end float
 
@@ -444,7 +483,7 @@ Finally you can change font during execution (this work well for mglGraphZB clas
 @end verbatim
 
 @float
- at image{png/fonts, 7cm}
+ at image{../png/fonts, 7cm}
 @caption{Example of font face changing.}
 @end float
 
@@ -611,7 +650,7 @@ MathGL has functions for data processing: differentiating, integrating, smoothin
 @end verbatim
 
 @float
- at image{png/sample6, 7cm}
+ at image{../png/sample6, 7cm}
 @caption{Example of data differentiation and integration}
 @end float
 
@@ -636,7 +675,7 @@ Data smoothing (function @code{Smooth()}) is more interesting and important. Thi
 @end verbatim
 
 @float
- at image{png/sample7, 7cm}
+ at image{../png/sample7, 7cm}
 @caption{Example of data smoothing}
 @end float
 
@@ -665,9 +704,9 @@ Below I shall show the features of 1D plotting on base of @code{Plot()} function
 @verbatim
     int sample(mglGraph *gr, void *)
     {
-        mglData y0(50);		y0.Modify("sin(pi*(2*x-1))");
+        mglData y0(50); 	y0.Modify("sin(pi*(2*x-1))");
         gr->SubPlot(2,2,0);
-        gr->Plot(y0);		gr->Box();
+        gr->Plot(y0);   	gr->Box();
 @end verbatim
 Style of line is not specified in @code{Plot()} function. So MathGL uses the solid line with first color of palette (this is blue). Next subplot shows array @var{y1} with 2 rows:
 @verbatim
@@ -675,11 +714,11 @@ Style of line is not specified in @code{Plot()} function. So MathGL uses the sol
         mglData y1(50,2);
         y1.Modify("sin(pi*2*x-pi)");
         y1.Modify("cos(pi*2*x-pi)/2",1);
-        gr->Plot(y1);		gr->Box();
+        gr->Plot(y1);   	gr->Box();
 @end verbatim
 As previously I did not specify the style of lines. As a result, MathGL again uses solid line with next colors in palette (there are green and red). Now let us plot a circle on the same subplot. The circle is parametric curve @math{x=cos(\pi t), y=sin(\pi t)}. I will set the color of the circle (dark yellow, @samp{Y}) and put marks @samp{+} at point position:
 @verbatim
-        mglData x(50);		x.Modify("cos(pi*2*x-pi)");
+        mglData x(50);  	x.Modify("cos(pi*2*x-pi)");
         gr->Plot(x,y0,"Y+");
 @end verbatim
 Note that solid line is used because I did not specify the type of line. The same picture can be achieved by @code{Plot2()} function. Let us draw ellipse by orange dash line:
@@ -690,7 +729,7 @@ Note that solid line is used because I did not specify the type of line. The sam
 Drawing in 3D space is mostly the same. Let us draw spiral with default line style. Now its color is 4-th color from palette (this is cyan):
 @verbatim
         gr->SubPlot(2,2,2);	gr->Rotate(60,40);
-        mglData z(50);		z.Modify("2*x-1");
+        mglData z(50);  	z.Modify("2*x-1");
         gr->Plot(x,y0,z);	gr->Box();
 @end verbatim
 Function @code{Plot3()} does 3D curve plot but for single array. Use it to put circle marks on the previous plot:
@@ -708,7 +747,7 @@ Note that line style is empty @samp{ } here. Usage of other 1D plotting function
 @end verbatim
 
 @float
- at image{png/sample8, 7cm}
+ at image{../png/sample8, 7cm}
 @caption{Example of 1D data plot}
 @end float
 
@@ -762,7 +801,7 @@ Note, that it may entail a confusion. However, if one will use density plot then
 Note, that the previous color scheme is used in last plots because there are no direct specification of the one.
 
 @float
- at image{png/sample9, 7cm}
+ at image{../png/sample9, 7cm}
 @caption{Example of surface plot for 2D data}
 @end float
 
@@ -787,7 +826,7 @@ Drawing of other 2D plots is analogous. The only peculiarity is the usage of fla
 @end verbatim
 
 @float
- at image{png/samplea, 7cm}
+ at image{../png/samplea, 7cm}
 @caption{Example of 2D data plot with color scheme contained @samp{#} symbol}
 @end float
 
@@ -819,7 +858,7 @@ Drawing procedures for 3D plot looks similarly to 1D and 2D plots described abov
 @end verbatim
 
 @float
- at image{png/sampleb, 7cm}
+ at image{../png/sampleb, 7cm}
 @caption{Example of Gaussian beam diffraction (3D data)}
 @end float
 
@@ -840,15 +879,15 @@ A ``neon-like'' transparency (@code{TranspType=2}) has more interesting look. In
 
 As example I shall show the variant of plot from @ref{Plots for 2D data} (grid drawing is disabled) for different types of transparency.
 @float
- at image{png/type0, 7cm}
+ at image{../png/type0, 7cm}
 @caption{Example of @code{TranspType=0}.}
 @end float
 @float
- at image{png/type1, 7cm}
+ at image{../png/type1, 7cm}
 @caption{Example of @code{TranspType=1}.}
 @end float
 @float
- at image{png/type2, 7cm}
+ at image{../png/type2, 7cm}
 @caption{Example of @code{TranspType=2}.}
 @end float
 
@@ -1010,8 +1049,8 @@ In this section I have included some small hints and advices for the improving o
 * ``Compound'' graphics::       
 * Two axes in one plot::        
 * Titles for the plot::         
-* Changing of the color range::  
-* Management of the point cutting::  
+* Changing of the color range:: 
+* Management of a point cutting::
 * Vector field visualization::  
 * Several light sources::       
 * CutMin and CutMax features::  
@@ -1021,6 +1060,7 @@ In this section I have included some small hints and advices for the improving o
 * Nonlinear fitting hints::     
 * PDE solving hints::           
 * MGL parser using::            
+* Stereo image::                
 @end menu
 
 @c ------------------------------------------------------------------
@@ -1078,7 +1118,7 @@ Note, that the first and the second axes look better if being placed in differen
 The printing of nice titles for the plot is not so trivial task in general case. The problem is that the rotation and aspect change lead to different looks for titles of different subplots. So, the resulting look is not so good as it could be. The solution is simple -- to print titles exactly after @code{SubPlot}() call and before any rotation, aspect change and so on! Analogously, the title for the whole picture looks better if it is printed first (before any @code{SubPlot()} calls). Alternatively you can use function @code{Title()} for plotting title for the picture at any time.
 
 @c ------------------------------------------------------------------
- at node Changing of the color range, Management of the point cutting, Titles for the plot, Hints
+ at node Changing of the color range, Management of a point cutting, Titles for the plot, Hints
 @subsection Changing of the color range
 
 By default (for the user comfort), the color range is set equal to z-range of the plot. However, there are different ranges. So, one can obtain amusing plot by the change of color range manually. For example, there are plots with one-color bottom (or top) or practically bi-color picture and so on.
@@ -1086,7 +1126,6 @@ By default (for the user comfort), the color range is set equal to z-range of th
 For example, compare 2 surfaces:
 @verbatim
     SubPlot(2,1,0)
-    Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,-1,-1));
     Surf(a);           // usual coloring range
     SubPlot(2,1,1)
     CAxis(0,1);
@@ -1094,15 +1133,15 @@ For example, compare 2 surfaces:
 @end verbatim
 
 @c ------------------------------------------------------------------
- at node Management of the point cutting, Vector field visualization, Changing of the color range, Hints
- at subsection Management of the point cutting
+ at node Management of a point cutting, Vector field visualization, Changing of the color range, Hints
+ at subsection Management of a point cutting
 
 Sometimes an experimental or numerical surface has outstanding points. Visualization of such surface will lead to the hole(s) in place of such points. The standard method of ``fighting''  -- to change data values -- is not always good and is not so convenient. MathGL library has another method -- to set variable @code{Cut=false}. As a consequence, all outstanding points will be projected on the bounding box.
 
 Such method is good not only for outstanding points but also for the case when one need to plane the bottom or the top of the plot. Exactly such case is demonstrated in the code:
 @verbatim
         mglData a(20,30);  // create some data
-        a.a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+        a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
         // set lower border above the data minimal value
         Axis(mglPoint(-1,-1,0),mglPoint(1,1,1));
         Cut = false;       // set off cutting flag
@@ -1111,7 +1150,7 @@ Such method is good not only for outstanding points but also for the case when o
 It is an interesting result, is not it?
 
 @c ------------------------------------------------------------------
- at node Vector field visualization, Several light sources, Management of the point cutting, Hints
+ at node Vector field visualization, Several light sources, Management of a point cutting, Hints
 @subsection Vector field visualization
 
 Vector field visualization (especially in 3d case @code{Vect3} or @code{VectC}) may look tangly -- there are too many overlapping lines. I may suggest 2 ways to solve this problem. The first one is to change @code{MeshNum} for decreasing the number of hachures. The second way is to use the flow thread chart @code{Flow}. Unfortunately, I don't know any other methods to visualize 3d vector field. If you know any, e-mail me and I shall add it to MatGL.
@@ -1263,7 +1302,7 @@ You may use following code for obtaining the same solution as in previous exampl
 
 
 @c ------------------------------------------------------------------
- at node MGL parser using, , PDE solving hints, Hints
+ at node MGL parser using, Stereo image, PDE solving hints, Hints
 @subsection MGL parser using
 
 Sometimes you may prefer to use MGL scripts in yours code. It is simpler (especially in comparison with C/Fortran interfaces) and fast way to plot the data with annotations, labels and so on. Class @code{mglParse} (@pxref{mglParse class} parse MGL scripts in C++. It have also the corresponding interface for C/Fortran.
@@ -1303,3 +1342,19 @@ The code in C/Fortran looks practically the same:
     mgl_parse_text(gr, parser, "for $0 -1 1 0.1\nline 0 0 -1 $0 'r'\nnext");
     mgl_write_png(gr, "test.png", "");  // don't forgot to save picture
 @end verbatim
+
+ at c ------------------------------------------------------------------
+ at node Stereo image, , MGL parser using, Hints
+ at subsection Stereo image
+
+One can easily create stereo image in MathGL. Stereo image can be produced by making two subplots with slightly different rotation angles. The corresponding code looks like this (@pxref{Stereo image sample}):
+ at verbatim
+    gr->SubPlot(2,1,0);     // left image
+    gr->Rotate(40,60+3);
+    // draw something here
+    
+    gr->SubPlot(2,1,1);     // right image
+    gr->Rotate(40,60-3);
+    // draw the same here
+ at end verbatim
+
diff --git a/texinfo/filter.py b/texinfo/filter.py
new file mode 100755
index 0000000..ad255fc
--- /dev/null
+++ b/texinfo/filter.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+
+import os,string,re,glob
+
+print 'Tuning resulting html files for Qt\n'
+
+beginskip=0
+for filename in glob.glob('./*ru.html/*html'):
+    fpin=open(filename,'r')
+    fpout=open(filename+'.tmp','w')
+    for line in fpin.readlines():
+        if re.search('<html>',line): 
+            beginskip=1
+            fpout.write(line)
+            continue
+        if re.search('<head>',line): beginskip=0
+        if re.search('<meta name=\"distribution\" content=\"global\">',line): continue
+        if re.search('<meta name=\"Generator\" content=\"texi2html',line): continue
+        if beginskip==0 : fpout.write(line)
+    fpin.close()
+    fpout.close()
+    os.remove(filename)
+    os.rename(filename+'.tmp', filename)
diff --git a/texinfo/mathgl_en.texi b/texinfo/mathgl_en.texi
index 70a6ec0..dce0911 100644
--- a/texinfo/mathgl_en.texi
+++ b/texinfo/mathgl_en.texi
@@ -1,6 +1,6 @@
 \input texinfo
 @setfilename mathgl_en.info
- at set VERSION 1.10.1
+ at set VERSION 1.11
 @settitle MathGL @value{VERSION}
 @syncodeindex pg cp
 @comment %**end of header
@@ -86,13 +86,36 @@ supports it in developing GNU and promoting software freedom.''
 @macro tdref{nam}
 @uref{http://mathgl.sourceforge.net/pdf_u3d/\nam\.pdf, 3D pdf}
 @end macro
+ at macro MGL
+(MGL)
+ at end macro
+
 
+ at node Overview, Examples, , Top
 @include overview_en.texi
+
+ at node Examples, MathGL core, Overview, Top
 @include example_en.texi
+
+ at node MathGL core, Plotter classes, Examples, Top
 @include core_en.texi
+
+ at node Plotter classes, Widget classes, MathGL core, Top
 @include class_en.texi
- at include mgl_en.texi
 
+ at node Widget classes, mglData class, Plotter classes, Top
+ at include widget_en.texi
+
+ at node mglData class, Other classes, Widget classes, Top
+ at include data_en.texi
+
+ at node Other classes, MGL interface, mglData class, Top
+ at include other_en.texi
+
+ at node MGL interface, Samples, Other classes, Top
+ at include mgl_cmd_en.texi
+
+ at node Samples, TeX-like symbols, MGL interface, Top
 @include samples_en.texi
 
 @node TeX-like symbols, Copying This Manual, Samples, Top
diff --git a/texinfo/mathgl_ru.texi b/texinfo/mathgl_ru.texi
index aa458f7..ea267fb 100644
--- a/texinfo/mathgl_ru.texi
+++ b/texinfo/mathgl_ru.texi
@@ -2,7 +2,7 @@
 @setfilename mathgl_ru.info
 @c @documentlanguage ru
 @documentencoding UTF-8
- at set VERSION 1.10.1
+ at set VERSION 1.11
 @settitle MathGL @value{VERSION}
 @syncodeindex pg cp
 @comment %**end of header
@@ -77,9 +77,9 @@ supports it in developing GNU and promoting software freedom.''
 * Other classes::
 * MGL interface::
 * Samples::
-* Символы TeX::
+* TeX-like symbols::
 * Copying This Manual::
-* Индекс::
+* Index::
 @end menu
 
 @rmacro sref {arg}
@@ -88,24 +88,46 @@ supports it in developing GNU and promoting software freedom.''
 @macro tdref{nam}
 @uref{http://mathgl.sourceforge.net/pdf_u3d/\nam\.pdf, 3D pdf}
 @end macro
+ at macro MGL
+(MGL)
+ at end macro
 
+ at node Overview, Examples, , Top
 @include overview_ru.texi
+
+ at node Examples, MathGL core, Overview, Top
 @include example_ru.texi
+
+ at node MathGL core, Plotter classes, Examples, Top
 @include core_ru.texi
+
+ at node Plotter classes, Widget classes, MathGL core, Top
 @include class_ru.texi
- at include mgl_ru.texi
 
+ at node Widget classes, mglData class, Plotter classes, Top
+ at include widget_ru.texi
+
+ at node mglData class, Other classes, Widget classes, Top
+ at include data_ru.texi
+
+ at node Other classes, MGL interface, mglData class, Top
+ at include other_ru.texi
+
+ at node MGL interface, Samples, Other classes, Top
+ at include mgl_cmd_ru.texi
+
+ at node Samples, TeX-like symbols, MGL interface, Top
 @include samples_ru.texi
 
- at node Символы TeX, Copying This Manual, Samples, Top
+ at node TeX-like symbols, Copying This Manual, Samples, Top
 @appendix Символы TeX
 @include appendix_ru.texi
 
- at node Copying This Manual, Индекс, Символы TeX, Top
+ at node Copying This Manual, Index, TeX-like symbols, Top
 @appendix GNU Free Documentation License
 @include fdl.texi
 
- at node Индекс, , Copying This Manual, Top
+ at node Index, , Copying This Manual, Top
 @unnumbered Индекс
 
 @printindex cp
diff --git a/texinfo/mgl_en.texi b/texinfo/mgl_cmd_en.texi
similarity index 63%
copy from texinfo/mgl_en.texi
copy to texinfo/mgl_cmd_en.texi
index 5a7d32a..398241a 100644
--- a/texinfo/mgl_en.texi
+++ b/texinfo/mgl_cmd_en.texi
@@ -1,12 +1,11 @@
 @c ------------------------------------------------------------------
- at node MGL interface, Samples, Other classes, Top
- at chapter MGL interface
+ at chapter MGL language
 
-MathGL library supports (from version 1.3) the simplest scripts for data handling and plotting. These scripts can be used independently (with the help of mgl2png, mgl2eps, mgl2svg programs and others) or in the frame of the library using.
+MathGL library supports the simplest scripts for data handling and plotting. These scripts can be used independently (with the help of UDAV, mgl2png, mgl2eps, mgl2svg programs and others, @pxref{Utilities}) or in the frame of the library using.
 
-MGL script language is rather simple. Each string is a command. First word of string is the name of command. Other words are command arguments. Command may have up to 1000 arguments (at least for now). Words are separated from each other by space or tabulation symbol. The upper or lower case of words is sufficient, i.e. variables a and A are different variables. Symbol @samp{#} starts the comment (all characters after # will be ignored). The exception is situation when # is a part of some string. Also options can be specified at the end of string (after symbol @samp{;}, @pxref{Command options (MGL)}). Symbol @samp{:} starts new command (like new line character) if it is not placed inside a string or inside brackets.
+MGL script language is rather simple. Each string is a command. First word of string is the name of command. Other words are command arguments. Command may have up to 1000 arguments (at least for now). Words are separated from each other by space or tabulation symbol. The upper or lower case of words is sufficient, i.e. variables @var{a} and @var{A} are different variables. Symbol @samp{#} starts the comment (all characters after # will be ignored). The exception is situation when @samp{#} is a part of some string. Also options can be specified after symbol @samp{;} (@pxref{Command options @MGL{}}). Symbol @samp{:} starts new command (like new line character) if it is not placed inside a string or inside brackets.
 
-If string contain references to external parameters (substrings @samp{$0}, @samp{$1} ... @samp{$9}) then before execution the values of parameter will be substituted instead of reference. It allows to use the same MGL script for different parameters (filenames, paths, condition and so on).
+If string contain references to external parameters (substrings @samp{$0}, @samp{$1} ... @samp{$9}) or definitions (substrings @samp{$a}, @samp{$b} ... @samp{$z}) then before execution the values of parameter/definition will be substituted instead of reference. It allows to use the same MGL script for different parameters (filenames, paths, condition and so on).
 
 Argument can be a string, a variable name or a number. 
 @itemize @bullet
@@ -14,98 +13,153 @@ Argument can be a string, a variable name or a number.
 The string is any symbols between ordinary marks @samp{'}.
 
 @item 
-Variable name is arbitrary combination of symbols (except spaces and @samp{'}) started from a letter and with length less than 64. It is possible to use sub-arrays (like in @code{subdata} command) as command argument. For example, @code{a(1)} or @code{a(1,:)} or @code{a(1,:,:)} is second row, @code{a(:,2)} or @code{a(:,2,:)} is third column, @code{a(:,:,0)} is first slice and so on. Also you can extract a part of array from m-th to n-th element by code @code{a(m:n,:,:)} or just @code{a(m:n)}.
+Usually variable have a name which is arbitrary combination of symbols (except spaces and @samp{'}) started from a letter and with length less than 64. A temporary array can be used as variable:
+ at itemize @bullet
+ at item 
+sub-arrays (like in @ref{subdata} command) as command argument. For example, @code{a(1)} or @code{a(1,:)} or @code{a(1,:,:)} is second row, @code{a(:,2)} or @code{a(:,2,:)} is third column, @code{a(:,:,0)} is first slice and so on. Also you can extract a part of array from m-th to n-th element by code @code{a(m:n,:,:)} or just @code{a(m:n)}.
 
-If names for data columns was specified (by set_id command or in the file at string started with @code{##}) then it is possible to use any column combinations defined by formulas, like @code{a('n*w^2/exp(t)')}.
+ at item 
+any column combinations defined by formulas, like @code{a('n*w^2/exp(t)')} if names for data columns was specified (by @ref{idset} command or in the file at string started with @code{##}).
 
-Also, any expression (without spaces) of existed variables produce temporary variable. For example, @samp{sqrt(dat(:,5)+1)} will produce temporary variable with data values equal to @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. Such variables can not be used as 1st argument for commands which create (return) the data (like @samp{new}, @samp{read}, @samp{hist} and so on).
+ at item 
+any expression (without spaces) of existed variables produce temporary variable. For example, @samp{sqrt(dat(:,5)+1)} will produce temporary variable with data values equal to @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. 
 
-Finally, you can put code for making new data inside @{@}. For example, @samp{@{sum dat 'x'@}} produce temporary variable which contain result of summation of @var{dat} along direction 'x'. This is the same array @var{tmp} as produced by command @samp{sum tmp dat 'x'}. You can use nested constructions, like @samp{@{sum @{max dat 'z'@} 'x'@}}.
+ at item 
+temporary variable of higher dimensions by help of []. For example, @samp{[1,2,3]} will produce a temporary vector of 3 elements @{1, 2, 3@}; @samp{[[11,12],[21,22]]} will produce matrix 2*2 and so on. Here you can join even an arrays of the same dimensions by construction like @samp{[v1,v2,...,vn]}.
 
 @item 
-Special names @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1} are treated as number if they were not redefined by user. Variables with suffixes are treated as numbers (@pxref{Suffixes}). Names defined by @code{define} command are treated as number. Also results of formulas with sizes 1x1x1 are treated as number (for example, @samp{pi/dat.nx}).
+result of code for making new data (@pxref{Make another data @MGL{}}) inside @{@}. For example, @samp{@{sum dat 'x'@}} produce temporary variable which contain result of summation of @var{dat} along direction 'x'. This is the same array @var{tmp} as produced by command @samp{sum tmp dat 'x'}. You can use nested constructions, like @samp{@{sum @{max dat 'z'@} 'x'@}}.
 @end itemize
-Before the first using all variables must be defined with the help of commands, like, @code{new, var, list, copy} or @code{read}. 
+Temporary variables can not be used as 1st argument for commands which create (return) the data (like @samp{new}, @samp{read}, @samp{hist} and so on).
+
+ at item 
+Special names @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1} are treated as number if they were not redefined by user. Variables with suffixes are treated as numbers (@pxref{Suffixes}). Names defined by @ref{define} command are treated as number. Also results of formulas with sizes 1x1x1 are treated as number (for example, @samp{pi/dat.nx}).
+ at end itemize
+Before the first using all variables must be defined with the help of commands, like, @ref{new}, @ref{var}, @ref{list}, @ref{copy}, @ref{read}, @ref{hist}, @ref{sum} and so on (@pxref{Data create @MGL{}} and @ref{Make another data @MGL{}}). 
+
+Command may have several set of possible arguments (for example, @code{plot ydat} and @code{plot xdat ydat}). All command arguments for a selected set must be specified. However, some arguments can have default values. These argument are printed in [], like @code{plot ydat ['stl'='' zval=nan]}. At this, the record @code{[arg1 arg2 arg3 ...]} means @code{[arg1 [arg2 [arg3 ...]]]}, i.e. you can omit only tailing arguments if you agree with its default values. For example, @code{plot ydat '' 1} or @code{plot ydat ''} is correct, but @code{plot ydat 1} is incorrect (argument @code{'stl'} is missed).
 
-All MGL commands can be divided on several groups. I will use the following notation for a command description: command names are bold, strings are denoted by commas, variable names are italic, numbers are typewriter. Optional arguments are placed in square brackets and default values for them are shown. Detailed description of color, line styles, color schemes, font types, TeX-like symbols and formulas can be found in corresponding section.
+All MGL commands can be divided on several groups. I will use the following notation for a command description: command names are bold, strings are denoted by commas, variable names are italic, numbers are typewriter. Optional arguments are placed in square brackets and default values for them are shown. Detailed description of color, line styles (@pxref{Line styles}), color schemes (@pxref{Color scheme}), font types, TeX-like symbols (@pxref{Font styles}) and formulas (@pxref{Textual formulas}) can be found in corresponding section.
 
 @menu
-* Graphics setup (MGL)::        
-* Axis settings (MGL)::         
-* Transformation matrix (MGL)::  
-* Export to file (MGL)::        
-* Primitives drawing (MGL)::    
-* Text printing (MGL)::         
-* Axis and Colorbar (MGL)::     
-* Legend (MGL)::                
-* 1D plotting (MGL)::           
-* 2D plotting (MGL)::           
-* 3D plotting (MGL)::           
-* Dual plotting (MGL)::         
-* Vector fields (MGL)::         
-* Other plotting (MGL)::        
-* Nonlinear fitting (MGL)::     
-* Data create (MGL)::           
-* Data filling (MGL)::          
-* Rearrange data (MGL)::        
-* File I/O (MGL)::              
-* Make another data (MGL)::     
-* Commands on direction (MGL)::  
-* Operators (MGL)::             
-* Program flow (MGL)::          
-* Command options (MGL)::       
+ at ifset UDAV
+* General concepts::             
+ at end ifset
+* Graphics setup @MGL{}::        
+* Axis settings @MGL{}::         
+* Transformation matrix @MGL{}::  
+* Export to file @MGL{}::        
+* Primitives drawing @MGL{}::    
+* Text printing @MGL{}::         
+* Axis and Colorbar @MGL{}::     
+* Legend @MGL{}::                
+* 1D plotting @MGL{}::           
+* 2D plotting @MGL{}::           
+* 3D plotting @MGL{}::           
+* Dual plotting @MGL{}::         
+* Vector fields @MGL{}::         
+* Other plotting @MGL{}::        
+* Nonlinear fitting @MGL{}::     
+* Data create @MGL{}::           
+* Data filling @MGL{}::          
+* Rearrange data @MGL{}::        
+* File I/O @MGL{}::              
+* Make another data @MGL{}::     
+* Change data @MGL{}::  
+* Operators @MGL{}::             
+* Program flow @MGL{}::          
+* Command options @MGL{}::       
 * Suffixes::                    
 * Utilities::                   
 @end menu
 
+ at c ##################################################################
+ at ifset UDAV
+ at node  General concepts, , Utilities, MGL interface
+ at section General concepts
+
+The set of MathGL features is rather rich -- just the number of basic graphics types is larger than 40. Also there are functions for data handling, plot setup and so on. In spite of it I tried to keep a similar style in command names and in the order of arguments. Mostly it is used for different drawing functions.
+
+There are 4 most general (base) concepts:
+ at enumerate
+ at item
+ at strong{Every plot settings (style of lines, font, color scheme) are specified by a string.} It provides convenience for user/programmer -- short string with parameters is more comprehensible than a large set of parameters. Also it provides portability -- the strings are the same in any OS so that it is not necessary to think about argument types.
+ at item
+ at strong{All commands have ``simplified'' and ``advanced'' forms.} It is done for user</samp>&rsquo;s convenience. One needs to specify only one data array in the ``simplified'' form in order to see the result. But one may set parametric dependence of coordinates and produce rather complex curves and surfaces in the ``advanced'' form. In both cases the order of function arguments is the same: first data arrays, second the string with plot parameters, and later optional arguments for plot tuning.
+ at item
+ at strong{All plots are vector plots.} The MathGL library is intended for handling scientific data which have vector nature (lines, faces, matrices and so on). As a result, vector representation is used in all cases! In addition, the vector representation allows one to scale the plot easily -- change the canvas size by a factor of 2, and the picture will be proportionally scaled.
+ at item
+ at strong{New drawing never clears things drawn already.} This, in some sense, unexpected, idea allows to create a lot of ``combined'' graphics. For example, to make a surface with contour lines one needs to call the function for surface plotting and the function for contour lines plotting (in any order). Thus the special functions for making this ``combined'' plots (as it is done in Matlab and some other plotting systems) are superfluous. Many more examples of such plots can be found in section @ref{Hints} and in home site (@uref{http://mathgl.sf.net/index.html}).
+ at end enumerate
+
+In addition to the general concepts I want to comment on some non-trivial or less commonly used general ideas -- plot positioning, axis specification and curvilinear coordinates, styles for lines, text and color scheme.
+
+ at menu
+* Coordinate axes::             
+* Line styles::                 
+* Color scheme::                
+* Font styles::                  
+* Textual formulas::            
+ at end menu
+
+ at include concept_en.texi
+
+ at node Graphics setup @MGL{}, Axis settings @MGL{}, General concepts, MGL interface
+ at end ifset
+ at ifclear UDAV
 
 @c ##################################################################
- at node Graphics setup (MGL), Axis settings (MGL), , MGL interface
- at section Graphics setup (MGL)
+ at node Graphics setup @MGL{}, Axis settings @MGL{}, , MGL interface
+ at end ifclear
+ at section Graphics setup @MGL{}
 
 Coomands in this group influences on overall graphics appearance. So all of them should be placed @emph{before} any actual plotting commands. 
 
 @menu
-* Transparency (MGL)::          
-* Lighting (MGL)::              
-* Fog (MGL)::                   
-* Default sizes (MGL)::         
-* Zooming (MGL)::               
-* Cutting (MGL)::               
-* Other settings (MGL)::        
+* Transparency @MGL{}::          
+* Lighting @MGL{}::              
+* Fog @MGL{}::                   
+* Default sizes @MGL{}::         
+* Zooming @MGL{}::               
+* Cutting @MGL{}::               
+* Other settings @MGL{}::        
 @end menu
 
 @c ==================================================================
- at node Transparency (MGL), Lighting (MGL), , Graphics setup (MGL)
- at subsection Transparency (MGL)
- at cindex alpha
- at cindex alphadef
- at cindex transparent
- at cindex transptype
+ at node Transparency @MGL{}, Lighting @MGL{}, , Graphics setup @MGL{}
+ at subsection Transparency @MGL{}
 
-There are several commands for setup transparency. The general command is @code{alpha} which switch on/off the transparency for overall plot. It influence only for graphics which created after @code{alpha} call (with one exeption, mglGraphGL). Command @code{alphadef} specify the default value of alpha-channel. You may switch off transparency of selected plot by command @code{transparent}. Finally, command @code{transptype} set the kind of transparency. @sref{Transparent surface sample}
+There are several commands for setup transparency. The general command is @ref{alpha} which switch on/off the transparency for overall plot. It influence only for graphics which created after @ref{alpha} call. Command @ref{alphadef} specify the default value of alpha-channel. You may switch off transparency of selected plot by command @ref{transparent}. Finally, command @ref{transptype} set the kind of transparency. @sref{Transparent surface sample}
 
+ at cindex alpha
+ at anchor{alpha}
 @deffn {MGL command} alpha @code{[val=on]}
 Sets the transparency on/off. It is recommended to call this command before any plotting command. Default value is @code{off}. Use @code{transparent off} in particular plot to disable its transparency.
 @end deffn
+ at cindex alphadef
+ at anchor{alphadef}
 @deffn {MGL command} alphadef @code{val}
 Default value of alpha channel (transparency) for all plotting commands. Initial value is 0.5.
 @end deffn
+ at cindex transparent
+ at anchor{transparent}
 @deffn {MGL command} transparent @code{val}
 Temporary switches transparency on/off for the plot.
 @end deffn
+ at cindex transptype
+ at anchor{transptype}
 @deffn {MGL command} transptype @code{val}
-This command set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{alphadef 0.3} or less for lamp-like transparency.
+This command set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{alphadef 0.3} or less for lamp-like transparency. @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}.
 @end deffn
 
 @c ==================================================================
- at node Lighting (MGL), Fog (MGL), Transparency (MGL), Graphics setup (MGL)
- at subsection Lighting (MGL)
- at cindex light
- at cindex ambient
+ at node Lighting @MGL{}, Fog @MGL{}, Transparency @MGL{}, Graphics setup @MGL{}
+ at subsection Lighting @MGL{}
 
-There are several commands for setup lighting. The general command is @code{light} which switch on/off the lighting for overall plot. It influence only for graphics which created after @code{light} call (with one exeption, mglGraphGL). Generally MathGL support up to 10 independent light sources. But in OpenGL mode only 8 of light sources is used due to OpenGL limitations. The position, color, brightness of each light source can be set separately. By default only one light source is active. It is source number @code{0} with white color, located at top of the plot.
+There are several commands for setup lighting. The general command is @ref{light} which switch on/off the lighting for overall plot. Generally MathGL support up to 10 independent light sources. The position, color, brightness of each light source can be set separately. By default only one light source is active. It is source number @code{0} with white color, located at top of the plot.
 
+ at cindex light
+ at anchor{light}
 @deffn {MGL command} light @code{[val=on]}
 Sets the using of light on/off for overall plot. It is recommended to call this command before any plotting command. Default value is lightning off.
 @end deffn
@@ -117,79 +171,92 @@ Switch on/off @var{num}-th light source separately.
 The command adds a light source with identification @var{num} at position @{@var{xpos}, @var{ypos}, @var{zpos}@}. The color of light is @var{col} (white by default). The brightness of light is @var{br} which must be in range [0,1].
 @end deffn
 
+ at cindex ambient
+ at anchor{ambient}
 @deffn {MGL command} ambient @code{val}
 Sets the brightness of ambient light. The value should be in range [0,1]. Initial value is 0.5. 
 @end deffn
 
 @c ==================================================================
- at node Fog (MGL), Default sizes (MGL), Lighting (MGL), Graphics setup (MGL)
- at subsection Fog (MGL)
- at cindex fog
+ at node Fog @MGL{}, Default sizes @MGL{}, Lighting @MGL{}, Graphics setup @MGL{}
+ at subsection Fog @MGL{}
 
+ at cindex fog
+ at anchor{fog}
 @deffn {MGL command} fog @code{val [dz=0.25]}
-Command imitate a fog in the plot. Fog start from relative distance @var{dz} from view point and its density growths exponentially in depth. So that the fog influence is determined by law ~ 1-exp(- at emph{val*z}). Here @emph{z} is normalized to 1 depth of the plot. If value @var{val}=@code{0} then the fog is absent. @sref{Surface in fog sample}
+Command imitate a fog in the plot. Fog start from relative distance @var{dz} from view point and its density growths exponentially in depth. So that the fog influence is determined by law ~@math{1-exp(-d*z)}. Here @emph{z} is normalized to 1 depth of the plot. If value @var{val}=@code{0} then the fog is absent. @sref{Surface in fog sample}
 @end deffn
 
 @c ==================================================================
- at node Default sizes (MGL), Zooming (MGL), Fog (MGL), Graphics setup (MGL)
- at subsection Default sizes (MGL)
- at cindex marksize
- at cindex arrowsize
- at cindex linewidth
- at cindex ticklen
- at cindex tickstl
+ at node Default sizes @MGL{}, Zooming @MGL{}, Fog @MGL{}, Graphics setup @MGL{}
+ at subsection Default sizes @MGL{}
 
 These commands control the default (initial) values for most graphics parameters including sizes of markers, arrows, linewidth and so on. As any other settings these ones will influence only on plots created after the settings change.
 
+ at cindex barwidth
+ at anchor{barwidth}
 @deffn {MGL command} barwidth @code{val}
 Sets relative width of rectangles in @code{bars, barh, boxplot}. Default value is @code{0.7}.
 @end deffn
 
+ at cindex marksize
+ at anchor{marksize}
 @deffn {MGL command} marksize @code{val}
 The size of marks. Default value is @code{1}.
 @end deffn
 
+ at cindex arrowsize
+ at anchor{arrowsize}
 @deffn {MGL command} arrowsize @code{val}
 The size of arrows for lines and curves. Default value is @code{1}.
 @end deffn
 
+ at cindex linewidth
+ at anchor{linewidth}
 @deffn {MGL command} linewidth @code{val}
 The variable define the base width for all lines. The value <1 is ignored. Increase of this variables is actual for large bitmap pictures. Default value is @code{1}.
 @end deffn
 
+ at cindex ticklen
+ at anchor{ticklen}
 @deffn {MGL command} ticklen @code{val} [@code{stt=1}]
 The relative length of axis ticks. Default value is @code{0.1}. Parameter @var{stt}>0 set relative length of subticks which is in @code{sqrt(1+stt)} times smaller.
 @end deffn
 
+ at cindex tickstl
+ at anchor{tickstl}
 @deffn {MGL command} tickstl 'stl' ['sub'='']
 The line style of axis ticks (@var{stl}) and subticks (@var{sub}). If @var{stl}='' then default style is used (@samp{k} or @samp{w} depending on transparency type). If @var{sub}='' then ticks style is used (i.e. @var{stl}).
 @end deffn
 
 @c ==================================================================
- at node Zooming (MGL), Cutting (MGL), Default sizes (MGL), Graphics setup (MGL)
- at subsection Zooming (MGL)
- at cindex plotfactor
- at cindex zoom
+ at node Zooming @MGL{}, Cutting @MGL{}, Default sizes @MGL{}, Graphics setup @MGL{}
+ at subsection Zooming @MGL{}
 
 These commands control the overall zooming of the picture or the sub-picture. Normally you can use these variables and commands for removing ``white'' spaces around a plot.
 
+ at cindex plotfactor
+ at anchor{plotfactor}
 @deffn {MGL command} plotfactor @code{val}
-The factor of plot size. It is not recommended to set it lower then 1.6. This is some analogue of command @code{zoom} but applied not to overall image but for each @code{inplot}. Use negative value to enable automatic @code{plotfactor} selection.
+The factor of plot size. It is not recommended to set it lower then 1.6. This is some analogue of command @ref{zoom} but applied not to overall image but for each @ref{inplot}. Use negative value to enable automatic @ref{plotfactor} selection.
 @end deffn
 
+ at cindex zoom
+ at anchor{zoom}
 @deffn {MGL command} zoom @code{x1 y1 x2 y2}
 The command changes the scale of graphics that correspond to zoom in/out of the picture. After command call the current plot will be cleared and further the picture will contain plotting from its part [x1,x2]*[y1,y2]. Here picture coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} changes from 0 to 1. Use @code{zoom 0 0 1 1} to return default view.
 @end deffn
 
 @c ==================================================================
- at node Cutting (MGL), Other settings (MGL), Zooming (MGL), Graphics setup (MGL)
- at subsection Cutting (MGL)
- at cindex cut
+ at node Cutting @MGL{}, Other settings @MGL{}, Zooming @MGL{}, Graphics setup @MGL{}
+ at subsection Cutting @MGL{}
 
-These commands set the condition when the points are excluded (cutted) from the drawing.
+These commands set the condition when the points are excluded (cutted) from the drawing. Note, that a point with @code{nan} value(s) of coordinate or amplitude will be automatically excluded from the drawing.
 
+ at cindex cut
+ at anchor{cut}
 @deffn {MGL command} cut @code{val}
-Determines how points outside bounding box are drawn. If it is @code{true} then points are excluded from plot (it is default) otherwise the points are projected to edges of bounding box.
+Determines how points outside bounding box are drawn. If it is @code{on} then points are excluded from plot (it is default) otherwise the points are projected to edges of bounding box.
 @end deffn
 
 @deffn {MGL command} cut @code{x1 y1 z1 x2 y2 z2}
@@ -201,81 +268,92 @@ Command set the cutting off condition by formula @var{cond}. This condition dete
 @end deffn
 
 @c ==================================================================
- at node Other settings (MGL), , Cutting (MGL), Graphics setup (MGL)
- at subsection Other settings (MGL)
- at cindex font
- at cindex rotatetext
- at cindex palette
- at cindex meshnum
- at cindex axialdir
+ at node Other settings @MGL{}, , Cutting @MGL{}, Graphics setup @MGL{}
+ at subsection Other settings @MGL{}
 
+ at cindex font
+ at anchor{font}
 @deffn {MGL command} font 'fnt' [@code{val=6}]
-Font style for text and labels (see text). Initial style is 'fnt'='rC' give Roman font with centering. Parameter @code{val} sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. For more detail, @pxref{Font style}.
+Font style for text and labels (see text). Initial style is 'fnt'='rC' give Roman font with centering. Parameter @code{val} sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. For more detail, @pxref{Font styles}.
 @end deffn
 
+ at cindex rotatetext
+ at anchor{rotatetext}
 @deffn {MGL command} rotatetext @code{val}
 Set to use or not text rotation along axis. Initial value is @code{on}.
 @end deffn
 
+ at cindex palette
+ at anchor{palette}
 @deffn {MGL command} palette 'colors'
 Set the palette as selected colors. Default value is @code{'Hbgrcmyhlnqeup'}. The palette is used mostly in 1D plots for curves which styles are not specified.
 @end deffn
 
+ at cindex meshnum
+ at anchor{meshnum}
 @deffn {MGL command} meshnum @code{num}
-Sets approximate number of lines in @code{mesh, fall, grid} and also the number of hachures in @code{vect, vectc, dew} and the number of cells in @code{cloud}. By default (=0) it draws all lines/hachures/cells.
+Sets approximate number of lines in @ref{mesh}, @ref{fall}, @ref{grid} and also the number of hachures in @ref{vect}, @ref{vectc}, @ref{dew} and the number of cells in @ref{cloud}. By default (=0) it draws all lines/hachures/cells.
 @end deffn
 
+ at cindex axialdir
+ at anchor{axialdir}
 @deffn {MGL command} axialdir 'dir'
-Set direction around which curve rotated in @code{axial, torus}. Default value is 'z'.
+Set direction around which curve rotated in @ref{axial}, @ref{torus}. Default value is 'z'.
 @end deffn
 
 @c ==================================================================
- at node Axis settings (MGL), Transformation matrix (MGL), Graphics setup (MGL), MGL interface
- at section Axis settings (MGL)
- at cindex axis
- at cindex caxis
- at cindex xrange
- at cindex yrange
- at cindex zrange
- at cindex crange
- at cindex xtick
- at cindex ytick
- at cindex ztick
- at cindex ctick
- at cindex origin
- at cindex adjust
+ at node Axis settings @MGL{}, Transformation matrix @MGL{}, Graphics setup @MGL{}, MGL interface
+ at section Axis settings @MGL{}
 
-These large set of commands control how the axis and ticks will be drawn. Note that there is 3-step transformation of data coordinates are performed. Firstly, coordinates are projected and cutting is applied (@pxref{Cutting (MGL)}), after it transformation formulas are applied, and finally the data was normalized in bounding box.
+These large set of commands control how the axis and ticks will be drawn. Note that there is 3-step transformation of data coordinates are performed. Firstly, coordinates are projected and cutting is applied (@pxref{Cutting @MGL{}}), after it transformation formulas are applied, and finally the data was normalized in bounding box.
 
+ at cindex axis
+ at anchor{axis}
 @deffn {MGL command} axis @code{x1 y1 x2 y2}
 @deffnx {MGL command} axis @code{x1 y1 z1 x2 y2 z2}
+ at cindex ranges
+ at anchor{ranges}
 @deffnx {MGL command} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]}
 Sets the ranges of coordinates changing. Also it sets the range for coloring (analogous to @code{caxis z1 z2}). Initial ranges are [-1, 1].
 @end deffn
 
 @deffn {MGL command} axis 'fx' 'fy' ['fz'='' 'fa'='']
-Sets the transformation formulas for curvilinear coordinates. Each string should contain mathematical expression for real coordinate depending on internal coordinates 'x', 'y', 'z' and 'a' or 'c' for colorbar. For example, the cylindrical coordinates are introduced as @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. For removing of formulas the corresponding parameter should be @code{''}. The using of transformation formulas will slightly slowing the program, i.e. @code{axis '' '' ''} is faster than @code{axis '1*x' '1*y' '1*z'}. Initially all formulas are absent (Cartesian coordinates are used). For more details about functions and formulas, @pxref{mglFormula class}.
+Sets the transformation formulas for curvilinear coordinates. Each string should contain mathematical expression for real coordinate depending on internal coordinates @samp{x}, @samp{y}, @samp{z} and @samp{a} or @samp{c} for colorbar. For example, the cylindrical coordinates are introduced as @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. For removing of formulas the corresponding parameter should be @code{''}. The using of transformation formulas will slightly slowing the program, i.e. @code{axis '' '' ''} is faster than @code{axis '1*x' '1*y' '1*z'}. Initially all formulas are absent (Cartesian coordinates are used). For more details about functions and formulas, @pxref{Textual formulas}.
 @end deffn
 
 @deffn {MGL command} axis @code{how}
-Sets one of the predefined transformation formulas for curvilinear coordinate. Paramater @var{how} define the coordinates: @code{0} -- Cartesian coordinates (no transformation); @code{1} -- Polar coordiantes @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{2} -- Spherical coordinates @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{3} -- Parabolic coordinates @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{7} -- Elliptic coordinates @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{8} -- Toroidal coordinates @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{9} -- Bispherical coordinates @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{10} -- Bipolar coordinates @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}.
+Sets one of the predefined transformation formulas for curvilinear coordinate. Paramater @var{how} define the coordinates: @samp{0} -- Cartesian coordinates (no transformation); @samp{1} -- Polar coordiantes @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @samp{2} -- Spherical coordinates @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @samp{3} -- Parabolic coordinates @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @samp{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @samp{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @samp{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @samp{7} -- Elliptic coordinates @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @samp{8} -- Toroidal coordinates @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @samp{9} -- Bispherical coordinates @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @samp{10} -- Bipolar coordinates @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}.
 @end deffn
 
+ at cindex caxis
+ at anchor{caxis}
 @deffn {MGL command} caxis @code{z1 z2}
 Sets the range for surface coloring. Initial range is [-1, 1].
 @end deffn
 
+ at cindex origin
+ at anchor{origin}
 @deffn {MGL command} origin @code{x0 y0 [z0=nan]}
 Center of axis cross section. If one of values is @code{nan} then MathGL library try to select optimal axis position.
 @end deffn
 
+ at cindex ternary
+ at anchor{ternary}
 @deffn {MGL command} ternary @code{val}
 The command sets to draws Ternary plot. This special plot is for 3 dependent coordinates (components) @var{a}, @var{b}, @var{c} so that @var{a}+ at var{b}+ at var{c}=1. MathGL uses only 2 independent coordinates @var{a}=x and @var{b}=y since it is enough to plot everything. At this third coordinate z act as another parameter to produce contour lines, surfaces and so on. @sref{Ternary plot sample}
 @end deffn
 
+ at cindex xrange
+ at anchor{xrange}
 @deffn {MGL command} xrange dat [@code{add=off fact=0}]
+ at cindex yrange
+ at anchor{yrange}
 @deffnx {MGL command} yrange dat [@code{add=off fact=0}]
+ at cindex zrange
+ at anchor{zrange}
 @deffnx {MGL command} zrange dat [@code{add=off fact=0}]
+ at cindex crange
+ at anchor{crange}
 @deffnx {MGL command} crange dat [@code{add=off fact=0}]
 Sets the range for x-,y-,z- coordinate or coloring as minimal and maximal values of data @var{dat}. Parameter @code{add=on} shows that the new range will be joined to existed one (nut will not replace it). Parameter @var{fact} add additional range increase on value (@var{Max}- at var{Min})*@var{fact}.
 @end deffn
@@ -284,14 +362,22 @@ Sets the range for x-,y-,z- coordinate or coloring as minimal and maximal values
 @deffnx {MGL command} yrange @code{x1 x2}
 @deffnx {MGL command} zrange @code{x1 x2}
 @deffnx {MGL command} crange @code{x1 x2}
-Sets the range for x-,y-,z- coordinate or coloring. See also axis.
+Sets the range for x-,y-,z- coordinate or coloring. See also @ref{axis}.
 @end deffn
 
+ at cindex xtick
+ at anchor{xtick}
 @deffn {MGL command} xtick @code{val [sub=0 org=nan]}
+ at cindex ytick
+ at anchor{ytick}
 @deffnx {MGL command} ytick @code{val [sub=0 org=nan]}
+ at cindex ztick
+ at anchor{ztick}
 @deffnx {MGL command} ztick @code{val [sub=0 org=nan]}
+ at cindex ctick
+ at anchor{ctick}
 @deffnx {MGL command} ctick @code{val}
-Sets step for x-, y-, z-axis ticks or colorbar ticks (if @var{val}>0) or it's number (if @var{val}<0) in corresponding direction. Zero value @var{val}=0 sets logarithmic ticks. Parameter @var{sub} sets the number of sub-ticks. Parameter @var{org} set the starting points for ticks. If not @code{org=nan} then the value from @code{origin} is used.
+Sets step for x-, y-, z-axis ticks or colorbar ticks (if @var{val}>0) or it's number (if @var{val}<0) in corresponding direction. Zero value @var{val}=0 sets logarithmic ticks. Parameter @var{sub} sets the number of sub-ticks. Parameter @var{org} set the starting points for ticks. If not @code{org=nan} then the value from @ref{origin} is used.
 @end deffn
 
 @deffn {MGL command} xtick 'templ'
@@ -307,39 +393,49 @@ Sets the template for x-, y-, z-axis ticks or colorbar ticks. It may contain TeX
 Sets manual positions @var{val1}, at var{val2},... and labels @var{lbl1}, at var{lbl2},... for ticks along x-, y-, z-axis. Labels may contain TeX symbols also.
 @end deffn
 
+ at cindex adjust
+ at anchor{adjust}
 @deffn {MGL command} adjust ['dir'='xyzc']
 Set the ticks step, number of sub-ticks and initial ticks position to be the most human readable for the axis along direction(s) @var{dir}.
 @end deffn
 
 
 @c ##################################################################
- at node Transformation matrix (MGL), Export to file (MGL), Axis settings (MGL), MGL interface
- at section Transformation matrix (MGL)
- at cindex aspect
- at cindex rotate
- at cindex subplot
- at cindex inplot
- at cindex identity
- at cindex perspective
+ at node Transformation matrix @MGL{}, Export to file @MGL{}, Axis settings @MGL{}, MGL interface
+ at section Transformation matrix @MGL{}
 
-These commands control how and where further plotting will be placed. There is a curtain order of calling of these commands for the better plot view. First one should be @code{subplot} or @code{inplot} for specifying the place. After it a @code{rotate} and @code{aspect}. And finally any other plotting commands may be called. Alternatevely you can use @code{columnplot} for position plots in the column one by another without gap between plot axis (bounding boxes).
+These commands control how and where further plotting will be placed. There is a curtain order of calling of these commands for the better plot view. First one should be @ref{subplot} or @ref{inplot} for specifying the place. After it a @ref{rotate} and @ref{aspect}. And finally any other plotting commands may be called. Alternatevely you can use @ref{columnplot} for position plots in the column one by another without gap between plot axis (bounding boxes).
 
+ at cindex subplot
+ at anchor{subplot}
 @deffn {MGL command} subplot @code{nx ny m [dx=0 dy=0]}
 Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. This command set off any aspects or rotations. So it should be used first for creating the subplot. From the aesthetical point of view it is not recommended to use this command with different matrices in the same frame. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}.
 @end deffn
 
+ at deffn {MGL command} subplot @code{nx ny m} 'style'
+The same as previous but space reserved for axis/colorbar is saved only if @var{style} contain: @samp{L} or @samp{<} -- at left side, @samp{R} or @samp{>} -- at right side, @samp{A} or @samp{^} -- at top side, @samp{U} or @samp{_} -- at bottom side.
+ at end deffn
+
+ at cindex inplot
+ at anchor{inplot}
 @deffn {MGL command} inplot @code{x1 x2 y1 y2 [rel=off]}
-Puts further plotting in some region of the whole frame surface. This command allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{on} then the relative position to current @code{subplot} is used. This command set off any aspects or rotations. So it should be used first for creating subplot.
+Puts further plotting in some region of the whole frame surface. This command allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{on} then the relative position to current @ref{subplot} is used. This command set off any aspects or rotations. So it should be used first for creating subplot.
 @end deffn
 
- at deffn {MGL command} columnplot @code{num ind}
-Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous @code{subplot} call (or @code{inplot} with @code{rel=off}).
+ at cindex columnplot
+ at anchor{columnplot}
+ at deffn {MGL command} columnplot @code{num ind [d=0]}
+Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous @ref{subplot} call (or @ref{inplot} with @code{rel=off}). Parameter @var{d} set extra gap between cells.
 @end deffn
 
+ at cindex stickplot
+ at anchor{stickplot}
 @deffn {MGL command} stickplot @code{num ind tet phi}
-Puts further plotting in @var{ind}-th cell of stick with @var{num} cells. At this, stick is rotated on angles @var{tet}, @var{phi}. The position is relative to previous @code{subplot} call (or @code{inplot} with @code{rel=off}).
+Puts further plotting in @var{ind}-th cell of stick with @var{num} cells. At this, stick is rotated on angles @var{tet}, @var{phi}. The position is relative to previous @ref{subplot} call (or @ref{inplot} with @code{rel=off}).
 @end deffn
 
+ at cindex rotate
+ at anchor{rotate}
 @deffn {MGL command} rotate @code{tetz tetx [tety=0]}
 Rotates a further plotting relative to each axis (x, z, y) consecutively on angles @var{tetx}, @var{tetz}, @var{tety}.
 @end deffn
@@ -348,98 +444,115 @@ Rotates a further plotting relative to each axis (x, z, y) consecutively on angl
 Rotates a further plotting around vector @{x,y,z@} on angle @var{tet}.
 @end deffn
 
+ at cindex aspect
+ at anchor{aspect}
 @deffn {MGL command} aspect @code{ax ay [az=1]}
-Defines aspect ratio for the plot. The viewable axes will be related one to another as the ratio @var{ax:ay:az}. For the best effect it should be used after @code{rotate} command.
+Defines aspect ratio for the plot. The viewable axes will be related one to another as the ratio @var{ax:ay:az}. For the best effect it should be used after @ref{rotate} command.
 @end deffn
 
+ at cindex perspective
+ at anchor{perspective}
 @deffn {MGL command} perspective @code{val}
 Add (switch on) the perspective to plot. The parameter @math{val ~ 1/z_@{eff@} \in [0,1)}. By default (@code{val=0}) the perspective is off.
 @end deffn
 
 @c ##################################################################
- at node Export to file (MGL), Primitives drawing (MGL), Transformation matrix (MGL), MGL interface
- at section Export to file (MGL)
- at cindex write
- at cindex setsize
+ at node Export to file @MGL{}, Primitives drawing @MGL{}, Transformation matrix @MGL{}, MGL interface
+ at section Export to file @MGL{}
 
+ at cindex write
+ at anchor{write}
 @deffn {MGL command} write 'fname' [@code{solid=off}]
 Exports current picture/frame to file 'fname' (file type is determined by extension). Solid (usually white) background will be used if @code{solid=on}. If 'fname'='' then the file @samp{frameNNNN.jpg} is used, where @samp{NNNN} is current frame id.
 @end deffn
 
+ at cindex setsize
+ at anchor{setsize}
 @deffn {MGL command} setsize @code{w h}
 Sets size of picture in pixels. This function call @strong{must be} placed before any plotting command because it completely remove picture content. In some program the call of this function is forbidden.
 @end deffn
 
 
 @c ##################################################################
- at node Primitives drawing (MGL), Text printing (MGL), Export to file (MGL), MGL interface
+ at node Primitives drawing @MGL{}, Text printing @MGL{}, Export to file @MGL{}, MGL interface
 @section Primitives drawing
- at cindex ball
- at cindex clf
- at cindex line
- at cindex curve
- at cindex facex
- at cindex facey
- at cindex facez
- at cindex cone
- at cindex drop
- at cindex sphere
 
 These commands draw some simple objects like line, point, sphere, drop, cone and so on.
 
+ at cindex clf
+ at anchor{clf}
 @deffn {MGL command} clf
 Clear the picture by removes all drawing from it. Does not change transformation matrix. 
 @end deffn
 
+ at cindex ball
+ at anchor{ball}
 @deffn {MGL command} ball @code{x y} ['col'='r']
 @deffnx {MGL command} ball @code{x y z} ['col'='r']
 Draws a point (ball) at position @{@var{x}, @var{y}, @var{z}@} with color defined by string @var{col}.
 @end deffn
 
+ at cindex line
+ at anchor{line}
 @deffn {MGL command} line @code{x1 y1 x2 y2} ['stl'='']
 @deffnx {MGL command} line @code{x1 y1 z1 x2 y2 z2} ['stl'='']
 Draws a geodesic line (straight line in Cartesian coordinates) from point @{@var{x1}, at var{y1}, at var{z1}@} to @{@var{x2}, at var{y2}, at var{z2}@} using line style @var{stl}.
 @end deffn
 
+ at cindex curve
+ at anchor{curve}
 @deffn {MGL command} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'='']
 @deffnx {MGL command} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'='']
 Draws Bezier-like curve from point @{@var{x1}, at var{y1}, at var{z1}@} to @{@var{x2}, at var{y2}, at var{z2}@} using line style @var{stl}. At this tangent is co-directed with @{@var{dx1}, at var{dy1}, at var{dz1}@}, @{@var{dx2}, at var{dy2}, at var{dz2}@} and proportional to its amplitude.
 @end deffn
 
+ at cindex facex
+ at anchor{facex}
 @deffn {MGL command} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}]
+ at cindex facey
+ at anchor{facey}
 @deffnx {MGL command} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}]
+ at cindex facez
+ at anchor{facez}
 @deffnx {MGL command} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}]
 Draws the solid rectangle (face) perpendicular to [x,y,z]-axis correspondingly at position @{@var{x0}, @var{y0}, @var{z0}@} with color @var{stl} and with widths @var{wx}, @var{wy}, @var{wz} along corresponding directions. At this colors can be the same for all vertexes or different if all 4 colors are specified for each vertex. Parameters @var{d1}!=0, @var{d2}!=0 set additional shift of the last vertex (i.e. to draw quadrangle).
 @end deffn
 
+ at cindex sphere
+ at anchor{sphere}
 @deffn {MGL command} sphere @code{x0 y0 r} ['col'='r']
 @deffnx {MGL command} sphere @code{x0 y0 z0 r} ['col'='r']
 Draw the sphere with radius @var{r} and center at point @{@var{x0}, @var{y0}, @var{z0}@} and color @var{stl}.
 @end deffn
 
+ at cindex drop
+ at anchor{drop}
 @deffn {MGL command} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}]
 @deffnx {MGL command} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}]
 Draw the drop with radius @var{r} at point @{@var{x0}, at var{y0}, at var{z0}@} elongated in direction @{@var{dx}, at var{dy}, at var{dz}@} and with color @var{col}. Parameter @var{sh} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{asp} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere). @sref{Drops sample}
 @end deffn
 
- at deffn {MGL command} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'st'='' @code{edge=off}]
+ at cindex cone
+ at anchor{cone}
+ at deffn {MGL command} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'stl'='' @code{edge=off}]
 Draw tube (or truncated cone if @var{edge}=@code{off}) between points @{@var{x1}, at var{y1}, at var{z1}@}, @{@var{x2}, at var{y2}, at var{z2}@} with radiuses at the edges @var{r1}, @var{r2}. If @var{r2}<0 then it is supposed that @var{r2}=@var{r1}. The cone color is defined by string @var{stl}.
 @end deffn
 
+ at cindex rect
+ at anchor{rect}
 @deffn {MGL command} rect @code{x1 y1 x2 y2} ['st'='']
 @deffnx {MGL command} rect @code{x1 y1 z1 x2 y2 z2} ['st'='']
 Draw rectangle from point @{@var{x1}, at var{y1}, at var{z1}@} to point @{@var{x2}, at var{y2}, at var{z2}@} using colors @var{stl}. If @var{stl} have 4 or more colors then it defines colors for each rectangle vertex (useful for making gradients, like @samp{wwrr}) else first color is used for whole rectangle.
 @end deffn
 
 @c ##################################################################
- at node Text printing (MGL), Axis and Colorbar (MGL), Primitives drawing (MGL), MGL interface
- at section Text printing (MGL)
- at cindex fgets
- at cindex text
- at cindex title
+ at node Text printing @MGL{}, Axis and Colorbar @MGL{}, Primitives drawing @MGL{}, MGL interface
+ at section Text printing @MGL{}
 
-These commands draw the text. There are commands for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. It is possible to use arbitrary font-faces and parse many TeX commands. The Unicode text is supported. So sometimes you need to specify locale. The @code{size} argument control the size of text: if positive it give the value, if negative it give the value relative to defined by @code{font} command. @xref{Font style}.
+These commands draw the text. There are commands for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. It is possible to use arbitrary font-faces and parse many TeX commands. The Unicode text is supported. So sometimes you need to specify locale. The @code{size} argument control the size of text: if positive it give the value, if negative it give the value relative to defined by @code{font} command. @xref{Font styles}.
 
+ at cindex text
+ at anchor{text}
 @deffn {MGL command} text @code{x y} 'text' ['fnt'='' @code{size=-1.4}]
 @deffnx {MGL command} text @code{x y z} 'text' ['fnt'='' @code{size=-1.4}]
 Draws unrotated text string @var{text} at position @{@var{x}, at var{y}, at var{z}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used.
@@ -450,275 +563,315 @@ Draws unrotated text string @var{text} at position @{@var{x}, at var{y}, at var{z}@} w
 The command plots the string @var{text} at position @{@var{x}, at var{y}, at var{z}@} along direction @{@var{dx}, at var{dy}, at var{dz}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used.
 @end deffn
 
+ at deffn {MGL command} text ydat 'text' ['fnt'='' @code{size=-1 zval=nan}]
+ at deffnx {MGL command} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}]
+ at deffnx {MGL command} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}]
+The command draws @var{text} along the curve between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} by font style @var{fnt} and with size @var{size}. The string @var{fnt} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{z}[i] = @var{zval} is used. @sref{Text sample}
+ at end deffn
+
+ at cindex title
+ at anchor{title}
 @deffn {MGL command} title 'text' ['fnt'='' @code{size=-2}]
-Print string @var{text} as title of the picture (at the top of the picture). Can be used at any place (even inside @code{subplot}).
+Print string @var{text} as title of the picture (at the top of the picture). Can be used at any place (even inside @ref{subplot}).
 @end deffn
 
+ at cindex fgets
+ at anchor{fgets}
 @deffn {MGL command} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}]
 @deffnx {MGL command} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}]
-Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x}, at var{y}, at var{z}@} with specified @var{size}. By default parameters from @code{font} command are used.
+Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x}, at var{y}, at var{z}@} with specified @var{size}. By default parameters from @ref{font} command are used.
 @end deffn
 
 
- at deffn {MGL command} text xdat 'text' ['fnt'='' @code{size=-1 zval=nan}]
- at deffnx {MGL command} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}]
- at deffnx {MGL command} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}]
-The command draws @var{text} along the curve between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} by font style @var{fnt} and with size @var{size}. The string @var{fnt} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{z}[i] = @var{zval} is used. @sref{Text sample}
- at end deffn
-
 @c ##################################################################
- at node Axis and Colorbar (MGL), Legend (MGL), Text printing (MGL), MGL interface
- at section Axis and Colorbar (MGL)
- at cindex axis
- at cindex box
- at cindex grid
- at cindex colorbar
- at cindex xlabel
- at cindex ylabel
- at cindex zlabel
- at cindex tlabel
+ at node Axis and Colorbar @MGL{}, Legend @MGL{}, Text printing @MGL{}, MGL interface
+ at section Axis and Colorbar @MGL{}
 
-These commands draw the ``things for measuring'', like axis with ticks, colorbar with ticks, grid along axis, bounding box and labels for axis. For more information @pxref{Axis settings (MGL)}.
+These commands draw the ``things for measuring'', like axis with ticks, colorbar with ticks, grid along axis, bounding box and labels for axis. For more information @pxref{Axis settings @MGL{}}.
 
+ at cindex axis
+ at c @anchor{}
 @deffn {MGL command} axis ['dir'='xyz' @code{adjust=off}]
-Draws axes with ticks (@pxref{Axis settings (MGL)}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by command @code{font}. Ticks will be automatically adjusted if @var{adjust}=@code{on} (by call of @code{adjust 'dir'}).
+Draws axes with ticks (@pxref{Axis settings @MGL{}}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by command @ref{font}. Ticks will be automatically adjusted if @var{adjust}=@code{on} (by call of @code{adjust 'dir'}).
 @end deffn
 
+ at cindex colorbar
+ at anchor{colorbar}
 @deffn {MGL command} colorbar ['sch'='' @code{pos=0}]
-Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=''}) at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample}
+Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=''}) at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. If string @var{sch} contains @samp{<>^_} then the parameter @var{pos} is defined as: @code{pos=0} for @samp{>} (right), @code{pos=1} for @samp{<} (left), @code{pos=2} for @samp{^} (top), @code{pos=3} for @samp{_} (bottom). If string have @samp{A} then absolute (relative to picture) coordinates is used. @sref{Dens sample}
 @end deffn
 
- at deffn {MGL command} colorbar 'sch' @code{pos x y w h}
-Draws colorbar with color scheme @var{sch} (current scheme if not specified) at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameter @var{pos} specifies the position of colorbar labels: @samp{0} - at left, @samp{1} - at right, @samp{2} - at bottom, @samp{3} - at top. Parameters @var{w}, @var{h} set the relative width and height of the colorbar.
+ at deffn {MGL command} colorbar vdat ['sch'='' @code{pos=0}]
+The same as previous but with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v}. @sref{ContD sample}
 @end deffn
 
- at deffn {MGL command} colorbar vdat ['sch'='' @code{pos=0}]
-Draws colorbar with sharp colors @var{sch} (current palette if @code{sch=NULL}) for values @var{vdat} at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample}
+ at deffn {MGL command} colorbar 'sch' @code{pos x y w h}
+The same as first one but at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameters @var{w}, @var{h} set the relative width and height of the colorbar.
 @end deffn
 
+ at cindex grid
+ at anchor{grid}
 @deffn {MGL command} grid ['dir'='xyz' 'pen'='B']
 Draws grid lines perpendicular to direction determined by string parameter @var{dir}. The step of grid lines is the same as tick step for an @code{axis}. The style of lines is determined by @var{pen} parameter.
 @end deffn
 
+ at cindex box
+ at anchor{box}
 @deffn {MGL command} box ['stl'='k' @code{ticks=on}]
-Draws bounding box outside the plotting volume with line style 'stl'.
+Draws bounding box outside the plotting volume with line style 'stl'. If @code{ticks=on} then ticks are drawn with current axis setting.
 @end deffn
 
- at deffn {MGL command} xlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} ylabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} zlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} tlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
-Prints the label @var{text} for x-,y-,z-,t-axis (here @samp{t} is ``ternary'' axis @math{t=1-x-y}). The position of label is determined by @var{pos} parameter. If @var{pos}=0 then label is printed at the center of axis. If @var{pos}>0 then label is printed at the maximum of axis (default). If @var{pos}<0 then label is printed at the minimum of axis. The font size is 1.4 times larger than the one for ticks @code{font}. Parameter @code{shift} specify additional shifting of the label. @xref{Text printing (MGL)}.
+ at cindex xlabel
+ at anchor{xlabel}
+ at deffn {MGL command} xlabel 'text' [@code{pos=0 size=-1.4 shift=0}]
+ at cindex ylabel
+ at anchor{ylabel}
+ at deffnx {MGL command} ylabel 'text' [@code{pos=0 size=-1.4 shift=0}]
+ at cindex zlabel
+ at anchor{zlabel}
+ at deffnx {MGL command} zlabel 'text' [@code{pos=0 size=-1.4 shift=0}]
+ at cindex tlabel
+ at anchor{tlabel}
+ at deffnx {MGL command} tlabel 'text' [@code{pos=0 size=-1.4 shift=0}]
+Prints the label @var{text} for x-,y-,z-,t-axis (here @samp{t} is ``ternary'' axis @math{t=1-x-y}). The position of label is determined by @var{pos} parameter. If @var{pos}=0 then label is printed at the center of axis. If @var{pos}>0 then label is printed at the maximum of axis (default). If @var{pos}<0 then label is printed at the minimum of axis. The font size is 1.4 times larger than the one for ticks @code{font}. Parameter @code{shift} specify additional shifting of the label. @xref{Text printing @MGL{}}.
 @end deffn
 
 @c ##################################################################
- at node Legend (MGL), 1D plotting (MGL), Axis and Colorbar (MGL), MGL interface
- at section Legend (MGL)
- at cindex legend
- at cindex addlegend
- at cindex clearlegend
+ at node Legend @MGL{}, 1D plotting @MGL{}, Axis and Colorbar @MGL{}, MGL interface
+ at section Legend @MGL{}
 
-These commands draw legend to the graph (useful for @ref{1D plotting (MGL)}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included LaTeX parsing). The array of string are accumulated first to the internal arrays (by command @code{addlegend}) and are plotted later. The position of the legend can be selected automatic or manually. Parameters @var{fnt} and @var{size} specify the font style and size. Parameter @var{llen} set the relative width of the line sample and the text indent (default value is 0.1). If line style string for entry is empty then the corresponding text is printed without indent. @sref{Legend sample}
+These commands draw legend to the graph (useful for @ref{1D plotting @MGL{}}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included LaTeX parsing). The array of string are accumulated first to the internal arrays (by command @ref{addlegend}) and are plotted later. The position of the legend can be selected automatic or manually. Parameters @var{fnt} and @var{size} specify the font style and size. Parameter @var{llen} set the relative width of the line sample and the text indent (default value is 0.1). If line style string for entry is empty then the corresponding text is printed without indent. If string contains @samp{A} then legend coordinates set position in the picture. @sref{Legend sample}
 
+ at cindex legend
+ at anchor{legend}
 @deffn {MGL command} legend [@code{pos=3} 'fnt'='rL' @code{size=-1 llen=0.1}]
 Draws legend of accumulated legend entries by font @var{fnt} with specified @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default).
 @end deffn
 
 @deffn {MGL command} legend @code{x y} ['fnt'='rL' @code{size=-1 llen=0.1}]
-Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Position of legend is determined by parameter @var{x}, @var{y} which supposed to be normalized to interval [0,1].
+Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Position of legend in the current subplot is determined by parameter @var{x}, @var{y} which supposed to be normalized to interval [0,1].
 @end deffn
 
+ at cindex addlegend
+ at anchor{addlegend}
 @deffn {MGL command} addlegend 'text' 'stl'
 Adds string @var{text} to internal legend accumulator. The style of described line and mark is specified in string @var{stl} (@pxref{Line styles}). Maximal number of entries is 100.
 @end deffn
 
+ at cindex clearlegend
+ at anchor{clearlegend}
 @deffn {MGL command} clearlegend
 Clears saved legend strings.
 @end deffn
 
+ at cindex legendbox
+ at anchor{legendbox}
 @deffn {MGL command} legendbox @code{val}
 Switches on/off the drawing of a box near legend. By default, the box is drawn.
 @end deffn
 
-
+ at cindex legendmarks
+ at anchor{legendmarks}
+ at deffn {MGL command} legendmarks @code{val}
+Set the number of marks in the legend. By default 1 mark is used.
+ at end deffn
 
 @c ##################################################################
- at node 1D plotting (MGL), 2D plotting (MGL), Legend (MGL), MGL interface
- at section 1D plotting (MGL)
- at cindex plot
- at cindex tens
- at cindex area
- at cindex bars
- at cindex barh
- at cindex stem
- at cindex step
- at cindex torus
- at cindex chart
- at cindex mark
- at cindex textmark
- at cindex error
- at cindex tube
- at cindex region
+ at node 1D plotting @MGL{}, 2D plotting @MGL{}, Legend @MGL{}, MGL interface
+ at section 1D plotting @MGL{}
 
-These commands perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. Most of plotting type has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is NULL then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}.
+These commands perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot (@ref{plot}), line plot with filling under it (@ref{area}), stairs plot (@ref{step}), bar plot (@ref{bars}, @ref{barh}) and vertical lines (@ref{stem}). Each type of plotting has similar interface. Most of plotting type has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is NULL then solid line with color from palette is used (@pxref{Line styles}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (@ref{torus}), chart (@ref{chart}) and error boxes (@ref{error}), marks with variable size (@ref{mark}), tubes (@ref{tube}) and so on. @sref{1D plot sample}
 
-The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=NULL}) solid line with color from palette is used (@pxref{Palette and colors}).
+The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). String @var{stl} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{stl=''}) solid line with color from palette is used (@pxref{Line styles}).
 
+ at cindex plot
+ at anchor{plot}
 @deffn {MGL command} plot ydat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} plot xdat ydat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} plot xdat ydat zdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{tens, radar, area, step, stem, tube, mark, error, belt}. @sref{Plot sample}
+Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. See also @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}. @sref{Plot sample}
 @end deffn
 
 
+ at cindex radar
+ at anchor{radar}
 @deffn {MGL command} radar adat ['stl'='' @code{r=-1}]
-Draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). The plots are drawn for each row if one of the data is the matrix. Parameter @var{r} set the additional shift of data (i.e. the data @var{adat}+ at var{r} is used instead of @var{adat}). If @code{r<0} then @code{r=max(0, -min(adat)}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @code{plot}. @sref{Radar sample}
+Draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). The plots are drawn for each row if one of the data is the matrix. Parameter @var{r} set the additional shift of data (i.e. the data @var{adat}+ at var{r} is used instead of @var{adat}). If @code{r<0} then @code{r=max(0, -min(adat)}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{stl=""}) solid line with color from palette is used (@pxref{Line styles}). If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @ref{plot}. @sref{Radar sample}
 @end deffn
 
+ at cindex tens
+ at anchor{tens}
 @deffn {MGL command} tens ydat cdat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} tens xdat ydat cdat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} tens xdat ydat zdat cdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} with color defined by @var{cdat}[i] (look like tension plot). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, mesh, fall}. @sref{Tens sample}
+Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} with color defined by @var{cdat}[i] (look like tension plot). See also @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample}
 @end deffn
 
+ at cindex area
+ at anchor{area}
 @deffn {MGL command} area ydat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} area xdat ydat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} area xdat ydat zdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} and fills it down to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, bars, stem, region}. @sref{Area sample}
+Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} and fills it down to axis (to axis plane in 3D). You can use gradient filling if number of specified colors is equal to 2*number of curves. If string contain symbol @samp{a} then lines are drawn one above another (like summation). See also @ref{plot}, @ref{bars}, @ref{stem}, @ref{region}. @sref{Area sample}
 @end deffn
 
+ at cindex region
+ at anchor{region}
 @deffn {MGL command} region fdat gdat ['stl'='' @code{inside=off}]
 @deffnx {MGL command} region xdat fdat gdat ['stl'='' @code{inside=off}]
-Fills area between curves @{@var{xdat}[i], @var{fdat}[i]@} and @{@var{xdat}[i], @var{gdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x.  Parameter  @code{inside=off} set to fill are with y1<y<y2 else the area with y2<y<y1 will be also filled.
- at c If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). 
-See also @code{area, bars, stem}. @sref{Region sample}
+Fills area between curves @{@var{xdat}[i], @var{fdat}[i]@} and @{@var{xdat}[i], @var{gdat}[i]@}. Parameter  @code{inside=off} set to fill are with y1<y<y2 else the area with y2<y<y1 will be also filled. You can use gradient filling if number of specified colors is equal to 2*number of curves. See also @ref{area}, @ref{bars}, @ref{stem}. @sref{Region sample}
 @end deffn
 
- at deffn {MGL command} bars ydat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars xdat ydat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars xdat ydat zdat ['stl'='' @code{above=off}]
-Draws vertical bars from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). Bars are drawn side-by-side (if @code{above = off}) or one above another (if @code{above = on}). Marks at data points are not drawn. See also @code{area, barh, stem, chart}. @sref{Bars sample}
+ at cindex stem
+ at anchor{stem}
+ at deffn {MGL command} stem ydat ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} stem xdat ydat ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} stem xdat ydat zdat ['stl'='']
+Draws vertical lines from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to axis (to axis plane in 3D). See also @ref{area}, @ref{bars}, @ref{plot}, @ref{mark}. @sref{Stem sample}
 @end deffn
 
- at deffn {MGL command} barh vdat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars ydat vdat ['stl'='' @code{zval=nan above=off}]
-Draws horizontal bars from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to y-axis. If array @var{ydat} is not specified then its an automatic array is used with values equidistantly distributed along y. Bars are drawn side-by-side (if @code{above = off}) or one above another (if @code{above = on}). Marks at data points are not drawn.
- at c If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). 
-See also @code{bars}. @sref{Barh sample}
+ at cindex bars
+ at anchor{bars}
+ at deffn {MGL command} bars ydat ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} bars xdat ydat ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} bars xdat ydat zdat ['stl'='']
+Draws vertical bars from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to axis (to axis plane in 3D). If style contain symbol @samp{a} then lines are drawn one above another. If string contain symbol @samp{f} then waterfall chart is drawn for determining the cumulative effect of sequentially introduced positive or negative values. You can different colors for positive and negative values if number of specified colors is equal to 2*number of curves. See also @ref{barh}, @ref{area}, @ref{stem}, @ref{chart}. @sref{Bars sample}
 @end deffn
 
- at deffn {MGL command} stem ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} stem xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} stem xdat ydat zdat ['stl'='']
-Draws vertical lines from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{area, bars, plot, mark}. @sref{Stem sample}
+ at cindex barh
+ at anchor{barh}
+ at deffn {MGL command} barh vdat ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} barh ydat vdat ['stl'='' @code{zval=nan}]
+Draws horizontal bars from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to y-axis. If array @var{ydat} is not specified then its an automatic array is used with values equidistantly distributed along y. Marks at data points are not drawn. If style contain symbol @samp{a} then lines are drawn one above another. If string contain symbol @samp{f} then waterfall chart is drawn for determining the cumulative effect of sequentially introduced positive or negative values. You can different colors for positive and negative values if number of specified colors is equal to 2*number of curves.
+See also @ref{bars}. @sref{Barh sample}
+ at end deffn
+
+ at cindex chart
+ at anchor{chart}
+ at deffn {MGL command} chart adat ['col'='']
+The command draws colored stripes (boxes) for data in array @var{adat}. The number of stripes is equal to the number of rows in @var{adat} (equal to @var{a.ny}). The color of each next stripe is cyclically changed from colors specified in string @var{col} or in palette. Spaces in colors denote transparent ``color'', i.e. if @var{col} contain space(s) then corresponding stripe(s) are not drawn. The stripe width is proportional to value of element in @var{a}. Chart is plotted only for data with non-negative elements. If string @var{col} have symbol @samp{#} then black border lines are drawn. The most nice form the chart have in 3d (after rotation of coordinates) or in cylindrical coordinates (becomes so called Pie chart). @sref{Chart sample}
 @end deffn
 
+ at cindex step
+ at anchor{step}
 @deffn {MGL command} step ydat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} step xdat ydat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} step xdat ydat zdat ['stl'='']
-Draws continuous stairs for points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, stem, tile, boxs}. @sref{Step sample}
+Draws continuous stairs for points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. See also @ref{plot}, @ref{stem}, @ref{tile}, @ref{boxs}. @sref{Step sample}
 @end deffn
 
+ at cindex torus
+ at anchor{torus}
 @deffn {MGL command} torus zdat ['stl'='']
 @deffnx {MGL command} torus rdat zdat ['stl'='']
-Draws surface which is result of curve @{@var{rdat}[i], @var{zdat}[i], @var{zdat}[i]@} rotation around @code{axialdir} axis. If array @var{rdat} is not specified then its an automatic array is used with values equidistantly distributed along x. See also @code{plot, axial}. @sref{Torus sample}
+Draws surface which is result of curve @{@var{rdat}[i], @var{zdat}[i], @var{zdat}[i]@} rotation around @ref{axialdir} axis. If array @var{rdat} is not specified then its an automatic array is used with values equidistantly distributed along x. See also @ref{plot}, @ref{axial}. @sref{Torus sample}
 @end deffn
 
- at deffn {MGL command} chart adat ['col'='']
-The command draws colored stripes (boxes) for data in array @var{adat}. The number of stripes is equal to the number of rows in @var{adat} (equal to @var{a.ny}). The color of each next stripe is cyclically changed from colors specified in string @var{col} or in palette. Spaces in colors denote transparent ``color'', i.e. if @var{col} contain space(s) then corresponding stripe(s) are not drawn. The stripe width is proportional to value of element in @var{a}. Chart is plotted only for data with non-negative elements. If string @var{col} have symbol @samp{#} then black border lines are drawn. The most nice form the chart have in 3d (after rotation of coordinates) or in cylindrical coordinates (becomes so called Pie chart). @sref{Chart sample}
+ at cindex tube
+ at anchor{tube}
+ at deffn {MGL command} tube ydat rdat ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} tube ydat @code{rval} ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} tube xdat ydat rdat ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} tube xdat ydat @code{rval} ['stl'='' @code{zval=nan}]
+ at deffnx {MGL command} tube xdat ydat zdat rdat ['stl'='']
+ at deffnx {MGL command} tube xdat ydat zdat @code{rval} ['stl'='']
+Draws tube with variable radius @var{rdat}[i] (or @var{rval}) at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. See also @ref{plot}. @sref{Tube sample}
 @end deffn
 
+ at cindex mark
+ at anchor{mark}
 @deffn {MGL command} mark ydat rdat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} mark xdat ydat rdat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} mark xdat ydat zdat rdat ['stl'='']
-Draws  marks with size @var{rdat}[i]*@code{marksize} at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, textmark, stem, error}. @sref{Mark sample}
+Draws  marks with size @var{rdat}[i]*@code{marksize} at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. See also @ref{plot}, @ref{textmark}, @ref{stem}, @ref{error}. @sref{Mark sample}
 @end deffn
 
+ at cindex textmark
+ at anchor{textmark}
 @deffn {MGL command} textmark ydat 'txt' ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} textmark ydat rdat 'txt' ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} textmark xdat ydat rdat 'txt' ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} textmark xdat ydat zdat rdat 'txt' ['stl'='']
-Draws string @var{txt} as marks with size @var{rdat}[i]*@code{marksize} at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). If array @var{rdat} is not specified then @var{rdat}[i] = 1. See also @code{plot, mark, stem}. @sref{TextMark sample}
+Draws string @var{txt} as marks with size @var{rdat}[i]*@code{marksize} at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{rdat} is not specified then @var{rdat}[i] = 1. See also @ref{plot}, @ref{mark}, @ref{stem}. @sref{Error sample}
 @end deffn
 
+ at cindex error
+ at anchor{error}
 @deffn {MGL command} error ydat yerr ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} error xdat ydat yerr ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} error xdat ydat xerr yerr ['stl'='' @code{zval=nan}]
-Draws error boxes @{@var{xerr}[i], @var{yerr}[i]@} at points @{@var{xdat}[i], @var{ydat}[i], @var{zval}@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. See also @code{plot}. @sref{TextMark sample}
- at end deffn
-
- at deffn {MGL command} tube ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube ydat @code{rval} ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat @code{rval} ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat zdat rdat ['stl'='']
- at deffnx {MGL command} tube xdat ydat zdat @code{rval} ['stl'='']
-Draws tube with variable radius @var{rdat}[i] (or @var{rval}) at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot}. @sref{TextMark sample}
+Draws error boxes @{@var{xerr}[i], @var{yerr}[i]@} at points @{@var{xdat}[i], @var{ydat}[i], @var{zval}@}. See also @ref{plot}. @sref{TextMark sample}
 @end deffn
 
+ at cindex boxplot
+ at anchor{boxplot}
 @deffn {MGL command} boxplot adat ['stl'='' @code{zval=nan}]
 @deffnx {MGL command} boxplot xdat adat ['stl'='' @code{zval=nan}]
-Draws boxplot (also known as a box-and-whisker diagram) at points @var{xdat} in plane z=@code{zval} (by default is at the bottom of the bounding box). This is five-number summaries of data <em>adat</em> (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction.
+Draws boxplot (also known as a box-and-whisker diagram) at points @var{xdat} in plane z=@code{zval} (by default is at the bottom of the bounding box). This is five-number summaries of data <em>adat</em> (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction. See also @ref{plot}, @ref{error}, @ref{bars}. @sref{BoxPlot sample}
 @end deffn
 
 @c ##################################################################
- at node 2D plotting (MGL), 3D plotting (MGL), 1D plotting (MGL), MGL interface
- at section 2D plotting (MGL)
- at cindex mesh
- at cindex fall
- at cindex belt
- at cindex surf
- at cindex boxs
- at cindex tile
- at cindex dens
- at cindex cont
- at cindex contf
- at cindex contd
- at cindex axial
- at cindex grid
+ at node 2D plotting @MGL{}, 3D plotting @MGL{}, 1D plotting @MGL{}, MGL interface
+ at section 2D plotting @MGL{}
+
+These commands perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are 6 generally different types of data representations: simple mesh lines plot (@ref{mesh}), surface plot (@ref{surf}), surface plot by boxes (@ref{boxs}), surface plot by tiles (@ref{tile}), waterfall-like plot (@ref{fall}), belt plot (@ref{belt}), density plot (@ref{dens}), contour lines plot (@ref{cont}), solid contours plot (@ref{contf}) and its rotational figure (@ref{axial}). Commands @ref{cont}, @ref{contf} and @ref{axial} have variants for automatic and manual selection of level values for contours. Also there are commands for plotting data grid lines according to the data format (@ref{grid}) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. @sref{2D plot sample}
 
-These commands perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are 6 generally different types of data representations: simple mesh lines plot (Mesh), surface plot (Surf), surface plot by boxes (Boxs), surface plot by tiles (Tile), waterfall-like plot (Fall), belt plot (Belt), density plot (Dens), contour lines plot (Cont), solid contours plot (ContF) and its rotational figure (Axial). Cont, ContF and Axial commands have variants for automatic and manual selection of level values for contours. Also there are commands for plotting data grid lines according to the data format (Grid) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
+String parameter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} should be equal @code{xdat.nx=zdat.nx && ydat.nx=zdat.ny} or @code{xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny}. Arrays @var{xdat} and @var{ydat} can be vectors (not matrices as @var{zdat}). If array @var{xdat}, @var{ydat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y. Graphics are plotted for each z-slice of the data.
 
-String parameter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} should be equal @var{xdat.nx=zdat.nx && ydat.nx=zdat.ny} or @var{xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny}. Arrays @var{xdat} and @var{ydat} can be vectors (not matrices as @var{zdat}). If array @var{xdat}, @var{ydat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y. Graphics are plotted for each z-slice of the data.
+ at cindex surf
+ at anchor{surf}
+ at deffn {MGL command} surf zdat ['sch'='']
+ at deffnx {MGL command} surf xdat ydat zdat ['sch'='']
+Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @ref{mesh}, @ref{dens}, @ref{belt}, @ref{tile}, @ref{boxs}, @ref{surfc}, @ref{surfa}. @sref{Surf sample}
+ at end deffn
 
+ at cindex mesh
+ at anchor{mesh}
 @deffn {MGL command} mesh zdat ['sch'='']
 @deffnx {MGL command} mesh xdat ydat zdat ['sch'='']
-Draws mesh lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, fall, meshnum, cont, tens}. @sref{Mesh sample}
+Draws mesh lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @ref{surf}, @ref{fall}, @ref{meshnum}, @ref{cont}, @ref{tens}. @sref{Mesh sample}
 @end deffn
 
+ at cindex fall
+ at anchor{fall}
 @deffn {MGL command} fall zdat ['sch'='']
 @deffnx {MGL command} fall xdat ydat zdat ['sch'='']
-Draws fall lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{belt, mesh, meshnum, tens}. @sref{Fall sample}
+Draws fall lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. See also @ref{belt}, @ref{mesh}, @ref{tens}, @ref{meshnum}. @sref{Fall sample}
 @end deffn
 
+ at cindex belt
+ at anchor{belt}
 @deffn {MGL command} belt zdat ['sch'='']
 @deffnx {MGL command} belt xdat ydat zdat ['sch'='']
-Draws belts for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{fall, surf, plot, meshnum}. @sref{Belt sample}
- at end deffn
-
- at deffn {MGL command} surf zdat ['sch'='']
- at deffnx {MGL command} surf xdat ydat zdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{mesh, dens, belt, tile, boxs, surfc, surfa}. @sref{Surf sample}
+Draws belts for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) lines are drawn along y-direction. See also @ref{fall}, @ref{surf}, @ref{plot}, @ref{meshnum}. @sref{Belt sample}
 @end deffn
 
+ at cindex boxs
+ at anchor{boxs}
 @deffn {MGL command} boxs zdat ['sch'='']
 @deffnx {MGL command} boxs xdat ydat zdat ['sch'='']
-Draws vertical boxes for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, tile, step}. @sref{Boxs sample}
+Draws vertical boxes for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @ref{surf}, @ref{dens}, @ref{tile}, @ref{step}. @sref{Boxs sample}
 @end deffn
 
+ at cindex tile
+ at anchor{tile}
 @deffn {MGL command} tile zdat ['sch'='']
 @deffnx {MGL command} tile xdat ydat zdat ['sch'='']
-Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, boxs, tile, step}. @sref{Tile sample}
+Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Such plot can be used as 3d generalization of @ref{step}. See also @ref{surf}, @ref{boxs}, @ref{step}, @ref{tiles}. @sref{Tile sample}
 @end deffn
 
+ at cindex dens
+ at anchor{dens}
 @deffn {MGL command} dens zdat ['sch'='' @code{zval=nan}]
 @deffnx {MGL command} dens xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws density plot for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{surf, cont, contf, boxs, tile, dens[xyz]}. @sref{Dens sample}
+Draws density plot for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @ref{surf}, @ref{cont}, @ref{contf}, @ref{boxs}, @ref{tile}, @code{dens[xyz]}. @sref{Dens sample}
 @end deffn
 
+ at cindex cont
+ at anchor{cont}
 @deffn {MGL command} cont vdat zdat ['sch'='' @code{zval=nan}]
 @deffnx {MGL command} cont vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws contour lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens, contf, axial, cont[xyz]}. @sref{Cont sample}
+Draws contour lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample}
 @end deffn
 
 @deffn {MGL command} cont zdat ['sch'='' @code{num=7 zval=nan}]
@@ -726,9 +879,11 @@ Draws contour lines for surface specified parametrically @{@var{xdat}[i,j], @var
 The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
 @end deffn
 
+ at cindex contf
+ at anchor{contf}
 @deffn {MGL command} contf vdat zdat ['sch'='' @code{zval=nan}]
 @deffnx {MGL command} contf vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). See also @code{dens, cont, contd, axial, contf[xyz]}. @sref{ContF sample}
+Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). See also @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample}
 @end deffn
 
 @deffn {MGL command} contf zdat ['sch'='' @code{num=7 zval=nan}]
@@ -736,9 +891,11 @@ Draws solid (or filled) contours for surface specified parametrically @{@var{xda
 The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
 @end deffn
 
+ at cindex contd
+ at anchor{contd}
 @deffn {MGL command} contd vdat zdat ['sch'='' @code{zval=nan}]
 @deffnx {MGL command} contd vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}) with manual colors. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). The color of k-th contour is @code{sch[k%strlen(sch)]}. See also @code{dens, cont, contf}. @sref{ContD sample}
+Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}) with manual colors. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). The color of k-th contour is @code{sch[k%strlen(sch)]}. See also @ref{dens}, @ref{cont}, @ref{contf}. @sref{ContD sample}
 @end deffn
 
 @deffn {MGL command} contd zdat ['sch'='' @code{num=7 zval=nan}]
@@ -746,9 +903,11 @@ Draws solid (or filled) contours for surface specified parametrically @{@var{xda
 The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
 @end deffn
 
+ at cindex axial
+ at anchor{axial}
 @deffn {MGL command} axial vdat zdat ['sch'='']
 @deffnx {MGL command} axial vdat xdat ydat zdat ['sch'='']
-Draws surface which is result of contour plot rotation surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string @var{sch} contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @code{axialdir} will be set to specified direction. If string @var{sch} have symbol @samp{#} then wire plot is produced. See also @code{cont, contf, torus, surf3}. @sref{Axial sample}
+Draws surface which is result of contour plot rotation surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string @var{sch} contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @code{axialdir} will be set to specified direction. If string @var{sch} have symbol @samp{#} then wire plot is produced. See also @ref{cont}, @ref{contf}, @ref{torus}, @ref{surf3}. @sref{Axial sample}
 @end deffn
 
 @deffn {MGL command} axial zdat ['sch'='' @code{num=3}]
@@ -756,55 +915,63 @@ Draws surface which is result of contour plot rotation surface specified paramet
 The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
 @end deffn
 
- at deffn {MGL command} grid zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} grid xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws grid lines for density plot of surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{dens, cont, contf}.
+ at cindex grad
+ at anchor{grad}
+ at deffn {MGL command} grad pdat ['sch'='' @code{num=5 zval=nan}]
+ at deffnx {MGL command} grad xdat ydat pdat ['sch'='' @code{num=5 zval=nan}]
+ at deffnx {MGL command} grad xdat ydat zdat pdat ['sch'='' @code{num=5}]
+Draws gradient lines for scalar field @var{pdat} specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j]@} or @{@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. Number of lines is proportional to @var{num}. If @var{num}<0 then lines start from borders only. See also @ref{dens}, @ref{cont}, @ref{dens3}, @ref{cont3}, @ref{flow}. @sref{Grad sample}
+ at end deffn
+
+
+ at cindex grid2
+ at anchor{grid2}
+ at deffn {MGL command} grid2 zdat ['sch'='' @code{zval=nan}]
+ at deffnx {MGL command} grid2 xdat ydat zdat ['sch'='' @code{zval=nan}]
+Draws grid lines for density plot of surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @ref{dens}, @ref{cont}, @ref{contf}.
 @end deffn
 
 
 @c ##################################################################
- at node 3D plotting (MGL), Dual plotting (MGL), 2D plotting (MGL), MGL interface
- at section 3D plotting (MGL)
- at cindex surf3
- at cindex dens3
- at cindex cont3
- at cindex conta
- at cindex densa
- at cindex grid3
- at cindex grida
- at cindex cloud
- at cindex contf3
- at cindex contfa
- at cindex beam
+ at node 3D plotting @MGL{}, Dual plotting @MGL{}, 2D plotting @MGL{}, MGL interface
+ at section 3D plotting @MGL{}
 
-These commands perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 4 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 commands have variants for automatic and manual selection of level values for surfaces/contours. Also there are commands for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
+These commands perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 4 generally different types of data representations: isosurface or surface of constant value (@ref{surf3}), density plot at slices (Dens3), contour lines plot at slices (@ref{cont3}), solid contours plot at slices (@ref{contf3}) and cloud-like plot (@ref{cloud}). Commands @ref{surf3}, @ref{cont3} and @ref{contf3} have variants for automatic and manual selection of level values for surfaces/contours. Also there are commands for plotting data grid lines according to the data format (@ref{grid3}) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. @sref{3D plot sample}
 
 String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z.
 
 
+ at cindex surf3
+ at anchor{surf3}
 @deffn {MGL command} surf3 adat @code{val} ['sch'='']
 @deffnx {MGL command} surf3 xdat ydat zdat adat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. If string contain @samp{#} then wire plot is produced. See also @code{cloud, dens3, surf3c, surf3a, axial}. @sref{Surf3 sample}
+Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. If string contain @samp{#} then wire plot is produced. See also @ref{cloud}, @ref{dens3}, @ref{surf3c}, @ref{surf3a}, @ref{axial}. @sref{Surf3 sample}
 @end deffn
 
 @deffn {MGL command} surf3 adat ['sch'='' @code{num=5}]
 @deffnx {MGL command} surf3 xdat ydat zdat adat ['sch'='' @code{num=5}]
-Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
+Draws @var{num}-th uniformly distributed in color range (see @ref{caxis}) isosurfaces for 3d data specified parametrically.
 @end deffn
 
+ at cindex dens3
+ at anchor{dens3}
 @deffn {MGL command} dens3 adat 'dir' [@code{sval=-1} 'sch'='']
 @deffnx {MGL command} dens3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws density plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Density is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample}
+Draws density plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Density is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @ref{cont3}, @ref{contf3}, @ref{dens}, @ref{grid3}. @sref{Dens3 sample}
 @end deffn
 
+ at cindex densa
+ at anchor{densa}
 @deffn {MGL command} densa adat ['sch'='']
 @deffnx {MGL command} densa xdat ydat zdat adat ['sch'='']
 Draws density plots at all central slices of the 3d data specified parametrically.
 @end deffn
 
+ at cindex cont3
+ at anchor{cont3}
 @deffn {MGL command} cont3 vdat adat 'dir' [@code{sval=-1} 'sch'='']
 @deffnx {MGL command} cont3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens3, contf3, cont, grid3}. @sref{Cont3 sample}
+Draws contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @ref{dens3}, @ref{contf3}, @ref{cont}, @ref{grid3}. @sref{Cont3 sample}
 @end deffn
 
 @deffn {MGL command} cont3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
@@ -812,69 +979,80 @@ Draws contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{
 The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}).
 @end deffn
 
+ at cindex conta
+ at anchor{conta}
 @deffn {MGL command} conta adat ['sch'='' @code{num=7}]
 @deffnx {MGL command} conta xdat ydat zdat adat ['sch'='' @code{num=7}]
 Draws contour plots at all central slices of the 3d data specified parametrically.
 @end deffn
 
+ at cindex contf3
+ at anchor{contf3}
 @deffn {MGL command} contf3 vdat adat 'dir' [@code{sval=-1} 'sch'='']
 @deffnx {MGL command} contf3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws solid contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{dens3, cont3, contf, grid3}. @sref{ContF3 sample}
+Draws solid contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @ref{dens3}, @ref{cont3}, @ref{contf}, @ref{grid3}. @sref{ContF3 sample}
 @end deffn
 
 @deffn {MGL command} contf3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
 @deffnx {MGL command} contf3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}).
+The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @ref{caxis}).
 @end deffn
 
+ at cindex contfa
+ at anchor{contfa}
 @deffn {MGL command} contfa adat ['sch'='' @code{num=7}]
 @deffnx {MGL command} contfa xdat ydat zdat adat ['sch'='' @code{num=7}]
 Draws solid contour plots at all central slices of the 3d data specified parametrically.
 @end deffn
 
+ at cindex grid3
+ at anchor{grid3}
 @deffn {MGL command} grid3 adat 'dir' [@code{sval=-1} 'sch'='']
 @deffnx {MGL command} grid3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws grid for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Grid is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample}
+Draws grid for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Grid is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. See also @ref{cont3}, @ref{contf3}, @ref{dens3}, @ref{grid2}. @sref{Dens3 sample}
 @end deffn
 
+ at cindex grida
+ at anchor{grida}
 @deffn {MGL command} grida adat ['sch'='']
 @deffnx {MGL command} grida xdat ydat zdat adat ['sch'='']
 Draws grids at all central slices of the 3d data specified parametrically.
 @end deffn
 
+ at cindex cloud
+ at anchor{cloud}
 @deffn {MGL command} cloud adat ['sch'='']
 @deffnx {MGL command} cloud xdat ydat zdat adat ['sch'='']
-Draws cloud for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). This plot is a set of cubes with color and transparency proportional to value of @var{adat}. The resulting plot is like cloud -- low value is transparent but higher ones are not. The number of plotting cells depend on @code{meshnum}. Command @var{alpha} changes the overall transparency of plot. See also @code{surf3}. @sref{Cloud sample}
+Draws cloud for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). This plot is a set of cubes with color and transparency proportional to value of @var{adat}. The resulting plot is like cloud -- low value is transparent but higher ones are not. The number of plotting cells depend on @ref{meshnum}. Paramater @var{alpha} changes the overall transparency of plot. See also @ref{surf3}. @sref{Cloud sample}
 @end deffn
 
+ at cindex beam
+ at anchor{beam}
 @deffn {MGL command} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}]
-Draws  @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d array @var{adat}. This is special kind of plot for @var{adat} specified in accompanied coordinates along curve @var{tr} with orts @var{g1}, @var{g2} and with transverse scale @var{rval}. Variable @var{flag} is bitwise: @samp{0x1} - draw in accompanied (not laboratory) coordinates; @samp{0x2} - draw projection to @math{\rho-z} plane; @samp{0x4} - draw normalized in each slice field. The x-size of data arrays @var{tr}, @var{g1}, @var{g2} must be nx>2. The y-size of data arrays @var{tr}, @var{g1}, @var{g2} and z-size of the data array @var{a} must be equal. @xref{Surf3}.
+Draws  @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d array @var{adat}. This is special kind of plot for @var{adat} specified in accompanied coordinates along curve @var{tr} with orts @var{g1}, @var{g2} and with transverse scale @var{rval}. Variable @var{flag} is bitwise: @samp{0x1} - draw in accompanied (not laboratory) coordinates; @samp{0x2} - draw projection to @math{\rho-z} plane; @samp{0x4} - draw normalized in each slice field. The x-size of data arrays @var{tr}, @var{g1}, @var{g2} must be nx>2. The y-size of data arrays @var{tr}, @var{g1}, @var{g2} and z-size of the data array @var{a} must be equal. See also @ref{surf3}.
 @end deffn
 
 
 @c ##################################################################
- at node Dual plotting (MGL), Vector fields (MGL), 3D plotting (MGL), MGL interface
- at section Dual plotting (MGL)
- at cindex surfc
- at cindex surf3c
- at cindex surfa
- at cindex surf3a
- at cindex map
- at cindex tile
- at cindex stfa
+ at node Dual plotting @MGL{}, Vector fields @MGL{}, 3D plotting @MGL{}, MGL interface
+ at section Dual plotting @MGL{}
 
-These plotting commands draw @emph{two matrix} simultaneously. There are 5 generally different types of data representations: surface or isosurface colored by other data (SurfC, Surf3C), surface or isosurface transpared by other data (SurfA, Surf3A), tiles with variable size (TileS), mapping diagram (Map), STFA diagram (STFA). Surf3A and Surf3C have variants for automatic and manual selection of level values for isosurfaces. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
+These plotting commands draw @emph{two matrix} simultaneously. There are 5 generally different types of data representations: surface or isosurface colored by other data (@ref{surfc}, @ref{surf3c}), surface or isosurface transpared by other data (@ref{surfa}, @ref{surf3a}), tiles with variable size (@ref{tiles}), mapping diagram (@ref{map}), STFA diagram (@ref{stfa}). Commands @ref{surf3a} and @ref{surf3c} have variants for automatic and manual selection of level values for isosurfaces. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array.
 
 String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z.
 
+ at cindex surfc
+ at anchor{surfc}
 @deffn {MGL command} surfc zdat cdat ['sch'='']
 @deffnx {MGL command} surfc xdat ydat zdat cdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and color it by matrix @var{cdat}[i,j]. See also @code{surf, surfa, surf3c}. @sref{SurfC sample}
+Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and color it by matrix @var{cdat}[i,j]. See also @ref{surf}, @ref{surfa}, @ref{surf3c}. @sref{SurfC sample}
 @end deffn
 
+ at cindex surf3c
+ at anchor{surf3c}
 @deffn {MGL command} surf3c adat cdat @code{val} ['sch'='']
 @deffnx {MGL command} surf3c xdat ydat zdat adat cdat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the color of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3a, surfc}. @sref{Surf3C sample}
+Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @ref{surf3} command but the color of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @ref{surf3}, @ref{surfc}, @ref{surf3a}. @sref{Surf3C sample}
 @end deffn
 
 @deffn {MGL command} surf3c adat cdat ['sch'='' @code{num=5}]
@@ -882,14 +1060,18 @@ Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@v
 Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
 @end deffn
 
+ at cindex surfa
+ at anchor{surfa}
 @deffn {MGL command} surfa zdat cdat ['sch'='']
 @deffnx {MGL command} surfa xdat ydat zdat cdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and transparent it by matrix @var{cdat}[i,j]. See also @code{surf, surfc, surf3a, tile}. @sref{SurfA sample}
+Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and transparent it by matrix @var{cdat}[i,j]. See also @ref{surf}, @ref{surfc}, @ref{surf3a}, @ref{tiles}. @sref{SurfA sample}
 @end deffn
 
+ at cindex surf3a
+ at anchor{surf3a}
 @deffn {MGL command} surf3a adat cdat @code{val} ['sch'='']
 @deffnx {MGL command} surf3a xdat ydat zdat adat cdat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the transparency of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3c, surfa}. @sref{Surf3A sample}
+Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @ref{surf3} command but the transparency of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @ref{surf3}, @ref{surfa}, @ref{surf3c}. @sref{Surf3A sample}
 @end deffn
 
 @deffn {MGL command} surf3a adat cdat ['sch'='' @code{num=5}]
@@ -897,48 +1079,52 @@ Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@v
 Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
 @end deffn
 
- at deffn {MGL command} tile zdat rdat ['sch'='']
- at deffnx {MGL command} tile xdat ydat zdat rdat ['sch'='']
-Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. It is mostly the same as @code{tile} but the size of tiles is determined by @var{rdat} array. See also @code{surfa, tile}. @sref{TileS sample}
+ at cindex tiles
+ at anchor{tiles}
+ at deffn {MGL command} tiles zdat rdat ['sch'='']
+ at deffnx {MGL command} tiles xdat ydat zdat rdat ['sch'='']
+Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. It is mostly the same as @ref{tile} but the size of tiles is determined by @var{rdat} array. See also @ref{surfa}, @ref{tile}. @sref{TileS sample}
 @end deffn
 
+ at cindex map
+ at anchor{map}
 @deffn {MGL command} map udat vdat ['sch'='' @code{pnts=on}]
 @deffnx {MGL command} map xdat ydat udat vdat ['sch'='' @code{pnts=on}]
 Draws mapping plot for matrixes @{@var{udat}, @var{vdat} @} which parametrically depend on coordinates @var{xdat}, @var{ydat}. The previous position of the cell (point) is marked by color. Height is proportional to Jacobian(udat,vdat). This plot is like Arnold diagram ???. If @code{pnts=off} then face is drawn otherwise the color ball at matrix knots are drawn. The size of @var{udat} and @var{vdat} must be the same. @sref{Map sample}
 @end deffn
 
+ at cindex stfa
+ at anchor{stfa}
 @deffn {MGL command} stfa re im @code{dn} ['sch'='' @code{pnts=on}]
 @deffnx {MGL command} stfa xdat ydat re im @code{dn} ['sch'='' @code{pnts=on}]
-Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}.
+Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. @sref{STFA sample}
 @end deffn
 
 
 
 
 @c ##################################################################
- at node Vector fields (MGL), Other plotting (MGL), Dual plotting (MGL), MGL interface
- at section Vector fields (MGL)
- at cindex vectc
- at cindex vect
- at cindex flow
- at cindex pipe
- at cindex traj
- at cindex dew
+ at node Vector fields @MGL{}, Other plotting @MGL{}, Dual plotting @MGL{}, MGL interface
+ at section Vector fields @MGL{}
 
-These commands perform plotting of 2D and 3D vector fields. There are 6 generally different types of vector fields representations: simple vector field (Vect), vector field with coloring (VectC), vector field by dew-drops (Dew), flow threads (Flow), flow pipes (Pipe), vectors along a curve (Traj). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
+These commands perform plotting of 2D and 3D vector fields. There are 6 generally different types of vector fields representations: simple vector field (@ref{vect}), vector field by dew-drops (@ref{dew}), flow threads (@ref{flow}), flow pipes (@ref{pipe}), vectors along a curve (@ref{traj}). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
 
-The color is specified by the string argument @var{sch}. Previous color scheme is used by default. Parameter @var{flag} setup the hachures (arrows). It is compination of vlaues: @code{MGL_VEC_COL=1} for drawing bi-color arrow, @code{MGL_VEC_LEN=2} for drawing fixed length arrows, @code{MGL_VEC_DOT=16} for drawing hachures with dots instead of arrows, @code{MGL_VEC_END=4} for drawing arrows to the cell point, @code{MGL_VEC_MID=8} for drawing arrows with center at cell point. 
+The color is specified by the string argument @var{sch}. Previous color scheme is used by default. Parameter @var{flag} setup the hachures (arrows). It is combination of values: @code{1} for drawing bi-color arrow, @code{2} for drawing fixed length arrows, @code{4} for drawing arrows to the cell point, @code{8} for drawing arrows with center at cell point, @code{16} for drawing hachures with dots instead of arrows. 
 
 The size of @var{udat}, @var{vdat} and @var{wdat} must be equal. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} and @var{udat} must be equal too. Arrays @var{xdat}, @var{ydat} and @var{zdat} can be vectors (not matrices as @var{udat}). The graphics is plotted for each z slice of @var{udat}, @var{vdat} for 2D case.
 
+ at cindex traj
+ at anchor{traj}
 @deffn {MGL command} traj xdat ydat udat vdat ['sch'='' @code{zval=nan len=0}]
 @deffnx {MGL command} traj xdat ydat zdat udat vdat wdat ['sch'='' @code{len=0}]
 Draws vectors @{@var{udat}, @var{vdat}, @var{wdat}@} along a curve @var{xdat}, @var{ydat}, @var{zdat}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. See also @code{vect}. @sref{Traj sample}
 @end deffn
 
+ at cindex vect
+ at anchor{vect}
 @deffn {MGL command} vect udat vdat ['sch'='' @code{zval=nan flag=0}]
 @deffnx {MGL command} vect xdat ydat udat vdat ['sch'='' @code{zval=nan flag=0}]
-Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample}
+Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zval}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of arrows depend on @ref{meshnum}. See also @ref{flow}, @ref{dew}, @ref{vectc}. @sref{Vect sample}
 @end deffn
 
 @deffn {MGL command} vect udat vdat wdat ['sch'='' @code{flag=0}]
@@ -946,6 +1132,8 @@ Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending
 This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample}
 @end deffn
 
+ at cindex vectc
+ at anchor{vectc}
 @deffn {MGL command} vectc udat vdat ['sch'='' @code{zval=nan}]
 @deffnx {MGL command} vectc xdat ydat udat vdat ['sch'='' @code{zval=nan}]
 Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vect, flow, pipe, dew}. @sref{VectC sample}
@@ -956,6 +1144,8 @@ Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending
 This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectC 3D sample}
 @end deffn
 
+ at cindex vectl
+ at anchor{vectl}
 @deffn {MGL command} vectl udat vdat ['sch'='' @code{zval=nan}]
 @deffnx {MGL command} vectl xdat ydat udat vdat ['sch'='' @code{zval=nan}]
 Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample}
@@ -963,14 +1153,18 @@ Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending
 
 @deffn {MGL command} vectl udat vdat wdat ['sch'='']
 @deffnx {MGL command} vectl xdat ydat zdat udat vdat wdat ['sch'='']
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample}
+This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectL 3D sample}
 @end deffn
 
+ at cindex dew
+ at anchor{dew}
 @deffn {MGL command} dew udat vdat ['sch'='' @code{zval=nan}]
 @deffnx {MGL command} dew xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws dew-drops for plane vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of drops is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of drops depend on @var{meshnum}. Note that this is very expensive plot in memory usage and creation time! See also @code{vectc}. @sref{Dew sample}
+Draws dew-drops for plane vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zval}. The color of drops is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of drops depend on @ref{meshnum}. Note that this is very expensive plot in memory usage and creation time! See also @ref{vect}. @sref{Dew sample}
 @end deffn
 
+ at cindex flow
+ at anchor{flow}
 @deffn {MGL command} flow udat vdat ['sch'='' @code{num=5 zval=nan}]
 @deffnx {MGL command} flow xdat ydat udat vdat ['sch'='' @code{num=5 zval=nan}]
 Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of threads is proportional to @var{num}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample}
@@ -992,96 +1186,126 @@ Draws flow thread from point @{@var{x0}, @var{y0}, @var{z0}@}. Arrays @var{udat}
 @end deffn
 
 
+ at cindex pipe
+ at anchor{pipe}
 @deffn {MGL command} pipe udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}]
 @deffnx {MGL command} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}]
-Draws plane flow pipes for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of pipes is proportional to @var{num}. The color of pipes is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. See also @code{vect, vectc, pipe}. @sref{Flow sample}
+Draws plane flow pipes for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of pipes is proportional to @var{num}. The color of pipes is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. See also @code{vect, vectc, pipe}. @sref{Pipe sample}
 @end deffn
 
 @deffn {MGL command} pipe udat vdat wdat ['sch'='' @code{r0=0.05 num=3}]
 @deffnx {MGL command} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05 num=3}]
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample}
+This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Pipe 3D sample}
 @end deffn
 
 
 @c ##################################################################
- at node Other plotting (MGL), Nonlinear fitting (MGL), Vector fields (MGL), MGL interface
- at section Other plotting (MGL)
- at cindex cont[xyz]
- at cindex dens[xyz]
- at cindex contf[xyz]
- at cindex dots
- at cindex crust
- at cindex triplot
- at cindex fplot
- at cindex fsurf
+ at node Other plotting @MGL{}, Nonlinear fitting @MGL{}, Vector fields @MGL{}, MGL interface
+ at section Other plotting @MGL{}
 
+These commands perform miscelaneous plotting. There is unstructured data points plots (Dots), surface reconstruction (Crust), surfaces on the triangular mesh (TriPlot) or quadrangular mesh (QuadPlot), textual formula plotting (Plots by formula), data plots at edges (Dens[XYZ], Cont[XYZ], ContF[XYZ]), simple plot (SimplePlot). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
 
-These commands perform miscelaneous plotting. There is unstructured data points plots (Dots), surface reconstruction (Crust), surfaces on the triangular mesh (TriPlot), textual formula plotting (Plots by formula), data plots at edges (Dens[XYZ], Cont[XYZ], ContF[XYZ]), simple plot (SimplePlot). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
-
+ at cindex densx
+ at cindex densy
+ at cindex densz
+ at anchor{densz} @anchor{densy} @anchor{densx}
 @deffn {MGL command} densx dat ['sch'='' @code{val=nan}]
 @deffnx {MGL command} densy dat ['sch'='' @code{val=nan}]
 @deffnx {MGL command} densz dat ['sch'='' @code{val=nan}]
-These plotting commands draw density plot in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{cont[xyz], contf[xyz], dens}. @sref{Dens projection sample}
+These plotting commands draw density plot in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{cont[xyz], contf[xyz]}, @ref{dens}. @sref{Dens projection sample}
 @end deffn
 
+ at cindex contx
+ at cindex conty
+ at cindex contz
+ at anchor{contz} @anchor{conty} @anchor{contx}
 @deffn {MGL command} contx dat ['sch'='' @code{val=nan num=7}]
 @deffnx {MGL command} conty dat ['sch'='' @code{val=nan num=7}]
 @deffnx {MGL command} contz dat ['sch'='' @code{val=nan num=7}]
-These plotting commands draw contour lines in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], contf[xyz], cont}. @sref{Cont projection sample}
+These plotting commands draw contour lines in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], contf[xyz]}, @ref{cont}. @sref{Cont projection sample}
 @end deffn
 
+ at cindex contfx
+ at cindex contfy
+ at cindex contfz
+ at anchor{contfz} @anchor{contfy} @anchor{contfx}
 @deffn {MGL command} contfx dat ['sch'='' @code{val=nan num=7}]
 @deffnx {MGL command} contfy dat ['sch'='' @code{val=nan num=7}]
 @deffnx {MGL command} contfz dat ['sch'='' @code{val=nan num=7}]
-These plotting commands draw solid contours in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], cont[xyz], contf}.
+These plotting commands draw solid contours in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], cont[xyz]}, @ref{contf}.
 @end deffn
 
+ at cindex dots
+ at anchor{dots}
 @deffn {MGL command} dots xdat ydat zdat ['sch'='']
 @deffnx {MGL command} dots xdat ydat zdat adat ['sch'='']
-Draws the arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Variable @var{adat}[i] set transparency for dots. See also @code{crust, mark, plot}. @sref{Dots sample}
+Draws the arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Variable @var{adat}[i] set transparency for dots. See also @ref{crust}, @ref{mark}, @ref{plot}. @sref{Dots sample}
 @end deffn
 
+ at cindex crust
+ at anchor{crust}
 @deffn {MGL command} crust xdat ydat zdat ['sch'='']
-Reconstructs and draws the surface for arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. See also @code{dots, triplot}. @sref{Crust sample}
+Reconstructs and draws the surface for arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. See also @ref{dots}, @ref{triplot}. @sref{Crust sample}
 @end deffn
 
+ at cindex triplot
+ at anchor{triplot}
 @deffn {MGL command} triplot idat xdat ydat ['sch'='' @code{zval=nan}]
 @deffnx {MGL command} triplot idat xdat ydat zdat ['sch'='']
 @deffnx {MGL command} triplot idat xdat ydat zdat cdat ['sch'='']
-Draws the surface of triangles. Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 3 or greater. See also @code{dots, crust}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx).
+Draws the surface of triangles. Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 3 or greater. See also @code{dots, crust, quadplot}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx). See also @ref{dots}, @ref{crust}, @ref{quadplot}, @ref{tricont}.
+ at end deffn
+
+ at cindex tricont
+ at anchor{tricont}
+ at deffn {MGL command} tricont vdat idat xdat ydat zdat cdat ['sch'='' @code{zval=nan}]
+ at deffnx {MGL command} tricont vdat idat xdat ydat zdat ['sch'='' @code{zval=nan}]
+ at deffnx {MGL command} tricont idat xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
+Draws contour lines for surface of triangles at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (or @var{num} contours equidistantly distributed in range [@var{Cmin}, @var{Cmax}].). See also @ref{triplot}, @ref{cont}.
 @end deffn
 
+ at cindex quadplot
+ at anchor{quadplot}
+ at deffn {MGL command} quadplot idat xdat ydat ['sch'='' @code{zval=nan}]
+ at deffnx {MGL command} quadplot idat xdat ydat zdat ['sch'='']
+ at deffnx {MGL command} quadplot idat xdat ydat zdat cdat ['sch'='']
+Draws the surface of quadrangles. Quadrangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 4 or greater. See also @code{triplot, dots, crust}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx). See also @ref{triplot}.
+ at end deffn
+
+ at cindex fplot
+ at anchor{fplot}
 @deffn {MGL command} fplot 'y(x)' ['pen'='' @code{zval=nan num=100}]
-Draws command function @samp{y(x)} at plane z=@var{zval} where @samp{x} variable is changed in @code{xrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}.
+Draws command function @samp{y(x)} at plane z=@var{zval} where @samp{x} variable is changed in @code{xrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @ref{plot}.
 @end deffn
 
 @deffn {MGL command} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'='' @code{num=100}]
-Draws command parametrical curve @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@} where @samp{t} variable is changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}.
+Draws command parametrical curve @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@} where @samp{t} variable is changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @ref{plot}.
 @end deffn
 
+ at cindex fsurf
+ at anchor{fsurf}
 @deffn {MGL command} fsurf 'z(x,y)' ['sch'='' @code{num=100}]
-Draws command surface for function @samp{z(x,y)} where @samp{x}, @samp{y} variable are changed in @code{xrange, yrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}.
+Draws command surface for function @samp{z(x,y)} where @samp{x}, @samp{y} variable are changed in @code{xrange, yrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @ref{surf}.
 @end deffn
 
 @deffn {MGL command} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'='' @code{num=100}]
-Draws command parametrical surface @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@} where @samp{u}, @samp{v} variable are changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}.
+Draws command parametrical surface @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@} where @samp{u}, @samp{v} variable are changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @ref{surf}.
 @end deffn
 
 
 @c ##################################################################
- at node Nonlinear fitting (MGL), Data create (MGL), Other plotting (MGL), MGL interface
- at section Nonlinear fitting (MGL)
- at cindex fit
- at cindex fits
- at cindex putsfit
+ at node Nonlinear fitting @MGL{}, Data create @MGL{}, Other plotting @MGL{}, MGL interface
+ at section Nonlinear fitting @MGL{}
 
-These commands fit data to formula. Fitting goal is to find formula parameters for the best fit the data points, i.e. to minimize the sum @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. At this, approximation command @samp{f} can depend only on one argument @samp{x} (1D case), on two arguments @samp{x,y} (2D case) and on three arguments @samp{x,y,z} (3D case). The command @samp{f} also may depend on parameters. Normally the list of fitted parameters is specified by @var{var} string (like, @samp{abcd}). Usually user should supply initial values for fitted parameters by @var{ini} variable. But if he/she don't supply it then the zeros are used.
+These commands fit data to formula. Fitting goal is to find formula parameters for the best fit the data points, i.e. to minimize the sum @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. At this, approximation function @samp{f} can depend only on one argument @samp{x} (1D case), on two arguments @samp{x,y} (2D case) and on three arguments @samp{x,y,z} (3D case). The command @samp{f} also may depend on parameters. Normally the list of fitted parameters is specified by @var{var} string (like, @samp{abcd}). Usually user should supply initial values for fitted parameters by @var{ini} variable. But if he/she don't supply it then the zeros are used.
 
-Commands @code{fit} and @code{fits} do not draw the obtained data themselves. They fill the data @var{out} by formula @samp{f} with found coefficients. At this, the @samp{x,y,z} coordinates are equidistantly distributed in the bounding box. Number of points in @var{out} is selected as maximal value of @var{out} size or 100. Also you may print the last formula with found coefficients by @code{putsfit} command. @sref{Fitting sample}
+Commands @ref{fit} and @ref{fits} do not draw the obtained data themselves. They fill the data @var{out} by formula @samp{f} with found coefficients. At this, the @samp{x,y,z} coordinates are equidistantly distributed in the bounding box. Number of points in @var{out} is selected as maximal value of @var{out} size or 100. Also you may print the last formula with found coefficients by @code{putsfit} command. @sref{Fitting sample}
 
 The dimensions of arrays must be at least the same as the number of specified arrays @var{xdat}, @var{ydat}, @var{zdat}. Also the fitting only along specified directions will be performed (for example, along x and y if only @var{xdat} and @var{ydat} are specified). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x.
 
 
+ at cindex fits
+ at anchor{fits}
 @deffn {MGL command} fits adat sdat 'func' 'var' [ini=0]
 @deffnx {MGL command} fits xdat adat sdat 'func' 'var' [ini=0]
 @deffnx {MGL command} fits xdat ydat adat sdat 'func' 'var' [ini=0]
@@ -1089,6 +1313,8 @@ The dimensions of arrays must be at least the same as the number of specified ar
 Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor @var{sdat}[i,j,k].
 @end deffn
 
+ at cindex fit
+ at anchor{fit}
 @deffn {MGL command} fit adat 'func' 'var' [ini=0]
 @deffnx {MGL command} fit xdat adat 'func' 'var' [ini=0]
 @deffnx {MGL command} fit xdat ydat adat 'func' 'var' [ini=0]
@@ -1096,51 +1322,54 @@ Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified paramet
 Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor =1.
 @end deffn
 
+ at cindex putsfit
+ at anchor{putsfit}
 @deffn {MGL command} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}]
-Print last fitted formula with found coefficients (as numbers) at position @{@var{x}, @var{y}@}. The string @var{pre} will be printed before formula. All other parameters are the same as in @ref{Text printing (MGL)}.
+Print last fitted formula with found coefficients (as numbers) at position @{@var{x}, @var{y}@}. The string @var{pre} will be printed before formula. All other parameters are the same as in @ref{Text printing @MGL{}}.
 @end deffn
 
 
 @c ##################################################################
- at node Data create (MGL), Data filling (MGL), Nonlinear fitting (MGL), MGL interface
- at section Data create (MGL)
- at cindex new
- at cindex var
- at cindex list
- at cindex delete
- at cindex copy
- at cindex column
- at cindex set_id
+ at node Data create @MGL{}, Data filling @MGL{}, Nonlinear fitting @MGL{}, MGL interface
+ at section Data create @MGL{}
 
+ at cindex new
+ at anchor{new}
 @deffn {MGL command} new dat [@code{nx=1 ny=1 nz=1}]
 Creates or recreates the array @var{dat} with specified size and fills it by zero. This command does nothing if one of parameters @var{nx}, @var{ny}, @var{nz} is zero or negative.
 @end deffn
 
+ at cindex var
+ at anchor{var}
 @deffn {MGL command} var dat @code{num v1 [v2=nan]}
-Creates new variable with name dat for one-dimensional array of size num. Array elements are equidistantly distributed in range [@var{v1}, @var{v2}]. If @var{v2}=@code{nan} then @var{v2=v1} is used. 
+Creates new variable with name @var{dat} for one-dimensional array of size @var{num}. Array elements are equidistantly distributed in range [@var{v1}, @var{v2}]. If @var{v2}=@code{nan} then @var{v2=v1} is used. 
 @end deffn
 
+ at cindex list
+ at anchor{list}
 @deffn {MGL command} list dat @code{v1 ...}
-Creates new variable with name @var{dat} and fills it by numeric values of command arguments @code{v1 ...}. Command can create one-dimensional and two-dimensional arrays with arbitrary values. For creating 2d array the user should use delimiter - which means that the following values lie in next row. Array sizes are [maximal of row sizes * number of rows]. For example, command @code{list 1 | 2 3} creates the array [1 0; 2 3]. Note, that the maximal number of arguments is 1000. 
+Creates new variable with name @var{dat} and fills it by numeric values of command arguments @code{v1 ...}. Command can create one-dimensional and two-dimensional arrays with arbitrary values. For creating 2d array the user should use delimiter @samp{|} which means that the following values lie in next row. Array sizes are [maximal of row sizes * number of rows]. For example, command @code{list 1 | 2 3} creates the array [1 0; 2 3]. Note, that the maximal number of arguments is 1000. 
 @end deffn
 
 @deffn {MGL command} list dat d1 ...
 Creates new variable with name @var{dat} and fills it by data values of arrays of command arguments @var{d1 ...}. Command can create two-dimensional or three-dimensional (if arrays in arguments are 2d arrays) arrays with arbitrary values. Minor dimensions of all arrays in arguments should be equal to dimensions of first array d1. In the opposite case the argument will be ignored. Note, that the maximal number of arguments is 1000. 
 @end deffn
 
+ at cindex copy
+ at anchor{copy}
 @deffn {MGL command} copy dat1 dat2 ['eq'='' @code{on_axis=on}]
 @deffnx {MGL command} copy dat1 @code{val}
-Creates new variable with name @var{dat1} and fills it by data values of array @var{dat2}. At this, if parameter @var{eq} is specified then the data will be modified by corresponding formula by the same way as in @code{fill} command (for @code{on_axis=on}) or in @code{modify} command (for @code{on_axis=off}).
- at end deffn
-
- at deffn {MGL command} delete dat
-Deletes variable @var{dat} and makes its memory free. Can be useful for huge data arrays.
+Creates new variable with name @var{dat1} and fills it by data values of array @var{dat2}. At this, if parameter @var{eq} is specified then the data will be modified by corresponding formula by the same way as in @ref{fill} command (for @code{on_axis=on}) or in @ref{modify} command (for @code{on_axis=off}).
 @end deffn
 
- at deffn {MGL command} set_id dat 'ids'
+ at cindex idset
+ at anchor{idset}
+ at deffn {MGL command} idset dat 'ids'
 Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces).
 @end deffn
 
+ at cindex info
+ at anchor{info}
 @deffn {MGL command} info dat [@code{detail=off}]
 Display information (sizes, maximum/minimum, momentums and so on) about the data dat. Show brief information by default (if @code{detail=off}).
 @end deffn
@@ -1150,51 +1379,56 @@ Display @var{text} as information (warning).
 @end deffn
 
 @c ------------------------------------------------------------------
- at node Data filling (MGL), Rearrange data (MGL), Data create (MGL), MGL interface
- at section Data filling (MGL)
+ at node Data filling @MGL{}, Rearrange data @MGL{}, Data create @MGL{}, MGL interface
+ at section Data filling @MGL{}
 @cindex fill
 @cindex modify
 
+ at cindex fill
+ at anchor{fill}
 @deffn {MGL command} fill dat v1 v2 ['dir'='x']
 Equidistantly fills the data values to range [@var{x1}, @var{x2}] in direction @var{dir}=@{@samp{x}, at samp{y}, at samp{z}@}.
 @end deffn
 
- at deffn {MGL command} fill dat 'eq' [vdat=0 wdat=0]
+ at deffn {MGL command} fill dat 'eq'
+ at deffnx {MGL command} fill dat 'eq' vdat
+ at deffnx {MGL command} fill dat 'eq' vdat wdat
 Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in @emph{bounding box} (in difference from @code{modify} commands). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}.
 @end deffn
 
+ at cindex modify
+ at anchor{modify}
 @deffn {MGL command} modify dat 'eq' [@code{dim=0}]
-Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}.
- at end deffn
-
- at deffn {MGL command} modify dat 'eq' vdat [wdat=0]
-Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. If optional data @var{vdat}, @var{wdat} (must be the same size as @var{dat}) are specified then variables @samp{v} and @samp{w} denote its values else they are zero.
+ at deffnx {MGL command} modify dat 'eq' vdat
+ at deffnx {MGL command} modify dat 'eq' vdat wdat
+Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. If @var{dim}>0 is specified then modification will be fulfilled only for slices >=@var{dim}.
 @end deffn
 
 
- at deffn {MGL command} put a @code{val [i=: j=: k=:]}
-Function sets value(s) of array a[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the value @var{val} to whole range in corresponding direction(s). For example, @code{put a val : 0 :} sets a[i,0,j]=@var{val} for i=0...(a.nx-1), j=0...(a.nz-1).
+ at cindex put
+ at anchor{put}
+ at deffn {MGL command} put dat @code{val [i=: j=: k=:]}
+Function sets value(s) of array @var{dat}[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the value @var{val} to whole range in corresponding direction(s). For example, @code{put dat val : 0 :} sets @var{dat}[i,0,j]=@var{val} for i=0...(@var{dat}.nx-1), j=0...(@var{dat}.nz-1).
 @end deffn
 
- at deffn {MGL command} put a v [@code{i=: j=: k=:}]
-Function copies value(s) from array @var{v} to the range of array @var{a}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the range in corresponding direction(s). At this minor dimensions of array @var{v} should be large than corresponding dimensions of array @var{a}. For example, @code{put a v : 0 :} sets a[i,0,j]=v.ny>nz ? v[i,j] : v[i], where i=0...(a.nx-1), j=0...(a.nz-1) and condition v.nx>=a.nx is true.
+ at deffn {MGL command} put dat vdat [@code{i=: j=: k=:}]
+Function copies value(s) from array @var{vdat} to the range of array @var{dat}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the range in corresponding direction(s). At this minor dimensions of array @var{vdat} should be large than corresponding dimensions of array @var{dat}. For example, @code{put dat v : 0 :} sets @var{dat}[i,0,j]=@var{vdat}.ny>@var{dat}.nz ? @var{vdat}[i,j] : @var{vdat}[i], where i=0...(@var{dat}.nx-1), j=0...(@var{dat}.nz-1) and condition vdat.nx>=dat.nx is true.
 @end deffn
 
 
 
 @c ------------------------------------------------------------------
- at node Rearrange data (MGL), File I/O (MGL), Data filling (MGL), MGL interface
- at section Rearrange data (MGL)
- at cindex rearrange
- at cindex extend
- at cindex transpose
- at cindex squeeze
- at cindex crop
+ at node Rearrange data @MGL{}, File I/O @MGL{}, Data filling @MGL{}, MGL interface
+ at section Rearrange data @MGL{}
 
+ at cindex rearrange
+ at anchor{rearrange}
 @deffn {MGL command} rearrange dat @code{mx [my=0 mz=0]}
 Rearrange dimensions without changing data array so that resulting sizes should  be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz} will be 1.
 @end deffn
 
+ at cindex extend
+ at anchor{extend}
 @deffn {MGL command} extend dat @code{n1 [n2=0]}
 Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be 
 @iftex
@@ -1205,10 +1439,14 @@ a_ij^new = a_i^old where j=0... at var{n1}. Correspondingly, for @var{n1}<0 new arr
 @end ifnottex
 @end deffn
 
+ at cindex transpose
+ at anchor{transpose}
 @deffn {MGL command} transpose dat ['dim'='yxz']
 Transposes (shift order of) dimensions of the data. New order of dimensions is specified int string @var{dim}. This command may be useful also for the reading of one-dimensional data.
 @end deffn
 
+ at cindex squeeze
+ at anchor{squeeze}
 @deffn {MGL command} squeeze dat @code{rx [ry=1 rz=1 sm=off]}
 Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{sm} set to use smoothing
 @iftex
@@ -1219,22 +1457,34 @@ Reduces the data size by excluding data elements which indexes are not divisible
 @end ifnottex
 @end deffn
 
+ at cindex crop
+ at anchor{crop}
 @deffn {MGL command} crop dat @code{n1 n2} 'dir'
 Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}- at var{n2} if @var{n2}<=0 along direction @var{dir}.
 @end deffn
 
+ at cindex delete
+ at anchor{delete}
+ at deffn {MGL command} delete dat
+Deletes variable @var{dat} and makes its memory free. Can be useful for huge data arrays.
+ at end deffn
+
+ at deffn {MGL command} delete dat 'dir' @code{[pos=off num=0]}
+Delete @var{num} slices along @var{dir}-direction at position @var{pos}.
+ at end deffn
+
+ at cindex insert
+ at anchor{insert}
+ at deffn {MGL command} insert dat 'dir' @code{[pos=off num=0]}
+Insert @var{num} slices along @var{dir}-direction at position @var{pos}.
+ at end deffn
+
 @c ------------------------------------------------------------------
- at node File I/O (MGL), Make another data (MGL), Rearrange data (MGL), MGL interface
- at section File I/O (MGL)
- at cindex read
- at cindex readhdf
- at cindex readmat
- at cindex readall
- at cindex save
- at cindex savehdf
- at cindex export
- at cindex import
+ at node File I/O @MGL{}, Make another data @MGL{}, Rearrange data @MGL{}, MGL interface
+ at section File I/O @MGL{}
 
+ at cindex read
+ at anchor{read}
 @deffn {MGL command} read dat 'fname'
 Reads data from tab-separated text file with auto determining sizes of the data.
 @end deffn
@@ -1243,10 +1493,14 @@ Reads data from tab-separated text file with auto determining sizes of the data.
 Reads data from text file with specified data sizes. This command does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative.
 @end deffn
 
+ at cindex readmat
+ at anchor{readmat}
 @deffn {MGL command} readmat dat 'fname' [@code{dim=2}]
 Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions.
 @end deffn
 
+ at cindex readall
+ at anchor{readall}
 @deffn {MGL command} readall dat 'templ' @code{v1 v2 [dv=1 slice=off]}
 Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{v1} to @var{v2} with step @var{dv}. The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}.
 @end deffn
@@ -1255,48 +1509,56 @@ Join data arrays from several text files. The file names are determined by funct
 Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}.
 @end deffn
 
+ at cindex save
+ at anchor{save}
 @deffn {MGL command} save dat 'fname'
 Saves the whole data array to tab-separated text file.
 @end deffn
 
+ at cindex readhdf
+ at anchor{readhdf}
 @deffn {MGL command} readhdf dat 'fname' 'dname'
-Reads data array named @var{dname} from HDF file @var{fname}.
+Reads data array named @var{dname} from HDF5 or HDF4 file @var{fname}.
 @end deffn
+
+ at cindex savehdf
+ at anchor{savehdf}
 @deffn {MGL command} savehdf dat 'fname' 'dname'
-Saves data array named @var{dname} from HDF file @var{fname}.
+Saves data array named @var{dname} from HDF5 or HDF4 file @var{fname}.
 @end deffn
 
+ at cindex import
+ at anchor{import}
 @deffn {MGL command} import dat 'fname' 'sch' [@code{v1=0 v2=1}]
 Reads data from bitmap file. The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{sch} (@pxref{Color scheme}).
 @end deffn
 
+ at cindex export
+ at anchor{export}
 @deffn {MGL command} export dat 'fname' 'sch' [@code{v1=0 v2=0}]
 Saves data matrix to bitmap file. The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{sch} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array.
 @end deffn
 
 @c ------------------------------------------------------------------
- at node Make another data (MGL), Commands on direction (MGL), File I/O (MGL), MGL interface
- at section Make another data (MGL)
- at cindex subdata
- at cindex hist
- at cindex momentum
- at cindex sum
- at cindex max
- at cindex min
- at cindex combine
- at cindex evaluate
- at cindex resize
+ at node Make another data @MGL{}, Change data @MGL{}, File I/O @MGL{}, MGL interface
+ at section Make another data @MGL{}
 
+ at cindex combine
+ at anchor{combine}
 @deffn {MGL command} combine res adat bdat
 Returns direct multiplication of arrays (like, res[i,j] = adat[i]*bdat[j] and so on).
 @end deffn
 
+ at cindex evaluate
+ at anchor{evaluate}
 @deffn {MGL command} evaluate res dat idat [@code{norm=on}]
 @deffnx {MGL command} evaluate res dat idat jdat [@code{norm=on}]
 @deffnx {MGL command} evaluate res dat idat jdat kdat [@code{norm=on}]
-Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly.
+Get array which values is result of interpolation of original array for coordinates from other arrays (for example, res[i,j]=dat[idat[i,j],jdat[i,j]]). All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in ranges [0,nx], [0,ny], [0,nz] correspondingly.
 @end deffn
 
+ at cindex hist
+ at anchor{hist}
 @deffn {MGL command} hist res dat @code{num v1 v2 [nsub=0]}
 @deffnx {MGL command} hist res dat wdat @code{num v1 v2 [nsub=0]}
 Creates @var{num}-th points distribution @var{res} of the data values of @var{dat} in range [@var{v1}, @var{v2}]. Array @var{wdat} specifies weights of the data elements (all weight is 1 if @var{wdat} is not specified). Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram).
@@ -1309,8 +1571,8 @@ Creates distribution @var{res} of the data values of @var{adat} in axis range [M
 @end deffn
 
 
-
-
+ at cindex momentum
+ at anchor{momentum}
 @deffn {MGL command} momentum res dat 'how' ['dir'='z']
 Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as
 @iftex
@@ -1322,81 +1584,102 @@ res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij
 if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1].
 @end deffn
 
+ at cindex sum
+ at anchor{sum}
 @deffn {MGL command} sum res dat 'dir'
 Gets array which is the result of summation in given direction or direction(s).
 @end deffn
+ at cindex max
+ at anchor{max}
 @deffn {MGL command} max res dat 'dir'
 Gets array which is the maximal data values in given direction or direction(s).
 @end deffn
+ at cindex min
+ at anchor{min}
 @deffn {MGL command} min res dat 'dir'
 Gets array which is the minimal data values in given direction or direction(s).
 @end deffn
 
+ at cindex resize
+ at anchor{resize}
 @deffn {MGL command} resize res dat @code{mx [my=1 mz=1]}
 Makes array @var{res} of sizes @var{mx}, @var{my}, @var{mz} with interpolated data of array @var{dat}. 
 @end deffn
 
+ at cindex subdata
+ at anchor{subdata}
 @deffn {MGL command} subdata res dat @code{xx [yy=: zz=:]}
 Extracts sub-array data @var{res} from the original data @var{dat} array keeping fixed positive index. For example @code{subdata a b : 2} extracts 3d row (indexes are zero based), @code{subdata a b 4 :} extracts 5th column, @code{subdata a b : : 3} extracts 4th slice and so on. Note that symbol @samp{:} is defined @samp{:}=@code{-1} in MGL.
 @end deffn
 
+ at cindex trace
+ at anchor{trace}
 @deffn {MGL command} trace res dat
-Gets array of diagonal elements dat[i,i] (for 2D case) or dat[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1.
+Gets array of diagonal elements @var{dat}[i,i] (for 2D case) or @var{dat}[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of @var{dat} for 1D case. Data array must have dimensions @var{dat}.ny, @var{dat}.nz >= @var{dat}.nx or @var{dat}.ny, @var{dat}.nz = 1.
 @end deffn
 
+ at cindex transform
+ at anchor{transform}
 @deffn {MGL command} transform dat 'type' real imag
-Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
+Do integral transformation of complex data @var{real}, @var{imag} on specified direction. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{s} is Sine transform, @samp{c} is Cosine transform, @samp{h} is Hankel transform, @samp{n} or @samp{ } is no transformation.
 @end deffn
 
+ at cindex transforma
+ at anchor{transforma}
 @deffn {MGL command} transforma dat 'type' ampl phase
-Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
+The same as previous but with specified amplitude @var{ampl} and phase @var{phase} of complex numbers.
 @end deffn
 
+ at cindex stfad
+ at anchor{stfad}
 @deffn {MGL command} stfad res real imag @code{dn} ['dir'='x']
-Short time Fourier analysis for real and imaginary parts. Output  is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
+Short time Fourier transformation for real and imaginary parts. Output  is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
 @end deffn
 
+ at cindex pde
+ at anchor{pde}
 @deffn {MGL command} pde res 'ham' ini_re ini_im [@code{dz=0.1 k0=100}]
-Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Coordinates of the equation (and the solution) are supposed to be in the bounding box. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham='p^2+q^2-u^2'}. You may specify imaginary part for wave absorption, like @code{ham = 'p^2+i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}).
+Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Coordinates of the equation (and the solution) are supposed to be in the bounding box. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for non-linear Shrodinger equation you may set @code{ham='p^2+q^2-u^2'}. You may specify imaginary part for wave absorption, like @code{ham = 'p^2+i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE sample}
 @end deffn
 
+ at cindex ray
+ at anchor{ray}
 @deffn {MGL command} ray res 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]}
-Solves GO ray equation like d at emph{r}/dt = d @var{ham}/d at emph{p}, d at emph{p}/dt = -d @var{ham}/d at emph{r}. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordiantes @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}.
+Solves GO ray equation like d at emph{r}/dt = d @var{ham}/d at emph{p}, d at emph{p}/dt = -d @var{ham}/d at emph{r}. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordiantes @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. See also @ref{pde}. @sref{Beam tracing sample}
 @end deffn
 
+ at cindex qo2d
+ at anchor{qo2d}
 @deffn {MGL command} qo2d res 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx=0 yy=0]
-Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} 
+Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @ref{ray} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} 
 @end deffn
 
+ at cindex jacobian
+ at anchor{jacobian}
 @deffn {MGL command} jacobian res xdat ydat [zdat=0]
-Computates the Jacobian for transformation @{i,j,k@} to @{@var{xdat}, at var{ydat}, at var{zdat}@} where initial coordinates  @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{xdat}, at var{ydat}, at var{zdat}@} and @math{\xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{xdat}, at var{ydat}, at var{zdat}@} are specified or 2D if only 2 arrays @{@var{xdat}, at var{ydat}@} are specified.
+Computates the Jacobian for transformation @{i,j,k@} to @{@var{xdat}, at var{ydat}, at var{zdat}@} where initial coordinates  @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{xdat}, at var{ydat}, at var{zdat}@} and @math{\  xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{xdat}, at var{ydat}, at var{zdat}@} are specified or 2D if only 2 arrays @{@var{xdat}, at var{ydat}@} are specified.
 @end deffn
 
 
 
 @c ------------------------------------------------------------------
- at node Commands on direction (MGL), Operators (MGL), Make another data (MGL), MGL interface
- at section Commands on direction (MGL)
- at cindex cumsum
- at cindex integral
- at cindex diff
- at cindex diff2
- at cindex swap
- at cindex mirror
- at cindex sew
- at cindex smooth
- at cindex envelop
- at cindex norm
- at cindex normsl
+ at node Change data @MGL{}, Operators @MGL{}, Make another data @MGL{}, MGL interface
+ at section Change data @MGL{}
 
 These commands change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondingly.
 
+ at cindex cumsum
+ at anchor{cumsum}
 @deffn {MGL command} cumsum dat 'dir'
 Cumulative summation of the data in given direction or directions.
 @end deffn
+ at cindex integrate
+ at anchor{integrate}
 @deffn {MGL command} integrate dat 'dir'
 Integrates (like cumulative summation) the data in given direction or directions.
 @end deffn
+ at cindex diff
+ at anchor{diff}
 @deffn {MGL command} diff dat 'dir'
 Differentiates the data in given direction or directions.
 @end deffn
@@ -1404,27 +1687,65 @@ Differentiates the data in given direction or directions.
 Differentiates the data @var{dat} specified parametrically in direction @var{xdat} with @var{ydat}, @var{zdat}=constant. Parameter @var{zdat} can be omitted that correspond to 2D case. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{diff a x y} and usual derivative along @samp{y} will be @code{diff a y x}.
 @end deffn
 
+ at cindex diff2
+ at anchor{diff2}
 @deffn {MGL command} diff2 dat 'dir'
 Double-differentiates (like Laplace operator) the data in given direction.
 @end deffn
+
+ at cindex sinfft
+ at anchor{sinfft}
+ at deffn {MGL command} sinfft dat 'dir'
+Do Sine transform of the data in given direction or directions. The Sine transform is @math{\sum a_i \sin(k i)}.
+ at end deffn
+ at cindex cosfft
+ at anchor{cosfft}
+ at deffn {MGL command} cosfft dat 'dir'
+Do Cosine transform of the data in given direction or directions. The Cosine transform is @math{\sum a_i \cos(k i)}.
+ at end deffn
+ at cindex hankel
+ at anchor{hankel}
+ at deffn {MGL command} hankel dat 'dir'
+Do Hankel transform of the data in given direction or directions. The Hankel transform is @math{\sum a_i J_0(k i)}.
+ at end deffn
+
+
+ at cindex swap
+ at anchor{swap}
 @deffn {MGL command} swap dat 'dir'
 Swaps the left and right part of the data in given direction (useful for Fourier spectrum).
 @end deffn
+ at cindex roll
+ at anchor{roll}
+ at deffn {MGL command} roll dat 'dir' num
+Rolls the data along direction 'dir'. Resulting array will be out[i] = ini[(i+num)%nx] if @code{dir='x'}.
+ at end deffn
+
+ at cindex mirror
+ at anchor{mirror}
 @deffn {MGL command} mirror dat 'dir'
 Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}.
 @end deffn
 
+ at cindex sew
+ at anchor{sew}
 @deffn {MGL command} sew dat ['dir'='xyz' @code{da=2*pi}]
 Remove value steps (like phase jumps after inverse trigonometric commands) with period @var{da} in given direction.
 @end deffn
+ at cindex smooth
+ at anchor{smooth}
 @deffn {MGL command} smooth data @code{type} ['dir'='xyz']
 Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @samp{0} does nothing, @samp{1} linear averaging by 3 points, @samp{2} linear averaging by 5 points, @samp{3} quadratic averaging by 5 points.
 @end deffn
 
+ at cindex envelop
+ at anchor{envelop}
 @deffn {MGL command} envelop dat ['dir'='x']
 Find envelop for data values along direction @var{dir}. Only one direction can be specified at once.
 @end deffn
 
+ at cindex normsl
+ at anchor{normsl}
 @deffn {MGL command} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}]
 Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep} is set then maximal value of k-th slice will be limited by 
 @iftex
@@ -1435,170 +1756,218 @@ Normalizes data slice-by-slice along direction @var{dir} the data in slices to r
 @end ifnottex
 @end deffn
 
+ at cindex norm
+ at anchor{norm}
 @deffn {MGL command} norm dat @code{v1 v2 [sym=off dim=0]}
 Normalizes the data to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}.
 @end deffn
 
-
 @c ------------------------------------------------------------------
- at node Operators (MGL), Program flow (MGL), Commands on direction (MGL), MGL interface
- at section Operators (MGL)
- at cindex multo
- at cindex addto
- at cindex divto
- at cindex subto
+ at node Operators @MGL{}, Program flow @MGL{}, Change data @MGL{}, MGL interface
+ at section Operators @MGL{}
 
+ at cindex multo
+ at anchor{multo}
 @deffn {MGL command} multo dat dat2
 Multiplies the data by the other one for each element.
 @end deffn
- at deffn {MGL command} divto dat dat2
-Divides the data by the other one for each element.
- at end deffn
- at deffn {MGL command} addto dat dat2
-Adds the other data.
- at end deffn
- at deffn {MGL command} subto dat dat2
-Subtracts the other data.
- at end deffn
 @deffn {MGL command} multo dat @code{val}
 Multiplies each element by the number.
 @end deffn
+
+ at cindex divto
+ at anchor{divto}
+ at deffn {MGL command} divto dat dat2
+Divides the data by the other one for each element.
+ at end deffn
 @deffn {MGL command} divto dat @code{val}
 Divides each element by the number.
 @end deffn
+
+ at cindex addto
+ at anchor{addto}
+ at deffn {MGL command} addto dat dat2
+Adds the other data.
+ at end deffn
 @deffn {MGL command} addto dat @code{val}
 Adds the number to each element.
 @end deffn
+
+ at cindex subto
+ at anchor{subto}
+ at deffn {MGL command} subto dat dat2
+Subtracts the other data.
+ at end deffn
 @deffn {MGL command} subto dat @code{val}
 Subtracts the number to each element.
 @end deffn
 
 @c ------------------------------------------------------------------
- at node Program flow (MGL), Command options (MGL), Operators (MGL), MGL interface
- at section Program flow (MGL)
- at cindex call
- at cindex chdir
- at cindex define
- at cindex if
- at cindex elseif
- at cindex else
- at cindex endif
- at cindex for
- at cindex next
- at cindex once
- at cindex stop
+ at node Program flow @MGL{}, Command options @MGL{}, Operators @MGL{}, MGL interface
+ at section Program flow @MGL{}
 
 These commands control program flow, like, conditions, cycles, define script arguments and so on.
 
- at deffn {MGL command} call 'fname'
-Executes script @var{fname}.
- at end deffn
+ at cindex chdir
+ at anchor{chdir}
 @deffn {MGL command} chdir 'path'
 Changes the current directory to @var{path}.
 @end deffn
+
+ at cindex define
+ at anchor{define}
 @deffn {MGL command} define $N smth
-Sets @var{N}-th script argument to @var{smth}. Note, that @var{smth} is used as is (with @samp{'} symbols if present).
+Sets @var{N}-th script argument to @var{smth}. Note, that @var{smth} is used as is (with @samp{'} symbols if present). Here @var{N} is digit (0...9) or alpha (a...z).
 @end deffn
 @deffn {MGL command} define name smth
-Create scalar variable @code{name} which have the numeric value of @code{smth}. Later you can use this variable as usual number.
+Create scalar variable @code{name} which have the numeric value of @code{smth}. Later you can use this variable as usual number. Here @var{N} is digit (0...9) or alpha (a...z).
 @end deffn
+ at cindex defchr
+ at anchor{defchr}
+ at deffn {MGL command} defchr $N smth
+Sets @var{N}-th script argument to character with value evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z).
+ at end deffn
+ at cindex defnum
+ at anchor{defnum}
+ at deffn {MGL command} defnum $N smth
+Sets @var{N}-th script argument to number with value evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z).
+ at end deffn
+ at cindex defpal
+ at anchor{defpal}
+ at deffn {MGL command} defpal $N smth
+Sets @var{N}-th script argument to palette character at position evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z).
+ at end deffn
+
+ at cindex call
+ at anchor{call}
+ at deffn {MGL command} call 'fname' [ARG1 ARG2 ... ARG9]
+Executes function @var{fname} (or script if function is not found). Optional arguments will be passed to functions. See also @ref{func}.
+ at end deffn
+ at cindex func
+ at anchor{func}
+ at deffn {MGL command} func 'fname' [narg=0]
+Define the function @var{fname} and number of required arguments. The arguments will be placed in script parameters $1, $2, ... $9. Note, you should stop script execution before function definition(s) by command @ref{stop}. See also @ref{return}.
+ at end deffn
+ at cindex return
+ at anchor{return}
+ at deffn {MGL command} return
+Return from the function. See also @ref{func}.
+ at end deffn
+
+
+ at cindex if
+ at anchor{if}
 @deffn {MGL command} if dat 'cond'
 Starts block which will be executed if @var{dat} satisfy to @var{cond}.
 @end deffn
 @deffn {MGL command} if @code{val}
 Starts block which will be executed if @code{val} is nonzero.
 @end deffn
+ at cindex elseif
+ at anchor{elseif}
 @deffn {MGL command} elseif dat 'cond'
 Starts block which will be executed if previous @code{if} or @code{elseif} is false and @var{dat} satisfy to @var{cond}.
 @end deffn
 @deffn {MGL command} elseif @code{val}
 Starts block which will be executed if previous @code{if} or @code{elseif} is false and @code{val} is nonzero.
 @end deffn
+ at cindex else
+ at anchor{else}
 @deffn {MGL command} else
 Starts block which will be executed if previous @code{if} or @code{elseif} is false.
 @end deffn
+ at cindex endif
+ at anchor{endif}
 @deffn {MGL command} endif
 Finishes @code{if/elseif/else} block.
 @end deffn
+
+ at cindex for
+ at anchor{for}
 @deffn {MGL command} for $N @code{v1 v2 [dv=1]}
-Starts cycle with @var{N}-th argument changing from @var{v1} to @var{v2} with the step @var{dv}.
+Starts cycle with $@var{N}-th argument changing from @var{v1} to @var{v2} with the step @var{dv}. Here @var{N} is digit (0...9) or alpha (a...z).
 @end deffn
 @deffn {MGL command} for $N dat
-Starts cycle with @var{N}-th argument changing for @var{dat} values.
+Starts cycle with $@var{N}-th argument changing for @var{dat} values. Here @var{N} is digit (0...9) or alpha (a...z).
 @end deffn
+ at cindex next
+ at anchor{next}
 @deffn {MGL command} next
 Finishes @code{for} cycle.
 @end deffn
+
+ at cindex once
+ at anchor{once}
 @deffn {MGL command} once @code{val}
-The code between once on and once off will be executed only once. Useful for large data manipulation in programs like UDAV.
+The code between @code{once on} and @code{once off} will be executed only once. Useful for large data manipulation in programs like UDAV.
 @end deffn
+ at cindex stop
+ at anchor{stop}
 @deffn {MGL command} stop
 Terminate execution.
 @end deffn
 
 @c ------------------------------------------------------------------
- at node  Command options (MGL), Suffixes, Program flow (MGL), MGL interface
- at section Command options (MGL)
- at cindex alpha
- at cindex alphadef
- at cindex xrange
- at cindex yrange
- at cindex zrange
- at cindex crange
- at cindex cut
- at cindex ambient
- at cindex fontsize
- at cindex marksize
- at cindex meshnum
- at cindex legend
+ at node  Command options @MGL{}, Suffixes, Program flow @MGL{}, MGL interface
+ at section Command options @MGL{}
 
 Command options allow the easy setup of the plot by changing of global settings only for this plot. Options are specified at the end of string. Each option is separated from the previous text by symbol @samp{;}. Options work so that them remember the current settings, change settings as it being set in the option, execute command and return the original settings back. So, the options usage for data handling commands or for graphics setup commands is useless.
 
 The most useful options are @code{xrange, yrange, zrange}. They sets the boundaries for data change. This boundaries are used for automatically filled variables. So, these options allow one to change the position of some plots. For example, in command @code{plot y; xrange 0.1 0.9} the x coordinate will be equidistantly distributed in range 0.1 ... 0.9.
 
 The full list of options are:
- at deffn {MGL command} alpha @code{val}
-Sets alpha value (transparency) of the plot. The value should be in range [0, 1].
- at end deffn
- at deffn {MGL command} alphadef @code{val}
-Sets alpha value (transparency) of the plot. The value should be in range [0, 1].
+ at cindex alpha
+ at cindex alphadef
+ at deffn {MGL option} alpha @code{val}
+ at deffnx {MGL option} alphadef @code{val}
+Sets alpha value (transparency) of the plot. The value should be in range [0, 1]. See also @ref{alphadef}.
 @end deffn
- at deffn {MGL command} ambient @code{val}
-Sets brightness of ambient light for the plot. The value should be in range [0, 1].
+ at cindex ambient
+ at deffn {MGL option} ambient @code{val}
+Sets brightness of ambient light for the plot. The value should be in range [0, 1]. See also @ref{ambient}.
 @end deffn
- at deffn {MGL command} crange @code{val1 val2}
-Sets boundaries of color change for the plot.
+ at cindex crange
+ at deffn {MGL option} crange @code{val1 val2}
+Sets boundaries of color change for the plot. See also @ref{crange}.
 @end deffn
- at deffn {MGL command} xrange @code{val1 val2}
-Sets boundaries of x coordinate change for the plot.
+ at cindex xrange
+ at deffn {MGL option} xrange @code{val1 val2}
+Sets boundaries of x coordinate change for the plot. See also @ref{xrange}.
 @end deffn
- at deffn {MGL command} yrange @code{val1 val2}
-Sets boundaries of y coordinate change for the plot.
+ at cindex yrange
+ at deffn {MGL option} yrange @code{val1 val2}
+Sets boundaries of y coordinate change for the plot. See also @ref{yrange}.
 @end deffn
- at deffn {MGL command} zrange @code{val1 val2}
-Sets boundaries of z coordinate change for the plot.
+ at cindex zrange
+ at deffn {MGL option} zrange @code{val1 val2}
+Sets boundaries of z coordinate change for the plot. See also @ref{zrange}.
 @end deffn
- at deffn {MGL command} cut @code{val}
-Sets whether to cut or to project the plot points lying outside the bounding box.
+ at cindex cut
+ at deffn {MGL option} cut @code{val}
+Sets whether to cut or to project the plot points lying outside the bounding box. See also @ref{cut}.
 @end deffn
- at deffn {MGL command} fontsize @code{val}
-Sets the size of text.
+ at cindex fontsize
+ at deffn {MGL option} fontsize @code{val}
+Sets the size of text. See also @ref{font}.
 @end deffn
- at deffn {MGL command} marksize @code{val}
-Sets the size of marks.
+ at cindex marksize
+ at deffn {MGL option} marksize @code{val}
+Sets the size of marks. See also @ref{marksize}.
 @end deffn
- at deffn {MGL command} meshnum @code{val}
-Work like @code{meshnum} command.
+ at cindex meshnum
+ at deffn {MGL option} meshnum @code{val}
+Work like @ref{meshnum} command.
 @end deffn
- at deffn {MGL command} legend 'txt'
-Adds string 'txt' to internal legend accumulator. The style of described line and mark is taken from arguments of the plot command. The maximal number of entries is 100.
+ at cindex legend
+ at deffn {MGL option} legend 'txt'
+Adds string 'txt' to internal legend accumulator. The style of described line and mark is taken from arguments of the last @ref{1D plotting @MGL{}} command. See also @ref{legend}.
 @end deffn
 
 @c ------------------------------------------------------------------
- at node  Suffixes, Utilities, Command options (MGL), MGL interface
+ at node  Suffixes, Utilities, Command options @MGL{}, MGL interface
 @section Suffixes for variable
 
-Suffixes can get some numerical value (like its size, maximal or minimal value, the sum of elements and so on) of the data array in variable and use it later as usual number in command arguments. The suffixes start from point @samp{.} right after (without spaces) variable name or its sub-array. For example, @code{a.nx} give the x-size of data a, @code{b(1).max} give maximal value of second row of variable b, @code{c(:,0).sum} give sum of element in first column of c and so on.
+Suffixes can get some numerical value (like its size, maximal or minimal value, the sum of elements and so on) of the data array in variable and use it later as usual number in command arguments. The suffixes start from point @samp{.} right after (without spaces) variable name or its sub-array. For example, @code{a.nx} give the x-size of data @var{a}, @code{b(1).max} give maximal value of second row of variable @var{b}, @code{(c(:,0)^2).sum} give the sum of squares of elements in the first column of @var{c} and so on.
 
 The full list of suffixes are:
 @table @strong
@@ -1608,6 +1977,14 @@ Give the data size in x-, y-, z-direction correspondingly.
 Give maximal value of the data.
 @item min
 Give minimal value of the data.
+ at item sum
+Give sum of data values.
+ at item a
+Give first value of data array.
+ at item fst
+Give first nonzero value of data array.
+ at item lst
+Give last nonzero value of data array.
 @item mx, my, mz
 Give x-, y-, z-position of data maximum.
 @item ax, ay, az, aa
@@ -1618,14 +1995,6 @@ Give width in x-, y-, z-direction or data dispersion value.
 Give skewness in x-, y-, z-direction or data skewness value.
 @item kx, ky, kz, ka
 Give kurtosis in x-, y-, z-direction or data kurtosis value.
- at item sum
-Give sum of data values.
- at item a
-Give first value of data array.
- at item fst
-Give first nonzero value of data array.
- at item lst
-Give last nonzero value of data array.
 @end table
 
 @c ------------------------------------------------------------------
@@ -1636,4 +2005,5 @@ MathGL library provides several tools for parsing MGL scripts. There is tools sa
 
 All of this tools have similar set of arguments. First argument is name of script file, next argument is optional output file name, last arguments are options. There are options for setting script parameters (it is @code{$0, $1, ... $9}) and locale settings. The script parameters have format @samp{-Nval}. Here N=0,1...9 is parameter ID and val is its value. For example, option @samp{-1test} set to substitute @samp{test} instead of @code{$1} in the script. Option -Lval set locale to val. For example, @samp{-Lutf8} will set UTF-8 locale for script.
 
-Additionally you can create animated GIF file or a set of JPEG files with names @samp{frameNNNN.jpg} (here @samp{NNNN} is frame index). You should use @code{mgl2gif} tool and specify the values of @code{$0} parameter for making animation. Values of the parameter @code{$0} can be specified inside the script by comment @code{##a val} for each value @code{val} (one comment for one value) or by option(s) @samp{-Aval}. Tool @code{mgl2gif} will execute script several times (once for each specified value of @code{$0}) and save result in animated GIF file. For saving each frame in JPEG just add command @code{write ''} at the end of the script.
+Additionally you can create animated GIF file or a set of JPEG files with names @samp{frameNNNN.jpg} (here @samp{NNNN} is frame index). You should use @code{mgl2gif} tool and specify the values of @code{$0} parameter for making animation. Values of the parameter @code{$0} can be specified inside the script by comment @code{##a val} for each value @code{val} (one comment for one value) or by option(s) @samp{-Aval}. Also you can specify a cycle for animation by comment @code{##c v1 v2 dv} or by option @code{-Cn1:n2}. Tool @code{mgl2gif} will execute script several times (once for each specified value of @code{$0}) and save result in animated GIF file. For saving each frame in JPEG just add command @code{write ''} at the end of the script.
+
diff --git a/texinfo/mgl_cmd_ru.texi b/texinfo/mgl_cmd_ru.texi
new file mode 100644
index 0000000..cb53add
--- /dev/null
+++ b/texinfo/mgl_cmd_ru.texi
@@ -0,0 +1,2011 @@
+ at c ------------------------------------------------------------------
+ at chapter Язык MGL
+
+MathGL имеет встроенный скриптовый язык MGL для обработки и отображения данных. Скрипты MGL можно использовать как независимо (программами UDAV, mgl2png, mgl2eps, mgl2svg и пр., @pxref{Utilities}) так и вызовами библиотеки.
+
+Язык MGL достаточно простой. Каждая строка -- отдельная команда. Первое слово -- имя команды, а все остальные ее аргументы. Команда может иметь до 1000 аргументов (по крайней мере сейчас). Слова разделяются одно от другого пробелом или символом табуляции. Различий между верхним и нижним индексом нет, т.е. переменные @var{a} и @var{A} идентичны. Символ @samp{#} начинает комментарий -- все символы после него игнорируются до конца строки. Исключением является случай, когда @samp{#} входит в строку. Опции команды указываются после символа @samp{;} (@pxref{Command options @MGL{}}). Символ @samp{:} начинает новую команду (подобно переводу строки) если он расположен не внутри скобок или строки.
+
+Если строка содержит ссылки на внешние параметры (@samp{$0}, @samp{$1} ... @samp{$9}) или макроопределения (@samp{$a}, @samp{$b} ... @samp{$z}), то текущие значения параметров/макроопределений подставляются в строку вместо ссылки до выполнением команды. Это позволяет использовать один и тот же скрипт при различных входных параметрах командной строки или вводить макроопределения по ходу исполнения команд скрипта.
+
+Аргументы команды могут быть строками, переменными или числами. 
+ at itemize @bullet
+ at item 
+Строка -- произвольный набор символов между метками @samp{'}.
+
+ at item 
+Обычно переменная имеет имя, состоящее из букв и чисел (должно начинаться с буквы и не быть длиннее 64 символов). В качестве переменной можно использовать временные массивы, включающие в себя:
+ at itemize @bullet
+ at item 
+срезы (``подмассивы'') массивов данных (подобно команде @ref{subdata}). Например, @code{a(1)} или @code{a(1,:)} или @code{a(1,:,:)} -- вторая строка массива @var{a}, @code{a(:,2)} или @code{a(:,2,:)} -- третий столбец, @code{a(:,:,0)} -- первый срез и т.д. Также можно выделить часть массива с m-го по n-ый элемент @code{a(m:n,:,:)} или просто @code{a(m:n)}.
+
+ at item 
+произвольные комбинации столбцов данных (например, @code{a('n*w^2/exp(t)')}), если столбцы данных были именованы командой @ref{idset} или в файле данных (в строке начинающейся с @code{##}).
+
+ at item 
+произвольное выражение из существующих переменных и констант. Например, @samp{sqrt(dat(:,5)+1)} даст временный массив данных с элементами равными @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}.
+
+ at item 
+массивы с элементами заданными в квадратных скобках [], разделенные @samp{,}. При этом внутри выражения не должно быть пробелов! Например, @samp{[1,2,3]} даст временный массив из 3 элементов @{1, 2, 3@}; @samp{[[11,12],[21,22]]} даст матрицу 2*2 и т.д. Элементами такой конструкции могут быть и массивы если их размерности одинаковые, например @samp{[v1,v2,...,vn]}.
+
+ at item 
+результат команд построения новых данных (@pxref{Make another data}), если они заключены в фигурные скобки @{@}. Например, @samp{@{sum dat 'x'@}} даст временный массив, который есть результат суммирования @var{dat} вдоль 'x'. Это такой же массив как и @var{tmp}, полученный командой @samp{sum tmp dat 'x'}. При этом можно использовать вложенные конструкции, например @samp{@{sum @{max dat 'z'@} 'x'@}}.
+ at end itemize
+Временные массивы не могут стоять в качестве первого аргумента команд, создающих массивы (например, @samp{new}, @samp{read}, @samp{hist} и т.д.).
+
+ at item 
+К скалярным переменным, кроме собственно чисел, относятся: специальные переменные @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1}, переменные с суффиксами (@pxref{Suffixes}), переменные определенные командой @ref{define}. Также массивы размером 1x1x1 считаются скалярами (например, @samp{pi/dat.nx}).
+ at end itemize
+Перед первым использованием все переменные должны быть определены с помощью команд, создающих массивы (@ref{new}, @ref{var}, @ref{list}, @ref{copy}, @ref{read}, @ref{hist}, @ref{sum} и др., @pxref{Data create @MGL{}} и @ref{Make another data @MGL{}}). 
+
+Команды могут иметь несколько наборов аргументов (например, @code{plot ydat} и @code{plot xdat ydat}). Все аргументы команды для выбранного набора должны быть указаны, однако часть из них могут иметь значения по умолчанию. Такие аргументы в описании команд будут помещены в квадратные скобки [], например @code{plot ydat ['stl'='' zval=nan]}. При этом запись @code{[arg1 arg2 arg3 ...]} подразумевает @code{[arg1 [arg2 [arg3 ...]]]}, т.е. опускать можно только аргументы с конца, если вы согласны с их значениями по умолчанию. Например, @code{plot ydat '' 1} или @code{plot ydat ''} правильно, а @code{plot ydat 1} не правильно (аргумент @code{'stl'} пропущен).
+
+Все команды MGL можно разделить на несколько групп. В дальнейшем будет использованы следующие обозначения при описании команд: имя команды выделено жирным, строки заключены в одинарные кавычки '', переменные выделены курсивом, числа (скаляры) выделены моноширинным шрифтом. Необязательные аргументы будут помещены в квадратные скобки [] и показаны их значения по умолчанию. Подробную информацию о цвете и стиле линий (@pxref{Line styles}), цветовых схемах (@pxref{Color scheme}), стиле текста и символах TeX (@pxref{Font styles}), текстовых формулах (@pxref{Textual formulas}) можно найти в соответствующих разделах.
+
+ at menu
+ at ifset UDAV
+* General concepts::             
+ at end ifset
+* Graphics setup @MGL{}::        
+* Axis settings @MGL{}::         
+* Transformation matrix @MGL{}::  
+* Export to file @MGL{}::        
+* Primitives drawing @MGL{}::    
+* Text printing @MGL{}::         
+* Axis and Colorbar @MGL{}::     
+* Legend @MGL{}::                
+* 1D plotting @MGL{}::           
+* 2D plotting @MGL{}::           
+* 3D plotting @MGL{}::           
+* Dual plotting @MGL{}::         
+* Vector fields @MGL{}::         
+* Other plotting @MGL{}::        
+* Nonlinear fitting @MGL{}::     
+* Data create @MGL{}::           
+* Data filling @MGL{}::          
+* Rearrange data @MGL{}::        
+* File I/O @MGL{}::              
+* Make another data @MGL{}::     
+* Change data @MGL{}::  
+* Operators @MGL{}::             
+* Program flow @MGL{}::          
+* Command options @MGL{}::       
+* Suffixes::                    
+* Utilities::                   
+ at end menu
+
+ at c ##################################################################
+ at ifset UDAV
+ at node  General concepts, , Utilities, MGL interface
+ at section Основные принципы
+
+Возможности библиотеки MathGL довольно богаты -- число только основных типов графиков превышает 50 видов. Кроме того, есть функции для обработки данных, настройки вида графика и пр. и пр. Тем не менее, я старался придерживаться единого стиля в порядке аргументов функций и способе их ``настройки''. В основном все ниже сказанное относится к функциям рисования различных графиков.
+
+Всего основных концепций (базисных идей) четыре:
+ at enumerate
+ at item
+ at strong{Все настройки графиков (стиль линий, цветовые схемы поверхностей, стиль и цвет текста) задаются строками.} Это обеспечивает: удобство для пользователя -- короткую строку легче читать и здесь тяжелее ошибиться, чем в большом списке параметров; переносимость -- строки выглядят одинаково на всех платформах и не надо заботиться о типе и числе аргументов.
+ at item
+ at strong{Все функции имеют ``упрощенный'' и ``продвинутый'' варианты.} Сделано опять из-за удобства. В ``упрощенном'' варианте для построения графика нужны только один-два массив(а) данных, которые автоматически равнораспределяются в заданном диапазоне осей координат. В ``продвинутой'' версии можно не только указать явно диапазон построения графика, но и задать его параметрически. Последнее позволяет легко строить довольно сложные кривые и поверхности. В обоих вариантах функций порядок аргументов стандартен: сначала идут массивы данных, потом необязательный строковый параметр стиля графика, а далее -- второстепенные необязательные параметры для более точной настройки графика.
+ at item
+ at strong{Все элементы рисунков векторные.} Изначально библиотека MathGL была ориентированна на работу с научными данными, которые по своей природе векторные (линии, грани, матрицы и т.д.). Поэтому векторность используется во всех рисунках! Причем иногда даже в ущерб производительности (например, при выводе шрифтов). Помимо всего прочего, векторность позволяет легко масштабировать рисунок -- измените размер картинки в 2 раза, и рисунок пропорционально растянется.
+ at item
+ at strong{Новые графики не удаляют уже нарисованное.} Этот, в чем-то неожиданный, подход позволяет создавать огромное количество ``комбинированных'' графиков. Например, поверхность с наложенными линиями уровня строится двумя последовательными вызовами функций рисования поверхности и линий уровня (в любом порядке). И совершенно не надо писать специальную функцию (как в Matlab и некоторых других программах) для рисования этого графика. Примеров таких графиков можно привести множество (см. раздел @ref{Hints} и сайт программы @uref{http://mathgl.sf.net/index.html}).
+ at end enumerate
+
+Кроме основных концепций я хотел бы остановиться на нескольких, как оказалось, нетривиальных моментах -- способе указания положения графика, осей координат и строковых параметров линий, поверхностей, текста.
+
+ at menu
+* Coordinate axes::             
+* Line styles::                 
+* Color scheme::                
+* Font styles::                  
+* Textual formulas::            
+ at end menu
+
+ at include concept_ru.texi
+
+ at node Graphics setup @MGL{}, Axis settings @MGL{}, General concepts, MGL interface
+ at end ifset
+ at ifclear UDAV
+
+ at c ##################################################################
+ at node Graphics setup @MGL{}, Axis settings @MGL{}, , MGL interface
+ at end ifclear
+ at section Настройка графика @MGL{}
+
+Команды в этой группе влияют на вид всего рисунка. Соответственно они должны располагаться @emph{перед} вызовом функций непосредственно рисующих графики.
+
+ at menu
+* Transparency @MGL{}::          
+* Lighting @MGL{}::              
+* Fog @MGL{}::                   
+* Default sizes @MGL{}::         
+* Zooming @MGL{}::               
+* Cutting @MGL{}::               
+* Other settings @MGL{}::        
+ at end menu
+
+ at c ==================================================================
+ at node Transparency @MGL{}, Lighting @MGL{}, , Graphics setup @MGL{}
+ at subsection Прозрачность @MGL{}
+
+Эти команды настраивают тип и степень прозрачности поверхностей. Главной является функция @ref{alpha}, которая включает/выключает прозрачность для всех графиков, созданных после вызова @ref{alpha}. Функция @ref{alphadef} устанавливает величину alpha-канала по умолчанию. Прозрачность можно выключить для отдельного графика с помощью @ref{transparent}. Наконец, функция @ref{transptype} задает тип прозрачности. @sref{Transparent surface sample}
+
+ at cindex alpha
+ at anchor{alpha}
+ at deffn {Команда MGL} alpha @code{[val=on]}
+Включает/выключает прозрачность для @emph{всего} рисунка. По умолчанию прозрачность выключена. Используйте @code{transparent off} для конкретного графика для выключения прозрачности.
+ at end deffn
+ at cindex alphadef
+ at anchor{alphadef}
+ at deffn {Команда MGL} alphadef @code{val}
+Задает значение прозрачности по умолчанию для всех графиков. Начальное значение 0.5.
+ at end deffn
+ at cindex transparent
+ at anchor{transparent}
+ at deffn {Команда MGL} transparent @code{val}
+Временно включает/возвращает прозрачность графиков.
+ at end deffn
+ at cindex transptype
+ at anchor{transptype}
+ at deffn {Команда MGL} transptype @code{val}
+Задает тип прозрачности. Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{alphadef 0.3} или меньше в этом случае). @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}.
+ at end deffn
+
+ at c ==================================================================
+ at node Lighting @MGL{}, Fog @MGL{}, Transparency @MGL{}, Graphics setup @MGL{}
+ at subsection Освещение @MGL{}
+
+Эти функции настраивают освещение графика. Главная функция @ref{light} включает/выключает освещение графиков построенных после ее вызова. MathGL  поддерживает до 10 независимых источников света. Положение, цвет, яркость каждого источника света можно задавать по отдельности. По умолчанию включен только первый (с порядковым номером @code{0}) источник света белого цвета, расположенный сверху.
+
+ at cindex light
+ at anchor{light}
+ at deffn {Команда MGL} light @code{[val=on]}
+Включает/выключает освещение графика. По умолчанию освещение выключено.
+ at end deffn
+ at deffn {Команда MGL} light @code{n val}
+Включает/выключает @var{n}-ый источник света.
+ at end deffn
+
+ at deffn {Команда MGL} light @code{n xpos ypos zpos} ['col'='w' @code{br=0.5}]
+Добавляет источник света с номером @var{n} в положение @{@var{xpos}, @var{ypos}, @var{zpos}@} с цветом @var{col} и яркостью @var{br}, которая должна быть в диапазоне [0,1].
+ at end deffn
+
+ at cindex ambient
+ at anchor{ambient}
+ at deffn {Команда MGL} ambient @code{val}
+Задает яркость рассеянного освещения. Значение должно быть в диапазоне [0,1].
+ at end deffn
+
+ at c ==================================================================
+ at node Fog @MGL{}, Default sizes @MGL{}, Lighting @MGL{}, Graphics setup @MGL{}
+ at subsection Туман @MGL{}
+
+ at cindex fog
+ at anchor{fog}
+ at deffn {Команда MGL} fog @code{val [dz=0.25]}
+Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~@math{1-exp(-d*z)}. Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Surface in fog sample}
+ at end deffn
+
+ at c ==================================================================
+ at node Default sizes @MGL{}, Zooming @MGL{}, Fog @MGL{}, Graphics setup @MGL{}
+ at subsection Базовые размеры @MGL{}
+
+Эти команды задают величины большинства параметров графика, включая размеры маркеров, стрелок, толщину линий и т.д. Как и любые другие настройки, они подействуют только на графики созданные после изменения настроек.
+
+ at cindex barwidth
+ at anchor{barwidth}
+ at deffn {Команда MGL} barwidth @code{val}
+Относительный размер прямоугольников в @code{bars, barh, boxplot}. Значение по умолчанию @code{0.7}.
+ at end deffn
+
+ at cindex marksize
+ at anchor{marksize}
+ at deffn {Команда MGL} marksize @code{val}
+Размер маркеров для @ref{1D plotting}. Значение по умолчанию @code{1}.
+ at end deffn
+
+ at cindex arrowsize
+ at anchor{arrowsize}
+ at deffn {Команда MGL} arrowsize @code{val}
+Размер стрелок для @ref{1D plotting}, линий и кривых (@pxref{Primitives drawing}). Значение по умолчанию @code{1}.
+ at end deffn
+
+ at cindex linewidth
+ at anchor{linewidth}
+ at deffn {Команда MGL} linewidth @code{val}
+Базовая толщина линий. Значения <1 игнорируются. Для значений >1 реальная толщина получается перемножением указанной ширины линии на данное значение. Увеличение ширины линии актуально для больших растровых рисунков. Значение по умолчанию @code{1}.
+ at end deffn
+
+ at cindex ticklen
+ at anchor{ticklen}
+ at deffn {Команда MGL} ticklen @code{val} [@code{stt=1}]
+Относительная длина меток осей координат. Значение по умолчанию @code{0.1}. Параметр @var{stt}>0 задает относительную длину подметок, которые в @code{sqrt(1+stt)} раз меньше.
+ at end deffn
+
+ at cindex tickstl
+ at anchor{tickstl}
+ at deffn {Команда MGL} tickstl 'stl' ['sub'='']
+Стиль меток (@var{stl}) и подметок (@var{sub}) осей координат. Если @code{stl=''}, то используется стиль по умолчанию (@samp{k} или @samp{w} в зависимости от типа прозрачности). Если @code{sub=''}, то используется стиль меток (т.е. @var{stl}).
+ at end deffn
+
+ at c ==================================================================
+ at node Zooming @MGL{}, Cutting @MGL{}, Default sizes @MGL{}, Graphics setup @MGL{}
+ at subsection Масштабирование @MGL{}
+
+Эти команды управляют масштабированием всего рисунка (@ref{zoom}) или отдельной картинки (@ref{plotfactor}). Обычно эти функции используются для удаления пустого места вокруг графиков.
+
+ at cindex plotfactor
+ at anchor{plotfactor}
+ at deffn {Команда MGL} plotfactor @code{val}
+Масштаб картинки (значение должно быть больше 1). Не рекомендуется устанавливать значения меньше 1.5. Это аналог @ref{zoom}, но применяется только к конкретной картинке, заданной @ref{inplot}. Используйте ноль для включения автоматического масштабирования.
+ at end deffn
+
+ at cindex zoom
+ at anchor{zoom}
+ at deffn {Команда MGL} zoom @code{x1 y1 x2 y2}
+Масштабирует весь рисунок. После вызова функции текущий график будет очищен и в дальнейшем рисунок будет содержать только область [x1,x2]*[y1,y2] от исходного рисунка. Координаты @var{x1}, @var{x2}, @var{y1}, @var{y2} меняются в диапазоне от 0 до 1. Внимание! эти настройки не могут быть переписаны никакими другими функциями. Используйте @code{zoom 0 0 1 1} для перехода в масштаб по умолчанию.
+ at end deffn
+
+ at c ==================================================================
+ at node Cutting @MGL{}, Other settings @MGL{}, Zooming @MGL{}, Graphics setup @MGL{}
+ at subsection Обрезание @MGL{}
+
+Эти команды задают условия когда точка будет исключена (вырезана) из рисования. Замечу, что все точки со значением(-ями) @code{nan} по одной из координат или амплитуде автоматически исключаются из рисования.
+
+ at cindex cut
+ at anchor{cut}
+ at deffn {Команда MGL} cut @code{val}
+Задает обрезание точек за пределами осей координат. Если @code{on} то такие точки исключаются из рисования (это по умолчанию) иначе они проецируются на ограничивающий прямоугольник.
+ at end deffn
+
+ at deffn {Команда MGL} cut @code{x1 y1 z1 x2 y2 z2}
+Задает границы параллелепипеда внутри которого точки не рисуются. Если границы одинаковы (переменные равны), то параллелепипеда считается пустым. @sref{CutMinMax sample}
+ at end deffn
+
+ at deffn {Команда MGL} cut 'cond'
+Задает условие обрезания по формуле @var{cond}. Это условие исключает точки из рисования если результат вычисления формулы не равен нулю. Установите аргумент @code{''} для выключения условия обрезания. @sref{CutOff sample}
+ at end deffn
+
+ at c ==================================================================
+ at node Other settings @MGL{}, , Cutting @MGL{}, Graphics setup @MGL{}
+ at subsection Прочие настройки @MGL{}
+
+ at cindex font
+ at anchor{font}
+ at deffn {Команда MGL} font 'fnt' [@code{val=6}]
+Задает стиль и размер шрифта (@pxref{Text printing}). Вначале используется @samp{rC} -- прямой шрифт с выравниванием по центру. По умолчанию размер подписей оси координат в 1.4 раза больше.
+ at end deffn
+
+ at cindex rotatetext
+ at anchor{rotatetext}
+ at deffn {Команда MGL} rotatetext @code{val}
+Включает/выключает вращение меток и подписей осей координат вдоль оси. Начальное значение @code{on}.
+ at end deffn
+
+ at cindex palette
+ at anchor{palette}
+ at deffn {Команда MGL} palette 'colors'
+Задает палитру как последовательность цветов. Значение по умолчанию @code{"Hbgrcmyhlnqeup"}, что соответствует цветам: темно серый @samp{H}, синий @samp{b}, зеленый @samp{g}, красный @samp{r}, голубой @samp{c}, малиновый @samp{m}, желтый @samp{y}, серый @samp{h}, сине-зеленый  @samp{l}, небесно-голубой @samp{n}, оранжевый @samp{q}, желто-зеленый @samp{e}, сине-фиолетовый @samp{u}, фиолетовый @samp{p}. Палитра в основном используется в 1D графиках (@pxref{1D plotting}) для кривых с неопределенным стилем линии.
+ at end deffn
+
+ at cindex meshnum
+ at anchor{meshnum}
+ at deffn {Команда MGL} meshnum @code{num}
+Задает ориентировочное число линий в @ref{mesh}, @ref{fall}, @ref{grid}, число стрелок (штрихов) в @ref{vect}, @ref{dew} и число ячеек в @ref{cloud}. По умолчанию (=0) рисуются все линии, стрелки, ячейки.
+ at end deffn
+
+ at cindex axialdir
+ at anchor{axialdir}
+ at deffn {Команда MGL} axialdir 'dir'
+Задает ось вращения для @ref{axial}, @ref{torus}. По умолчанию это 'z'.
+ at end deffn
+
+ at c ==================================================================
+ at node Axis settings @MGL{}, Transformation matrix @MGL{}, Graphics setup @MGL{}, MGL interface
+ at section Параметры осей координат @MGL{}
+
+Этот большой набор команд определяет вид осей и меток координат. Перед построением для каждой точки выполняются 3 преобразования: сначала определяется возможность рисования точки (@pxref{Cutting @MGL{}}), далее применяются формулы перехода к криволинейным координатам и наконец точка отображается.
+
+ at cindex axis
+ at anchor{axis}
+ at deffn {Команда MGL} axis @code{x1 y1 x2 y2}
+ at deffnx {Команда MGL} axis @code{x1 y1 z1 x2 y2 z2}
+ at cindex ranges
+ at anchor{ranges}
+ at deffnx {Команда MGL} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]}
+Задает диапазон изменения координат. Если минимальное и максимальное значение координаты равны, то они игнорируются по данному направлению. Также устанавливает размер цветовой шкалы, аналогично команде  @code{caxis z1 z2}. Начальные диапазоны равны [-1, 1].
+ at end deffn
+
+ at deffn {Команда MGL} axis 'fx' 'fy' ['fz'='' 'fa'='']
+Задает формулы перехода к криволинейным координатам. Каждая строка является математическим выражением, зависящим от старых координат @samp{x}, @samp{y}, @samp{z} и @samp{a} или @samp{c} для цветовой шкалы. Например, для цилиндрических координат будет @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. Для удаления формул соответствующий параметр должен быть пустым @code{''}. Использование формул преобразования слегка замедляет программу, т.е.. @code{axis '' '' ''} быстрее чем @code{axis '1*x' '1*y' '1*z'}. Параметр @var{fa} задает аналогичную формулу для цветовой шкалы. @xref{Textual formulas}.
+ at end deffn
+
+ at deffn {Команда MGL} axis @code{how}
+Устанавливает одну из предопределенных систем криволинейных координат в зависимости от параметра @var{how}: @samp{0} -- декартова система (нет преобразования координат, наиболее быстрая); @samp{1} -- полярные координаты @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @samp{2} -- сферические координаты @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @samp{3} -- параболические координаты @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @samp{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @samp{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @samp{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @samp{7} -- эллиптические координаты @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @samp{8} -- тороидальные координаты @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @samp{9} -- бисферические координаты @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @samp{10} -- биполярные координаты @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}.
+ at end deffn
+
+ at cindex caxis
+ at anchor{caxis}
+ at deffn {Команда MGL} caxis @code{z1 z2}
+Задает масштаб цветовой шкалы (c-координаты). Эти значения используются для определения цвета поверхностей и прочих 2D и 3D графиков. Начальный диапазон равен [-1, 1].
+ at end deffn
+
+ at cindex origin
+ at anchor{origin}
+ at deffn {Команда MGL} origin @code{x0 y0 [z0=nan]}
+Задает центр пересечения осей координат. Если одно из значений равно @code{nan}, то выбрается оптимальное положение осей координат по этому направлению.
+ at end deffn
+
+ at cindex ternary
+ at anchor{ternary}
+ at deffn {Команда MGL} ternary @code{val}
+Задает рисование треугольных (Ternary) осей координат. Это специальный тип графика для 3 зависимых координат (компонент) @var{a}, @var{b}, @var{c} таких, что @var{a}+ at var{b}+ at var{c}=1. MathGL использует только 2 независимые координаты @var{a}=x и @var{b}=y поскольку их достаточно для построения всех графиков. При этом третья координата z является независимым параметром для построения линий уровня, поверхностей и т.д. @sref{Ternary plot sample}
+ at end deffn
+
+ at cindex xrange
+ at anchor{xrange}
+ at deffn {Команда MGL} xrange dat [@code{add=off fact=0}]
+ at cindex yrange
+ at anchor{yrange}
+ at deffnx {Команда MGL} yrange dat [@code{add=off fact=0}]
+ at cindex zrange
+ at anchor{zrange}
+ at deffnx {Команда MGL} zrange dat [@code{add=off fact=0}]
+ at cindex crange
+ at anchor{crange}
+ at deffnx {Команда MGL} crange dat [@code{add=off fact=0}]
+Задает диапазон изменения x-,y-,z-,c- координат как минимальное и максимальное значение массива @var{dat}. Параметр @var{add} указывает добавлять новый диапазон к существующему или заменять его. Параметр @var{fact} дополнительно расширяет диапазон на величину (@var{Max}- at var{Min})*@var{fact}.
+ at end deffn
+
+ at deffn {Команда MGL} xrange @code{x1 x2}
+ at deffnx {Команда MGL} yrange @code{x1 x2}
+ at deffnx {Команда MGL} zrange @code{x1 x2}
+ at deffnx {Команда MGL} crange @code{x1 x2}
+Задает диапазон изменения x-,y-,z-,c- координат. См. также @ref{axis}.
+ at end deffn
+
+ at cindex xtick
+ at anchor{xtick}
+ at deffn {Команда MGL} xtick @code{val [sub=0 org=nan]}
+ at cindex ytick
+ at anchor{ytick}
+ at deffnx {Команда MGL} ytick @code{val [sub=0 org=nan]}
+ at cindex ztick
+ at anchor{ztick}
+ at deffnx {Команда MGL} ztick @code{val [sub=0 org=nan]}
+ at cindex ctick
+ at anchor{ctick}
+ at deffnx {Команда MGL} ctick @code{val}
+Задает шаг меток осей @var{val}, число подметок @var{ns} и начальное положение меток @var{org}. Переменная @var{val} задает шаг меток (если положительна) или их число на оси (если отрицательна). Нулевое значение задает логарифмические метки. Если @var{org}=@code{NAN}, то используется значение из @ref{origin}.
+ at end deffn
+
+ at deffn {Команда MGL} xtick 'templ'
+ at deffnx {Команда MGL} ytick 'templ'
+ at deffnx {Команда MGL} ztick 'templ'
+ at deffnx {Команда MGL} ctick 'templ'
+Задает шаблоны для меток вдоль x-,y-,z-оси или colorbar. Шаблон может содержать и символы TeX. Если @var{xtt}, @var{ytt}, @var{ztt}, @var{ctt}=@code{''}, то используется шаблон по умолчанию (в простейшем случае @samp{%.2g}). Установка шаблона выключает автоматическое улучшение вида меток.
+ at end deffn
+
+ at deffn {Команда MGL} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
+ at deffnx {Команда MGL} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
+ at deffnx {Команда MGL} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
+Задает явное положение @var{val} и подписи @var{lbl} для меток вдоль оси. Метки могут содержать и символы TeX.
+ at end deffn
+
+ at cindex adjust
+ at anchor{adjust}
+ at deffn {Команда MGL} adjust ['dir'='xyzc']
+Автоматически задает шаг меток осей, число подметок и начальное положение меток для осей координат @var{dir} в виде наиболее удобном для человека.
+ at end deffn
+
+
+ at c ##################################################################
+ at node Transformation matrix @MGL{}, Export to file @MGL{}, Axis settings @MGL{}, MGL interface
+ at section Матрица преобразования @MGL{}
+
+Эти команды контролируют где и как график будет расположен. Существует определенный порядок вызова этих функций для лучшего вида графика. Вначале должны вызываться команды @ref{subplot} или @ref{inplot} для указания местоположения вывода. После них -- команды вращения @ref{rotate} и сжатия @ref{aspect}. И наконец любые другие функции для рисования графика. Вместо вращения графика можно вызвать команды @ref{columnplot} для расположения графиков в столбец одного над другим или @ref{stickplot} для расположения в линейку.
+
+ at cindex subplot
+ at anchor{subplot}
+ at deffn {Команда MGL} subplot @code{nx ny m [dx=0 dy=0]}
+Помещает последующий вывод в @var{m}-ую ячейку сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". С эстетической точки зрения не рекомендуется вызывать эту функцию с различными (или не кратными) размерами сетки. Ячейка может быть дополнительно сдвинута относительно своего обычного положения на относительный размер @var{dx}, @var{dy}.
+ at end deffn
+
+ at deffn {Команда MGL} subplot @code{nx ny m} 'style'
+Аналогично предыдущему, но место для осей/colorbar резервируется только если строка @var{style} содержит: @samp{L} или @samp{<} -- с левого края, @samp{R} или @samp{>} -- с правого края, @samp{A} или @samp{^} -- с верхнего края, @samp{U} или @samp{_} -- с нижнего края.
+ at end deffn
+
+ at cindex inplot
+ at anchor{inplot}
+ at deffn {Команда MGL} inplot @code{x1 x2 y1 y2 [rel=off]}
+Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунка. Если параметр @var{rel}=@code{on}, то используется позиция относительно текщего @ref{subplot} (или @ref{inplot} с @var{rel}=@code{off}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика".
+ at end deffn
+
+ at cindex columnplot
+ at anchor{columnplot}
+ at deffn {Команда MGL} columnplot @code{num ind [d=0]}
+Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова @ref{subplot} (или @ref{inplot} с @var{rel}=@code{off}). Параметр @var{d} задает дополнительный зазор между строк. @sref{ColumnPlot sample}
+ at end deffn
+
+ at cindex stickplot
+ at anchor{stickplot}
+ at deffn {Команда MGL} stickplot @code{num ind tet phi}
+Помещает последующий вывод в @var{ind}-ую ячейку "бруска" из @var{num} ячеек. При этом сам брусок повернут на углы @var{tet}, @var{phi}. Положение выбирается относительно последнего вызова @ref{subplot} (или @ref{inplot} с @var{rel}=@code{off}). @sref{StickPlot sample}
+ at end deffn
+
+ at cindex rotate
+ at anchor{rotate}
+ at deffn {Команда MGL} rotate @code{tetz tetx [tety=0]}
+Вращает систему координат относительно осей @{x, z, y@} последовательно на углы @var{tetx}, @var{tetz}, @var{tety}.
+ at end deffn
+
+ at deffn {Команда MGL} rotate @code{tet x y z}
+Вращает систему координат относительно вектора @{@var{x}, @var{y}, @var{z}@} на угол @var{tet}.
+ at end deffn
+
+ at cindex aspect
+ at anchor{aspect}
+ at deffn {Команда MGL} aspect @code{ax ay [az=1]}
+Устанавливает соотношение размеров осей в отношении @var{ax:ay:az}. Для лучшего вида следует вызывать после функции @ref{rotate}.
+ at end deffn
+
+ at cindex perspective
+ at anchor{perspective}
+ at deffn {Команда MGL} perspective @code{val}
+Добавляет (включает) перспективу для графика. Параметр @math{val ~ 1/z_@{eff@} \in [0,1)}. По умолчанию (@code{val=0}) перспектива отключена.
+ at end deffn
+
+ at c ##################################################################
+ at node Export to file @MGL{}, Primitives drawing @MGL{}, Transformation matrix @MGL{}, MGL interface
+ at section Экспорт в файл @MGL{}
+
+ at cindex write
+ at anchor{write}
+ at deffn {Команда MGL} write 'fname' [@code{solid=off}]
+Экспортирует текущий кадр в файл 'fname' (тип определяется по расширению). Параметр @var{solid} задает вывод картинки на текущем фоне (обычно белом) или полупрозрачной. Если 'fname'='', то используется имя @samp{frame####.jpg}, где @samp{####} -- текущий номер кадра.
+ at end deffn
+
+ at cindex setsize
+ at anchor{setsize}
+ at deffn {Команда MGL} setsize @code{w h}
+Изменяет размер картинки в пикселях. Функция должна вызываться @strong{перед} любыми функциями построения потому что полностью очищает содержимое рисунка. В некоторых программах исполнение этой команды может запрещено.
+ at end deffn
+
+
+ at c ##################################################################
+ at node Primitives drawing @MGL{}, Text printing @MGL{}, Export to file @MGL{}, MGL interface
+ at section Рисование примитивов
+
+Эти команды рисуют рисуют простые объекты типа линий, точек, сфер, капель, конусов, и т.д.
+
+ at cindex clf
+ at anchor{clf}
+ at deffn {Команда MGL} clf
+Очищает рисунок и заполняет его цветом по умолчанию (обычно белым). 
+ at end deffn
+
+ at cindex ball
+ at anchor{ball}
+ at deffn {Команда MGL} ball @code{x y} ['col'='r']
+ at deffnx {Команда MGL} ball @code{x y z} ['col'='r']
+Рисует точку (шарик) с координатами @{@var{x}, @var{y}, @var{z}@} и цветом @var{col}.
+ at end deffn
+
+ at cindex line
+ at anchor{line}
+ at deffn {Команда MGL} line @code{x1 y1 x2 y2} ['stl'='']
+ at deffnx {Команда MGL} line @code{x1 y1 z1 x2 y2 z2} ['stl'='']
+Рисует геодезическую линию (декартовых координатах -- прямую) из точки @{@var{x1}, at var{y1}, at var{z1}@} в @{@var{x2}, at var{y2}, at var{z2}@} использую стиль линии @var{stl}. Кривая рисуется даже если часть ее лежит вне диапазона осей координат.
+ at end deffn
+
+ at cindex curve
+ at anchor{curve}
+ at deffn {Команда MGL} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'='']
+ at deffnx {Команда MGL} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'='']
+Рисует кривую Безье из точки @{@var{x1}, at var{y1}, at var{z1}@} в @{@var{x2}, at var{y2}, at var{z2}@} использую стиль линии @var{stl}. Касательные в точках пропорциональны @{@var{dx1}, at var{dy1}, at var{dz1}@}, @{@var{dx2}, at var{dy2}, at var{dz2}@}. Кривая рисуется даже если часть ее лежит вне диапазона осей координат.
+ at end deffn
+
+ at cindex facex
+ at anchor{facex}
+ at deffn {Команда MGL} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}]
+ at cindex facey
+ at anchor{facey}
+ at deffnx {Команда MGL} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}]
+ at cindex facez
+ at anchor{facez}
+ at deffnx {Команда MGL} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}]
+Рисует закрашенный прямоугольник (грань) перпендикулярно оси [x,y,z] в точке @{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl} и шириной @var{wx}, @var{wy}, @var{wz} вдоль соответствующего направления. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета (полезно для градиента цвета, например @samp{wwrr}). Параметры @var{d1}!=0, @var{d2}!=0 задают дополнительный сдвиг последней точки (т.е. рисуют четырехугольник). Грань будет нарисована даже если часть ее лежит вне диапазона осей координат.
+ at end deffn
+
+ at cindex sphere
+ at anchor{sphere}
+ at deffn {Команда MGL} sphere @code{x0 y0 r} ['col'='r']
+ at deffnx {Команда MGL} sphere @code{x0 y0 z0 r} ['col'='r']
+Рисует сферу радиуса @var{r} с центром в точке @{@var{x}, @var{y}, @var{z}@} цветом @var{stl}.
+ at end deffn
+
+ at cindex drop
+ at anchor{drop}
+ at deffn {Команда MGL} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}]
+ at deffnx {Команда MGL} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}]
+Рисует каплю радиуса @var{r} в точке @{@var{x0}, at var{y0}, at var{z0}@} вытянутую вдоль направления @{@var{dx}, at var{dy}, at var{dz}@} цветом @var{col}. Параметр @var{sh} определяет степень вытянутости: @samp{0} -- сфера, @samp{1} -- классическая капля. Параметр @var{asp} определяет относительную ширину капли (аналог "эллиптичности" для сферы). @sref{Drops sample}
+ at end deffn
+
+ at cindex cone
+ at anchor{cone}
+ at deffn {Команда MGL} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'stl'='' @code{edge=off}]
+Рисует трубу (или усеченный конус если @var{edge}=@code{off}) между точками @{@var{x1}, at var{y1}, at var{z1}@}, @{@var{x2}, at var{y2}, at var{z2}@} с радиусами на концах @var{r1}, @var{r2}. Если @var{r2}<0, то полагается @var{r2}=@var{r1}. Цвет конуса задается строкой @var{stl}.
+ at end deffn
+
+ at cindex rect
+ at anchor{rect}
+ at deffn {Команда MGL} rect @code{x1 y1 x2 y2} ['st'='']
+ at deffnx {Команда MGL} rect @code{x1 y1 z1 x2 y2 z2} ['st'='']
+Рисует закрашенный прямоугольник (грань) с противоположными вершинами в точках @{@var{x1}, at var{y1}, at var{z1}@}, @{@var{x2}, at var{y2}, at var{z2}@} цветом @var{stl}. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета (полезно для градиента цвета, например @samp{wwrr}). Грань будет нарисована даже если часть ее лежит вне диапазона осей координат.
+ at end deffn
+
+ at c ##################################################################
+ at node Text printing @MGL{}, Axis and Colorbar @MGL{}, Primitives drawing @MGL{}, MGL interface
+ at section Вывод текста @MGL{}
+
+Команды для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. Можно использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее @pxref{Font styles}). Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=- at var{size}*@var{fontsize}) если отрицателен.
+
+Параметры шрифта задаются строкой, которая может содержать символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRC}). Также строка может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) после символа @samp{:}. Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Например, строка @samp{iC:b} соответствует курсиву синего цвета с выравниванием по центру. По умолчанию используются параметры, определенные командой @ref{font}.
+
+Если строка содержит символы @samp{aA}, то текст выводится в абсолютных координатах (полагаются в диапазоне [0,1]). При этом используются координаты относительно рисунка (если указано @samp{A}) или относительно последнего @ref{subplot}/@ref{inplot} (если указано @samp{a}).
+
+ at cindex text
+ at anchor{text}
+ at deffn {Команда MGL} text @code{x y} 'text' ['fnt'='' @code{size=-1.4}]
+ at deffnx {Команда MGL} text @code{x y z} 'text' ['fnt'='' @code{size=-1.4}]
+Выводит строку @var{text} от точки @{@var{x}, at var{y}, at var{z}@} шрифтом @var{fnt} и размером @var{size}.
+ at end deffn
+
+ at deffn {Команда MGL} text @code{x y dx dy} 'text' [@code{size=-1.4}]
+ at deffnx {Команда MGL} text @code{x y z dx dy dz} 'text' [@code{size=-1.4}]
+Выводит строку @var{text} от точки @{@var{x}, at var{y}, at var{z}@} вдоль направления @{@var{dx}, at var{dy}, at var{dz}@} шрифтом @var{fnt} и размером @var{size}.
+ at end deffn
+
+ at deffn {Команда MGL} text ydat 'text' ['fnt'='' @code{size=-1 zval=nan}]
+ at deffnx {Команда MGL} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}]
+ at deffnx {Команда MGL} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}]
+Выводит строку @var{text} вдоль кривой @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} шрифтом @var{font}. Строка @var{font} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста над кривой. Если массив @var{xdat} не указан, то используется массив со значениями равно распределенными вдоль оси x. Если массив @var{zdat} не указан, то используется @var{zdat}[i] = @var{zval}. @sref{Text sample}
+ at end deffn
+
+ at cindex title
+ at anchor{title}
+ at deffn {Команда MGL} title 'text' ['fnt'='' @code{size=-2}]
+Выводит строку @var{text} как заголовок (сверху рисунка). Может использоваться в любом месте (даже внутри @ref{subplot}).
+ at end deffn
+
+ at cindex fgets
+ at anchor{fgets}
+ at deffn {Команда MGL} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}]
+ at deffnx {Команда MGL} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}]
+Выводит @var{n}-ую строку файла @var{fname} от точки @{@var{x}, at var{y}, at var{z}@} шрифтом @var{fnt} и размером @var{size}.
+ at end deffn
+
+
+ at c ##################################################################
+ at node Axis and Colorbar @MGL{}, Legend @MGL{}, Text printing @MGL{}, MGL interface
+ at section Оси и Colorbar @MGL{}
+
+Эти команды рисуют объекты для "измерения" типа осей координат, цветовой таблицы (colorbar), сетку по осям, обрамляющий параллелепипед и подписи по осям координат. См. также @ref{Axis settings @MGL{}}.
+
+ at cindex axis
+ at c @anchor{}
+ at deffn {Команда MGL} axis ['dir'='xyz' @code{adjust=off}]
+Рисует оси координат и метки на них (@pxref{Axis settings @MGL{}}) в направлениях, указанных строкой @var{dir}. Если строка содержит символ @samp{_}, то подписи меток отображаться не будут. Шрифт подписей определяется командой @ref{font}. Метки будут "подогнаны" если @var{adjust}=@code{on} (с помощью вызова @code{adjust 'dir'}). 
+ at end deffn
+
+ at cindex colorbar
+ at anchor{colorbar}
+ at deffn {Команда MGL} colorbar ['sch'='' @code{pos=0}]
+Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=''}) с краю от графика. Параметр @var{pos} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. Если строка @var{sch} содержит @samp{<>^_}, то параметр @var{pos} определяется как: @code{pos=0} для @samp{>} (справа), @code{pos=1} для @samp{<} (слева), @code{pos=2} для @samp{^} (сверху), @code{pos=3} для @samp{_} (снизу). Если строка содержит @samp{A}, то используются абсолютные координаты (относительно рисунка). @sref{Dens sample}
+ at end deffn
+
+ at deffn {Команда MGL} colorbar vdat ['sch'='' @code{pos=0}]
+Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{vdat}. @sref{ContD sample}
+ at end deffn
+
+ at deffn {Команда MGL} colorbar 'sch' @code{pos x y w h}
+Аналогично первому, но в произвольном месте графика @{@var{x}, @var{y}@} (полагаются в диапазоне [0,1]). Параметры @var{w}, @var{h} задают относительную ширину и высоту colorbar.
+ at end deffn
+
+ at cindex grid
+ at anchor{grid}
+ at deffn {Команда MGL} grid ['dir'='xyz' 'pen'='B']
+Рисует линии сетки в направлениях перпендикулярным @var{dir}. Шаг сетки такой же как у меток осей координат. Стиль линий задается параметром @var{pen} (по умолчанию -- сплошная темно синяя линия @samp{B-}).
+ at end deffn
+
+ at cindex box
+ at anchor{box}
+ at deffn {Команда MGL} box ['stl'='k' @code{ticks=on}]
+Рисует ограничивающий параллелепипед цветом 'stl'. При @code{ticks=on} рисуются метки в соответствии с текущими настройками осей координат @ref{axis}.
+ at end deffn
+
+ at cindex xlabel
+ at anchor{xlabel}
+ at deffn {Команда MGL} xlabel 'text' [@code{pos=0 size=-1.4 shift=0}]
+ at cindex ylabel
+ at anchor{ylabel}
+ at deffnx {Команда MGL} ylabel 'text' [@code{pos=0 size=-1.4 shift=0}]
+ at cindex zlabel
+ at anchor{zlabel}
+ at deffnx {Команда MGL} zlabel 'text' [@code{pos=0 size=-1.4 shift=0}]
+ at cindex tlabel
+ at anchor{tlabel}
+ at deffnx {Команда MGL} tlabel 'text' [@code{pos=0 size=-1.4 shift=0}]
+Выводит подпись @var{text} для x-,y-,z-,t-оси (где @samp{t} -- ``тернарная'' ось @math{t=1-x-y}). Параметр @var{pos} задает положение подписи: при @var{pos}=0 -- по центру оси, при @var{pos}>0 -- около максимальных значений, при @var{pos}<0 -- около минимальных значений. Параметр @var{size} задает размер шрифта (по умолчанию в 1.4 раза больше чем у меток). @xref{Text printing @MGL{}}.
+ at end deffn
+
+ at c ##################################################################
+ at node Legend @MGL{}, 1D plotting @MGL{}, Axis and Colorbar @MGL{}, MGL interface
+ at section Легенда @MGL{}
+
+Эти команды обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд), накапливаемые во внутренние массивы с помощью команды @ref{addlegend} или опции @ref{legend}. Положение легенды можно задать автоматически или вручную. Параметры @var{font} и @var{size} задают стиль и размер шрифта. Параметр @var{llen} задает относительную ширину примера линии. Ели стиль линии пустой, то соответствующий текст печатается без отступа. Если строка @var{font} содержит символ @samp{A}, то координаты легенды считаются относительно картинки (а не текущего subplot). @sref{Legend sample}
+
+ at cindex legend
+ at anchor{legend}
+ at deffn {Команда MGL} legend [@code{pos=3} 'fnt'='rL' @code{size=-1 llen=0.1}]
+Рисует легенду из накопленных записей шрифтом @var{fnt} размером @var{size}. Параметр @var{pos} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию).
+ at end deffn
+
+ at deffn {Команда MGL} legend @code{x y} ['fnt'='rL' @code{size=-1 llen=0.1}]
+Рисует легенду из накопленных записей шрифтом @var{font} размером @var{size}. Положение легенды задается параметрами @var{x}, @var{y}, которые полагаются нормированными в диапазоне [0,1].
+ at end deffn
+
+ at cindex addlegend
+ at anchor{addlegend}
+ at deffn {Команда MGL} addlegend 'text' 'stl'
+Добавляет описание @var{text} кривой со стилем @var{stl} (@pxref{Line styles}) во внутренний массив записей легенды. Максимальное число записей 100.
+ at end deffn
+
+ at cindex clearlegend
+ at anchor{clearlegend}
+ at deffn {Команда MGL} clearlegend
+Очищает внутренний массив записей легенды.
+ at end deffn
+
+ at cindex legendbox
+ at anchor{legendbox}
+ at deffn {Команда MGL} legendbox @code{val}
+Включает/выключает рисование прямоугольника вокруг легенды. По умолчанию (=@code{on}) прямоугольник рисуется.
+ at end deffn
+
+ at cindex legendmarks
+ at anchor{legendmarks}
+ at deffn {Команда MGL} legendmarks @code{val}
+Задает число маркеров в легенде. По умолчанию используется 1 маркер.
+ at end deffn
+
+ at c ##################################################################
+ at node 1D plotting @MGL{}, 2D plotting @MGL{}, Legend @MGL{}, MGL interface
+ at section 1D графики @MGL{}
+
+Эти команды строят графики для одномерных (1D) массивов. Одномерными считаются массивы, зависящие только от одного параметра (индекса) подобно кривой в параметрической форме @{x(i),y(i),z(i)@}, i=1...n. Есть 5 основных типов 1D графиков: линия (@ref{plot}), линия с заполнением (@ref{area}), ступеньки (@ref{step}), прямоугольники (@ref{bars}, @ref{barh}) и вертикальные линии (@ref{stem}). Все эти типы графиков имеют похожий интерфейс. Есть версии для рисования в пространстве и на плоскости. В последнем случае имеется возможность использования только одного массива. Стиль линии и маркеров указывается строковой переменной. Если она равна @code{''}. Кроме того, есть еще несколько типов графиков для одномерных массивов, имеющих другой интерфейс и вид: поверхность вращения кривой (@ref{torus}), диаграмма (@ref{chart}), размер ошибки (@ref{error}), маркеры переменного размера (@ref{mark}), трубками (@ref{tube}) и т.д. @sref{1D plot sample}
+
+График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{xdat.nx=ydat.nx=zdat.nx}. Если массив @var{xdat} не указан, то используется массив со значениями равно распределенными вдоль оси x. Если массив @var{zdat} не указан, то используется @var{zdat}[i] = @var{zval}. Строка @var{stl} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{stl=''}) рисуется сплошная линия с текущим цветом из палитры.
+
+ at cindex plot
+ at anchor{plot}
+ at deffn {Команда MGL} plot ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} plot xdat ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} plot xdat ydat zdat ['stl'='']
+Рисует ломанную линию между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@}. См. также @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}. @sref{Plot sample}
+ at end deffn
+
+
+ at cindex radar
+ at anchor{radar}
+ at deffn {Команда MGL} radar adat ['stl'='' @code{r=-1}]
+Рисует radar chart, представляющий собой ломанную с вершинами на радиальных линиях (типа ломанной в полярных координатах). График рисуется для каждой строки если один из массивов матрица. Параметр @var{r} задает дополнительный сдвиг данных (т.е. используется @var{a}+ at var{r} вместо @var{a}). Если @code{r<0}, то @code{r=max(0, -min(a)}. Если @var{stl} содержит символ @samp{#}, то также рисуется "сетка" (радиальные линии и круг для @var{r}). См. также @ref{plot}. @sref{Radar sample}
+ at end deffn
+
+ at cindex tens
+ at anchor{tens}
+ at deffn {Команда MGL} tens ydat cdat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} tens xdat ydat cdat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} tens xdat ydat zdat cdat ['stl'='']
+Рисует ломанную линию по точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@} с цветом, определяемым массивом @var{c}[i] (типа графика натяжений). См. также @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample}
+ at end deffn
+
+ at cindex area
+ at anchor{area}
+ at deffn {Команда MGL} area ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} area xdat ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} area xdat ydat zdat ['stl'='']
+Рисует ломанную линию по точками @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} и закрашивает ее вниз до плоскости осей координат. Можно использовать градиентное закрашивание если число указанных цветов в @var{stl} равно удвоенному числу кривых для построения. Если строка содержит символ @samp{a}, то линии рисуются одна поверх другой (с суммированием) -- того же эффекта можно достичь вызовом @code{cumsum ydat 'y'} перед построением графика. См. также @ref{plot}, @ref{bars}, @ref{stem}, @ref{region}. @sref{Area sample}
+ at end deffn
+
+ at cindex region
+ at anchor{region}
+ at deffn {Команда MGL} region fdat gdat ['stl'='' @code{inside=off}]
+ at deffnx {Команда MGL} region xdat fdat gdat ['stl'='' @code{inside=off}]
+Закрашивает область между 2 кривыми @{@var{xdat}[i], @var{fdat}[i]@} и @{@var{xdat}[i], @var{gdat}[i]@}. При  @code{inside=off} закрашивается только область y1<y<y2, в противном случае также будет закращена область y2<y<y1. Можно использовать градиентное закрашивание если число указанных цветов @var{stl} равно удвоенному числу кривых для построения. См. также @ref{area}, @ref{bars}, @ref{stem}. @sref{Region sample}
+ at end deffn
+
+ at cindex stem
+ at anchor{stem}
+ at deffn {Команда MGL} stem ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} stem xdat ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} stem xdat ydat zdat ['stl'='']
+Рисует вертикальные линии из точек @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} до плоскости осей координат. См. также @ref{area}, @ref{bars}, @ref{plot}, @ref{mark}. @sref{Stem sample}
+ at end deffn
+
+ at cindex bars
+ at anchor{bars}
+ at deffn {Команда MGL} bars ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} bars xdat ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} bars xdat ydat zdat ['stl'='']
+Рисует вертикальные полосы (прямоугольники) из точек @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} до плоскости осей координат. Если строка @var{stl} содержит символ @samp{a}, то линии рисуются одна поверх другой. Если строка содержит символ @samp{f}, то рисуется график типа waterfall для определения кумулятивного эффекта последовательности положительных и отрицательных значений. Можно использовать разные цвета для положительных и отрицательных значений если число указанных цветов равно удвоенному числу кривых для построения. См. также @ref{barh}, @ref{area}, @ref{stem}, @ref{chart}. @sref{Bars sample}
+ at end deffn
+
+ at cindex barh
+ at anchor{barh}
+ at deffn {Команда MGL} barh xdat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} barh ydat xdat ['stl'='' @code{zval=nan}]
+Рисует горизонтальные полосы (прямоугольники) из точек @{@var{xdat}[i], @var{ydat}[i]@} до плоскости оси y. Если массив @var{ydat} не указан, то используется массив со значениями равно распределенными вдоль оси y. Если строка @var{stl} содержит символ @samp{a}, то линии рисуются одна поверх другой. Если строка содержит символ @samp{f}, то рисуется график типа waterfall для определения кумулятивного эффекта последовательности положительных и отрицательных значений. Можно использовать разные цвета для положительных и отрицательных значений если число указанных цветов равно удвоенному числу кривых для построения. См. также @ref{bars}. @sref{Barh sample}
+ at end deffn
+
+ at cindex chart
+ at anchor{chart}
+ at deffn {Команда MGL} chart adat ['col'='']
+Рисует цветные полосы (пояса) для массива данных @var{adat}. Число полос равно числу строк @var{adat} (равно @var{a.ny}). Цвет полос поочередно меняется из цветов указанных в @var{col} или в палитре (если @code{col=''}). Пробел в цветах соответствует прозрачному "цвету", т.е. соответствующая полоса не рисуется. Ширина полосы пропорциональна значению элемента в @var{adat}. График строится только для массивов не содержащих отрицательных значений. Если строка @var{col} содержит @samp{#}, то рисуется также черная граница полос. График выглядит лучше в 3d (после вращения системы координат) и/или в полярной системе координат (становится Pie chart). @sref{Chart sample}
+ at end deffn
+
+ at cindex step
+ at anchor{step}
+ at deffn {Команда MGL} step ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} step xdat ydat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} step xdat ydat zdat ['stl'='']
+Рисует ступеньки для точек массива @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. См. также @ref{plot}, @ref{stem}, @ref{tile}, @ref{boxs}. @sref{Step sample}
+ at end deffn
+
+ at cindex torus
+ at anchor{torus}
+ at deffn {Команда MGL} torus zdat ['stl'='']
+ at deffnx {Команда MGL} torus rdat zdat ['stl'='']
+Рисует поверхность вращения кривой @{@var{rdat}[i], @var{zdat}[i], @var{zdat}[i]@} относительно оси @ref{axialdir}. Если массив @var{rdat} не указан, то используется массив со значениями равно распределенными вдоль оси x. См. также @ref{plot}, @ref{axial}. @sref{Torus sample}
+ at end deffn
+
+ at cindex tube
+ at anchor{tube}
+ at deffn {Команда MGL} tube ydat rdat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} tube ydat @code{rval} ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} tube xdat ydat rdat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} tube xdat ydat @code{rval} ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} tube xdat ydat zdat rdat ['stl'='']
+ at deffnx {Команда MGL} tube xdat ydat zdat @code{rval} ['stl'='']
+Рисует трубу радиуса @var{rdat}[i] (or @var{rval}) вдоль кривой между точками @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. См. также @ref{plot}. @sref{Tube sample}
+ at end deffn
+
+ at cindex mark
+ at anchor{mark}
+ at deffn {Команда MGL} mark ydat rdat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} mark xdat ydat rdat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} mark xdat ydat zdat rdat ['stl'='']
+Рисует маркеры размером @var{rdat}[i]*@code{marksize} в точках @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Для рисования маркеров одинакового размера можно использовать функцию @code{plot} с невидимой линией (со стилем содержащим @samp{ }). См. также @ref{plot}, @ref{textmark}, @ref{stem}, @ref{error}. @sref{Mark sample}
+ at end deffn
+
+ at cindex textmark
+ at anchor{textmark}
+ at deffn {Команда MGL} textmark ydat 'txt' ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} textmark ydat rdat 'txt' ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} textmark xdat ydat rdat 'txt' ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} textmark xdat ydat zdat rdat 'txt' ['stl'='']
+Рисует текст @var{txt} как маркер с размером пропорциональным @var{rdat}[i]*@code{marksize} в точках @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если массив @var{rdat} не указан, то полагается @var{rdat}[i] = 1. См. также @ref{plot}, @ref{mark}, @ref{stem}. @sref{TextMark sample}
+ at end deffn
+
+ at cindex error
+ at anchor{error}
+ at deffn {Команда MGL} error ydat yerr ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} error xdat ydat yerr ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} error xdat ydat xerr yerr ['stl'='' @code{zval=nan}]
+Рисует размер ошибки @{@var{xerr}[i], @var{yerr}[i]@} в точках @{@var{xdat}[i], @var{ydat}[i]@} на плоскости @var{z} = @var{zval}. Такой график полезен для отображения ошибки эксперимента, вычислений и пр. См. также @ref{plot}. @sref{Error sample}
+ at end deffn
+
+ at cindex boxplot
+ at anchor{boxplot}
+ at deffn {Команда MGL} boxplot adat ['stl'='' @code{zval=nan}]
+ at deffnx {Команда MGL} boxplot xdat adat ['stl'='' @code{zval=nan}]
+Рисует boxplot (называемый также как box-and-whisker diagram или как "ящик с усами") в точках @var{xdat}[i] на плоскости @var{z} = @var{zval}. Это график, компактно изображающий распределение вероятностей @var{adat}[i,j] (минимум, нижний квартиль (Q1), медиана (Q2), верхний квартиль (Q3) и максимум) вдоль второго (j-го) направления. См. также @ref{plot}, @ref{error}, @ref{bars}. @sref{BoxPlot sample}
+ at end deffn
+
+ at c ##################################################################
+ at node 2D plotting @MGL{}, 3D plotting @MGL{}, 1D plotting @MGL{}, MGL interface
+ at section 2D графики @MGL{}
+
+Эти команды строят графики для двумерных (2D) массивов. Двумерными считаются массивы, зависящие только от двух параметров (индексов) подобно матрице @math{f(x_i,y_j), i=1...n, j=1...m}. Есть несколько основных типов 2D графиков: сплошная поверхность (@ref{surf}), сетчатая поверхность (@ref{mesh}), поверхность из ящиков (@ref{boxs}), поверхность из плиток (@ref{tile}), водопад (@ref{fall}), ленточки (@ref{belt}), график плотности (@ref{dens}), линии уровня (@ref{cont}), линии уровня с заполнением (@ref{contf}) и результат их вращения (@ref{axial}). В функциях @ref{cont}, @ref{contf} и @ref{axial} значения уровней можно задавать автоматически и вручную. Можно также нарисовать сетку (@ref{grid}) по массиву данных для улучшения вида графика плотности или линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданной поверхности. @sref{1D plot sample}
+
+Строка @var{sch} задает цветовую схему (@pxref{Color scheme}. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{xdat}, @var{ydat}, @var{zdat} должны быть одинаковы @code{xdat.nx=zdat.nx && ydat.nx=zdat.ny} или @code{xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny}. Массивы @var{xdat} и @var{ydat} могут быть векторами (не матрицами как @var{zdat}). Если массивы @var{xdat}, @var{ydat} не указаны, то используются массивы со значениями равно распределенными вдоль осей x, y. График строится для каждого z среза данных.
+
+ at cindex surf
+ at anchor{surf}
+ at deffn {Команда MGL} surf zdat ['sch'='']
+ at deffnx {Команда MGL} surf xdat ydat zdat ['sch'='']
+Рисует параметрически заданную поверхность @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. См. также @ref{mesh}, @ref{dens}, @ref{belt}, @ref{tile}, @ref{boxs}, @ref{surfc}, @ref{surfa}. @sref{Surf sample}
+ at end deffn
+
+ at cindex mesh
+ at anchor{mesh}
+ at deffn {Команда MGL} mesh zdat ['sch'='']
+ at deffnx {Команда MGL} mesh xdat ydat zdat ['sch'='']
+Рисует сетчатую поверхность, заданную параметрически @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. См. также @ref{surf}, @ref{fall}, @ref{meshnum}, @ref{cont}, @ref{tens}. @sref{Mesh sample}
+ at end deffn
+
+ at cindex fall
+ at anchor{fall}
+ at deffn {Команда MGL} fall zdat ['sch'='']
+ at deffnx {Команда MGL} fall xdat ydat zdat ['sch'='']
+Рисует водопад для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. График удобен для построения нескольких кривых, сдвинутых вглубь друг относительно друга. Если @var{sch} содержит @samp{x}, то линии рисуются вдоль x-оси (по умолчанию линии рисуются вдоль y-оси). См. также @ref{belt}, @ref{mesh}, @ref{tens}, @ref{meshnum}. @sref{Fall sample}
+ at end deffn
+
+ at cindex belt
+ at anchor{belt}
+ at deffn {Команда MGL} belt zdat ['sch'='']
+ at deffnx {Команда MGL} belt xdat ydat zdat ['sch'='']
+Рисует ленточки для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Если @var{sch} содержит @samp{x}, то линии рисуются вдоль x-оси (по умолчанию линии рисуются вдоль y-оси). См. также @ref{fall}, @ref{surf}, @ref{plot}, @ref{meshnum}. @sref{Belt sample}
+ at end deffn
+
+ at cindex boxs
+ at anchor{boxs}
+ at deffn {Команда MGL} boxs zdat ['sch'='']
+ at deffnx {Команда MGL} boxs xdat ydat zdat ['sch'='']
+Рисует вертикальные ящики для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. См. также @ref{surf}, @ref{dens}, @ref{tile}, @ref{step}. @sref{Boxs sample}
+ at end deffn
+
+ at cindex tile
+ at anchor{tile}
+ at deffn {Команда MGL} tile zdat ['sch'='']
+ at deffnx {Команда MGL} tile xdat ydat zdat ['sch'='']
+Рисует плитки для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. График может использоваться как 3d обобщение @ref{step}. См. также @ref{surf}, @ref{boxs}, @ref{step}, @ref{tiles}. @sref{Tile sample}
+ at end deffn
+
+ at cindex dens
+ at anchor{dens}
+ at deffn {Команда MGL} dens zdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} dens xdat ydat zdat ['sch'='' @code{zval=nan}]
+Рисует график плотности для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} при @var{z} = @var{zVal}. Если @var{sch} содержит @samp{#}, то рисуется сетка. См. также @ref{surf}, @ref{cont}, @ref{contf}, @ref{boxs}, @ref{tile}, @code{dens[xyz]}. @sref{Dens sample}
+ at end deffn
+
+ at cindex cont
+ at anchor{cont}
+ at deffn {Команда MGL} cont vdat zdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} cont vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
+Рисует линии уровня для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} при @var{z} = @var{zval} (или при @var{z=vdat}[k] если @code{zval==nan}). Линии уровня рисуются для @var{z}=@var{vdat}[k]. Если @var{sch} содержит @samp{#}, то рисуется сетка. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{vdat}[k] будут выведены вдоль контуров над (или под) кривой. См. также @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample}
+ at end deffn
+
+ at deffn {Команда MGL} cont zdat ['sch'='' @code{num=7 zval=nan}]
+ at deffnx {Команда MGL} cont xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
+Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в интервале цветовой шкалы (см., @ref{caxis}).
+ at end deffn
+
+ at cindex contf
+ at anchor{contf}
+ at deffn {Команда MGL} contf vdat zdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} contf vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
+Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} при @var{z} = @var{zval} (или при @var{z=v}[k] если @code{zval=nan}). Линии уровня рисуются для @var{z}=@var{vdat}[k]. Если @var{sch} содержит @samp{#}, то рисуется сетка. См. также @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample}
+ at end deffn
+
+ at deffn {Команда MGL} contf zdat ['sch'='' @code{num=7 zval=nan}]
+ at deffnx {Команда MGL} contf xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
+Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в интервале цветовой шкалы (см., @ref{caxis}).
+ at end deffn
+
+ at cindex contd
+ at anchor{contd}
+ at deffn {Команда MGL} contd vdat zdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} contd vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
+Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} при @var{z} = @var{zval} (или при @var{z=v}[k] если @code{zval==nan}) цветами заданными явно. Линии уровня рисуются для @var{z}=@var{vdat}[k]. Строка @var{sch} задает цвет контуров: цвет k-го контура определяется символом @code{sch[k%strlen(sch)]}. См. также @ref{dens}, @ref{cont}, @ref{contf}, @code{cont[xyz]}. @sref{ContD sample}
+ at end deffn
+
+ at deffn {Команда MGL} contd zdat ['sch'='' @code{num=7 zval=nan}]
+ at deffnx {Команда MGL} contd xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
+Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в интервале цветовой шкалы (см., @ref{caxis}).
+ at end deffn
+
+ at cindex axial
+ at anchor{axial}
+ at deffn {Команда MGL} axial vdat zdat ['sch'='']
+ at deffnx {Команда MGL} axial vdat xdat ydat zdat ['sch'='']
+Рисует поверхность вращения линии уровня для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Линии уровня рисуются для @var{zdat}[i,j]=@var{vdat}[k]. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если строка содержит символы @samp{x}, @samp{y} или @samp{z}, то ось вращения устанавливается в указанное направление (по умолчанию вдоль оси @ref{axialdir}). См. также @ref{cont}, @ref{contf}, @ref{torus}, @ref{surf3}. @sref{Axial sample}
+ at end deffn
+
+ at deffn {Команда MGL} axial zdat ['sch'='' @code{num=3}]
+ at deffnx {Команда MGL} axial xdat ydat zdat ['sch'='' @code{num=3}]
+Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в интервале цветовой шкалы (см., @ref{caxis}).
+ at end deffn
+
+ at cindex grad
+ at anchor{grad}
+ at deffn {Команда MGL} grad pdat ['sch'='' @code{num=5 zval=nan}]
+ at deffnx {Команда MGL} grad xdat ydat pdat ['sch'='' @code{num=5 zval=nan}]
+ at deffnx {Команда MGL} grad xdat ydat zdat pdat ['sch'='' @code{num=5}]
+Рисует линии градиента скалярного поля @var{pdat} заданного параметрически @{@var{xdat}[i,j], @var{ydat}[i,j]@} или @{@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]@}. Число линий пропорционально @var{num}. Линии рисуются только с границ интервала при @var{num}<0. См. также @ref{dens}, @ref{cont}, @ref{dens3}, @ref{cont3}, @ref{flow}. @sref{Grad sample}
+ at end deffn
+
+
+ at cindex grid2
+ at anchor{grid2}
+ at deffn {Команда MGL} grid2 zdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} grid2 xdat ydat zdat ['sch'='' @code{zval=nan}]
+Рисует плоскую сету для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} при @var{z} = @var{zval}. См. также @ref{dens}, @ref{cont}, @ref{contf}.
+ at end deffn
+
+
+ at c ##################################################################
+ at node 3D plotting @MGL{}, Dual plotting @MGL{}, 2D plotting @MGL{}, MGL interface
+ at section 3D графики @MGL{}
+
+Эти функции строят графики для трехмерных (3D) массивов. Трехмерными считаются массивы, зависящие от трех параметров (индексов) подобно матрице @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. Есть 5 основных типов 3D графиков: поверхность постоянного уровня (@ref{surf3}), график плотности на срезе (@var{dens3}), линии уровня на срезе (@ref{cont3}), закрашенные контуры уровня на срезе (@ref{contf3}) и график объемной прозрачности типа облака (@ref{cloud}). В функциях @ref{cont3}, @ref{contf3} и @ref{surf3} значения уровней можно задавать автоматически и вручную. Можно также нарисовать на срезе сетку (@ref{grid3}) по массиву данных для улучшения вида графика плотности или линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. @sref{3D plot sample}
+
+Строка @var{sch} задает цветовую схему (@pxref{Color scheme}). Предыдущая цветовая схема используется по умолчанию. Массивы @var{x}, @var{y}, @var{z} могут быть векторами (не 3d массивами как @var{a}). Если массивы @var{xdat}, @var{ydat}, @var{zdat} не указаны, то используются массивы со значениями равно распределенными вдоль осей x, y, z.
+
+
+ at cindex surf3
+ at anchor{surf3}
+ at deffn {Команда MGL} surf3 adat @code{val} ['sch'='']
+ at deffnx {Команда MGL} surf3 xdat ydat zdat adat @code{val} ['sch'='']
+Рисует поверхность уровня для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) при @var{adat}(x,y,z)=@var{val}. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. См. также @ref{cloud}, @ref{dens3}, @ref{surf3c}, @ref{surf3a}, @ref{axial}. @sref{Surf3 sample}
+ at end deffn
+
+ at deffn {Команда MGL} surf3 adat ['sch'='' @code{num=5}]
+ at deffnx {Команда MGL} surf3 xdat ydat zdat adat ['sch'='' @code{num=5}]
+Рисует @var{num} поверхностей уровня равномерно распределенных в интервале цветовой шкалы (см. @ref{caxis}).
+ at end deffn
+
+ at cindex dens3
+ at anchor{dens3}
+ at deffn {Команда MGL} dens3 adat 'dir' [@code{sval=-1} 'sch'='']
+ at deffnx {Команда MGL} dens3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
+Рисует график плотности для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). График рисуется на срезе @var{sval} в направлении @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@}. Если @var{stl} содержит @samp{#}, то на срезе рисуется сетка. См. также @ref{cont3}, @ref{contf3}, @ref{dens}, @ref{grid3}. @sref{Dens3 sample}
+ at end deffn
+
+ at cindex densa
+ at anchor{densa}
+ at deffn {Команда MGL} densa adat ['sch'='']
+ at deffnx {Команда MGL} densa xdat ydat zdat adat ['sch'='']
+Рисует графики плотности на всех центральных срезах 3d данных.
+ at end deffn
+
+ at cindex cont3
+ at anchor{cont3}
+ at deffn {Команда MGL} cont3 vdat adat 'dir' [@code{sval=-1} 'sch'='']
+ at deffnx {Команда MGL} cont3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
+Рисует линии уровня для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Линии рисуются для значений из массива @var{v} на срезе @var{sval} в направлении @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@}. Если @var{stl} содержит @samp{#}, то на срезе рисуется сетка. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{vdat}[k] будут выведены вдоль контуров над (или под) кривой. См. также @ref{dens3}, @ref{contf3}, @ref{cont}, @ref{grid3}. @sref{Cont3 sample}
+ at end deffn
+
+ at deffn {Команда MGL} cont3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
+ at deffnx {Команда MGL} cont3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
+Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в интервале цветовой шкалы (см., @ref{caxis}).
+ at end deffn
+
+ at cindex conta
+ at anchor{conta}
+ at deffn {Команда MGL} conta adat ['sch'='' @code{num=7}]
+ at deffnx {Команда MGL} conta xdat ydat zdat adat ['sch'='' @code{num=7}]
+Рисует линии уровня на всех центральных срезах 3d данных.
+ at end deffn
+
+ at cindex contf3
+ at anchor{contf3}
+ at deffn {Команда MGL} contf3 vdat adat 'dir' [@code{sval=-1} 'sch'='']
+ at deffnx {Команда MGL} contf3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
+Рисует закрашенные линии (контуры) уровня для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Линии рисуются для значений из массива @var{v} на срезе @var{sval} в направлении @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@}. Если @var{stl} содержит @samp{#}, то на срезе рисуется сетка. См. также @ref{dens3}, @ref{cont3}, @ref{contf}, @ref{grid3}. @sref{ContF3 sample}
+ at end deffn
+
+ at deffn {Команда MGL} contf3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
+ at deffnx {Команда MGL} contf3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
+Как предыдущий с вектором @var{v} из @var{num} элементов равно распределенных в интервале цветовой шкалы (см., @ref{caxis}).
+ at end deffn
+
+ at cindex contfa
+ at anchor{contfa}
+ at deffn {Команда MGL} contfa adat ['sch'='' @code{num=7}]
+ at deffnx {Команда MGL} contfa xdat ydat zdat adat ['sch'='' @code{num=7}]
+Рисует закрашенные линии (контуры) уровня на всех центральных срезах 3d данных.
+ at end deffn
+
+ at cindex grid3
+ at anchor{grid3}
+ at deffn {Команда MGL} grid3 adat 'dir' [@code{sval=-1} 'sch'='']
+ at deffnx {Команда MGL} grid3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
+Рисует сетку для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). График рисуется на срезе @var{sval} в направлении @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@}. См. также @ref{cont3}, @ref{contf3}, @ref{dens3}, @ref{grid2}.
+ at end deffn
+
+ at cindex grida
+ at anchor{grida}
+ at deffn {Команда MGL} grida adat ['sch'='']
+ at deffnx {Команда MGL} grida xdat ydat zdat adat ['sch'='']
+Рисует сетку на всех центральных срезах 3d данных.
+ at end deffn
+
+ at cindex cloud
+ at anchor{cloud}
+ at deffn {Команда MGL} cloud adat ['sch'='']
+ at deffnx {Команда MGL} cloud xdat ydat zdat adat ['sch'='']
+Рисует облачный график для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). График состоит из кубиков с цветом и прозрачностью пропорциональной значениям @var{adat}. Результат похож на облако -- малые значения прозрачны, а большие нет. Число кубиков зависит от @ref{meshnum}. Параметр @var{alpha} меняет общую прозрачность графика. См. также @ref{surf3}. @sref{Cloud sample}
+ at end deffn
+
+ at cindex beam
+ at anchor{beam}
+ at deffn {Команда MGL} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}]
+Рисует поверхность уровня для 3d массива @var{adat} при постоянном значении @var{adat}=@var{val}. Это специальный тип графика для @var{adat} заданного в сопровождающей системе координат вдоль кривой @var{tr} с ортами @var{g1}, @var{g2} и с поперечным размером @var{rval}. Переменная @var{flag} -- битовый флаг: @samp{0x1} - рисовать в сопровождающих (не лабораторных) координатах; @samp{0x2} - рисовать проекцию на плоскость @math{\rho-z}; @samp{0x4} - рисовать нормированное в каждом сечении поле. Размеры массивов по 1-му индексу @var{tr}, @var{g1}, @var{g2} должны быть nx>2. Размеры массивов по 2-му индексу @var{tr}, @var{g1}, @var{g2} и размер по 3-му индексу массива @var{adat} должны быть одинаковы. См. также @ref{surf3}.
+ at end deffn
+
+
+ at c ##################################################################
+ at node Dual plotting @MGL{}, Vector fields @MGL{}, 3D plotting @MGL{}, MGL interface
+ at section Парные графики @MGL{}
+
+Эти команды строят графики для двух связанных массивов. Есть несколько основных типов 3D графиков: поверхность и поверхность уровня с окраской по второму массиву (@ref{surfc}, @ref{surf3c}), поверхность и поверхность уровня с прозрачностью по второму массиву (@ref{surfa}, @ref{surf3a}), плитки переменного размера (@ref{tiles}), диаграмма точечного отображения (@ref{map}), STFA диаграмма (@ref{stfa}). В командах @ref{surf3a} и @ref{surf3c} значения уровней можно задавать автоматически и вручную. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива.
+
+Строка @var{sch} задает цветовую схему (@pxref{Color scheme}). Предыдущая цветовая схема используется по умолчанию. Массивы @var{x}, @var{y}, @var{z} могут быть векторами (не 3d массивами как @var{a}). Если массивы @var{xdat}, @var{ydat}, @var{zdat} не указаны, то используются массивы со значениями равно распределенными вдоль осей x, y, z.
+
+ at cindex surfc
+ at anchor{surfc}
+ at deffn {Команда MGL} surfc zdat cdat ['sch'='']
+ at deffnx {Команда MGL} surfc xdat ydat zdat cdat ['sch'='']
+Рисует параметрически заданную поверхность @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} с цветом, заданным массивом @var{cdat}[i,j]. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. См. также @ref{surf}, @ref{surfa}, @ref{surf3c}. @sref{SurfC sample}
+ at end deffn
+
+ at cindex surf3c
+ at anchor{surf3c}
+ at deffn {Команда MGL} surf3c adat cdat @code{val} ['sch'='']
+ at deffnx {Команда MGL} surf3c xdat ydat zdat adat cdat @code{val} ['sch'='']
+Рисует поверхность уровня для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) при @var{a}(x,y,z)=@var{val}. Аналогично @ref{surf3}, но цвет задается массивом @var{cdat}. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. См. также @ref{surf3}, @ref{surfc}, @ref{surf3a}. @sref{Surf3C sample}
+ at end deffn
+
+ at deffn {Команда MGL} surf3c adat cdat ['sch'='' @code{num=5}]
+ at deffnx {Команда MGL} surf3c xdat ydat zdat adat cdat ['sch'='' @code{num=5}]
+Рисует @var{num} поверхностей уровня равномерно распределенных в интервале цветовой шкалы (см. @ref{caxis}).
+ at end deffn
+
+ at cindex surfa
+ at anchor{surfa}
+ at deffn {Команда MGL} surfa zdat cdat ['sch'='']
+ at deffnx {Команда MGL} surfa xdat ydat zdat cdat ['sch'='']
+Рисует параметрически заданную поверхность @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} с прозрачностью, заданным массивом @var{cdat}[i,j]. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. См. также @ref{surf}, @ref{surfc}, @ref{surf3a}. @sref{SurfA sample}
+ at end deffn
+
+ at cindex surf3a
+ at anchor{surf3a}
+ at deffn {Команда MGL} surf3a adat cdat @code{val} ['sch'='']
+ at deffnx {Команда MGL} surf3a xdat ydat zdat adat cdat @code{val} ['sch'='']
+Рисует поверхность уровня для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) при @var{a}(x,y,z)=@var{val}. Аналогично @ref{surf3}, но прозрачность задается массивом @var{cdat}. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. См. также @ref{surf3}, @ref{surfa}, @ref{surf3c}. @sref{Surf3A sample}
+ at end deffn
+
+ at deffn {Команда MGL} surf3a adat cdat ['sch'='' @code{num=5}]
+ at deffnx {Команда MGL} surf3a xdat ydat zdat adat cdat ['sch'='' @code{num=5}]
+Рисует @var{num} поверхностей уровня равномерно распределенных в интервале цветовой шкалы (см. @ref{caxis}).
+ at end deffn
+
+ at cindex tiles
+ at anchor{tiles}
+ at deffn {Команда MGL} tiles zdat rdat ['sch'='']
+ at deffnx {Команда MGL} tiles xdat ydat zdat rdat ['sch'='']
+Рисует плитки для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Аналогично @ref{tile}, но размер плиток задается массивов @var{rdat}. Это создает эффект "прозрачности" при экспорте в файлы EPS. См. также @ref{surfa}, @ref{tile}. @sref{TileS sample}
+ at end deffn
+
+ at cindex map
+ at anchor{map}
+ at deffn {Команда MGL} map udat vdat ['sch'='' @code{pnts=on}]
+ at deffnx {Команда MGL} map xdat ydat udat vdat ['sch'='' @code{pnts=on}]
+Визуализирует точечное отображение для матриц @{@var{udat}, @var{vdat} @} параметрически зависящих от координат @var{xdat}, @var{ydat}. Исходное положение ячейки задает ее цвет. Высота пропорциональна якобиану Jacobian(udat,vdat). График является аналогом диаграммы Арнольда. Если @code{pnts=off}, то рисуются грани, иначе цветные точки рисуются в узлах матриц (полезно для "запутанного" отображения). @sref{Map sample}
+ at end deffn
+
+ at cindex stfa
+ at anchor{stfa}
+ at deffn {Команда MGL} stfa re im @code{dn} ['sch'='' @code{pnts=on}]
+ at deffnx {Команда MGL} stfa xdat ydat re im @code{dn} ['sch'='' @code{pnts=on}]
+Рисует спектрограмму комплексного массива @var{re}+i*@code{im} для Фурье размером @var{dn} точек. Параметр @var{dn} -- любое четное число. Например в 1D случае, результатом будет график плотности от массива @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} размером @{int(nx/dn), dn, ny@}. Массивы @var{re}, @var{im} параметрически зависят от координат @var{xdat}, @var{ydat}. @sref{STFA sample}
+ at end deffn
+
+
+
+
+ at c ##################################################################
+ at node Vector fields @MGL{}, Other plotting @MGL{}, Dual plotting @MGL{}, MGL interface
+ at section Векторные поля @MGL{}
+
+Эти функции рисуют графики для 2D и 3D векторных полей. Есть несколько типов графиков: просто векторное поле (@ref{vect}), вектора вдоль траектории (@ref{traj}), векторное поле каплями (@ref{dew}), нити тока (@ref{flow}), трубки тока (@ref{pipe}). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива.
+
+Строка @var{sch} задает цветовую схему (@pxref{Color scheme}). Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay} для 2D случаев.
+
+ at cindex traj
+ at anchor{traj}
+ at deffn {Команда MGL} traj xdat ydat udat vdat ['sch'='' @code{zval=nan len=0}]
+ at deffnx {Команда MGL} traj xdat ydat zdat udat vdat wdat ['sch'='' @code{len=0}]
+Рисует вектора @{@var{udat}, @var{vdat}, @var{wdat}@} вдоль кривой @{@var{xdat}, @var{ydat}, @var{zdat}@}. Длина векторов пропорциональна @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. Строка @var{pen} задает цвет (@pxref{Line styles}). По умолчанию (@code{pen=''}). Параметр @var{len} задает фактор длины векторов (если не нуль) или выбирать длину пропорционально расстоянию между точками кривой (если @var{len}=0). См. также @ref{vect}. @sref{Traj sample}
+ at end deffn
+
+ at cindex vect
+ at anchor{vect}
+ at deffn {Команда MGL} vect udat vdat ['sch'='' @code{zval=nan flag=0}]
+ at deffnx {Команда MGL} vect xdat ydat udat vdat ['sch'='' @code{zval=nan flag=0}]
+Рисует векторное поле @{@var{udat}, @var{vdat}@} параметрически зависящее от координат @var{xdat}, @var{ydat} на плоскости при @var{z}=@var{zval}. Длина и цвет векторов пропорциональна @math{\sqrt@{ax^2+ay^2@}}. Число рисуемых векторов зависит от @ref{meshnum}. Параметр @var{flag} побитовый флаг для настройки вид векторов: @code{1} -- двуцветный вектор, @code{2} -- одинаковая длина векторов, @code{4} -- рисует стрелку в точку сетки, @code{8} -- рисует стрелку с серединой в точке сетки, @code{16} -- рисует штрихи вместо стрелок. См. также @ref{flow}, @ref{dew}, @ref{vectc}. @sref{Vect sample}
+ at end deffn
+
+ at deffn {Команда MGL} vect udat vdat wdat ['sch'='' @code{flag=0}]
+ at deffnx {Команда MGL} vect xdat ydat zdat udat vdat wdat ['sch'='' @code{flag=0}]
+Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а длина и цвет пропорциональны @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample}
+ at end deffn
+
+ at cindex vectc
+ at anchor{vectc}
+ at deffn {Команда MGL} vectc udat vdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} vectc xdat ydat udat vdat ['sch'='' @code{zval=nan}]
+Аналогично @ref{vect} c @code{flag=2+16=18}. @sref{VectC sample}
+ at end deffn
+
+ at deffn {Команда MGL} vectc udat vdat wdat ['sch'='']
+ at deffnx {Команда MGL} vectc xdat ydat zdat udat vdat wdat ['sch'='']
+Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а длина и цвет пропорциональны @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectC 3D sample}
+ at end deffn
+
+ at cindex vectl
+ at anchor{vectl}
+ at deffn {Команда MGL} vectl udat vdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} vectl xdat ydat udat vdat ['sch'='' @code{zval=nan}]
+Аналогично @ref{vect} c @code{flag=1+16=17}. @sref{VectL sample}
+ at end deffn
+
+ at deffn {Команда MGL} vectl udat vdat wdat ['sch'='']
+ at deffnx {Команда MGL} vectl xdat ydat zdat udat vdat wdat ['sch'='']
+Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а длина и цвет пропорциональны @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectL 3D sample}
+ at end deffn
+
+ at cindex dew
+ at anchor{dew}
+ at deffn {Команда MGL} dew udat vdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} dew xdat ydat udat vdat ['sch'='' @code{zval=nan}]
+Рисует капли для векторного поля @{@var{udat}, @var{vdat}@}, параметрически зависящего от координат @var{xdat}, @var{ydat} при @var{z=zval}. Замечу, что график требует много памяти и процессорного времени для своего создания! Цвет капель пропорционален @math{\sqrt@{ax^2+ay^2@}}. Число капель определяется @ref{meshnum}. См. также @ref{vect}. @sref{Dew sample}
+ at end deffn
+
+ at cindex flow
+ at anchor{flow}
+ at deffn {Команда MGL} flow udat vdat ['sch'='' @code{num=5 zval=nan}]
+ at deffnx {Команда MGL} flow xdat ydat udat vdat ['sch'='' @code{num=5 zval=nan}]
+Рисует нити тока для векторного поля @{@var{udat}, @var{vdat}@}, параметрически зависящего от координат @var{xdat}, @var{ydat} на плоскости при z = @var{zval}. Число нитей пропорционально @var{num}. При @var{num}>0 нитей могут стартовать и изнутри сетки, в противном случае только с краев. Цвет нитей пропорционален @math{\sqrt@{udat^2+vdat^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). См. также @ref{pipe}, @ref{vect}. @sref{Flow sample}
+ at end deffn
+
+ at deffn {Команда MGL} flow udat vdat wdat ['sch'='' @code{num=3}]
+ at deffnx {Команда MGL} flow xdat ydat zdat udat vdat wdat ['sch'='' @code{num=3}]
+Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а цвет пропорционален @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample}
+ at end deffn
+
+ at deffn {Команда MGL} flow @code{x0 y0} udat vdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} flow @code{x0 y0} xdat ydat udat vdat ['sch'='' @code{zval=nan}]
+Рисует нить тока из точки @{@var{x0}, @var{y0}@} для векторного поля @{@var{udat}, @var{vdat}@}, параметрически зависящего от координат @var{xdat}, @var{ydat} на плоскости при z = @var{zval}. Цвет нити пропорционален @math{\sqrt@{udat^2+vdat^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника).
+ at end deffn
+
+ at deffn {Команда MGL} flow @code{x0 y0 z0} udat vdat wdat ['sch'='']
+ at deffnx {Команда MGL} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'='']
+Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а цвет пропорционален @math{\sqrt@{udat^2+vdat^2+wdat^2@}}.
+ at end deffn
+
+
+ at cindex pipe
+ at anchor{pipe}
+ at deffn {Команда MGL} pipe udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}]
+ at deffnx {Команда MGL} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}]
+Рисует трубки тока для векторного поля @{@var{udat}, @var{vdat}@}, параметрически зависящего от координат @var{xdat}, @var{ydat} на плоскости при z = @var{zval}. Число трубок пропорционально @var{num}. При @var{num}>0 нитей могут стартовать и изнутри сетки, в противном случае только с краев. Цвет и радиус трубок пропорционален @math{\sqrt@{udat^2+vdat^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Параметр @var{r0} задает радиус трубок. При @var{r0}<0 радиус трубок обратно пропорционален их амплитуде. См. также @ref{flow}, @ref{vect}. @sref{Pipe sample}
+ at end deffn
+
+ at deffn {Команда MGL} pipe udat vdat wdat ['sch'='' @code{r0=0.05 num=3}]
+ at deffnx {Команда MGL} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05 num=3}]
+Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а цвет пропорционален @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Pipe 3D sample}
+ at end deffn
+
+
+ at c ##################################################################
+ at node Other plotting @MGL{}, Nonlinear fitting @MGL{}, Vector fields @MGL{}, MGL interface
+ at section Прочие графики @MGL{}
+
+Это команды, не относящиеся к какой-то специальной категории. Сюда входят функции построения графиков по текстовым формулам (@ref{fplot}, @ref{fsurf}), рисования поверхностей из треугольников (@ref{triplot}), произвольных точек в пространстве (@ref{dots}) и реконструкции по ним поверхности (@ref{crust}), графики плотности и линии уровня на плоскостях, перпендикулярных осям x, y или z (dens[xyz], cont[xyz], contf[xyz]). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Строка @var{sch} задает цветовую схему (@pxref{Color scheme}). Предыдущая цветовая схема используется по умолчанию.
+
+ at cindex densx
+ at cindex densy
+ at cindex densz
+ at anchor{densx} @anchor{densy} @anchor{densz}
+ at deffn {Команда MGL} densx dat ['sch'='' @code{val=nan}]
+ at deffnx {Команда MGL} densy dat ['sch'='' @code{val=nan}]
+ at deffnx {Команда MGL} densz dat ['sch'='' @code{val=nan}]
+Рисуют график плотности на x, y или z плоскостях. Если @var{dat} -- 3d массив, то выполняется интерполяция к заданному срезу @var{val}. Функции полезны для создания проекций 3D массивов на оси координат. См. также @code{cont[xyz], contf[xyz]}, @ref{dens}. @sref{Dens projection sample}
+ at end deffn
+
+ at cindex contx
+ at cindex conty
+ at cindex contz
+ at anchor{contz} @anchor{conty} @anchor{contx}
+ at deffn {Команда MGL} contx dat ['sch'='' @code{val=nan num=7}]
+ at deffnx {Команда MGL} conty dat ['sch'='' @code{val=nan num=7}]
+ at deffnx {Команда MGL} contz dat ['sch'='' @code{val=nan num=7}]
+Рисуют линии уровня на x, y или z плоскостях. Если @var{dat} -- 3d массив, то выполняется интерполяция к заданному срезу @var{val}. Функции полезны для создания проекций 3D массивов на оси координат. См. также @code{dens[xyz], contf[xyz]}, @ref{cont}. @sref{Cont projection sample}
+ at end deffn
+
+ at cindex contfx
+ at cindex contfy
+ at cindex contfz
+ at anchor{contfz} @anchor{contfy} @anchor{contfx}
+ at deffn {Команда MGL} contfx dat ['sch'='' @code{val=nan num=7}]
+ at deffnx {Команда MGL} contfy dat ['sch'='' @code{val=nan num=7}]
+ at deffnx {Команда MGL} contfz dat ['sch'='' @code{val=nan num=7}]
+Рисуют закрашенные контуры уровня на x, y или z плоскостях. Если @var{dat} -- 3d массив, то выполняется интерполяция к заданному срезу @var{val}. Функции полезны для создания проекций 3D массивов на оси координат. См. также @code{dens[xyz], cont[xyz]}, @ref{contf}.
+ at end deffn
+
+ at cindex dots
+ at anchor{dots}
+ at deffn {Команда MGL} dots xdat ydat zdat ['sch'='']
+ at deffnx {Команда MGL} dots xdat ydat zdat adat ['sch'='']
+Рисует произвольно расположенные точки @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если определен массив @var{adat}[i], то он задает прозрачность точек. См. также @ref{crust}, @ref{mark}, @ref{plot}. @sref{Dots sample}
+ at end deffn
+
+ at cindex crust
+ at anchor{crust}
+ at deffn {Команда MGL} crust xdat ydat zdat ['sch'='']
+Реконструирует и рисует поверхность по произвольно расположенным точкам @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. См. также @ref{dots}, @ref{triplot}. @sref{Crust sample}
+ at end deffn
+
+ at cindex triplot
+ at anchor{triplot}
+ at deffn {Команда MGL} triplot idat xdat ydat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} triplot idat xdat ydat zdat ['sch'='']
+ at deffnx {Команда MGL} triplot idat xdat ydat zdat cdat ['sch'='']
+Рисует поверхность из треугольников. Вершины треугольников задаются индексами @var{idat} в массиве точек @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{idat} должен быть 3 или больше. Массивы @var{xdat}, @var{ydat}, @var{zdat} должны иметь одинаковые размеры. Массив @var{cdat} задает цвет треугольников (если @var{idat}.ny=@var{cdat}.nx) или цвет вершин (если @var{xdat}.nx=@var{cdat}.nx). См. также @ref{dots}, @ref{crust}, @ref{quadplot}, @ref{tricont}.
+ at end deffn
+
+ at cindex tricont
+ at anchor{tricont}
+ at deffn {Команда MGL} tricont vdat idat xdat ydat zdat cdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} tricont vdat idat xdat ydat zdat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} tricont idat xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
+Рисует линии уровня поверхности из треугольников при @var{z} = @var{zval} (или для z=@var{vdat}[k] если @code{zval==NAN}). Вершины треугольников задаются индексами @var{idat} в массиве точек @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Размер по 1-му индексу массива @var{idat} должен быть 3 или больше. Массивы @var{xdat}, @var{ydat}, @var{zdat} должны иметь одинаковые размеры. Массив @var{cdat} (если указан) задает цвет треугольников (если @var{idat}.ny=@var{cdat}.nx) или цвет вершин (если @var{xdat}.nx=@var{cdat}.nx). См. также @ref{triplot}, @ref{cont}.
+ at end deffn
+
+ at cindex quadplot
+ at anchor{quadplot}
+ at deffn {Команда MGL} quadplot idat xdat ydat ['sch'='' @code{zval=nan}]
+ at deffnx {Команда MGL} quadplot idat xdat ydat zdat ['sch'='']
+ at deffnx {Команда MGL} quadplot idat xdat ydat zdat cdat ['sch'='']
+Рисует поверхность из четырехугольников. Вершины треугольников задаются индексами @var{idat} в массиве точек @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{idat} должен быть 4 или больше. Массивы @var{xdat}, @var{ydat}, @var{zdat} должны иметь одинаковые размеры. Массив @var{cdat} задает цвет четырехугольников (если @var{idat}.ny=@var{cdat}.nx) или цвет вершин (если @var{xdat}.nx=@var{cdat}.nx). См. также @ref{triplot}.
+ at end deffn
+
+ at cindex fplot
+ at anchor{fplot}
+ at deffn {Команда MGL} fplot 'y(x)' ['pen'='' @code{zval=nan num=100}]
+Рисует функцию @samp{y(x)} в плоскости z=@var{zval} с координатой @samp{x} в диапазоне x-оси координат. Параметр @var{num} задает минимальное число точек по координате для графика. См. также @ref{plot}.
+ at end deffn
+
+ at deffn {Команда MGL} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'='' @code{num=100}]
+Рисует параметрическую кривую @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@}, где координата @samp{t} меняется в диапазоне [0, 1]. Параметр @var{num} задает минимальное число точек по координате для графика. См. также @ref{plot}.
+ at end deffn
+
+ at cindex fsurf
+ at anchor{fsurf}
+ at deffn {Команда MGL} fsurf 'z(x,y)' ['sch'='' @code{num=100}]
+Рисует поверхность @samp{z(x,y)} с координатами @samp{x}, @samp{y} в диапазоне x-,y-осей координат. Параметр @var{num} задает минимальное число точек по координатам для графика. См. также @ref{surf}.
+ at end deffn
+
+ at deffn {Команда MGL} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'='' @code{num=100}]
+Рисует параметрическую поверхность @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@}, где координаты @samp{u}, @samp{v} меняются в диапазоне [0, 1]. Параметр @var{num} задает минимальное число точек по координатам для графика. См. также @ref{surf}.
+ at end deffn
+
+
+ at c ##################################################################
+ at node Nonlinear fitting @MGL{}, Data create @MGL{}, Other plotting @MGL{}, MGL interface
+ at section Nonlinear fitting @MGL{}
+
+Эти команды подбирают параметры функций для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от одного аргумента @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения.
+
+Команды @ref{fit} и @ref{fits} не рисуют полученные массивы. Они заполняют массив @var{fit} по формуле @samp{f} с найденными коэффициентами. При этом, координаты @samp{x,y,z} равно распределены в вдоль осей координат. Число точек в @var{fit} выбирается максимальным из размера массива @var{fit} и 100. Формулу с найденными коэффициентами можно вывести с помощью команды @ref{putsfit}. @sref{Fitting sample}
+
+Размерность массивов должны быть не меньше, чем число указанных массивов @var{xdat}, @var{ydat}, @var{zdat}. Также подбор коэффициентов будет осуществляться только вдоль указанных направлений (например, вдоль x и y если указаны только @var{xdat} и @var{ydat}). Если массив @var{xdat} не указан, то используется массив со значениями равно распределенными вдоль оси x.
+
+ at cindex fits
+ at anchor{fits}
+ at deffn {Команда MGL} fits adat sdat 'func' 'var' [ini=0]
+ at deffnx {Команда MGL} fits xdat adat sdat 'func' 'var' [ini=0]
+ at deffnx {Команда MGL} fits xdat ydat adat sdat 'func' 'var' [ini=0]
+ at deffnx {Команда MGL} fits xdat ydat zdat adat sdat 'func' 'var' [ini=0]
+"Подгоняют" формулу вдоль x-, y- и z-направлений для массива заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) с весовыми коэффициентами @var{sdat}[i,j,k].
+ at end deffn
+
+ at cindex fit
+ at anchor{fit}
+ at deffn {Команда MGL} fit adat 'func' 'var' [ini=0]
+ at deffnx {Команда MGL} fit xdat adat 'func' 'var' [ini=0]
+ at deffnx {Команда MGL} fit xdat ydat adat 'func' 'var' [ini=0]
+ at deffnx {Команда MGL} fit xdat ydat zdat adat 'func' 'var' [ini=0]
+"Подгоняют" формулу вдоль x-, y- и z-направлений для массива заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) с весовыми коэффициентами равными 1.
+ at end deffn
+
+ at cindex putsfit
+ at anchor{putsfit}
+ at deffn {Команда MGL} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}]
+Печатает последнюю подобранную формулу с найденными коэффициентами в точке @{@var{x}, @var{y}@}. Строка @var{pre} будет напечатана перед формулой. Все другие параметры такие же как в @ref{Text printing @MGL{}}.
+ at end deffn
+
+
+ at c ##################################################################
+ at node Data create @MGL{}, Data filling @MGL{}, Nonlinear fitting @MGL{}, MGL interface
+ at section Создание данных @MGL{}
+
+ at cindex new
+ at anchor{new}
+ at deffn {Команда MGL} new dat [@code{nx=1 ny=1 nz=1}]
+Создает/пересоздает массив с именем @var{dat} данных указанного размера и заполняет его нулями. Ничего не делает при @var{nx}, @var{ny}, @var{nz} отрицательных или равных нулю.
+ at end deffn
+
+ at cindex var
+ at anchor{var}
+ at deffn {Команда MGL} var dat @code{num v1 [v2=nan]}
+Создает одномерный массив с именем @var{dat} размером @code{num} и заполняет его равномерно в диапазоне [@var{v1}, @var{v2}]. Если @var{v2}=@code{nan}, то используется @var{v2=v1}. 
+ at end deffn
+
+ at cindex list
+ at anchor{list}
+ at deffn {Команда MGL} list dat @code{v1 ...}
+Создает массив с именем @var{dat} и заполняет его числовыми значениями аргументов @code{v1 ...}. Команда может создавать 1d- и 2d-массивы. Для создания 2d-массивов требуется указать разделитель строк данных @samp{|}. Размер массива будет [максимальное число чисел в строке * число строк]. Например, команда @code{list 1 | 2 3} создаст массив [1 0; 2 3]. Отмечу, что максимальное число аргументов 1000. 
+ at end deffn
+
+ at deffn {Команда MGL} list dat d1 ...
+Создает массив с именем @var{dat} и заполняет его числами из массивов @code{d1 ...}. Команда может создавать 2d- и 3d-массивы (если аргументы 2d массивы). Младшие размерности всех массивов в аргументах должны быть равны размерности @var{d1}. Отмечу, что максимальное число аргументов 1000. 
+ at end deffn
+
+ at cindex copy
+ at anchor{copy}
+ at deffn {Команда MGL} copy dat dat2 ['eq'='' @code{on_axis=on}]
+ at deffnx {Команда MGL} copy dat @code{val}
+Создает массив с именем @var{dat} и копирует в него данные из массива @var{dat2}. При этом, если указан параметр @var{eq}, то данные будут изменены по формуле аналогично команде @ref{fill} (для @code{on_axis=on}) или @ref{modify} (для @code{on_axis=off}).
+ at end deffn
+
+ at cindex idset
+ at anchor{idset}
+ at deffn {Команда MGL} idset dat 'ids'
+Устанавливает символьные обозначения для колонок данных. Строка должна содержать символы 'a'...'z' один на колонку (без пробелов).
+ at end deffn
+
+ at cindex info
+ at anchor{info}
+ at deffn {Команда MGL} info dat [@code{detail=off}]
+Выводит информацию о массиве (размер, максимальное/минимальное значение, моменты и пр.). При @code{detail=off} показывается только краткая информация.
+ at end deffn
+
+ at deffn {Команда MGL} info 'text'
+Выводит текст @var{text} как информацию (предупреждение).
+ at end deffn
+
+ at c ------------------------------------------------------------------
+ at node Data filling @MGL{}, Rearrange data @MGL{}, Data create @MGL{}, MGL interface
+ at section Заполнение данных @MGL{}
+ at cindex fill
+ at cindex modify
+
+ at cindex fill
+ at anchor{fill}
+ at deffn {Команда MGL} fill dat v1 v2 ['dir'='x']
+Заполняет значениями равно распределенными в диапазоне [@var{v1}, @var{v2}] в направлении @var{dir}=@{@samp{x}, at samp{y}, at samp{z}@}.
+ at end deffn
+
+ at deffn {Команда MGL} fill dat 'eq' [vdat=0 wdat=0]
+Заполняет значениями вычисленными по формуле @var{eq}. Формула представляет собой произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются меняющимися в диапазоне осей координат (в отличие от @ref{modify}). Переменная @samp{u} -- значения исходного массива, переменные @samp{v}, @samp{w} -- значения массивов @var{vdat}, @var{wdat}. Последние могут быть опущены.
+ at end deffn
+
+ at cindex modify
+ at anchor{modify}
+ at deffn {Команда MGL} modify dat 'eq' [@code{dim=0}]
+ at deffnx {Команда MGL} modify dat 'eq' vdat [wdat=0]
+Заполняет значениями вычисленными по формуле @var{eq}. Формула представляет собой произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются меняющимися в диапазоне [0,1] (в отличие от @ref{fill}). Переменная @samp{u} -- значения исходного массива, переменные @samp{v}, @samp{w} -- значения массивов @var{vdat}, @var{wdat}. Последние могут быть опущены. Если указан @var{dim}>0, то изменяются только слои >=@var{dim}.
+ at end deffn
+
+
+ at cindex put
+ at anchor{put}
+ at deffn {MGL command} put dat @code{val [i=: j=: k=:]}
+Присваивает значения (под-)массива @var{dat}[@var{i}, @var{j}, @var{k}] = @var{val}. Индексы @var{i}, @var{j}, @var{k} равные @samp{:} задают значениия @var{val} для всего диапазона соответствующего направления(ий). Например, @code{put dat val : 0 :} задает @var{dat}[i,0,j]=@var{val} для i=0...(@var{dat}.nx-1), j=0...(@var{dat}.nz-1).
+ at end deffn
+
+ at deffn {MGL command} put dat vdat [@code{i=: j=: k=:}]
+Копирует значения из массива @var{vdat} в диапазон значений массива @var{dat}. Индексы @var{i}, @var{j}, @var{k} равные @samp{:} задают диапазон изменения значений в соответствующих направление(ях). Младшие размерности массива @var{vdat} должны быть больше выбранного диапазона массива @var{dat}. Например, @code{put dat v : 0 :} присвоит @var{dat}[i,0,j]=@var{vdat}.ny>@var{dat}.nz ? @var{vdat}[i,j] : @var{vdat}[i], где i=0...(@var{dat}.nx-1), j=0...(@var{dat}.nz-1) и условие vdat.nx>=dat.nx выполнено.
+ at end deffn
+
+
+
+ at c ------------------------------------------------------------------
+ at node Rearrange data @MGL{}, File I/O @MGL{}, Data filling @MGL{}, MGL interface
+ at section Изменение размеров данных @MGL{}
+
+ at cindex rearrange
+ at anchor{rearrange}
+ at deffn {Команда MGL} rearrange dat @code{mx [my=0 mz=0]}
+Изменяет размерность данных без изменения самого массива данных, так что результирующий массив @var{mx}*@var{my}*@var{mz} < nx*ny*nz. Если один из параметров @var{my} или @var{mz} ноль, то он будет выбран оптимальным образом. Например, если @var{my}=0, то будет @var{my}=nx*ny*nz/@var{mx} и @var{mz}=1.
+ at end deffn
+
+ at cindex extend
+ at anchor{extend}
+ at deffn {Команда MGL} extend dat @code{n1 [n2=0]}
+Увеличивает размер данных путем вставки (|@var{n1}|+1) новых срезов после (для @var{n1}>0) или перед (для @var{n1}<0) существующими данными. Можно добавить сразу 2 размерности для 1d массива, используя второй параметр @var{n2}. Данные в новые срезы будут скопированы из существующих. Например, для @var{n1}>0 новый массив будет
+ at iftex
+ at math{a_{ij}^{new} = a_i^{old}} where j=0... at var{n1}. Соответственно, для @var{n1}<0 новый массив будет @math{a_{ij}^{new} = a_j^{old}}, где i=0...|@var{n1}|.
+ at end iftex
+ at ifnottex
+a_ij^new = a_i^old where j=0... at var{n1}. Соответственно, для @var{n1}<0 новый массив будет a_ij^new = a_j^old, где i=0...|@var{n1}|.
+ at end ifnottex
+ at end deffn
+
+ at cindex transpose
+ at anchor{transpose}
+ at deffn {Команда MGL} transpose dat ['dim'='yxz']
+Транспонирует (меняет порядок размерностей) массив данных. Новый порядок размерностей задается строкой @var{dim}.
+ at end deffn
+
+ at cindex squeeze
+ at anchor{squeeze}
+ at deffn {Команда MGL} squeeze dat @code{rx [ry=1 rz=1 sm=off]}
+Уменьшает размер данных путем удаления элементов с индексами не кратными @var{rx}, @var{ry}, @var{rz} соответственно. Параметр @var{smooth} задает использовать сглаживания
+ at iftex
+(т.е. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) или нет (т.е. @math{a_{out}[i]=a[j*r]}).
+ at end iftex
+ at ifnottex
+(т.е. out[i]=\sum_@{j=i,i+r@} a[j]/r) или нет (т.е. out[i]=a[j*r]).
+ at end ifnottex
+ at end deffn
+
+ at cindex crop
+ at anchor{crop}
+ at deffn {Команда MGL} crop dat @code{n1 n2} 'dir'
+Обрезает границы данных при @var{i}<@var{n1} и @var{i}>@var{n2} (при @var{n2}>0) или @var{i}>@code{n[xyz]}- at var{n2} (при @var{n2}<=0) вдоль направления @var{dir}.
+ at end deffn
+
+ at cindex delete
+ at anchor{delete}
+ at deffn {Команда MGL} delete dat
+Удаляет массив @var{dat} и освобождает использованную память. Может быть полезно для больших неиспользуемых массивов.
+ at end deffn
+
+ at deffn {Команда MGL} delete dat 'dir' @code{[pos=off num=0]}
+Удаляет @var{num} срезов вдоль направления @var{dir} с позиции @var{pos}.
+ at end deffn
+
+ at cindex insert
+ at anchor{insert}
+ at deffn {Команда MGL} insert dat 'dir' @code{[pos=off num=0]}
+Вставляет @var{num} срезов вдоль направления @var{dir} с позиции @var{pos} и заполняет их нулями.
+ at end deffn
+
+ at c ------------------------------------------------------------------
+ at node File I/O @MGL{}, Make another data @MGL{}, Rearrange data @MGL{}, MGL interface
+ at section Чтение/сохранение данных @MGL{}
+
+ at cindex read
+ at anchor{read}
+ at deffn {Команда MGL} read dat 'fname'
+Читает данные из текстового файла с разделителями символом пробела/табуляции с автоматическим определением размера массива. Двойной перевод строки начинает новый срез данных (по направлению z).
+ at end deffn
+
+ at deffn {Команда MGL} read dat 'fname' @code{mx [my=1 mz=1]}
+Читает данные из текстового файла с заданными размерами. Ничего не делается если параметры @var{mx}, @var{my} или @var{mz} равны нулю или отрицательны.
+ at end deffn
+
+ at cindex readmat
+ at anchor{readmat}
+ at deffn {Команда MGL} readmat dat 'fname' [@code{dim=2}]
+Читает данные из текстового файла с размерами, указанными в первых @var{dim} числах файла. При этом переменная @var{dim} задает размерность (1d, 2d, 3d) данных.
+ at end deffn
+
+ at cindex readall
+ at anchor{readall}
+ at deffn {Команда MGL} readall dat 'templ' @code{v1 v2 [dv=1 slice=off]}
+Объединяет данные из нескольких текстовых файлов. Имена файлов определяются вызовом функции @code{sprintf(fname,templ,val);}, где @var{val} меняется от @var{v1} до @var{v2} с шагом @var{dv}. Данные загружаются один за другим в один и тот же срез данных (при @var{slice}=@code{off}) или срез-за-срезом (при @var{slice}=@code{on}).
+ at end deffn
+
+ at deffn {Команда MGL} readall dat 'templ' @code{[slice=off]}
+Объединяет данные из нескольких текстовых файлов, чьи имена удовлетворяют шаблону @var{templ} (например, @var{templ}=@code{"t_*.dat"}). Данные загружаются один за другим в один и тот же срез данных (при @var{slice}=@code{off}) или срез-за-срезом (при @var{slice}=@code{on}).
+ at end deffn
+
+ at cindex save
+ at anchor{save}
+ at deffn {Команда MGL} save dat 'fname'
+Сохраняет массив данных в текстовый файл.
+ at end deffn
+
+ at cindex readhdf
+ at anchor{readhdf}
+ at deffn {Команда MGL} readhdf dat 'fname' 'dname'
+Читает массив с именем @var{dname} из HDF5 или HDF4 файла @var{fname}.
+ at end deffn
+
+ at cindex savehdf
+ at anchor{savehdf}
+ at deffn {Команда MGL} savehdf dat 'fname' 'dname'
+Сохраняет массив под именем @var{dname} в HDF5 или HDF4 файл @var{fname}.
+ at end deffn
+
+ at cindex import
+ at anchor{import}
+ at deffn {Команда MGL} import dat 'fname' 'sch' [@code{v1=0 v2=1}]
+Читает данные из растрового файла. RGB значения пикселов преобразуются в число в диапазоне [@var{v1}, @var{v2}] используя цветовую схему @var{sch} (@pxref{Color scheme}).
+ at end deffn
+
+ at cindex export
+ at anchor{export}
+ at deffn {Команда MGL} export dat 'fname' 'sch' [@code{v1=0 v2=0}]
+Сохраняет данные в растровый файл. Числовые значения, нормированные в диапазон [@var{v1}, @var{v2}], преобразуются в RGB значения пикселов, используя цветовую схему @var{sch} (@pxref{Color scheme}). Если @var{v1}>=@var{v2}, то значения @var{v1}, @var{v2} определяются автоматически как минимальное и максимальное значение данных.
+ at end deffn
+
+ at c ------------------------------------------------------------------
+ at node Make another data @MGL{}, Change data @MGL{}, File I/O @MGL{}, MGL interface
+ at section Создание новых данных @MGL{}
+
+ at cindex combine
+ at anchor{combine}
+ at deffn {Команда MGL} combine res adat bdat
+Возвращает в массиве данных @var{res} прямое произведение массивов (наподобие, res[i,j] = adat[i]*bdat[j] и т.д.).
+ at end deffn
+
+ at cindex evaluate
+ at anchor{evaluate}
+ at deffn {Команда MGL} evaluate res dat idat [@code{norm=on}]
+ at deffnx {Команда MGL} evaluate res dat idat jdat [@code{norm=on}]
+ at deffnx {Команда MGL} evaluate res dat idat jdat kdat [@code{norm=on}]
+Возвращает массив данных @var{res}, полученный в результате интерполяции исходного массива в точках других массивов (например, res[i,j]=dat[idat[i,j],jdat[i,j]]). Размеры массивов @var{idat}, @var{jdat}, @var{kdat} должны совпадать. Координаты в @var{idat}, @var{jdat}, @var{kdat} полагаются нормированными в диапазон [0,1] (при @var{norm}=@code{on}) или в диапазоны [0,nx], [0,ny], [0,nz] соответственно.
+ at end deffn
+
+ at cindex hist
+ at anchor{hist}
+ at deffn {Команда MGL} hist res dat @code{num v1 v2 [nsub=0]}
+ at deffnx {Команда MGL} hist res dat wdat @code{num v1 v2 [nsub=0]}
+Возвращает распределение (гистограмму) @var{res} из @var{num} точек от значений массива @var{dat} в диапазоне [@var{v1}, @var{v2}]. Массив @var{wdat} задает веса элементов (все веса равны 1 если @var{wdat} не указан). Параметр @var{nsub} задает число дополнительных точек интерполяции (для сглаживания получившейся гистограммы).
+ at end deffn
+
+ at deffn {Команда MGL} hist res xdat adat
+ at deffnx {Команда MGL} hist res xdat ydat adat
+ at deffnx {Команда MGL} hist res xdat ydat zdat adat
+Возвращает распределение (гистограмму) @var{res} от значений массива @var{adat}, параметрически зависящего от координат @{@var{xdat}, at var{ydat}, at var{zdat}@} в диапазоне осей координат. Массив @var{adat} играет роль веса точки. Число точек в результате @var{res} -- максимум из размера @var{res} и 100.
+ at end deffn
+
+
+ at cindex momentum
+ at anchor{momentum}
+ at deffn {Команда MGL} momentum res dat 'how' ['dir'='z']
+Возвращает в массиве данных @var{res} момент (1d массив) данных @var{dat} вдоль направления @var{dir}. Строка @var{how} определяет тип момента. Момент определяется как
+ at iftex
+ at math{res_k = \sum_{ij} how(x_i,y_j,z_k) dat_{ij}/\sum_{ij} a_{ij}}
+ at end iftex
+ at ifnottex
+res_k = \sum_ij how(x_i,y_j,z_k) dat_ij/ \sum_ij a_ij
+ at end ifnottex
+если @var{dir}=@samp{z} и т.д. Координаты @samp{x}, @samp{y}, @samp{z} -- индексы массива в диапазоне [0,1].
+ at end deffn
+
+ at cindex sum
+ at anchor{sum}
+ at deffn {Команда MGL} sum res dat 'dir'
+Возвращает в массиве данных @var{res} результат суммирования @var{dat} вдоль направления(ий) @var{dir}.
+ at end deffn
+
+ at cindex max
+ at anchor{max}
+ at deffn {Команда MGL} max res dat 'dir'
+Возвращает в массиве данных @var{res} максимальное значение @var{dat} вдоль направления(ий) @var{dir}.
+Gets array which is the maximal data values in given direction or direction(s).
+ at end deffn
+
+ at cindex min
+ at anchor{min}
+ at deffn {Команда MGL} min res dat 'dir'
+Возвращает в массиве данных @var{res} минимальное значение @var{dat} вдоль направления(ий) @var{dir}.
+ at end deffn
+
+ at cindex resize
+ at anchor{resize}
+ at deffn {Команда MGL} resize res dat @code{mx [my=1 mz=1]}
+Возвращает массив данных @var{res} размером @var{mx}, @var{my}, @var{mz} со значениями полученными интерполяцией значений массива @var{dat}.
+ at end deffn
+
+ at cindex subdata
+ at anchor{subdata}
+ at deffn {Команда MGL} subdata res dat @code{xx [yy=: zz=:]}
+Возвращает в @var{res} подмассив массива данных @var{dat} с фиксированными значениями индексов с положительными значениями. Например, @code{subdata a b : 2} выделяет третью строку (индексы начинаются с нуля), @code{subdata a b 4 :} выделяет 5-ую колонку, @code{subdata a b : : 3} выделяет 4-ый срез и т.д.
+ at end deffn
+
+ at cindex trace
+ at anchor{trace}
+ at deffn {Команда MGL} trace res dat
+Возвращает массив @var{ref} диагональных элементов @var{dat}[i,i] (для 2D данных) или @var{dat}[i,i,i] (для 3D данных) где i=0...nx-1. В 1D случае возвращается сам массив данных @var{dat}. Размеры массива данных должен быть @var{dat}.ny, @var{dat}.nz >= @var{dat}.nx или @var{dat}.ny, @var{dat}.nz = 1.
+ at end deffn
+
+ at cindex transform
+ at anchor{transform}
+ at deffn {Команда MGL} transform dat 'type' real imag
+Выполняет интегральное преобразование комплексных данных @var{real}, @var{imag} в выбранном направлении и возвращает модуль результата в @var{res}. Порядок и тип преобразований задается строкой @var{type}: первый символ для x-направления, второй для y-направления, третий для z-направления. Возможные символы: @samp{f} -- прямое преобразование Фурье, @samp{i} -- обратное преобразование Фурье, @samp{s} -- синус преобразование, @samp{c} -- косинус преобразование, @samp{h} -- преобразование Ханкеля, @samp{n} или @samp{ } -- нет преобразования.
+ at end deffn
+
+ at cindex transforma
+ at anchor{transforma}
+ at deffn {Команда MGL} transforma dat 'type' ampl phase
+Аналогично предыдущему с заданными амплитудой @var{ampl} и фазой @var{phase} комплексных чисел.
+ at end deffn
+
+ at cindex stfad
+ at anchor{stfad}
+ at deffn {Команда MGL} stfad res real imag @code{dn} ['dir'='x']
+Выполняет оконное преобразование Фурье длиной @var{dn} для комплексных данных @var{real}, @var{imag} и возвращает модуль результата в @var{res}. Например, для @var{dir}=@samp{x} результат будет иметь размер @{int(nx/dn), dn, ny@} и будет равен @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
+ at end deffn
+
+ at cindex pde
+ at anchor{pde}
+ at deffn {Команда MGL} pde res 'ham' ini_re ini_im [@code{dz=0.1 k0=100}]
+Решает уравнение в частных производных du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные операторы. Параметры @var{ini_re}, @var{ini_im} задают начальное распределение поля. Координаты в уравнении и в решении полагаются в диапазоне осей координат. Замечу, что внутри этот диапазон увеличивается в 3/2 раза для уменьшения отражения от границ расчетного интервала. Параметр @var{dz} задает шаг по эволюционной координате z. В данный момент использован упрощенный алгоритм, когда все ``смешанные'' члена (типа @samp{x*p}->x*d/dx) исключаются. Например, в 2D случае это функции типа @math{ham = f(p,z) + g(x,z,u)}. При этом допускаются коммутирующие комбинации (типа @samp{x*q}->x*d/dy). Переменная @samp{u} используется для обозначения амплитуды поля |u|. Это позволяет решать нелинейные задачи -- например, нелинейное уравнение Шредингера @code{ham='p^2+q^2-u^2'}. Также можно указать мнимую часть для поглощения (типа @code{ham = 'p^2+i*x*(x>0)'}), но только если зависимость от @samp{i} линейная, т.е. @math{ham = hre+i*him}. @sref{PDE sample}
+ at end deffn
+
+ at cindex ray
+ at anchor{ray}
+ at deffn {Команда MGL} ray res 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]}
+Решает систему геометрооптических уравнений d at emph{r}/dt = d @var{ham}/d at emph{p}, d at emph{p}/dt = -d @var{ham}/d at emph{r}. Это гамильтоновы уравнения для траектории частицы в 3D случае. Гамильтониан @var{ham} может зависеть от координат @samp{x}, @samp{y}, @samp{z}, импульсов @samp{p}=px, @samp{q}=py, @samp{v}=pz и времени @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. Начальная точка (при @code{t=0}) задается переменными @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Параметры @var{dt} и @var{tmax} задают шаг и максимальное время интегрирования. Результат @var{res} -- массив @{x,y,z,p,q,v,t@} с размером @{7 * int(@var{tmax}/@var{dt}+1) @}. @sref{Beam tracing sample}
+ at end deffn
+
+ at cindex qo2d
+ at anchor{qo2d}
+ at deffn {Команда MGL} qo2d res 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx=0 yy=0]
+Решает уравнение в частных производных du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u] в сопровождающей системе координат, где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные операторы. Параметры @var{ini_re}, @var{ini_im} задают начальное распределение поля. Параметр @var{ray} задает опорный луч для сопровождающей системы координат. Можно использовать луч найденный с помощью @code{ray}. Опорный луч должен быть достаточно гладкий, чтобы система координат была однозначной и для исключения ошибок интегрирования. Если массивы @var{xx} и @var{yy} указаны, то в них записываются декартовы координаты для каждой точки найденного решения. См. также @ref{pde}. @sref{Beam tracing sample} 
+ at end deffn
+
+ at cindex jacobian
+ at anchor{jacobian}
+ at deffn {Команда MGL} jacobian res xdat ydat [zdat=0]
+Вычисляет якобиан преобразования @{i,j,k@} в @{@var{xdat}, at var{ydat}, at var{zdat}@}, где координаты @{i,j,k@} полагаются нормированными в интервал [0,1]. Якобиан находится по формуле det||@math{dr_\alpha/d\xi_\beta}||, где @math{r}=@{@var{xdat}, at var{ydat}, at var{zdat}@} и @math{\xi}=@{i,j,k@}. Все размерности всех массивов должны быть одинаковы. Данные должны быть трехмерными если указаны все 3 массива @{@var{xdat}, at var{ydat}, at var{zdat}@} или двумерными если только 2 массива @{@var{xdat}, at var{ydat}@}.
+ at end deffn
+
+
+
+ at c ------------------------------------------------------------------
+ at node Change data @MGL{}, Operators @MGL{}, Make another data @MGL{}, MGL interface
+ at section Изменение данных @MGL{}
+
+Эти команды изменяют данные вдоль заданного направления(ий) типа например дифференцирования, интегрирования и т.д. Направление указывается строкой @var{dir}, которая может содержать символы @samp{x}, @samp{y} и/или @samp{z}, вдоль которых изменения будут применены.
+
+ at cindex cumsum
+ at anchor{cumsum}
+ at deffn {Команда MGL} cumsum dat 'dir'
+Суммирует с накоплением в выбранном направлении(ях).
+ at end deffn
+ at cindex integrate
+ at anchor{integrate}
+ at deffn {Команда MGL} integrate dat 'dir'
+Выполняет интегрирование (подобно суммированию с накоплением) в выбранном направлении(ях).
+ at end deffn
+ at cindex diff
+ at anchor{diff}
+ at deffn {Команда MGL} diff dat 'dir'
+Выполняет дифференцирование в выбранном направлении(ях).
+ at end deffn
+ at deffn {Команда MGL} diff dat xdat ydat [zdat=0]
+Выполняет дифференцирование данных @var{dat}, параметрически зависящих от координат, в направлении @var{xdat} с @var{ydat}, @var{zdat}=constant. Параметр @var{zdat} может быть опущен, что соответствует 2D случаю. Используются следующие формулы (2D случай): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)}, где @math{a_i=da/di, a_j=da/dj} обозначает дифференцирование вдоль 1-ой и 2-ой размерности. Похожие формулы используются и в 3D случае. Порядок аргументов можно менять -- например, если данные a(i,j) зависят от координат @{x(i,j), y(i,j)@}, то обычная производная по @samp{x} будет равна @code{diff a x y}, а обычная производная по @samp{y} будет равна @code{diff a y x}.
+ at end deffn
+
+ at cindex diff2
+ at anchor{diff2}
+ at deffn {Команда MGL} diff2 dat 'dir'
+Выполняет двойное дифференцирование (как в операторе Лапласа) в выбранном направлении(ях).
+ at end deffn
+
+ at cindex sinfft
+ at anchor{sinfft}
+ at deffn {Команда MGL} sinfft dat 'dir'
+Выполняет синус преобразование в выбранном направлении(ях). Синус преобразование есть @math{\sum a_i \sin(k i)}.
+ at end deffn
+ at cindex cosfft
+ at anchor{cosfft}
+ at deffn {Команда MGL} cosfft dat 'dir'
+Выполняет косинус преобразование в выбранном направлении(ях). Синус преобразование есть @math{\sum a_i \cos(k i)}.
+ at end deffn
+ at cindex hankel
+ at anchor{hankel}
+ at deffn {Команда MGL} hankel dat 'dir'
+Выполняет преобразование Ханкеля в выбранном направлении(ях). Преобразование Ханкеля есть @math{\sum a_i J_0(k i)}.
+ at end deffn
+
+
+ at cindex swap
+ at anchor{swap}
+ at deffn {Команда MGL} swap dat 'dir'
+Меняет местами левую и правую части данных в выбранном направлении(ях). Полезно для отображения результата FFT.
+ at end deffn
+ at cindex roll
+ at anchor{roll}
+ at deffn {Команда MGL} roll dat 'dir' num
+Сдвигает данные на @var{num} ячеек в выбранном направлении(ях). Соответствует замене индекса на @var{i}->(@var{i}+ at var{num})%@var{n}.
+ at end deffn
+
+ at cindex mirror
+ at anchor{mirror}
+ at deffn {Команда MGL} mirror dat 'dir'
+Отражает данные в выбранном направлении(ях). Соответствует замене индекса на @var{i}->@var{n}- at var{i}.
+ at end deffn
+
+ at cindex sew
+ at anchor{sew}
+ at deffn {Команда MGL} sew dat ['dir'='xyz' @code{da=2*pi}]
+Удаляет скачки данных (например, скачки фазы после обратных тригонометрических функций) с периодом @var{da} в выбранном направлении(ях).
+ at end deffn
+
+ at cindex smooth
+ at anchor{smooth}
+ at deffn {Команда MGL} smooth data @code{type} ['dir'='xyz']
+Сглаживает данные в выбранном направлении(ях) методом @var{type}. Сейчас поддерживаются 4 метода: @code{0} ничего не делает, @code{1} линейное усреднение по 3 точкам, @code{2} линейное усреднение по 5 точкам, @code{3} квадратичное усреднение по 5 точкам.
+ at end deffn
+
+ at cindex envelop
+ at anchor{envelop}
+ at deffn {Команда MGL} envelop dat ['dir'='x']
+Находит огибающую данных в выбранном направлении. Только одно направление может быть выбрано за раз.
+ at end deffn
+
+ at cindex normsl
+ at anchor{normsl}
+ at deffn {Команда MGL} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}]
+Нормирует данные срез-за-срезом в выбранном направлении @var{dir} в интервал [@var{v1}, at var{v2}]. Если @var{sym}=@code{on}, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Если @var{keep}=@code{on}, то максимальное значение k-го среза ограничено величиной
+ at iftex
+ at math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}.
+ at end iftex
+ at ifnottex
+ at math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}.
+ at end ifnottex
+ at end deffn
+
+ at cindex norm
+ at anchor{norm}
+ at deffn {Команда MGL} norm dat @code{v1 v2 [sym=off dim=0]}
+Нормирует данные в интервал [@var{v1}, at var{v2}]. Если @var{sym}=@code{on}, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Изменения применяются только к срезам >=@var{dim}.
+ at end deffn
+
+ at c ------------------------------------------------------------------
+ at node Operators @MGL{}, Program flow @MGL{}, Change data @MGL{}, MGL interface
+ at section Операторы @MGL{}
+
+ at cindex multo
+ at anchor{multo}
+ at deffn {Команда MGL} multo dat dat2
+Поэлементно умножает массив @var{dat} на @var{dat2}.
+ at end deffn
+ at deffn {Команда MGL} multo dat @code{val}
+Умножает каждый элемент на число.
+ at end deffn
+
+ at cindex divto
+ at anchor{divto}
+ at deffn {Команда MGL} divto dat dat2
+Поэлементно делит массив @var{dat} на @var{dat2}.
+ at end deffn
+ at deffn {Команда MGL} divto dat @code{val}
+Делит каждый элемент на число.
+ at end deffn
+
+ at cindex addto
+ at anchor{addto}
+ at deffn {Команда MGL} addto dat dat2
+Поэлементно прибавляет @var{dat2} к массиву @var{dat}.
+ at end deffn
+ at deffn {Команда MGL} addto dat @code{val}
+Прибавляет число к каждому элементу.
+ at end deffn
+
+ at cindex subto
+ at anchor{subto}
+ at deffn {Команда MGL} subto dat dat2
+Поэлементно вычитает @var{dat2} из массива @var{dat}.
+ at end deffn
+ at deffn {Команда MGL} subto dat @code{val}
+Вычитает число из каждого элемента.
+ at end deffn
+
+ at c ------------------------------------------------------------------
+ at node Program flow @MGL{}, Command options @MGL{}, Operators @MGL{}, MGL interface
+ at section Программирование @MGL{}
+
+Эти команды управляют порядком выполнения других команд (условия, циклы, подпрограммы), (пере-)определяют аргументы скрипта и пр.
+
+ at cindex chdir
+ at anchor{chdir}
+ at deffn {Команда MGL} chdir 'path'
+Переходит в папку @var{path}.
+ at end deffn
+
+ at cindex define
+ at anchor{define}
+ at deffn {Команда MGL} define $N smth
+Задает @var{N}-ый аргумент скрипта равным @var{smth}. Отмечу, что @var{smth} используется как есть (с символами @samp{'} если присутствуют). Выполняется только подстановка других макроопределений $0...$9, $a...$z. Здесь @var{N} это цифра (0...9) или буква (a...z).
+ at end deffn
+ at deffn {Команда MGL} define name smth
+Определяет константу (скаляр) с именем @code{name} и числовым значением @code{smth}. Позднее она может быть использована как обычное число.
+ at end deffn
+ at cindex defchr
+ at anchor{defchr}
+ at deffn {Команда MGL} defchr $N smth
+Задает @var{N}-ый аргумент скрипта равным символу с UTF кодом @var{smth}. Здесь @var{N} это цифра (0...9) или буква (a...z).
+ at end deffn
+ at cindex defnum
+ at anchor{defnum}
+ at deffn {Команда MGL} defnum $N smth
+Задает @var{N}-ый аргумент скрипта равным числовому значению @var{smth}. Здесь @var{N} это цифра (0...9) или буква (a...z).
+ at end deffn
+ at cindex defpal
+ at anchor{defpal}
+ at deffn {Команда MGL} defpal $N smth
+Задает @var{N}-ый аргумент скрипта равным символу палитры с индексом, найденным из @var{smth}. Здесь @var{N} это цифра (0...9) или буква (a...z).
+ at end deffn
+
+ at cindex call
+ at anchor{call}
+ at deffn {Команда MGL} call 'fname' [ARG1 ARG2 ... ARG9]
+Переходит к выполнению (вызывает) подпрограммы @var{fname} (или внешнего скрипта, если функция не была найдена). Опциональные аргументы передаются в подпрограмму. См. также @ref{func}.
+ at end deffn
+ at cindex func
+ at anchor{func}
+ at deffn {Команда MGL} func 'fname' [narg=0]
+Определяет подпрограмму с именем @var{fname} и задает число требуемых аргументов. Аргументы будут помещены в параметры скрипта $1, $2, ... $9. Отмечу, что выполнение основной программы должно быть остановлено до начала определений подпрограмм. См. также @ref{stop},  @ref{return}.
+ at end deffn
+ at cindex return
+ at anchor{return}
+ at deffn {Команда MGL} return
+Возвращается из подпрограммы.
+ at end deffn
+
+
+ at cindex if
+ at anchor{if}
+ at deffn {Команда MGL} if dat 'cond'
+Начинает блок команд, выполняемый если каждый элемент @var{dat} удовлетворяет условию @var{cond}.
+ at end deffn
+ at deffn {Команда MGL} if @code{val}
+Начинает блок команд, выполняемый если @code{val} не ноль.
+ at end deffn
+ at cindex elseif
+ at anchor{elseif}
+ at deffn {Команда MGL} elseif dat 'cond'
+Начинает блок команд, выполняемый если предыдущий @code{if} или @code{elseif} не был выполнен и каждый элемент @var{dat} удовлетворяет условию @var{cond}.
+ at end deffn
+ at deffn {Команда MGL} elseif @code{val}
+Начинает блок команд, выполняемый если предыдущий @code{if} или @code{elseif} не был выполнен и @code{val} не ноль.
+ at end deffn
+ at cindex else
+ at anchor{else}
+ at deffn {Команда MGL} else
+Начинает блок команд, выполняемый если предыдущий @code{if} или @code{elseif} не был выполнен.
+ at end deffn
+ at cindex endif
+ at anchor{endif}
+ at deffn {Команда MGL} endif
+Заканчивает определение блока @code{if/elseif/else}.
+ at end deffn
+
+ at cindex for
+ at anchor{for}
+ at deffn {Команда MGL} for $N @code{v1 v2 [dv=1]}
+Начинает блок команд, выполняемый в цикле с $@var{N}-ым аргументом изменяющимся от @var{v1} до @var{v2} с шагом @var{dv}. Здесь @var{N} это цифра (0...9) или буква (a...z).
+ at end deffn
+ at deffn {Команда MGL} for $N dat
+Начинает блок команд, выполняемый в цикле с $@var{N}-ым аргументом пробегающим значения массива @var{dat}. Здесь @var{N} это цифра (0...9) или буква (a...z).
+ at end deffn
+ at cindex next
+ at anchor{next}
+ at deffn {Команда MGL} next
+Заканчивает блок цикла @code{for}.
+ at end deffn
+
+ at cindex once
+ at anchor{once}
+ at deffn {Команда MGL} once @code{val}
+Определяет код (между @code{once on} и @code{once off}) который будет выполнен только один раз. Полезно для работы с большими данными в программах типа UDAV.
+ at end deffn
+ at cindex stop
+ at anchor{stop}
+ at deffn {Команда MGL} stop
+Останавливает выполнение скрипта.
+ at end deffn
+
+ at c ------------------------------------------------------------------
+ at node  Command options @MGL{}, Suffixes, Program flow @MGL{}, MGL interface
+ at section Опции команд @MGL{}
+
+Опции команд позволяют легко настроить вид отдельного графика не меняя глобальных настроек для все рисунка. Опции указываются после команды. Каждая опция отделяется от предыдущей символом @samp{;}. Опции работают так, что запоминают текущие настройки рисунка, применяют собственные настройки, выполняют команду и возвращают глобальные настройки обратно. Поэтому использование опций для команд обработки данных или настройки графика бесполезно.
+
+Наиболее часто используемые опции -- @code{xrange, yrange, zrange}, устанавливающие границы изменения осей координат (и тем самым автоматических массивов). Например, команда @code{plot y; xrange 0.1 0.9} построит кривую с x-координатой равно распределенной в интервале 0.1 ... 0.9, а не вдоль текущей оси x.
+
+Полный список опций:
+ at cindex alpha
+ at cindex alphadef
+ at deffn {Опция MGL} alpha @code{val}
+ at deffnx {Опция MGL} alphadef @code{val}
+Задает величину прозрачности поверхности. Значение должно быть в диапазоне [0, 1]. См. также @ref{alphadef}
+ at end deffn
+ at cindex ambient
+ at deffn {Опция MGL} ambient @code{val}
+Задает яркость фонового освещения. Значение должно быть в диапазоне [0, 1]. См. также @ref{ambient}
+ at end deffn
+ at cindex crange
+ at deffn {Опция MGL} crange @code{val1 val2}
+Задает границы цветовой шкалы. См. также @ref{crange}
+ at end deffn
+ at cindex xrange
+ at deffn {Опция MGL} xrange @code{val1 val2}
+Задает границы изменения координаты x. См. также @ref{xrange}
+ at end deffn
+ at cindex yrange
+ at deffn {Опция MGL} yrange @code{val1 val2}
+Задает границы изменения координаты y. См. также @ref{yrange}
+ at end deffn
+ at cindex zrange
+ at deffn {Опция MGL} zrange @code{val1 val2}
+Задает границы изменения координаты z. См. также @ref{zrange}
+ at end deffn
+ at cindex cut
+ at deffn {Опция MGL} cut @code{val}
+Задает обрезание точек за пределами осей координат. См. также @ref{cut}
+ at end deffn
+ at cindex fontsize
+ at deffn {Опция MGL} fontsize @code{val}
+Задает размер текста. См. также @ref{font}
+ at end deffn
+ at cindex marksize
+ at deffn {Опция MGL} marksize @code{val}
+Задает размер маркеров. См. также @ref{marksize}
+ at end deffn
+ at cindex meshnum
+ at deffn {Опция MGL} meshnum @code{val}
+Задает ориентировочное число линий, стрелок, ячеек и пр. См. также @ref{meshnum}
+ at end deffn
+ at cindex legend
+ at deffn {Опция MGL} legend 'txt'
+Добавляет строку 'txt' во внутренний массив записей легенды. Стиль линии и маркера аргумента последней вызванной команды построения @ref{1D plotting @MGL{}}. См. также @ref{legend}
+ at end deffn
+
+ at c ------------------------------------------------------------------
+ at node  Suffixes, Utilities, Command options @MGL{}, MGL interface
+ at section Суффиксы переменных
+
+Суффиксы позволяют быстро получить числовую характеристику (размер, максимальное или минимальное значение, сумму элементов и т.д.) массива данных и использовать ее как число (скаляр) в аргументах. Суффиксы начинаются с точки @samp{.} сразу после (без пробелов) имени переменной и временного массива. Например, @code{a.nx} даст размер массива @var{a} по оси х, @code{b(1).max} даст максимальное значение второй строки массива @var{b}, @code{(c(:,0)^2).sum} даст сумму квадратов элементов первой колонки массива @var{c} и т.д.
+
+Полный список суффиксов:
+ at table @strong
+ at item nx, ny, nz
+Размер массива в направлении x, y, z соответственно.
+ at item max
+Максимальное значение массива.
+ at item min
+Минимальное значение массива.
+ at item sum
+Сумма элементов массива.
+ at item a
+Первый элемент массива (элемент с индексами 0,0,0).
+ at item fst
+Первое не нулевое значение массива.
+ at item lst
+Последнее не нулевое значение массива.
+ at item mx, my, mz
+Положение максимума в направлении x, y, z соответственно.
+ at item ax, ay, az, aa
+Положение центра масс в направлении x, y, z соответственно или среднее значение массива.
+ at item wx, wy, wz, wa
+Ширина в направлении x, y, z соответственно или дисперсия элементов массива.
+ at item sx, sy, sz, sa
+Асимметрия в направлении x, y, z соответственно или элементов массива.
+ at item kx, ky, kz, ka
+Эксцесс в направлении x, y, z соответственно или элементов массива.
+ at end table
+
+ at c ------------------------------------------------------------------
+ at node  Utilities, , Suffixes, MGL interface
+ at section Утилиты для MGL
+
+MathGL содержит несколько программ для работы со скриптами MGL. Есть утилита для сохранения в растровое (@code{mgl2png}, @code{mgl2gif}) или векторное (@code{mgl2eps}, @code{mgl2svg}) изображения. Программа @code{mglview} показывает результат выполнения скрипта MGL и позволяет вращать и настраивать график. Также можно транслировать MGL скрипт в C++ файл с помощью программы @code{mgl2cpp}.
+
+Все эти программы имеют схожий набор аргументов. Первым идет имя скрипта, а вторым идет имя выходного файлы (может быть опущено), последние аргументы -- опции скрипта и программы. К опциям относятся параметры скрипта (это @code{$0, $1, ... $9}) и настройки локали. Параметры скрипта имеют формат @samp{-Nval}, где N=0,1...9 -- номер параметра, val -- его значние. Например, опция @samp{-1test} заменит @code{$1} на @samp{test} в скрипте. Опция -Lval устанавливает локаль в значение val. Например, @samp{-Lutf8} будет использовать UTF-8 в скрипте.
+
+Также можно создавать анимированные изображения GIF или набор JPEG файлов с именами @samp{frameNNNN.jpg} (где @samp{NNNN} -- номер кадра). Для этого в скрипте надо указать параметры анимации для каждого кадра (строками с коментариями @code{##a val} или опциями @samp{-Aval}) или в цикле (строкой с комментарием @code{##с v1 v2 [dv]} или опцию @samp{-Cn1:n2}), которые будут подставлены в качестве параметра @code{$0} при последовательном вызове скрипта. Для сохранения кадров в JPEG просто добавьте команду @code{write ''} в конце скрипта.
+
+
diff --git a/texinfo/mgl_en.texi b/texinfo/mgl_en.texi
index 5a7d32a..66c5f81 100644
--- a/texinfo/mgl_en.texi
+++ b/texinfo/mgl_en.texi
@@ -1,1639 +1,104 @@
- at c ------------------------------------------------------------------
- at node MGL interface, Samples, Other classes, Top
- at chapter MGL interface
+\input texinfo
+ at setfilename mgl_en.info
+ at set VERSION 1.11
+ at settitle MGL script language for version @value{VERSION}
+ at syncodeindex pg cp
+ at comment %**end of header
+
+ at copying
+This manual is for MathGL (version @value{VERSION}), a collection of classes and routines for scientific plotting. Please report any errors in this manual to @email{mathgl.abalakin@@gmail.org}.
+
+Copyright @copyright{} 2008 Alexey Balakin.
+
+ at quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License.''
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to
+copy and modify this GNU manual.  Buying copies from the FSF
+supports it in developing GNU and promoting software freedom.''
+ at end quotation
+ at end copying
+
+ at c @dircategory MathGL documentation system
+ at c @direntry
+ at c * MathGL: (mathgl). The library for scientific graphics.
+ at c @end direntry
+
+ at titlepage
+ at title MGL script language
+ at subtitle for version @value{VERSION}
+ at author A.A. Balakin (@uref{http://mathgl.sourceforge.net/})
+ at page
+ at vskip 0pt plus 1filll
+ at insertcopying
+ at end titlepage
+
+ at contents
 
-MathGL library supports (from version 1.3) the simplest scripts for data handling and plotting. These scripts can be used independently (with the help of mgl2png, mgl2eps, mgl2svg programs and others) or in the frame of the library using.
-
-MGL script language is rather simple. Each string is a command. First word of string is the name of command. Other words are command arguments. Command may have up to 1000 arguments (at least for now). Words are separated from each other by space or tabulation symbol. The upper or lower case of words is sufficient, i.e. variables a and A are different variables. Symbol @samp{#} starts the comment (all characters after # will be ignored). The exception is situation when # is a part of some string. Also options can be specified at the end of string (after symbol @samp{;}, @pxref{Command options (MGL)}). Symbol @samp{:} starts new command (like new line character) if it is not placed inside a string or inside brackets.
-
-If string contain references to external parameters (substrings @samp{$0}, @samp{$1} ... @samp{$9}) then before execution the values of parameter will be substituted instead of reference. It allows to use the same MGL script for different parameters (filenames, paths, condition and so on).
-
-Argument can be a string, a variable name or a number. 
- at itemize @bullet
- at item 
-The string is any symbols between ordinary marks @samp{'}.
-
- at item 
-Variable name is arbitrary combination of symbols (except spaces and @samp{'}) started from a letter and with length less than 64. It is possible to use sub-arrays (like in @code{subdata} command) as command argument. For example, @code{a(1)} or @code{a(1,:)} or @code{a(1,:,:)} is second row, @code{a(:,2)} or @code{a(:,2,:)} is third column, @code{a(:,:,0)} is first slice and so on. Also you can extract a part of array from m-th to n-th element by code @code{a(m:n,:,:)} or just @code{a(m:n)}.
-
-If names for data columns was specified (by set_id command or in the file at string started with @code{##}) then it is possible to use any column combinations defined by formulas, like @code{a('n*w^2/exp(t)')}.
-
-Also, any expression (without spaces) of existed variables produce temporary variable. For example, @samp{sqrt(dat(:,5)+1)} will produce temporary variable with data values equal to @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. Such variables can not be used as 1st argument for commands which create (return) the data (like @samp{new}, @samp{read}, @samp{hist} and so on).
-
-Finally, you can put code for making new data inside @{@}. For example, @samp{@{sum dat 'x'@}} produce temporary variable which contain result of summation of @var{dat} along direction 'x'. This is the same array @var{tmp} as produced by command @samp{sum tmp dat 'x'}. You can use nested constructions, like @samp{@{sum @{max dat 'z'@} 'x'@}}.
-
- at item 
-Special names @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1} are treated as number if they were not redefined by user. Variables with suffixes are treated as numbers (@pxref{Suffixes}). Names defined by @code{define} command are treated as number. Also results of formulas with sizes 1x1x1 are treated as number (for example, @samp{pi/dat.nx}).
- at end itemize
-Before the first using all variables must be defined with the help of commands, like, @code{new, var, list, copy} or @code{read}. 
-
-All MGL commands can be divided on several groups. I will use the following notation for a command description: command names are bold, strings are denoted by commas, variable names are italic, numbers are typewriter. Optional arguments are placed in square brackets and default values for them are shown. Detailed description of color, line styles, color schemes, font types, TeX-like symbols and formulas can be found in corresponding section.
-
- at menu
-* Graphics setup (MGL)::        
-* Axis settings (MGL)::         
-* Transformation matrix (MGL)::  
-* Export to file (MGL)::        
-* Primitives drawing (MGL)::    
-* Text printing (MGL)::         
-* Axis and Colorbar (MGL)::     
-* Legend (MGL)::                
-* 1D plotting (MGL)::           
-* 2D plotting (MGL)::           
-* 3D plotting (MGL)::           
-* Dual plotting (MGL)::         
-* Vector fields (MGL)::         
-* Other plotting (MGL)::        
-* Nonlinear fitting (MGL)::     
-* Data create (MGL)::           
-* Data filling (MGL)::          
-* Rearrange data (MGL)::        
-* File I/O (MGL)::              
-* Make another data (MGL)::     
-* Commands on direction (MGL)::  
-* Operators (MGL)::             
-* Program flow (MGL)::          
-* Command options (MGL)::       
-* Suffixes::                    
-* Utilities::                   
- at end menu
-
-
- at c ##################################################################
- at node Graphics setup (MGL), Axis settings (MGL), , MGL interface
- at section Graphics setup (MGL)
-
-Coomands in this group influences on overall graphics appearance. So all of them should be placed @emph{before} any actual plotting commands. 
-
- at menu
-* Transparency (MGL)::          
-* Lighting (MGL)::              
-* Fog (MGL)::                   
-* Default sizes (MGL)::         
-* Zooming (MGL)::               
-* Cutting (MGL)::               
-* Other settings (MGL)::        
- at end menu
-
- at c ==================================================================
- at node Transparency (MGL), Lighting (MGL), , Graphics setup (MGL)
- at subsection Transparency (MGL)
- at cindex alpha
- at cindex alphadef
- at cindex transparent
- at cindex transptype
-
-There are several commands for setup transparency. The general command is @code{alpha} which switch on/off the transparency for overall plot. It influence only for graphics which created after @code{alpha} call (with one exeption, mglGraphGL). Command @code{alphadef} specify the default value of alpha-channel. You may switch off transparency of selected plot by command @code{transparent}. Finally, command @code{transptype} set the kind of transparency. @sref{Transparent surface sample}
-
- at deffn {MGL command} alpha @code{[val=on]}
-Sets the transparency on/off. It is recommended to call this command before any plotting command. Default value is @code{off}. Use @code{transparent off} in particular plot to disable its transparency.
- at end deffn
- at deffn {MGL command} alphadef @code{val}
-Default value of alpha channel (transparency) for all plotting commands. Initial value is 0.5.
- at end deffn
- at deffn {MGL command} transparent @code{val}
-Temporary switches transparency on/off for the plot.
- at end deffn
- at deffn {MGL command} transptype @code{val}
-This command set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{alphadef 0.3} or less for lamp-like transparency.
- at end deffn
-
- at c ==================================================================
- at node Lighting (MGL), Fog (MGL), Transparency (MGL), Graphics setup (MGL)
- at subsection Lighting (MGL)
- at cindex light
- at cindex ambient
-
-There are several commands for setup lighting. The general command is @code{light} which switch on/off the lighting for overall plot. It influence only for graphics which created after @code{light} call (with one exeption, mglGraphGL). Generally MathGL support up to 10 independent light sources. But in OpenGL mode only 8 of light sources is used due to OpenGL limitations. The position, color, brightness of each light source can be set separately. By default only one light source is active. It is source number @code{0} with white color, located at top of the plot.
-
- at deffn {MGL command} light @code{[val=on]}
-Sets the using of light on/off for overall plot. It is recommended to call this command before any plotting command. Default value is lightning off.
- at end deffn
- at deffn {MGL command} light @code{num val}
-Switch on/off @var{num}-th light source separately.
- at end deffn
-
- at deffn {MGL command} light @code{num xpos ypos zpos} ['col'='w' @code{br=0.5}]
-The command adds a light source with identification @var{num} at position @{@var{xpos}, @var{ypos}, @var{zpos}@}. The color of light is @var{col} (white by default). The brightness of light is @var{br} which must be in range [0,1].
- at end deffn
-
- at deffn {MGL command} ambient @code{val}
-Sets the brightness of ambient light. The value should be in range [0,1]. Initial value is 0.5. 
- at end deffn
-
- at c ==================================================================
- at node Fog (MGL), Default sizes (MGL), Lighting (MGL), Graphics setup (MGL)
- at subsection Fog (MGL)
- at cindex fog
-
- at deffn {MGL command} fog @code{val [dz=0.25]}
-Command imitate a fog in the plot. Fog start from relative distance @var{dz} from view point and its density growths exponentially in depth. So that the fog influence is determined by law ~ 1-exp(- at emph{val*z}). Here @emph{z} is normalized to 1 depth of the plot. If value @var{val}=@code{0} then the fog is absent. @sref{Surface in fog sample}
- at end deffn
-
- at c ==================================================================
- at node Default sizes (MGL), Zooming (MGL), Fog (MGL), Graphics setup (MGL)
- at subsection Default sizes (MGL)
- at cindex marksize
- at cindex arrowsize
- at cindex linewidth
- at cindex ticklen
- at cindex tickstl
-
-These commands control the default (initial) values for most graphics parameters including sizes of markers, arrows, linewidth and so on. As any other settings these ones will influence only on plots created after the settings change.
-
- at deffn {MGL command} barwidth @code{val}
-Sets relative width of rectangles in @code{bars, barh, boxplot}. Default value is @code{0.7}.
- at end deffn
-
- at deffn {MGL command} marksize @code{val}
-The size of marks. Default value is @code{1}.
- at end deffn
-
- at deffn {MGL command} arrowsize @code{val}
-The size of arrows for lines and curves. Default value is @code{1}.
- at end deffn
-
- at deffn {MGL command} linewidth @code{val}
-The variable define the base width for all lines. The value <1 is ignored. Increase of this variables is actual for large bitmap pictures. Default value is @code{1}.
- at end deffn
-
- at deffn {MGL command} ticklen @code{val} [@code{stt=1}]
-The relative length of axis ticks. Default value is @code{0.1}. Parameter @var{stt}>0 set relative length of subticks which is in @code{sqrt(1+stt)} times smaller.
- at end deffn
-
- at deffn {MGL command} tickstl 'stl' ['sub'='']
-The line style of axis ticks (@var{stl}) and subticks (@var{sub}). If @var{stl}='' then default style is used (@samp{k} or @samp{w} depending on transparency type). If @var{sub}='' then ticks style is used (i.e. @var{stl}).
- at end deffn
-
- at c ==================================================================
- at node Zooming (MGL), Cutting (MGL), Default sizes (MGL), Graphics setup (MGL)
- at subsection Zooming (MGL)
- at cindex plotfactor
- at cindex zoom
-
-These commands control the overall zooming of the picture or the sub-picture. Normally you can use these variables and commands for removing ``white'' spaces around a plot.
-
- at deffn {MGL command} plotfactor @code{val}
-The factor of plot size. It is not recommended to set it lower then 1.6. This is some analogue of command @code{zoom} but applied not to overall image but for each @code{inplot}. Use negative value to enable automatic @code{plotfactor} selection.
- at end deffn
-
- at deffn {MGL command} zoom @code{x1 y1 x2 y2}
-The command changes the scale of graphics that correspond to zoom in/out of the picture. After command call the current plot will be cleared and further the picture will contain plotting from its part [x1,x2]*[y1,y2]. Here picture coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} changes from 0 to 1. Use @code{zoom 0 0 1 1} to return default view.
- at end deffn
-
- at c ==================================================================
- at node Cutting (MGL), Other settings (MGL), Zooming (MGL), Graphics setup (MGL)
- at subsection Cutting (MGL)
- at cindex cut
-
-These commands set the condition when the points are excluded (cutted) from the drawing.
-
- at deffn {MGL command} cut @code{val}
-Determines how points outside bounding box are drawn. If it is @code{true} then points are excluded from plot (it is default) otherwise the points are projected to edges of bounding box.
- at end deffn
-
- at deffn {MGL command} cut @code{x1 y1 z1 x2 y2 z2}
-Lower and upper edge of the box in which never points are drawn. If both edges are the same (the variables are equal) then the cutting box is empty. @sref{CutMinMax sample}
- at end deffn
-
- at deffn {MGL command} cut 'cond'
-Command set the cutting off condition by formula @var{cond}. This condition determine will point be plotted or not. If value of formula is nonzero then point is omitted, otherwise it plotted. Set argument as @code{''} to disable cutting off condition. @sref{CutOff sample}
- at end deffn
-
- at c ==================================================================
- at node Other settings (MGL), , Cutting (MGL), Graphics setup (MGL)
- at subsection Other settings (MGL)
- at cindex font
- at cindex rotatetext
- at cindex palette
- at cindex meshnum
- at cindex axialdir
-
- at deffn {MGL command} font 'fnt' [@code{val=6}]
-Font style for text and labels (see text). Initial style is 'fnt'='rC' give Roman font with centering. Parameter @code{val} sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. For more detail, @pxref{Font style}.
- at end deffn
-
- at deffn {MGL command} rotatetext @code{val}
-Set to use or not text rotation along axis. Initial value is @code{on}.
- at end deffn
-
- at deffn {MGL command} palette 'colors'
-Set the palette as selected colors. Default value is @code{'Hbgrcmyhlnqeup'}. The palette is used mostly in 1D plots for curves which styles are not specified.
- at end deffn
-
- at deffn {MGL command} meshnum @code{num}
-Sets approximate number of lines in @code{mesh, fall, grid} and also the number of hachures in @code{vect, vectc, dew} and the number of cells in @code{cloud}. By default (=0) it draws all lines/hachures/cells.
- at end deffn
-
- at deffn {MGL command} axialdir 'dir'
-Set direction around which curve rotated in @code{axial, torus}. Default value is 'z'.
- at end deffn
-
- at c ==================================================================
- at node Axis settings (MGL), Transformation matrix (MGL), Graphics setup (MGL), MGL interface
- at section Axis settings (MGL)
- at cindex axis
- at cindex caxis
- at cindex xrange
- at cindex yrange
- at cindex zrange
- at cindex crange
- at cindex xtick
- at cindex ytick
- at cindex ztick
- at cindex ctick
- at cindex origin
- at cindex adjust
-
-These large set of commands control how the axis and ticks will be drawn. Note that there is 3-step transformation of data coordinates are performed. Firstly, coordinates are projected and cutting is applied (@pxref{Cutting (MGL)}), after it transformation formulas are applied, and finally the data was normalized in bounding box.
-
- at deffn {MGL command} axis @code{x1 y1 x2 y2}
- at deffnx {MGL command} axis @code{x1 y1 z1 x2 y2 z2}
- at deffnx {MGL command} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]}
-Sets the ranges of coordinates changing. Also it sets the range for coloring (analogous to @code{caxis z1 z2}). Initial ranges are [-1, 1].
- at end deffn
-
- at deffn {MGL command} axis 'fx' 'fy' ['fz'='' 'fa'='']
-Sets the transformation formulas for curvilinear coordinates. Each string should contain mathematical expression for real coordinate depending on internal coordinates 'x', 'y', 'z' and 'a' or 'c' for colorbar. For example, the cylindrical coordinates are introduced as @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. For removing of formulas the corresponding parameter should be @code{''}. The using of transformation formulas will slightly slowing the program, i.e. @code{axis '' '' ''} is faster than @code{axis '1*x' '1*y' '1*z'}. Initially all formulas are absent (Cartesian coordinates are used). For more details about functions and formulas, @pxref{mglFormula class}.
- at end deffn
-
- at deffn {MGL command} axis @code{how}
-Sets one of the predefined transformation formulas for curvilinear coordinate. Paramater @var{how} define the coordinates: @code{0} -- Cartesian coordinates (no transformation); @code{1} -- Polar coordiantes @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{2} -- Spherical coordinates @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{3} -- Parabolic coordinates @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{7} -- Elliptic coordinates @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{8} -- Toroidal coordinates @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{9} -- Bispherical coordinates @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{10} -- Bipolar coordinates @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}.
- at end deffn
-
- at deffn {MGL command} caxis @code{z1 z2}
-Sets the range for surface coloring. Initial range is [-1, 1].
- at end deffn
-
- at deffn {MGL command} origin @code{x0 y0 [z0=nan]}
-Center of axis cross section. If one of values is @code{nan} then MathGL library try to select optimal axis position.
- at end deffn
-
- at deffn {MGL command} ternary @code{val}
-The command sets to draws Ternary plot. This special plot is for 3 dependent coordinates (components) @var{a}, @var{b}, @var{c} so that @var{a}+ at var{b}+ at var{c}=1. MathGL uses only 2 independent coordinates @var{a}=x and @var{b}=y since it is enough to plot everything. At this third coordinate z act as another parameter to produce contour lines, surfaces and so on. @sref{Ternary plot sample}
- at end deffn
-
- at deffn {MGL command} xrange dat [@code{add=off fact=0}]
- at deffnx {MGL command} yrange dat [@code{add=off fact=0}]
- at deffnx {MGL command} zrange dat [@code{add=off fact=0}]
- at deffnx {MGL command} crange dat [@code{add=off fact=0}]
-Sets the range for x-,y-,z- coordinate or coloring as minimal and maximal values of data @var{dat}. Parameter @code{add=on} shows that the new range will be joined to existed one (nut will not replace it). Parameter @var{fact} add additional range increase on value (@var{Max}- at var{Min})*@var{fact}.
- at end deffn
-
- at deffn {MGL command} xrange @code{x1 x2}
- at deffnx {MGL command} yrange @code{x1 x2}
- at deffnx {MGL command} zrange @code{x1 x2}
- at deffnx {MGL command} crange @code{x1 x2}
-Sets the range for x-,y-,z- coordinate or coloring. See also axis.
- at end deffn
-
- at deffn {MGL command} xtick @code{val [sub=0 org=nan]}
- at deffnx {MGL command} ytick @code{val [sub=0 org=nan]}
- at deffnx {MGL command} ztick @code{val [sub=0 org=nan]}
- at deffnx {MGL command} ctick @code{val}
-Sets step for x-, y-, z-axis ticks or colorbar ticks (if @var{val}>0) or it's number (if @var{val}<0) in corresponding direction. Zero value @var{val}=0 sets logarithmic ticks. Parameter @var{sub} sets the number of sub-ticks. Parameter @var{org} set the starting points for ticks. If not @code{org=nan} then the value from @code{origin} is used.
- at end deffn
-
- at deffn {MGL command} xtick 'templ'
- at deffnx {MGL command} ytick 'templ'
- at deffnx {MGL command} ztick 'templ'
- at deffnx {MGL command} ctick 'templ'
-Sets the template for x-, y-, z-axis ticks or colorbar ticks. It may contain TeX symbols also. If @var{templ}=@code{''} then default template is used (in simplest case it is @samp{%.2g}) with automatic detaching of common multiplier or common component.
- at end deffn
-
- at deffn {MGL command} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
- at deffnx {MGL command} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
- at deffnx {MGL command} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
-Sets manual positions @var{val1}, at var{val2},... and labels @var{lbl1}, at var{lbl2},... for ticks along x-, y-, z-axis. Labels may contain TeX symbols also.
- at end deffn
-
- at deffn {MGL command} adjust ['dir'='xyzc']
-Set the ticks step, number of sub-ticks and initial ticks position to be the most human readable for the axis along direction(s) @var{dir}.
- at end deffn
-
-
- at c ##################################################################
- at node Transformation matrix (MGL), Export to file (MGL), Axis settings (MGL), MGL interface
- at section Transformation matrix (MGL)
- at cindex aspect
- at cindex rotate
- at cindex subplot
- at cindex inplot
- at cindex identity
- at cindex perspective
-
-These commands control how and where further plotting will be placed. There is a curtain order of calling of these commands for the better plot view. First one should be @code{subplot} or @code{inplot} for specifying the place. After it a @code{rotate} and @code{aspect}. And finally any other plotting commands may be called. Alternatevely you can use @code{columnplot} for position plots in the column one by another without gap between plot axis (bounding boxes).
-
- at deffn {MGL command} subplot @code{nx ny m [dx=0 dy=0]}
-Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. This command set off any aspects or rotations. So it should be used first for creating the subplot. From the aesthetical point of view it is not recommended to use this command with different matrices in the same frame. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}.
- at end deffn
-
- at deffn {MGL command} inplot @code{x1 x2 y1 y2 [rel=off]}
-Puts further plotting in some region of the whole frame surface. This command allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{on} then the relative position to current @code{subplot} is used. This command set off any aspects or rotations. So it should be used first for creating subplot.
- at end deffn
-
- at deffn {MGL command} columnplot @code{num ind}
-Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous @code{subplot} call (or @code{inplot} with @code{rel=off}).
- at end deffn
-
- at deffn {MGL command} stickplot @code{num ind tet phi}
-Puts further plotting in @var{ind}-th cell of stick with @var{num} cells. At this, stick is rotated on angles @var{tet}, @var{phi}. The position is relative to previous @code{subplot} call (or @code{inplot} with @code{rel=off}).
- at end deffn
-
- at deffn {MGL command} rotate @code{tetz tetx [tety=0]}
-Rotates a further plotting relative to each axis (x, z, y) consecutively on angles @var{tetx}, @var{tetz}, @var{tety}.
- at end deffn
-
- at deffn {MGL command} rotate @code{tet x y z}
-Rotates a further plotting around vector @{x,y,z@} on angle @var{tet}.
- at end deffn
-
- at deffn {MGL command} aspect @code{ax ay [az=1]}
-Defines aspect ratio for the plot. The viewable axes will be related one to another as the ratio @var{ax:ay:az}. For the best effect it should be used after @code{rotate} command.
- at end deffn
-
- at deffn {MGL command} perspective @code{val}
-Add (switch on) the perspective to plot. The parameter @math{val ~ 1/z_@{eff@} \in [0,1)}. By default (@code{val=0}) the perspective is off.
- at end deffn
-
- at c ##################################################################
- at node Export to file (MGL), Primitives drawing (MGL), Transformation matrix (MGL), MGL interface
- at section Export to file (MGL)
- at cindex write
- at cindex setsize
-
- at deffn {MGL command} write 'fname' [@code{solid=off}]
-Exports current picture/frame to file 'fname' (file type is determined by extension). Solid (usually white) background will be used if @code{solid=on}. If 'fname'='' then the file @samp{frameNNNN.jpg} is used, where @samp{NNNN} is current frame id.
- at end deffn
-
- at deffn {MGL command} setsize @code{w h}
-Sets size of picture in pixels. This function call @strong{must be} placed before any plotting command because it completely remove picture content. In some program the call of this function is forbidden.
- at end deffn
-
-
- at c ##################################################################
- at node Primitives drawing (MGL), Text printing (MGL), Export to file (MGL), MGL interface
- at section Primitives drawing
- at cindex ball
- at cindex clf
- at cindex line
- at cindex curve
- at cindex facex
- at cindex facey
- at cindex facez
- at cindex cone
- at cindex drop
- at cindex sphere
-
-These commands draw some simple objects like line, point, sphere, drop, cone and so on.
-
- at deffn {MGL command} clf
-Clear the picture by removes all drawing from it. Does not change transformation matrix. 
- at end deffn
-
- at deffn {MGL command} ball @code{x y} ['col'='r']
- at deffnx {MGL command} ball @code{x y z} ['col'='r']
-Draws a point (ball) at position @{@var{x}, @var{y}, @var{z}@} with color defined by string @var{col}.
- at end deffn
-
- at deffn {MGL command} line @code{x1 y1 x2 y2} ['stl'='']
- at deffnx {MGL command} line @code{x1 y1 z1 x2 y2 z2} ['stl'='']
-Draws a geodesic line (straight line in Cartesian coordinates) from point @{@var{x1}, at var{y1}, at var{z1}@} to @{@var{x2}, at var{y2}, at var{z2}@} using line style @var{stl}.
- at end deffn
-
- at deffn {MGL command} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'='']
- at deffnx {MGL command} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'='']
-Draws Bezier-like curve from point @{@var{x1}, at var{y1}, at var{z1}@} to @{@var{x2}, at var{y2}, at var{z2}@} using line style @var{stl}. At this tangent is co-directed with @{@var{dx1}, at var{dy1}, at var{dz1}@}, @{@var{dx2}, at var{dy2}, at var{dz2}@} and proportional to its amplitude.
- at end deffn
-
- at deffn {MGL command} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}]
- at deffnx {MGL command} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}]
- at deffnx {MGL command} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}]
-Draws the solid rectangle (face) perpendicular to [x,y,z]-axis correspondingly at position @{@var{x0}, @var{y0}, @var{z0}@} with color @var{stl} and with widths @var{wx}, @var{wy}, @var{wz} along corresponding directions. At this colors can be the same for all vertexes or different if all 4 colors are specified for each vertex. Parameters @var{d1}!=0, @var{d2}!=0 set additional shift of the last vertex (i.e. to draw quadrangle).
- at end deffn
-
- at deffn {MGL command} sphere @code{x0 y0 r} ['col'='r']
- at deffnx {MGL command} sphere @code{x0 y0 z0 r} ['col'='r']
-Draw the sphere with radius @var{r} and center at point @{@var{x0}, @var{y0}, @var{z0}@} and color @var{stl}.
- at end deffn
-
- at deffn {MGL command} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}]
- at deffnx {MGL command} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}]
-Draw the drop with radius @var{r} at point @{@var{x0}, at var{y0}, at var{z0}@} elongated in direction @{@var{dx}, at var{dy}, at var{dz}@} and with color @var{col}. Parameter @var{sh} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{asp} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere). @sref{Drops sample}
- at end deffn
-
- at deffn {MGL command} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'st'='' @code{edge=off}]
-Draw tube (or truncated cone if @var{edge}=@code{off}) between points @{@var{x1}, at var{y1}, at var{z1}@}, @{@var{x2}, at var{y2}, at var{z2}@} with radiuses at the edges @var{r1}, @var{r2}. If @var{r2}<0 then it is supposed that @var{r2}=@var{r1}. The cone color is defined by string @var{stl}.
- at end deffn
-
- at deffn {MGL command} rect @code{x1 y1 x2 y2} ['st'='']
- at deffnx {MGL command} rect @code{x1 y1 z1 x2 y2 z2} ['st'='']
-Draw rectangle from point @{@var{x1}, at var{y1}, at var{z1}@} to point @{@var{x2}, at var{y2}, at var{z2}@} using colors @var{stl}. If @var{stl} have 4 or more colors then it defines colors for each rectangle vertex (useful for making gradients, like @samp{wwrr}) else first color is used for whole rectangle.
- at end deffn
-
- at c ##################################################################
- at node Text printing (MGL), Axis and Colorbar (MGL), Primitives drawing (MGL), MGL interface
- at section Text printing (MGL)
- at cindex fgets
- at cindex text
- at cindex title
-
-These commands draw the text. There are commands for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. It is possible to use arbitrary font-faces and parse many TeX commands. The Unicode text is supported. So sometimes you need to specify locale. The @code{size} argument control the size of text: if positive it give the value, if negative it give the value relative to defined by @code{font} command. @xref{Font style}.
-
- at deffn {MGL command} text @code{x y} 'text' ['fnt'='' @code{size=-1.4}]
- at deffnx {MGL command} text @code{x y z} 'text' ['fnt'='' @code{size=-1.4}]
-Draws unrotated text string @var{text} at position @{@var{x}, at var{y}, at var{z}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used.
- at end deffn
-
- at deffn {MGL command} text @code{x y dx dy} 'text' [@code{size=-1.4}]
- at deffnx {MGL command} text @code{x y z dx dy dz} 'text' [@code{size=-1.4}]
-The command plots the string @var{text} at position @{@var{x}, at var{y}, at var{z}@} along direction @{@var{dx}, at var{dy}, at var{dz}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used.
- at end deffn
-
- at deffn {MGL command} title 'text' ['fnt'='' @code{size=-2}]
-Print string @var{text} as title of the picture (at the top of the picture). Can be used at any place (even inside @code{subplot}).
- at end deffn
-
- at deffn {MGL command} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}]
- at deffnx {MGL command} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}]
-Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x}, at var{y}, at var{z}@} with specified @var{size}. By default parameters from @code{font} command are used.
- at end deffn
-
-
- at deffn {MGL command} text xdat 'text' ['fnt'='' @code{size=-1 zval=nan}]
- at deffnx {MGL command} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}]
- at deffnx {MGL command} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}]
-The command draws @var{text} along the curve between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} by font style @var{fnt} and with size @var{size}. The string @var{fnt} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{z}[i] = @var{zval} is used. @sref{Text sample}
- at end deffn
-
- at c ##################################################################
- at node Axis and Colorbar (MGL), Legend (MGL), Text printing (MGL), MGL interface
- at section Axis and Colorbar (MGL)
- at cindex axis
- at cindex box
- at cindex grid
- at cindex colorbar
- at cindex xlabel
- at cindex ylabel
- at cindex zlabel
- at cindex tlabel
-
-These commands draw the ``things for measuring'', like axis with ticks, colorbar with ticks, grid along axis, bounding box and labels for axis. For more information @pxref{Axis settings (MGL)}.
-
- at deffn {MGL command} axis ['dir'='xyz' @code{adjust=off}]
-Draws axes with ticks (@pxref{Axis settings (MGL)}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by command @code{font}. Ticks will be automatically adjusted if @var{adjust}=@code{on} (by call of @code{adjust 'dir'}).
- at end deffn
-
- at deffn {MGL command} colorbar ['sch'='' @code{pos=0}]
-Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=''}) at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample}
- at end deffn
-
- at deffn {MGL command} colorbar 'sch' @code{pos x y w h}
-Draws colorbar with color scheme @var{sch} (current scheme if not specified) at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameter @var{pos} specifies the position of colorbar labels: @samp{0} - at left, @samp{1} - at right, @samp{2} - at bottom, @samp{3} - at top. Parameters @var{w}, @var{h} set the relative width and height of the colorbar.
- at end deffn
-
- at deffn {MGL command} colorbar vdat ['sch'='' @code{pos=0}]
-Draws colorbar with sharp colors @var{sch} (current palette if @code{sch=NULL}) for values @var{vdat} at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample}
- at end deffn
-
- at deffn {MGL command} grid ['dir'='xyz' 'pen'='B']
-Draws grid lines perpendicular to direction determined by string parameter @var{dir}. The step of grid lines is the same as tick step for an @code{axis}. The style of lines is determined by @var{pen} parameter.
- at end deffn
-
- at deffn {MGL command} box ['stl'='k' @code{ticks=on}]
-Draws bounding box outside the plotting volume with line style 'stl'.
- at end deffn
-
- at deffn {MGL command} xlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} ylabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} zlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} tlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
-Prints the label @var{text} for x-,y-,z-,t-axis (here @samp{t} is ``ternary'' axis @math{t=1-x-y}). The position of label is determined by @var{pos} parameter. If @var{pos}=0 then label is printed at the center of axis. If @var{pos}>0 then label is printed at the maximum of axis (default). If @var{pos}<0 then label is printed at the minimum of axis. The font size is 1.4 times larger than the one for ticks @code{font}. Parameter @code{shift} specify additional shifting of the label. @xref{Text printing (MGL)}.
- at end deffn
-
- at c ##################################################################
- at node Legend (MGL), 1D plotting (MGL), Axis and Colorbar (MGL), MGL interface
- at section Legend (MGL)
- at cindex legend
- at cindex addlegend
- at cindex clearlegend
-
-These commands draw legend to the graph (useful for @ref{1D plotting (MGL)}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included LaTeX parsing). The array of string are accumulated first to the internal arrays (by command @code{addlegend}) and are plotted later. The position of the legend can be selected automatic or manually. Parameters @var{fnt} and @var{size} specify the font style and size. Parameter @var{llen} set the relative width of the line sample and the text indent (default value is 0.1). If line style string for entry is empty then the corresponding text is printed without indent. @sref{Legend sample}
-
- at deffn {MGL command} legend [@code{pos=3} 'fnt'='rL' @code{size=-1 llen=0.1}]
-Draws legend of accumulated legend entries by font @var{fnt} with specified @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default).
- at end deffn
-
- at deffn {MGL command} legend @code{x y} ['fnt'='rL' @code{size=-1 llen=0.1}]
-Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Position of legend is determined by parameter @var{x}, @var{y} which supposed to be normalized to interval [0,1].
- at end deffn
-
- at deffn {MGL command} addlegend 'text' 'stl'
-Adds string @var{text} to internal legend accumulator. The style of described line and mark is specified in string @var{stl} (@pxref{Line styles}). Maximal number of entries is 100.
- at end deffn
-
- at deffn {MGL command} clearlegend
-Clears saved legend strings.
- at end deffn
-
- at deffn {MGL command} legendbox @code{val}
-Switches on/off the drawing of a box near legend. By default, the box is drawn.
- at end deffn
-
-
-
- at c ##################################################################
- at node 1D plotting (MGL), 2D plotting (MGL), Legend (MGL), MGL interface
- at section 1D plotting (MGL)
- at cindex plot
- at cindex tens
- at cindex area
- at cindex bars
- at cindex barh
- at cindex stem
- at cindex step
- at cindex torus
- at cindex chart
- at cindex mark
- at cindex textmark
- at cindex error
- at cindex tube
- at cindex region
-
-These commands perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. Most of plotting type has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is NULL then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}.
-
-The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=NULL}) solid line with color from palette is used (@pxref{Palette and colors}).
-
- at deffn {MGL command} plot ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} plot xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} plot xdat ydat zdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{tens, radar, area, step, stem, tube, mark, error, belt}. @sref{Plot sample}
- at end deffn
-
-
- at deffn {MGL command} radar adat ['stl'='' @code{r=-1}]
-Draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). The plots are drawn for each row if one of the data is the matrix. Parameter @var{r} set the additional shift of data (i.e. the data @var{adat}+ at var{r} is used instead of @var{adat}). If @code{r<0} then @code{r=max(0, -min(adat)}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @code{plot}. @sref{Radar sample}
- at end deffn
-
- at deffn {MGL command} tens ydat cdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tens xdat ydat cdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tens xdat ydat zdat cdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} with color defined by @var{cdat}[i] (look like tension plot). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, mesh, fall}. @sref{Tens sample}
- at end deffn
-
- at deffn {MGL command} area ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} area xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} area xdat ydat zdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} and fills it down to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, bars, stem, region}. @sref{Area sample}
- at end deffn
-
- at deffn {MGL command} region fdat gdat ['stl'='' @code{inside=off}]
- at deffnx {MGL command} region xdat fdat gdat ['stl'='' @code{inside=off}]
-Fills area between curves @{@var{xdat}[i], @var{fdat}[i]@} and @{@var{xdat}[i], @var{gdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x.  Parameter  @code{inside=off} set to fill are with y1<y<y2 else the area with y2<y<y1 will be also filled.
- at c If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). 
-See also @code{area, bars, stem}. @sref{Region sample}
- at end deffn
-
- at deffn {MGL command} bars ydat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars xdat ydat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars xdat ydat zdat ['stl'='' @code{above=off}]
-Draws vertical bars from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). Bars are drawn side-by-side (if @code{above = off}) or one above another (if @code{above = on}). Marks at data points are not drawn. See also @code{area, barh, stem, chart}. @sref{Bars sample}
- at end deffn
-
- at deffn {MGL command} barh vdat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars ydat vdat ['stl'='' @code{zval=nan above=off}]
-Draws horizontal bars from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to y-axis. If array @var{ydat} is not specified then its an automatic array is used with values equidistantly distributed along y. Bars are drawn side-by-side (if @code{above = off}) or one above another (if @code{above = on}). Marks at data points are not drawn.
- at c If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). 
-See also @code{bars}. @sref{Barh sample}
- at end deffn
-
- at deffn {MGL command} stem ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} stem xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} stem xdat ydat zdat ['stl'='']
-Draws vertical lines from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{area, bars, plot, mark}. @sref{Stem sample}
- at end deffn
-
- at deffn {MGL command} step ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} step xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} step xdat ydat zdat ['stl'='']
-Draws continuous stairs for points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, stem, tile, boxs}. @sref{Step sample}
- at end deffn
-
- at deffn {MGL command} torus zdat ['stl'='']
- at deffnx {MGL command} torus rdat zdat ['stl'='']
-Draws surface which is result of curve @{@var{rdat}[i], @var{zdat}[i], @var{zdat}[i]@} rotation around @code{axialdir} axis. If array @var{rdat} is not specified then its an automatic array is used with values equidistantly distributed along x. See also @code{plot, axial}. @sref{Torus sample}
- at end deffn
-
- at deffn {MGL command} chart adat ['col'='']
-The command draws colored stripes (boxes) for data in array @var{adat}. The number of stripes is equal to the number of rows in @var{adat} (equal to @var{a.ny}). The color of each next stripe is cyclically changed from colors specified in string @var{col} or in palette. Spaces in colors denote transparent ``color'', i.e. if @var{col} contain space(s) then corresponding stripe(s) are not drawn. The stripe width is proportional to value of element in @var{a}. Chart is plotted only for data with non-negative elements. If string @var{col} have symbol @samp{#} then black border lines are drawn. The most nice form the chart have in 3d (after rotation of coordinates) or in cylindrical coordinates (becomes so called Pie chart). @sref{Chart sample}
- at end deffn
-
- at deffn {MGL command} mark ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} mark xdat ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} mark xdat ydat zdat rdat ['stl'='']
-Draws  marks with size @var{rdat}[i]*@code{marksize} at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, textmark, stem, error}. @sref{Mark sample}
- at end deffn
-
- at deffn {MGL command} textmark ydat 'txt' ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} textmark ydat rdat 'txt' ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} textmark xdat ydat rdat 'txt' ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} textmark xdat ydat zdat rdat 'txt' ['stl'='']
-Draws string @var{txt} as marks with size @var{rdat}[i]*@code{marksize} at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). If array @var{rdat} is not specified then @var{rdat}[i] = 1. See also @code{plot, mark, stem}. @sref{TextMark sample}
- at end deffn
-
- at deffn {MGL command} error ydat yerr ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} error xdat ydat yerr ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} error xdat ydat xerr yerr ['stl'='' @code{zval=nan}]
-Draws error boxes @{@var{xerr}[i], @var{yerr}[i]@} at points @{@var{xdat}[i], @var{ydat}[i], @var{zval}@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. See also @code{plot}. @sref{TextMark sample}
- at end deffn
-
- at deffn {MGL command} tube ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube ydat @code{rval} ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat @code{rval} ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat zdat rdat ['stl'='']
- at deffnx {MGL command} tube xdat ydat zdat @code{rval} ['stl'='']
-Draws tube with variable radius @var{rdat}[i] (or @var{rval}) at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot}. @sref{TextMark sample}
- at end deffn
-
- at deffn {MGL command} boxplot adat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} boxplot xdat adat ['stl'='' @code{zval=nan}]
-Draws boxplot (also known as a box-and-whisker diagram) at points @var{xdat} in plane z=@code{zval} (by default is at the bottom of the bounding box). This is five-number summaries of data <em>adat</em> (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction.
- at end deffn
-
- at c ##################################################################
- at node 2D plotting (MGL), 3D plotting (MGL), 1D plotting (MGL), MGL interface
- at section 2D plotting (MGL)
- at cindex mesh
- at cindex fall
- at cindex belt
- at cindex surf
- at cindex boxs
- at cindex tile
- at cindex dens
- at cindex cont
- at cindex contf
- at cindex contd
- at cindex axial
- at cindex grid
-
-These commands perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are 6 generally different types of data representations: simple mesh lines plot (Mesh), surface plot (Surf), surface plot by boxes (Boxs), surface plot by tiles (Tile), waterfall-like plot (Fall), belt plot (Belt), density plot (Dens), contour lines plot (Cont), solid contours plot (ContF) and its rotational figure (Axial). Cont, ContF and Axial commands have variants for automatic and manual selection of level values for contours. Also there are commands for plotting data grid lines according to the data format (Grid) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
-
-String parameter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} should be equal @var{xdat.nx=zdat.nx && ydat.nx=zdat.ny} or @var{xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny}. Arrays @var{xdat} and @var{ydat} can be vectors (not matrices as @var{zdat}). If array @var{xdat}, @var{ydat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y. Graphics are plotted for each z-slice of the data.
-
- at deffn {MGL command} mesh zdat ['sch'='']
- at deffnx {MGL command} mesh xdat ydat zdat ['sch'='']
-Draws mesh lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, fall, meshnum, cont, tens}. @sref{Mesh sample}
- at end deffn
-
- at deffn {MGL command} fall zdat ['sch'='']
- at deffnx {MGL command} fall xdat ydat zdat ['sch'='']
-Draws fall lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{belt, mesh, meshnum, tens}. @sref{Fall sample}
- at end deffn
-
- at deffn {MGL command} belt zdat ['sch'='']
- at deffnx {MGL command} belt xdat ydat zdat ['sch'='']
-Draws belts for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{fall, surf, plot, meshnum}. @sref{Belt sample}
- at end deffn
-
- at deffn {MGL command} surf zdat ['sch'='']
- at deffnx {MGL command} surf xdat ydat zdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{mesh, dens, belt, tile, boxs, surfc, surfa}. @sref{Surf sample}
- at end deffn
-
- at deffn {MGL command} boxs zdat ['sch'='']
- at deffnx {MGL command} boxs xdat ydat zdat ['sch'='']
-Draws vertical boxes for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, tile, step}. @sref{Boxs sample}
- at end deffn
-
- at deffn {MGL command} tile zdat ['sch'='']
- at deffnx {MGL command} tile xdat ydat zdat ['sch'='']
-Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, boxs, tile, step}. @sref{Tile sample}
- at end deffn
-
- at deffn {MGL command} dens zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} dens xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws density plot for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{surf, cont, contf, boxs, tile, dens[xyz]}. @sref{Dens sample}
- at end deffn
-
- at deffn {MGL command} cont vdat zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} cont vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws contour lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens, contf, axial, cont[xyz]}. @sref{Cont sample}
- at end deffn
-
- at deffn {MGL command} cont zdat ['sch'='' @code{num=7 zval=nan}]
- at deffnx {MGL command} cont xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
- at end deffn
-
- at deffn {MGL command} contf vdat zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} contf vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). See also @code{dens, cont, contd, axial, contf[xyz]}. @sref{ContF sample}
- at end deffn
-
- at deffn {MGL command} contf zdat ['sch'='' @code{num=7 zval=nan}]
- at deffnx {MGL command} contf xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
- at end deffn
-
- at deffn {MGL command} contd vdat zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} contd vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}) with manual colors. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). The color of k-th contour is @code{sch[k%strlen(sch)]}. See also @code{dens, cont, contf}. @sref{ContD sample}
- at end deffn
-
- at deffn {MGL command} contd zdat ['sch'='' @code{num=7 zval=nan}]
- at deffnx {MGL command} contd xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
- at end deffn
-
- at deffn {MGL command} axial vdat zdat ['sch'='']
- at deffnx {MGL command} axial vdat xdat ydat zdat ['sch'='']
-Draws surface which is result of contour plot rotation surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string @var{sch} contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @code{axialdir} will be set to specified direction. If string @var{sch} have symbol @samp{#} then wire plot is produced. See also @code{cont, contf, torus, surf3}. @sref{Axial sample}
- at end deffn
-
- at deffn {MGL command} axial zdat ['sch'='' @code{num=3}]
- at deffnx {MGL command} axial xdat ydat zdat ['sch'='' @code{num=3}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
- at end deffn
-
- at deffn {MGL command} grid zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} grid xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws grid lines for density plot of surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{dens, cont, contf}.
- at end deffn
-
-
- at c ##################################################################
- at node 3D plotting (MGL), Dual plotting (MGL), 2D plotting (MGL), MGL interface
- at section 3D plotting (MGL)
- at cindex surf3
- at cindex dens3
- at cindex cont3
- at cindex conta
- at cindex densa
- at cindex grid3
- at cindex grida
- at cindex cloud
- at cindex contf3
- at cindex contfa
- at cindex beam
-
-These commands perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 4 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 commands have variants for automatic and manual selection of level values for surfaces/contours. Also there are commands for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
-
-String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z.
-
-
- at deffn {MGL command} surf3 adat @code{val} ['sch'='']
- at deffnx {MGL command} surf3 xdat ydat zdat adat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. If string contain @samp{#} then wire plot is produced. See also @code{cloud, dens3, surf3c, surf3a, axial}. @sref{Surf3 sample}
- at end deffn
-
- at deffn {MGL command} surf3 adat ['sch'='' @code{num=5}]
- at deffnx {MGL command} surf3 xdat ydat zdat adat ['sch'='' @code{num=5}]
-Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} dens3 adat 'dir' [@code{sval=-1} 'sch'='']
- at deffnx {MGL command} dens3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws density plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Density is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample}
- at end deffn
-
- at deffn {MGL command} densa adat ['sch'='']
- at deffnx {MGL command} densa xdat ydat zdat adat ['sch'='']
-Draws density plots at all central slices of the 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} cont3 vdat adat 'dir' [@code{sval=-1} 'sch'='']
- at deffnx {MGL command} cont3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens3, contf3, cont, grid3}. @sref{Cont3 sample}
- at end deffn
-
- at deffn {MGL command} cont3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
- at deffnx {MGL command} cont3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}).
- at end deffn
-
- at deffn {MGL command} conta adat ['sch'='' @code{num=7}]
- at deffnx {MGL command} conta xdat ydat zdat adat ['sch'='' @code{num=7}]
-Draws contour plots at all central slices of the 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} contf3 vdat adat 'dir' [@code{sval=-1} 'sch'='']
- at deffnx {MGL command} contf3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws solid contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{dens3, cont3, contf, grid3}. @sref{ContF3 sample}
- at end deffn
-
- at deffn {MGL command} contf3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
- at deffnx {MGL command} contf3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}).
- at end deffn
-
- at deffn {MGL command} contfa adat ['sch'='' @code{num=7}]
- at deffnx {MGL command} contfa xdat ydat zdat adat ['sch'='' @code{num=7}]
-Draws solid contour plots at all central slices of the 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} grid3 adat 'dir' [@code{sval=-1} 'sch'='']
- at deffnx {MGL command} grid3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws grid for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Grid is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample}
- at end deffn
-
- at deffn {MGL command} grida adat ['sch'='']
- at deffnx {MGL command} grida xdat ydat zdat adat ['sch'='']
-Draws grids at all central slices of the 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} cloud adat ['sch'='']
- at deffnx {MGL command} cloud xdat ydat zdat adat ['sch'='']
-Draws cloud for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). This plot is a set of cubes with color and transparency proportional to value of @var{adat}. The resulting plot is like cloud -- low value is transparent but higher ones are not. The number of plotting cells depend on @code{meshnum}. Command @var{alpha} changes the overall transparency of plot. See also @code{surf3}. @sref{Cloud sample}
- at end deffn
-
- at deffn {MGL command} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}]
-Draws  @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d array @var{adat}. This is special kind of plot for @var{adat} specified in accompanied coordinates along curve @var{tr} with orts @var{g1}, @var{g2} and with transverse scale @var{rval}. Variable @var{flag} is bitwise: @samp{0x1} - draw in accompanied (not laboratory) coordinates; @samp{0x2} - draw projection to @math{\rho-z} plane; @samp{0x4} - draw normalized in each slice field. The x-size of data arrays @var{tr}, @var{g1}, @var{g2} must be nx>2. The y-size of data arrays @var{tr}, @var{g1}, @var{g2} and z-size of the data array @var{a} must be equal. @xref{Surf3}.
- at end deffn
-
-
- at c ##################################################################
- at node Dual plotting (MGL), Vector fields (MGL), 3D plotting (MGL), MGL interface
- at section Dual plotting (MGL)
- at cindex surfc
- at cindex surf3c
- at cindex surfa
- at cindex surf3a
- at cindex map
- at cindex tile
- at cindex stfa
-
-These plotting commands draw @emph{two matrix} simultaneously. There are 5 generally different types of data representations: surface or isosurface colored by other data (SurfC, Surf3C), surface or isosurface transpared by other data (SurfA, Surf3A), tiles with variable size (TileS), mapping diagram (Map), STFA diagram (STFA). Surf3A and Surf3C have variants for automatic and manual selection of level values for isosurfaces. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
-
-String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z.
-
- at deffn {MGL command} surfc zdat cdat ['sch'='']
- at deffnx {MGL command} surfc xdat ydat zdat cdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and color it by matrix @var{cdat}[i,j]. See also @code{surf, surfa, surf3c}. @sref{SurfC sample}
- at end deffn
-
- at deffn {MGL command} surf3c adat cdat @code{val} ['sch'='']
- at deffnx {MGL command} surf3c xdat ydat zdat adat cdat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the color of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3a, surfc}. @sref{Surf3C sample}
- at end deffn
-
- at deffn {MGL command} surf3c adat cdat ['sch'='' @code{num=5}]
- at deffnx {MGL command} surf3c xdat ydat zdat adat cdat ['sch'='' @code{num=5}]
-Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} surfa zdat cdat ['sch'='']
- at deffnx {MGL command} surfa xdat ydat zdat cdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and transparent it by matrix @var{cdat}[i,j]. See also @code{surf, surfc, surf3a, tile}. @sref{SurfA sample}
- at end deffn
-
- at deffn {MGL command} surf3a adat cdat @code{val} ['sch'='']
- at deffnx {MGL command} surf3a xdat ydat zdat adat cdat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the transparency of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3c, surfa}. @sref{Surf3A sample}
- at end deffn
-
- at deffn {MGL command} surf3a adat cdat ['sch'='' @code{num=5}]
- at deffnx {MGL command} surf3a xdat ydat zdat adat cdat ['sch'='' @code{num=5}]
-Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} tile zdat rdat ['sch'='']
- at deffnx {MGL command} tile xdat ydat zdat rdat ['sch'='']
-Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. It is mostly the same as @code{tile} but the size of tiles is determined by @var{rdat} array. See also @code{surfa, tile}. @sref{TileS sample}
- at end deffn
-
- at deffn {MGL command} map udat vdat ['sch'='' @code{pnts=on}]
- at deffnx {MGL command} map xdat ydat udat vdat ['sch'='' @code{pnts=on}]
-Draws mapping plot for matrixes @{@var{udat}, @var{vdat} @} which parametrically depend on coordinates @var{xdat}, @var{ydat}. The previous position of the cell (point) is marked by color. Height is proportional to Jacobian(udat,vdat). This plot is like Arnold diagram ???. If @code{pnts=off} then face is drawn otherwise the color ball at matrix knots are drawn. The size of @var{udat} and @var{vdat} must be the same. @sref{Map sample}
- at end deffn
-
- at deffn {MGL command} stfa re im @code{dn} ['sch'='' @code{pnts=on}]
- at deffnx {MGL command} stfa xdat ydat re im @code{dn} ['sch'='' @code{pnts=on}]
-Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}.
- at end deffn
-
-
-
-
- at c ##################################################################
- at node Vector fields (MGL), Other plotting (MGL), Dual plotting (MGL), MGL interface
- at section Vector fields (MGL)
- at cindex vectc
- at cindex vect
- at cindex flow
- at cindex pipe
- at cindex traj
- at cindex dew
-
-These commands perform plotting of 2D and 3D vector fields. There are 6 generally different types of vector fields representations: simple vector field (Vect), vector field with coloring (VectC), vector field by dew-drops (Dew), flow threads (Flow), flow pipes (Pipe), vectors along a curve (Traj). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
-
-The color is specified by the string argument @var{sch}. Previous color scheme is used by default. Parameter @var{flag} setup the hachures (arrows). It is compination of vlaues: @code{MGL_VEC_COL=1} for drawing bi-color arrow, @code{MGL_VEC_LEN=2} for drawing fixed length arrows, @code{MGL_VEC_DOT=16} for drawing hachures with dots instead of arrows, @code{MGL_VEC_END=4} for drawing arrows to the cell point, @code{MGL_VEC_MID=8} for drawing arrows with center at cell point. 
-
-The size of @var{udat}, @var{vdat} and @var{wdat} must be equal. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} and @var{udat} must be equal too. Arrays @var{xdat}, @var{ydat} and @var{zdat} can be vectors (not matrices as @var{udat}). The graphics is plotted for each z slice of @var{udat}, @var{vdat} for 2D case.
-
- at deffn {MGL command} traj xdat ydat udat vdat ['sch'='' @code{zval=nan len=0}]
- at deffnx {MGL command} traj xdat ydat zdat udat vdat wdat ['sch'='' @code{len=0}]
-Draws vectors @{@var{udat}, @var{vdat}, @var{wdat}@} along a curve @var{xdat}, @var{ydat}, @var{zdat}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. See also @code{vect}. @sref{Traj sample}
- at end deffn
-
- at deffn {MGL command} vect udat vdat ['sch'='' @code{zval=nan flag=0}]
- at deffnx {MGL command} vect xdat ydat udat vdat ['sch'='' @code{zval=nan flag=0}]
-Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample}
- at end deffn
-
- at deffn {MGL command} vect udat vdat wdat ['sch'='' @code{flag=0}]
- at deffnx {MGL command} vect xdat ydat zdat udat vdat wdat ['sch'='' @code{flag=0}]
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample}
- at end deffn
-
- at deffn {MGL command} vectc udat vdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} vectc xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vect, flow, pipe, dew}. @sref{VectC sample}
- at end deffn
-
- at deffn {MGL command} vectc udat vdat wdat ['sch'='']
- at deffnx {MGL command} vectc xdat ydat zdat udat vdat wdat ['sch'='']
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectC 3D sample}
- at end deffn
-
- at deffn {MGL command} vectl udat vdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} vectl xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample}
- at end deffn
-
- at deffn {MGL command} vectl udat vdat wdat ['sch'='']
- at deffnx {MGL command} vectl xdat ydat zdat udat vdat wdat ['sch'='']
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample}
- at end deffn
-
- at deffn {MGL command} dew udat vdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} dew xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws dew-drops for plane vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of drops is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of drops depend on @var{meshnum}. Note that this is very expensive plot in memory usage and creation time! See also @code{vectc}. @sref{Dew sample}
- at end deffn
-
- at deffn {MGL command} flow udat vdat ['sch'='' @code{num=5 zval=nan}]
- at deffnx {MGL command} flow xdat ydat udat vdat ['sch'='' @code{num=5 zval=nan}]
-Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of threads is proportional to @var{num}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample}
- at end deffn
-
- at deffn {MGL command} flow udat vdat wdat ['sch'='' @code{num=3}]
- at deffnx {MGL command} flow xdat ydat zdat udat vdat wdat ['sch'='' @code{num=3}]
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample}
- at end deffn
-
- at deffn {MGL command} flow @code{x0 y0} udat vdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} flow @code{x0 y0} xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} from point @{@var{x0}, @var{y0}@} at level @var{z=zVal}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample}
- at end deffn
-
- at deffn {MGL command} flow @code{x0 y0 z0} udat vdat wdat ['sch'='']
- at deffnx {MGL command} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'='']
-Draws flow thread from point @{@var{x0}, @var{y0}, @var{z0}@}. Arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample}
- at end deffn
-
-
- at deffn {MGL command} pipe udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}]
- at deffnx {MGL command} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}]
-Draws plane flow pipes for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of pipes is proportional to @var{num}. The color of pipes is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. See also @code{vect, vectc, pipe}. @sref{Flow sample}
- at end deffn
-
- at deffn {MGL command} pipe udat vdat wdat ['sch'='' @code{r0=0.05 num=3}]
- at deffnx {MGL command} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05 num=3}]
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample}
- at end deffn
-
-
- at c ##################################################################
- at node Other plotting (MGL), Nonlinear fitting (MGL), Vector fields (MGL), MGL interface
- at section Other plotting (MGL)
- at cindex cont[xyz]
- at cindex dens[xyz]
- at cindex contf[xyz]
- at cindex dots
- at cindex crust
- at cindex triplot
- at cindex fplot
- at cindex fsurf
-
-
-These commands perform miscelaneous plotting. There is unstructured data points plots (Dots), surface reconstruction (Crust), surfaces on the triangular mesh (TriPlot), textual formula plotting (Plots by formula), data plots at edges (Dens[XYZ], Cont[XYZ], ContF[XYZ]), simple plot (SimplePlot). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
-
- at deffn {MGL command} densx dat ['sch'='' @code{val=nan}]
- at deffnx {MGL command} densy dat ['sch'='' @code{val=nan}]
- at deffnx {MGL command} densz dat ['sch'='' @code{val=nan}]
-These plotting commands draw density plot in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{cont[xyz], contf[xyz], dens}. @sref{Dens projection sample}
- at end deffn
-
- at deffn {MGL command} contx dat ['sch'='' @code{val=nan num=7}]
- at deffnx {MGL command} conty dat ['sch'='' @code{val=nan num=7}]
- at deffnx {MGL command} contz dat ['sch'='' @code{val=nan num=7}]
-These plotting commands draw contour lines in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], contf[xyz], cont}. @sref{Cont projection sample}
- at end deffn
-
- at deffn {MGL command} contfx dat ['sch'='' @code{val=nan num=7}]
- at deffnx {MGL command} contfy dat ['sch'='' @code{val=nan num=7}]
- at deffnx {MGL command} contfz dat ['sch'='' @code{val=nan num=7}]
-These plotting commands draw solid contours in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], cont[xyz], contf}.
- at end deffn
-
- at deffn {MGL command} dots xdat ydat zdat ['sch'='']
- at deffnx {MGL command} dots xdat ydat zdat adat ['sch'='']
-Draws the arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Variable @var{adat}[i] set transparency for dots. See also @code{crust, mark, plot}. @sref{Dots sample}
- at end deffn
-
- at deffn {MGL command} crust xdat ydat zdat ['sch'='']
-Reconstructs and draws the surface for arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. See also @code{dots, triplot}. @sref{Crust sample}
- at end deffn
-
- at deffn {MGL command} triplot idat xdat ydat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} triplot idat xdat ydat zdat ['sch'='']
- at deffnx {MGL command} triplot idat xdat ydat zdat cdat ['sch'='']
-Draws the surface of triangles. Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 3 or greater. See also @code{dots, crust}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx).
- at end deffn
-
- at deffn {MGL command} fplot 'y(x)' ['pen'='' @code{zval=nan num=100}]
-Draws command function @samp{y(x)} at plane z=@var{zval} where @samp{x} variable is changed in @code{xrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}.
- at end deffn
-
- at deffn {MGL command} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'='' @code{num=100}]
-Draws command parametrical curve @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@} where @samp{t} variable is changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}.
- at end deffn
-
- at deffn {MGL command} fsurf 'z(x,y)' ['sch'='' @code{num=100}]
-Draws command surface for function @samp{z(x,y)} where @samp{x}, @samp{y} variable are changed in @code{xrange, yrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}.
- at end deffn
-
- at deffn {MGL command} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'='' @code{num=100}]
-Draws command parametrical surface @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@} where @samp{u}, @samp{v} variable are changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}.
- at end deffn
-
-
- at c ##################################################################
- at node Nonlinear fitting (MGL), Data create (MGL), Other plotting (MGL), MGL interface
- at section Nonlinear fitting (MGL)
- at cindex fit
- at cindex fits
- at cindex putsfit
-
-These commands fit data to formula. Fitting goal is to find formula parameters for the best fit the data points, i.e. to minimize the sum @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. At this, approximation command @samp{f} can depend only on one argument @samp{x} (1D case), on two arguments @samp{x,y} (2D case) and on three arguments @samp{x,y,z} (3D case). The command @samp{f} also may depend on parameters. Normally the list of fitted parameters is specified by @var{var} string (like, @samp{abcd}). Usually user should supply initial values for fitted parameters by @var{ini} variable. But if he/she don't supply it then the zeros are used.
-
-Commands @code{fit} and @code{fits} do not draw the obtained data themselves. They fill the data @var{out} by formula @samp{f} with found coefficients. At this, the @samp{x,y,z} coordinates are equidistantly distributed in the bounding box. Number of points in @var{out} is selected as maximal value of @var{out} size or 100. Also you may print the last formula with found coefficients by @code{putsfit} command. @sref{Fitting sample}
-
-The dimensions of arrays must be at least the same as the number of specified arrays @var{xdat}, @var{ydat}, @var{zdat}. Also the fitting only along specified directions will be performed (for example, along x and y if only @var{xdat} and @var{ydat} are specified). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x.
-
-
- at deffn {MGL command} fits adat sdat 'func' 'var' [ini=0]
- at deffnx {MGL command} fits xdat adat sdat 'func' 'var' [ini=0]
- at deffnx {MGL command} fits xdat ydat adat sdat 'func' 'var' [ini=0]
- at deffnx {MGL command} fits xdat ydat zdat adat sdat 'func' 'var' [ini=0]
-Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor @var{sdat}[i,j,k].
- at end deffn
-
- at deffn {MGL command} fit adat 'func' 'var' [ini=0]
- at deffnx {MGL command} fit xdat adat 'func' 'var' [ini=0]
- at deffnx {MGL command} fit xdat ydat adat 'func' 'var' [ini=0]
- at deffnx {MGL command} fit xdat ydat zdat adat 'func' 'var' [ini=0]
-Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor =1.
- at end deffn
-
- at deffn {MGL command} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}]
-Print last fitted formula with found coefficients (as numbers) at position @{@var{x}, @var{y}@}. The string @var{pre} will be printed before formula. All other parameters are the same as in @ref{Text printing (MGL)}.
- at end deffn
-
-
- at c ##################################################################
- at node Data create (MGL), Data filling (MGL), Nonlinear fitting (MGL), MGL interface
- at section Data create (MGL)
- at cindex new
- at cindex var
- at cindex list
- at cindex delete
- at cindex copy
- at cindex column
- at cindex set_id
-
- at deffn {MGL command} new dat [@code{nx=1 ny=1 nz=1}]
-Creates or recreates the array @var{dat} with specified size and fills it by zero. This command does nothing if one of parameters @var{nx}, @var{ny}, @var{nz} is zero or negative.
- at end deffn
-
- at deffn {MGL command} var dat @code{num v1 [v2=nan]}
-Creates new variable with name dat for one-dimensional array of size num. Array elements are equidistantly distributed in range [@var{v1}, @var{v2}]. If @var{v2}=@code{nan} then @var{v2=v1} is used. 
- at end deffn
-
- at deffn {MGL command} list dat @code{v1 ...}
-Creates new variable with name @var{dat} and fills it by numeric values of command arguments @code{v1 ...}. Command can create one-dimensional and two-dimensional arrays with arbitrary values. For creating 2d array the user should use delimiter - which means that the following values lie in next row. Array sizes are [maximal of row sizes * number of rows]. For example, command @code{list 1 | 2 3} creates the array [1 0; 2 3]. Note, that the maximal number of arguments is 1000. 
- at end deffn
-
- at deffn {MGL command} list dat d1 ...
-Creates new variable with name @var{dat} and fills it by data values of arrays of command arguments @var{d1 ...}. Command can create two-dimensional or three-dimensional (if arrays in arguments are 2d arrays) arrays with arbitrary values. Minor dimensions of all arrays in arguments should be equal to dimensions of first array d1. In the opposite case the argument will be ignored. Note, that the maximal number of arguments is 1000. 
- at end deffn
-
- at deffn {MGL command} copy dat1 dat2 ['eq'='' @code{on_axis=on}]
- at deffnx {MGL command} copy dat1 @code{val}
-Creates new variable with name @var{dat1} and fills it by data values of array @var{dat2}. At this, if parameter @var{eq} is specified then the data will be modified by corresponding formula by the same way as in @code{fill} command (for @code{on_axis=on}) or in @code{modify} command (for @code{on_axis=off}).
- at end deffn
-
- at deffn {MGL command} delete dat
-Deletes variable @var{dat} and makes its memory free. Can be useful for huge data arrays.
- at end deffn
-
- at deffn {MGL command} set_id dat 'ids'
-Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces).
- at end deffn
-
- at deffn {MGL command} info dat [@code{detail=off}]
-Display information (sizes, maximum/minimum, momentums and so on) about the data dat. Show brief information by default (if @code{detail=off}).
- at end deffn
-
- at deffn {MGL command} info 'text'
-Display @var{text} as information (warning).
- at end deffn
-
- at c ------------------------------------------------------------------
- at node Data filling (MGL), Rearrange data (MGL), Data create (MGL), MGL interface
- at section Data filling (MGL)
- at cindex fill
- at cindex modify
-
- at deffn {MGL command} fill dat v1 v2 ['dir'='x']
-Equidistantly fills the data values to range [@var{x1}, @var{x2}] in direction @var{dir}=@{@samp{x}, at samp{y}, at samp{z}@}.
- at end deffn
-
- at deffn {MGL command} fill dat 'eq' [vdat=0 wdat=0]
-Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in @emph{bounding box} (in difference from @code{modify} commands). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}.
- at end deffn
-
- at deffn {MGL command} modify dat 'eq' [@code{dim=0}]
-Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}.
- at end deffn
-
- at deffn {MGL command} modify dat 'eq' vdat [wdat=0]
-Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. If optional data @var{vdat}, @var{wdat} (must be the same size as @var{dat}) are specified then variables @samp{v} and @samp{w} denote its values else they are zero.
- at end deffn
-
-
- at deffn {MGL command} put a @code{val [i=: j=: k=:]}
-Function sets value(s) of array a[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the value @var{val} to whole range in corresponding direction(s). For example, @code{put a val : 0 :} sets a[i,0,j]=@var{val} for i=0...(a.nx-1), j=0...(a.nz-1).
- at end deffn
-
- at deffn {MGL command} put a v [@code{i=: j=: k=:}]
-Function copies value(s) from array @var{v} to the range of array @var{a}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the range in corresponding direction(s). At this minor dimensions of array @var{v} should be large than corresponding dimensions of array @var{a}. For example, @code{put a v : 0 :} sets a[i,0,j]=v.ny>nz ? v[i,j] : v[i], where i=0...(a.nx-1), j=0...(a.nz-1) and condition v.nx>=a.nx is true.
- at end deffn
-
-
-
- at c ------------------------------------------------------------------
- at node Rearrange data (MGL), File I/O (MGL), Data filling (MGL), MGL interface
- at section Rearrange data (MGL)
- at cindex rearrange
- at cindex extend
- at cindex transpose
- at cindex squeeze
- at cindex crop
-
- at deffn {MGL command} rearrange dat @code{mx [my=0 mz=0]}
-Rearrange dimensions without changing data array so that resulting sizes should  be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz} will be 1.
- at end deffn
-
- at deffn {MGL command} extend dat @code{n1 [n2=0]}
-Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be 
- at iftex
- at math{a_{ij}^{new} = a_i^{old}} where j=0... at var{n1}. Correspondingly, for @var{n1}<0 new array will be @math{a_{ij}^{new} = a_j^{old}} where i=0...|@var{n1}|.
- at end iftex
- at ifnottex
-a_ij^new = a_i^old where j=0... at var{n1}. Correspondingly, for @var{n1}<0 new array will be a_ij^new = a_j^old where i=0...|@var{n1}|.
- at end ifnottex
- at end deffn
-
- at deffn {MGL command} transpose dat ['dim'='yxz']
-Transposes (shift order of) dimensions of the data. New order of dimensions is specified int string @var{dim}. This command may be useful also for the reading of one-dimensional data.
- at end deffn
-
- at deffn {MGL command} squeeze dat @code{rx [ry=1 rz=1 sm=off]}
-Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{sm} set to use smoothing
- at iftex
-(i.e. @math{a_{out}[i]=\sum_{j=i}^{i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}).
- at end iftex
 @ifnottex
-(i.e. out[i]=\sum_@{j=i@}^@{i+r@} a[j]/r) or not (i.e. out[i]=a[j*r]).
- at end ifnottex
- at end deffn
-
- at deffn {MGL command} crop dat @code{n1 n2} 'dir'
-Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}- at var{n2} if @var{n2}<=0 along direction @var{dir}.
- at end deffn
-
- at c ------------------------------------------------------------------
- at node File I/O (MGL), Make another data (MGL), Rearrange data (MGL), MGL interface
- at section File I/O (MGL)
- at cindex read
- at cindex readhdf
- at cindex readmat
- at cindex readall
- at cindex save
- at cindex savehdf
- at cindex export
- at cindex import
-
- at deffn {MGL command} read dat 'fname'
-Reads data from tab-separated text file with auto determining sizes of the data.
- at end deffn
-
- at deffn {MGL command} read dat 'fname' @code{mx [my=1 mz=1]}
-Reads data from text file with specified data sizes. This command does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative.
- at end deffn
-
- at deffn {MGL command} readmat dat 'fname' [@code{dim=2}]
-Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions.
- at end deffn
-
- at deffn {MGL command} readall dat 'templ' @code{v1 v2 [dv=1 slice=off]}
-Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{v1} to @var{v2} with step @var{dv}. The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}.
- at end deffn
-
- at deffn {MGL command} readall dat 'templ' @code{[slice=off]}
-Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}.
- at end deffn
-
- at deffn {MGL command} save dat 'fname'
-Saves the whole data array to tab-separated text file.
- at end deffn
-
- at deffn {MGL command} readhdf dat 'fname' 'dname'
-Reads data array named @var{dname} from HDF file @var{fname}.
- at end deffn
- at deffn {MGL command} savehdf dat 'fname' 'dname'
-Saves data array named @var{dname} from HDF file @var{fname}.
- at end deffn
-
- at deffn {MGL command} import dat 'fname' 'sch' [@code{v1=0 v2=1}]
-Reads data from bitmap file. The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{sch} (@pxref{Color scheme}).
- at end deffn
-
- at deffn {MGL command} export dat 'fname' 'sch' [@code{v1=0 v2=0}]
-Saves data matrix to bitmap file. The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{sch} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array.
- at end deffn
+ at node Top
+ at top MGL script language
 
- at c ------------------------------------------------------------------
- at node Make another data (MGL), Commands on direction (MGL), File I/O (MGL), MGL interface
- at section Make another data (MGL)
- at cindex subdata
- at cindex hist
- at cindex momentum
- at cindex sum
- at cindex max
- at cindex min
- at cindex combine
- at cindex evaluate
- at cindex resize
+This file documents the MGL script language. It corresponds to release @value{VERSION} of the MathGL library. Please report any errors in this manual to @email{mathgl.abalakin@@gmail.org}. More information about MGL and MathGL can be found at the project homepage, @uref{http://mathgl.sourceforge.net/}.
 
- at deffn {MGL command} combine res adat bdat
-Returns direct multiplication of arrays (like, res[i,j] = adat[i]*bdat[j] and so on).
- at end deffn
+Copyright @copyright{} 2008 Alexey A. Balakin. 
 
- at deffn {MGL command} evaluate res dat idat [@code{norm=on}]
- at deffnx {MGL command} evaluate res dat idat jdat [@code{norm=on}]
- at deffnx {MGL command} evaluate res dat idat jdat kdat [@code{norm=on}]
-Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly.
- at end deffn
+ at quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License.''
 
- at deffn {MGL command} hist res dat @code{num v1 v2 [nsub=0]}
- at deffnx {MGL command} hist res dat wdat @code{num v1 v2 [nsub=0]}
-Creates @var{num}-th points distribution @var{res} of the data values of @var{dat} in range [@var{v1}, @var{v2}]. Array @var{wdat} specifies weights of the data elements (all weight is 1 if @var{wdat} is not specified). Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram).
- at end deffn
+(a) The FSF's Back-Cover Text is: ``You have the freedom to
+copy and modify this GNU manual.  Buying copies from the FSF
+supports it in developing GNU and promoting software freedom.''
+ at end quotation
 
- at deffn {MGL command} hist res xdat adat
- at deffnx {MGL command} hist res xdat ydat adat
- at deffnx {MGL command} hist res xdat ydat zdat adat
-Creates distribution @var{res} of the data values of @var{adat} in axis range [Min, Max]. Array @var{adat} look like weights of the data points.
- at end deffn
-
-
-
-
- at deffn {MGL command} momentum res dat 'how' ['dir'='z']
-Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as
- at iftex
- at math{res_k = \sum_{ij} how(x_i,y_j,z_k) a_{ij}/\sum_{ij} a_{ij}}
- at end iftex
- at ifnottex
-res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij
- at end ifnottex
-if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1].
- at end deffn
-
- at deffn {MGL command} sum res dat 'dir'
-Gets array which is the result of summation in given direction or direction(s).
- at end deffn
- at deffn {MGL command} max res dat 'dir'
-Gets array which is the maximal data values in given direction or direction(s).
- at end deffn
- at deffn {MGL command} min res dat 'dir'
-Gets array which is the minimal data values in given direction or direction(s).
- at end deffn
-
- at deffn {MGL command} resize res dat @code{mx [my=1 mz=1]}
-Makes array @var{res} of sizes @var{mx}, @var{my}, @var{mz} with interpolated data of array @var{dat}. 
- at end deffn
-
- at deffn {MGL command} subdata res dat @code{xx [yy=: zz=:]}
-Extracts sub-array data @var{res} from the original data @var{dat} array keeping fixed positive index. For example @code{subdata a b : 2} extracts 3d row (indexes are zero based), @code{subdata a b 4 :} extracts 5th column, @code{subdata a b : : 3} extracts 4th slice and so on. Note that symbol @samp{:} is defined @samp{:}=@code{-1} in MGL.
- at end deffn
-
- at deffn {MGL command} trace res dat
-Gets array of diagonal elements dat[i,i] (for 2D case) or dat[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1.
- at end deffn
-
- at deffn {MGL command} transform dat 'type' real imag
-Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
- at end deffn
-
- at deffn {MGL command} transforma dat 'type' ampl phase
-Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
- at end deffn
-
- at deffn {MGL command} stfad res real imag @code{dn} ['dir'='x']
-Short time Fourier analysis for real and imaginary parts. Output  is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
- at end deffn
-
- at deffn {MGL command} pde res 'ham' ini_re ini_im [@code{dz=0.1 k0=100}]
-Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Coordinates of the equation (and the solution) are supposed to be in the bounding box. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham='p^2+q^2-u^2'}. You may specify imaginary part for wave absorption, like @code{ham = 'p^2+i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}).
- at end deffn
-
- at deffn {MGL command} ray res 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]}
-Solves GO ray equation like d at emph{r}/dt = d @var{ham}/d at emph{p}, d at emph{p}/dt = -d @var{ham}/d at emph{r}. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordiantes @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}.
- at end deffn
-
- at deffn {MGL command} qo2d res 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx=0 yy=0]
-Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} 
- at end deffn
-
- at deffn {MGL command} jacobian res xdat ydat [zdat=0]
-Computates the Jacobian for transformation @{i,j,k@} to @{@var{xdat}, at var{ydat}, at var{zdat}@} where initial coordinates  @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{xdat}, at var{ydat}, at var{zdat}@} and @math{\xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{xdat}, at var{ydat}, at var{zdat}@} are specified or 2D if only 2 arrays @{@var{xdat}, at var{ydat}@} are specified.
- at end deffn
-
-
-
- at c ------------------------------------------------------------------
- at node Commands on direction (MGL), Operators (MGL), Make another data (MGL), MGL interface
- at section Commands on direction (MGL)
- at cindex cumsum
- at cindex integral
- at cindex diff
- at cindex diff2
- at cindex swap
- at cindex mirror
- at cindex sew
- at cindex smooth
- at cindex envelop
- at cindex norm
- at cindex normsl
-
-These commands change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondingly.
-
- at deffn {MGL command} cumsum dat 'dir'
-Cumulative summation of the data in given direction or directions.
- at end deffn
- at deffn {MGL command} integrate dat 'dir'
-Integrates (like cumulative summation) the data in given direction or directions.
- at end deffn
- at deffn {MGL command} diff dat 'dir'
-Differentiates the data in given direction or directions.
- at end deffn
- at deffn {MGL command} diff dat xdat ydat [zdat=0]
-Differentiates the data @var{dat} specified parametrically in direction @var{xdat} with @var{ydat}, @var{zdat}=constant. Parameter @var{zdat} can be omitted that correspond to 2D case. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{diff a x y} and usual derivative along @samp{y} will be @code{diff a y x}.
- at end deffn
-
- at deffn {MGL command} diff2 dat 'dir'
-Double-differentiates (like Laplace operator) the data in given direction.
- at end deffn
- at deffn {MGL command} swap dat 'dir'
-Swaps the left and right part of the data in given direction (useful for Fourier spectrum).
- at end deffn
- at deffn {MGL command} mirror dat 'dir'
-Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}.
- at end deffn
-
- at deffn {MGL command} sew dat ['dir'='xyz' @code{da=2*pi}]
-Remove value steps (like phase jumps after inverse trigonometric commands) with period @var{da} in given direction.
- at end deffn
- at deffn {MGL command} smooth data @code{type} ['dir'='xyz']
-Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @samp{0} does nothing, @samp{1} linear averaging by 3 points, @samp{2} linear averaging by 5 points, @samp{3} quadratic averaging by 5 points.
- at end deffn
-
- at deffn {MGL command} envelop dat ['dir'='x']
-Find envelop for data values along direction @var{dir}. Only one direction can be specified at once.
- at end deffn
-
- at deffn {MGL command} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}]
-Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep} is set then maximal value of k-th slice will be limited by 
- at iftex
- at math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}.
- at end iftex
- at ifnottex
- at math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}.
 @end ifnottex
- at end deffn
-
- at deffn {MGL command} norm dat @code{v1 v2 [sym=off dim=0]}
-Normalizes the data to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}.
- at end deffn
-
 
- at c ------------------------------------------------------------------
- at node Operators (MGL), Program flow (MGL), Commands on direction (MGL), MGL interface
- at section Operators (MGL)
- at cindex multo
- at cindex addto
- at cindex divto
- at cindex subto
-
- at deffn {MGL command} multo dat dat2
-Multiplies the data by the other one for each element.
- at end deffn
- at deffn {MGL command} divto dat dat2
-Divides the data by the other one for each element.
- at end deffn
- at deffn {MGL command} addto dat dat2
-Adds the other data.
- at end deffn
- at deffn {MGL command} subto dat dat2
-Subtracts the other data.
- at end deffn
- at deffn {MGL command} multo dat @code{val}
-Multiplies each element by the number.
- at end deffn
- at deffn {MGL command} divto dat @code{val}
-Divides each element by the number.
- at end deffn
- at deffn {MGL command} addto dat @code{val}
-Adds the number to each element.
- at end deffn
- at deffn {MGL command} subto dat @code{val}
-Subtracts the number to each element.
- at end deffn
-
- at c ------------------------------------------------------------------
- at node Program flow (MGL), Command options (MGL), Operators (MGL), MGL interface
- at section Program flow (MGL)
- at cindex call
- at cindex chdir
- at cindex define
- at cindex if
- at cindex elseif
- at cindex else
- at cindex endif
- at cindex for
- at cindex next
- at cindex once
- at cindex stop
-
-These commands control program flow, like, conditions, cycles, define script arguments and so on.
-
- at deffn {MGL command} call 'fname'
-Executes script @var{fname}.
- at end deffn
- at deffn {MGL command} chdir 'path'
-Changes the current directory to @var{path}.
- at end deffn
- at deffn {MGL command} define $N smth
-Sets @var{N}-th script argument to @var{smth}. Note, that @var{smth} is used as is (with @samp{'} symbols if present).
- at end deffn
- at deffn {MGL command} define name smth
-Create scalar variable @code{name} which have the numeric value of @code{smth}. Later you can use this variable as usual number.
- at end deffn
- at deffn {MGL command} if dat 'cond'
-Starts block which will be executed if @var{dat} satisfy to @var{cond}.
- at end deffn
- at deffn {MGL command} if @code{val}
-Starts block which will be executed if @code{val} is nonzero.
- at end deffn
- at deffn {MGL command} elseif dat 'cond'
-Starts block which will be executed if previous @code{if} or @code{elseif} is false and @var{dat} satisfy to @var{cond}.
- at end deffn
- at deffn {MGL command} elseif @code{val}
-Starts block which will be executed if previous @code{if} or @code{elseif} is false and @code{val} is nonzero.
- at end deffn
- at deffn {MGL command} else
-Starts block which will be executed if previous @code{if} or @code{elseif} is false.
- at end deffn
- at deffn {MGL command} endif
-Finishes @code{if/elseif/else} block.
- at end deffn
- at deffn {MGL command} for $N @code{v1 v2 [dv=1]}
-Starts cycle with @var{N}-th argument changing from @var{v1} to @var{v2} with the step @var{dv}.
- at end deffn
- at deffn {MGL command} for $N dat
-Starts cycle with @var{N}-th argument changing for @var{dat} values.
- at end deffn
- at deffn {MGL command} next
-Finishes @code{for} cycle.
- at end deffn
- at deffn {MGL command} once @code{val}
-The code between once on and once off will be executed only once. Useful for large data manipulation in programs like UDAV.
- at end deffn
- at deffn {MGL command} stop
-Terminate execution.
- at end deffn
-
- at c ------------------------------------------------------------------
- at node  Command options (MGL), Suffixes, Program flow (MGL), MGL interface
- at section Command options (MGL)
- at cindex alpha
- at cindex alphadef
- at cindex xrange
- at cindex yrange
- at cindex zrange
- at cindex crange
- at cindex cut
- at cindex ambient
- at cindex fontsize
- at cindex marksize
- at cindex meshnum
- at cindex legend
-
-Command options allow the easy setup of the plot by changing of global settings only for this plot. Options are specified at the end of string. Each option is separated from the previous text by symbol @samp{;}. Options work so that them remember the current settings, change settings as it being set in the option, execute command and return the original settings back. So, the options usage for data handling commands or for graphics setup commands is useless.
-
-The most useful options are @code{xrange, yrange, zrange}. They sets the boundaries for data change. This boundaries are used for automatically filled variables. So, these options allow one to change the position of some plots. For example, in command @code{plot y; xrange 0.1 0.9} the x coordinate will be equidistantly distributed in range 0.1 ... 0.9.
+ at menu
+* MGL interface::
+* Examples::
+* Samples::
+* Copying This Manual::
+* Index::
+ at end menu
 
-The full list of options are:
- at deffn {MGL command} alpha @code{val}
-Sets alpha value (transparency) of the plot. The value should be in range [0, 1].
- at end deffn
- at deffn {MGL command} alphadef @code{val}
-Sets alpha value (transparency) of the plot. The value should be in range [0, 1].
- at end deffn
- at deffn {MGL command} ambient @code{val}
-Sets brightness of ambient light for the plot. The value should be in range [0, 1].
- at end deffn
- at deffn {MGL command} crange @code{val1 val2}
-Sets boundaries of color change for the plot.
- at end deffn
- at deffn {MGL command} xrange @code{val1 val2}
-Sets boundaries of x coordinate change for the plot.
- at end deffn
- at deffn {MGL command} yrange @code{val1 val2}
-Sets boundaries of y coordinate change for the plot.
- at end deffn
- at deffn {MGL command} zrange @code{val1 val2}
-Sets boundaries of z coordinate change for the plot.
- at end deffn
- at deffn {MGL command} cut @code{val}
-Sets whether to cut or to project the plot points lying outside the bounding box.
- at end deffn
- at deffn {MGL command} fontsize @code{val}
-Sets the size of text.
- at end deffn
- at deffn {MGL command} marksize @code{val}
-Sets the size of marks.
- at end deffn
- at deffn {MGL command} meshnum @code{val}
-Work like @code{meshnum} command.
- at end deffn
- at deffn {MGL command} legend 'txt'
-Adds string 'txt' to internal legend accumulator. The style of described line and mark is taken from arguments of the plot command. The maximal number of entries is 100.
- at end deffn
+ at rmacro sref {arg}
+ at xref{\arg\}, for sample code and picture.
+ at end rmacro
+ at macro tdref{nam}
+ at uref{http://mathgl.sourceforge.net/pdf_u3d/\nam\.pdf, 3D pdf}
+ at end macro
+ at macro MGL
+ at end macro
+ at set UDAV
 
- at c ------------------------------------------------------------------
- at node  Suffixes, Utilities, Command options (MGL), MGL interface
- at section Suffixes for variable
+ at node MGL interface, Examples, , Top
+ at include mgl_cmd_en.texi
 
-Suffixes can get some numerical value (like its size, maximal or minimal value, the sum of elements and so on) of the data array in variable and use it later as usual number in command arguments. The suffixes start from point @samp{.} right after (without spaces) variable name or its sub-array. For example, @code{a.nx} give the x-size of data a, @code{b(1).max} give maximal value of second row of variable b, @code{c(:,0).sum} give sum of element in first column of c and so on.
+ at node Examples, Samples, MGL interface, Top
+ at include ex_mgl_en.texi
 
-The full list of suffixes are:
- at table @strong
- at item nx, ny, nz
-Give the data size in x-, y-, z-direction correspondingly.
- at item max
-Give maximal value of the data.
- at item min
-Give minimal value of the data.
- at item mx, my, mz
-Give x-, y-, z-position of data maximum.
- at item ax, ay, az, aa
-Give x-, y-, z-position of data mass center or average data value.
- at item wx, wy, wz, wa
-Give width in x-, y-, z-direction or data dispersion value.
- at item sx, sy, sz, sa
-Give skewness in x-, y-, z-direction or data skewness value.
- at item kx, ky, kz, ka
-Give kurtosis in x-, y-, z-direction or data kurtosis value.
- at item sum
-Give sum of data values.
- at item a
-Give first value of data array.
- at item fst
-Give first nonzero value of data array.
- at item lst
-Give last nonzero value of data array.
- at end table
+ at node Samples,Copying This Manual, Examples, Top
+ at include samples_en.texi
 
- at c ------------------------------------------------------------------
- at node  Utilities, , Suffixes, MGL interface
- at section Utilities for parsing MGL
+ at node Copying This Manual, Index, Samples, Top
+ at appendix GNU Free Documentation License
+ at include fdl.texi
 
-MathGL library provides several tools for parsing MGL scripts. There is tools saving it to bitmap (@code{mgl2png}, @code{mgl2gif}) or vectorial (@code{mgl2eps}, @code{mgl2svg}) images. Tool @code{mglview} show MGL script and allow to rotate and setup the image. Also you can translate MGL script to C++ file by help of @code{mgl2cpp} tool.
+ at node Index, , Copying This Manual, Top
+ at unnumbered Index
 
-All of this tools have similar set of arguments. First argument is name of script file, next argument is optional output file name, last arguments are options. There are options for setting script parameters (it is @code{$0, $1, ... $9}) and locale settings. The script parameters have format @samp{-Nval}. Here N=0,1...9 is parameter ID and val is its value. For example, option @samp{-1test} set to substitute @samp{test} instead of @code{$1} in the script. Option -Lval set locale to val. For example, @samp{-Lutf8} will set UTF-8 locale for script.
+ at printindex cp
 
-Additionally you can create animated GIF file or a set of JPEG files with names @samp{frameNNNN.jpg} (here @samp{NNNN} is frame index). You should use @code{mgl2gif} tool and specify the values of @code{$0} parameter for making animation. Values of the parameter @code{$0} can be specified inside the script by comment @code{##a val} for each value @code{val} (one comment for one value) or by option(s) @samp{-Aval}. Tool @code{mgl2gif} will execute script several times (once for each specified value of @code{$0}) and save result in animated GIF file. For saving each frame in JPEG just add command @code{write ''} at the end of the script.
+ at bye
diff --git a/texinfo/mgl_ru.texi b/texinfo/mgl_ru.texi
index 3afd9f2..cee1571 100644
--- a/texinfo/mgl_ru.texi
+++ b/texinfo/mgl_ru.texi
@@ -1,1624 +1,106 @@
- at c ------------------------------------------------------------------
- at node MGL interface, Samples, Other classes, Top
- at chapter MGL interface
+\input texinfo
+ at setfilename mgl_ru.info
+ at c @documentlanguage ru
+ at documentencoding UTF-8
+ at set VERSION 1.11
+ at settitle Язык MGL для версии @value{VERSION}
+ at syncodeindex pg cp
+ at comment %**end of header
+
+ at copying
+Это документация для MathGL (версии @value{VERSION}) -- библиотеки классов и функций для построения научной графики. Пожалуйста сообщайте о любых ошибках в этом руководстве на @email{mathgl.abalakin@@gmail.org}.
+
+Copyright @copyright{} 2009 Алексей Балакин.
+
+ at quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License.''
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to
+copy and modify this GNU manual.  Buying copies from the FSF
+supports it in developing GNU and promoting software freedom.''
+ at end quotation
+ at end copying
+
+ at c @dircategory MathGL documentation system
+ at c @direntry
+ at c * MathGL: (mathgl). The library for scientific graphics.
+ at c @end direntry
+
+ at titlepage
+ at title Язык MGL
+ at subtitle версия @value{VERSION}
+ at author А.А. Балакин (@uref{http://mathgl.sourceforge.net/})
+ at page
+ at vskip 0pt plus 1filll
+ at insertcopying
+ at end titlepage
+
+ at contents
 
-MathGL library supports (from version 1.3) the simplest scripts for data handling and plotting. These scripts can be used independently (with the help of mgl2png, mgl2eps, mgl2svg programs and others) or in the frame of the library using.
-
-MGL script language is rather simple. Each string is a command. First word of string is the name of command. Other words are command arguments. Command may have up to 1000 arguments (at least for now). Words are separated from each other by space or tabulation symbol. The upper or lower case of words is sufficient, i.e. variables a and A are different variables. Symbol @samp{#} starts the comment (all characters after # will be ignored). The exception is situation when # is a part of some string. Also options can be specified at the end of string (after symbol @samp{;}, @pxref{Command options (MGL)}). Symbol @samp{:} starts new command (like new line character) if it is not placed inside a string or inside brackets.
-
-If string contain references to external parameters (substrings @samp{$0}, @samp{$1} ... @samp{$9}) then before execution the values of parameter will be substituted instead of reference. It allows to use the same MGL script for different parameters (filenames, paths, condition and so on).
-
-Argument can be a string, a variable name or a number. 
- at itemize @bullet
- at item 
-The string is any symbols between ordinary marks @samp{'}.
-
- at item 
-Variable name is arbitrary combination of symbols (except spaces and @samp{'}) started from a letter and with length less than 64. It is possible to use sub-arrays (like in @code{subdata} command) as command argument. For example, @code{a(1)} or @code{a(1,:)} or @code{a(1,:,:)} is second row, @code{a(:,2)} or @code{a(:,2,:)} is third column, @code{a(:,:,0)} is first slice and so on. Also you can extract a part of array from m-th to n-th element by code @code{a(m:n,:,:)} or just @code{a(m:n)}.
-
-If names for data columns was specified (by set_id command or in the file at string started with @code{##}) then it is possible to use any column combinations defined by formulas, like @code{a('n*w^2/exp(t)')}.
-
-Also, any expression (without spaces) of existed variables produce temporary variable. For example, @samp{sqrt(dat(:,5)+1)} will produce temporary variable with data values equal to @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. Such variables can not be used as 1st argument for commands which create (return) the data (like @samp{new}, @samp{read}, @samp{hist} and so on).
-
- at item 
-Special names @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1} are treated as number if they were not redefined by user. Variables with suffixes are treated as numbers (@pxref{Suffixes}). Also results of formulas with sizes 1x1x1 are treated as number (for example, @samp{pi/dat.nx}).
- at end itemize
-Before the first using all variables must be defined with the help of commands, like, @code{new, var, list, copy} or @code{read}. 
-
-All MGL commands can be divided on several groups. I will use the following notation for a command description: command names are bold, strings are denoted by commas, variable names are italic, numbers are typewriter. Optional arguments are placed in square brackets and default values for them are shown. Detailed description of color, line styles, color schemes, font types, TeX-like symbols and formulas can be found in corresponding section.
-
- at menu
-* Graphics setup (MGL)::        
-* Axis settings (MGL)::         
-* Transformation matrix (MGL)::  
-* Export to file (MGL)::        
-* Primitives drawing (MGL)::    
-* Text printing (MGL)::         
-* Axis and Colorbar (MGL)::     
-* Legend (MGL)::                
-* 1D plotting (MGL)::           
-* 2D plotting (MGL)::           
-* 3D plotting (MGL)::           
-* Dual plotting (MGL)::         
-* Vector fields (MGL)::         
-* Other plotting (MGL)::        
-* Nonlinear fitting (MGL)::     
-* Data create (MGL)::           
-* Data filling (MGL)::          
-* Rearrange data (MGL)::        
-* File I/O (MGL)::              
-* Make another data (MGL)::     
-* Commands on direction (MGL)::  
-* Operators (MGL)::             
-* Program flow (MGL)::          
-* Command options (MGL)::       
-* Suffixes::                    
-* Utilities::                   
- at end menu
-
-
- at c ##################################################################
- at node Graphics setup (MGL), Axis settings (MGL), , MGL interface
- at section Graphics setup (MGL)
-
-Coomands in this group influences on overall graphics appearance. So all of them should be placed @emph{before} any actual plotting commands. 
-
- at menu
-* Transparency (MGL)::          
-* Lighting (MGL)::              
-* Fog (MGL)::                   
-* Default sizes (MGL)::         
-* Zooming (MGL)::               
-* Cutting (MGL)::               
-* Other settings (MGL)::        
- at end menu
-
- at c ==================================================================
- at node Transparency (MGL), Lighting (MGL), , Graphics setup (MGL)
- at subsection Transparency (MGL)
- at cindex alpha
- at cindex alphadef
- at cindex transparent
- at cindex transptype
-
-There are several commands for setup transparency. The general command is @code{alpha} which switch on/off the transparency for overall plot. It influence only for graphics which created after @code{alpha} call (with one exeption, mglGraphGL). Command @code{alphadef} specify the default value of alpha-channel. You may switch off transparency of selected plot by command @code{transparent}. Finally, command @code{transptype} set the kind of transparency. @sref{Transparent surface sample}
-
- at deffn {MGL command} alpha @code{[val=on]}
-Sets the transparency on/off. It is recommended to call this command before any plotting command. Default value is @code{off}. Use @code{transparent off} in particular plot to disable its transparency.
- at end deffn
- at deffn {MGL command} alphadef @code{val}
-Default value of alpha channel (transparency) for all plotting commands. Initial value is 0.5.
- at end deffn
- at deffn {MGL command} transparent @code{val}
-Temporary switches transparency on/off for the plot.
- at end deffn
- at deffn {MGL command} transptype @code{val}
-This command set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{alphadef 0.3} or less for lamp-like transparency.
- at end deffn
-
- at c ==================================================================
- at node Lighting (MGL), Fog (MGL), Transparency (MGL), Graphics setup (MGL)
- at subsection Lighting (MGL)
- at cindex light
- at cindex ambient
-
-There are several commands for setup lighting. The general command is @code{light} which switch on/off the lighting for overall plot. It influence only for graphics which created after @code{light} call (with one exeption, mglGraphGL). Generally MathGL support up to 10 independent light sources. But in OpenGL mode only 8 of light sources is used due to OpenGL limitations. The position, color, brightness of each light source can be set separately. By default only one light source is active. It is source number @code{0} with white color, located at top of the plot.
-
- at deffn {MGL command} light @code{[val=on]}
-Sets the using of light on/off for overall plot. It is recommended to call this command before any plotting command. Default value is lightning off.
- at end deffn
- at deffn {MGL command} light @code{num val}
-Switch on/off @var{num}-th light source separately.
- at end deffn
-
- at deffn {MGL command} light @code{num xpos ypos zpos} ['col'='w' @code{br=0.5}]
-The command adds a light source with identification @var{num} at position @{@var{xpos}, @var{ypos}, @var{zpos}@}. The color of light is @var{col} (white by default). The brightness of light is @var{br} which must be in range [0,1].
- at end deffn
-
- at deffn {MGL command} ambient @code{val}
-Sets the brightness of ambient light. The value should be in range [0,1]. Initial value is 0.5. 
- at end deffn
-
- at c ==================================================================
- at node Fog (MGL), Default sizes (MGL), Lighting (MGL), Graphics setup (MGL)
- at subsection Fog (MGL)
- at cindex fog
-
- at deffn {MGL command} fog @code{val [dz=0.25]}
-Command imitate a fog in the plot. Fog start from relative distance @var{dz} from view point and its density growths exponentially in depth. So that the fog influence is determined by law ~ 1-exp(- at emph{val*z}). Here @emph{z} is normalized to 1 depth of the plot. If value @var{val}=@code{0} then the fog is absent. @sref{Surface in fog sample}
- at end deffn
-
- at c ==================================================================
- at node Default sizes (MGL), Zooming (MGL), Fog (MGL), Graphics setup (MGL)
- at subsection Default sizes (MGL)
- at cindex marksize
- at cindex arrowsize
- at cindex linewidth
- at cindex ticklen
- at cindex tickstl
-
-These commands control the default (initial) values for most graphics parameters including sizes of markers, arrows, linewidth and so on. As any other settings these ones will influence only on plots created after the settings change.
-
- at deffn {MGL command} barwidth @code{val}
-Sets relative width of rectangles in @code{bars, barh, boxplot}. Default value is @code{0.7}.
- at end deffn
-
- at deffn {MGL command} marksize @code{val}
-The size of marks. Default value is @code{1}.
- at end deffn
-
- at deffn {MGL command} arrowsize @code{val}
-The size of arrows for lines and curves. Default value is @code{1}.
- at end deffn
-
- at deffn {MGL command} linewidth @code{val}
-The variable define the base width for all lines. The value <1 is ignored. Increase of this variables is actual for large bitmap pictures. Default value is @code{1}.
- at end deffn
-
- at deffn {MGL command} ticklen @code{val} [@code{stt=1}]
-The relative length of axis ticks. Default value is @code{0.1}. Parameter @var{stt}>0 set relative length of subticks which is in @code{sqrt(1+stt)} times smaller.
- at end deffn
-
- at deffn {MGL command} tickstl 'stl' ['sub'='']
-The line style of axis ticks (@var{stl}) and subticks (@var{sub}). If @var{stl}='' then default style is used (@samp{k} or @samp{w} depending on transparency type). If @var{sub}='' then ticks style is used (i.e. @var{stl}).
- at end deffn
-
- at c ==================================================================
- at node Zooming (MGL), Cutting (MGL), Default sizes (MGL), Graphics setup (MGL)
- at subsection Zooming (MGL)
- at cindex plotfactor
- at cindex zoom
-
-These commands control the overall zooming of the picture or the sub-picture. Normally you can use these variables and commands for removing ``white'' spaces around a plot.
-
- at deffn {MGL command} plotfactor @code{val}
-The factor of plot size. It is not recommended to set it lower then 1.6. This is some analogue of command @code{zoom} but applied not to overall image but for each @code{inplot}. Use negative value to enable automatic @code{plotfactor} selection.
- at end deffn
-
- at deffn {MGL command} zoom @code{x1 y1 x2 y2}
-The command changes the scale of graphics that correspond to zoom in/out of the picture. After command call the current plot will be cleared and further the picture will contain plotting from its part [x1,x2]*[y1,y2]. Here picture coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} changes from 0 to 1. Use @code{zoom 0 0 1 1} to return default view.
- at end deffn
-
- at c ==================================================================
- at node Cutting (MGL), Other settings (MGL), Zooming (MGL), Graphics setup (MGL)
- at subsection Cutting (MGL)
- at cindex cut
-
-These commands set the condition when the points are excluded (cutted) from the drawing.
-
- at deffn {MGL command} cut @code{val}
-Determines how points outside bounding box are drawn. If it is @code{true} then points are excluded from plot (it is default) otherwise the points are projected to edges of bounding box.
- at end deffn
-
- at deffn {MGL command} cut @code{x1 y1 z1 x2 y2 z2}
-Lower and upper edge of the box in which never points are drawn. If both edges are the same (the variables are equal) then the cutting box is empty. @sref{CutMinMax sample}
- at end deffn
-
- at deffn {MGL command} cut 'cond'
-Command set the cutting off condition by formula @var{cond}. This condition determine will point be plotted or not. If value of formula is nonzero then point is omitted, otherwise it plotted. Set argument as @code{''} to disable cutting off condition. @sref{CutOff sample}
- at end deffn
-
- at c ==================================================================
- at node Other settings (MGL), , Cutting (MGL), Graphics setup (MGL)
- at subsection Other settings (MGL)
- at cindex font
- at cindex rotatetext
- at cindex palette
- at cindex meshnum
- at cindex axialdir
-
- at deffn {MGL command} font 'fnt' [@code{val=6}]
-Font style for text and labels (see text). Initial style is 'fnt'='rC' give Roman font with centering. Parameter @code{val} sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. For more detail, @pxref{Font style}.
- at end deffn
-
- at deffn {MGL command} rotatetext @code{val}
-Set to use or not text rotation along axis. Initial value is @code{on}.
- at end deffn
-
- at deffn {MGL command} palette 'colors'
-Set the palette as selected colors. Default value is @code{'Hbgrcmyhlnqeup'}. The palette is used mostly in 1D plots for curves which styles are not specified.
- at end deffn
-
- at deffn {MGL command} meshnum @code{num}
-Sets approximate number of lines in @code{mesh, fall, grid} and also the number of hachures in @code{vect, vectc, dew} and the number of cells in @code{cloud}. By default (=0) it draws all lines/hachures/cells.
- at end deffn
-
- at deffn {MGL command} axialdir 'dir'
-Set direction around which curve rotated in @code{axial, torus}. Default value is 'z'.
- at end deffn
-
- at c ==================================================================
- at node Axis settings (MGL), Transformation matrix (MGL), Graphics setup (MGL), MGL interface
- at section Axis settings (MGL)
- at cindex axis
- at cindex caxis
- at cindex xrange
- at cindex yrange
- at cindex zrange
- at cindex crange
- at cindex xtick
- at cindex ytick
- at cindex ztick
- at cindex ctick
- at cindex origin
- at cindex adjust
-
-These large set of commands control how the axis and ticks will be drawn. Note that there is 3-step transformation of data coordinates are performed. Firstly, coordinates are projected and cutting is applied (@pxref{Cutting (MGL)}), after it transformation formulas are applied, and finally the data was normalized in bounding box.
-
- at deffn {MGL command} axis @code{x1 y1 x2 y2}
- at deffnx {MGL command} axis @code{x1 y1 z1 x2 y2 z2}
- at deffnx {MGL command} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]}
-Sets the ranges of coordinates changing. Also it sets the range for coloring (analogous to @code{caxis z1 z2}). Initial ranges are [-1, 1].
- at end deffn
-
- at deffn {MGL command} axis 'fx' 'fy' ['fz'='' 'fa'='']
-Sets the transformation formulas for curvilinear coordinates. Each string should contain mathematical expression for real coordinate depending on internal coordinates 'x', 'y', 'z' and 'a' or 'c' for colorbar. For example, the cylindrical coordinates are introduced as @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. For removing of formulas the corresponding parameter should be @code{''}. The using of transformation formulas will slightly slowing the program, i.e. @code{axis '' '' ''} is faster than @code{axis '1*x' '1*y' '1*z'}. Initially all formulas are absent (Cartesian coordinates are used). For more details about functions and formulas, @pxref{mglFormula class}.
- at end deffn
-
- at deffn {MGL command} axis @code{how}
-Sets one of the predefined transformation formulas for curvilinear coordinate. Paramater @var{how} define the coordinates: @code{0} -- Cartesian coordinates (no transformation); @code{1} -- Polar coordiantes @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{2} -- Spherical coordinates @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{3} -- Parabolic coordinates @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{7} -- Elliptic coordinates @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{8} -- Toroidal coordinates @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{9} -- Bispherical coordinates @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{10} -- Bipolar coordinates @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}.
- at end deffn
-
- at deffn {MGL command} caxis @code{z1 z2}
-Sets the range for surface coloring. Initial range is [-1, 1].
- at end deffn
-
- at deffn {MGL command} origin @code{x0 y0 [z0=nan]}
-Center of axis cross section. If one of values is @code{nan} then MathGL library try to select optimal axis position.
- at end deffn
-
- at deffn {MGL command} ternary @code{val}
-The command sets to draws Ternary plot. This special plot is for 3 dependent coordinates (components) @var{a}, @var{b}, @var{c} so that @var{a}+ at var{b}+ at var{c}=1. MathGL uses only 2 independent coordinates @var{a}=x and @var{b}=y since it is enough to plot everything. At this third coordinate z act as another parameter to produce contour lines, surfaces and so on. @sref{Ternary plot sample}
- at end deffn
-
- at deffn {MGL command} xrange dat [@code{add=off fact=0}]
- at deffnx {MGL command} yrange dat [@code{add=off fact=0}]
- at deffnx {MGL command} zrange dat [@code{add=off fact=0}]
- at deffnx {MGL command} crange dat [@code{add=off fact=0}]
-Sets the range for x-,y-,z- coordinate or coloring as minimal and maximal values of data @var{dat}. Parameter @code{add=on} shows that the new range will be joined to existed one (nut will not replace it). Parameter @var{fact} add additional range increase on value (@var{Max}- at var{Min})*@var{fact}.
- at end deffn
-
- at deffn {MGL command} xrange @code{x1 x2}
- at deffnx {MGL command} yrange @code{x1 x2}
- at deffnx {MGL command} zrange @code{x1 x2}
- at deffnx {MGL command} crange @code{x1 x2}
-Sets the range for x-,y-,z- coordinate or coloring. See also axis.
- at end deffn
-
- at deffn {MGL command} xtick @code{val [sub=0 org=nan]}
- at deffnx {MGL command} ytick @code{val [sub=0 org=nan]}
- at deffnx {MGL command} ztick @code{val [sub=0 org=nan]}
- at deffnx {MGL command} ctick @code{val}
-Sets step for x-, y-, z-axis ticks or colorbar ticks (if @var{val}>0) or it's number (if @var{val}<0) in corresponding direction. Zero value @var{val}=0 sets logarithmic ticks. Parameter @var{sub} sets the number of sub-ticks. Parameter @var{org} set the starting points for ticks. If not @code{org=nan} then the value from @code{origin} is used.
- at end deffn
-
- at deffn {MGL command} xtick 'templ'
- at deffnx {MGL command} ytick 'templ'
- at deffnx {MGL command} ztick 'templ'
- at deffnx {MGL command} ctick 'templ'
-Sets the template for x-, y-, z-axis ticks or colorbar ticks. It may contain TeX symbols also. If @var{templ}=@code{''} then default template is used (in simplest case it is @samp{%.2g}) with automatic detaching of common multiplier or common component.
- at end deffn
-
- at deffn {MGL command} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
- at deffnx {MGL command} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
- at deffnx {MGL command} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...]
-Sets manual positions @var{val1}, at var{val2},... and labels @var{lbl1}, at var{lbl2},... for ticks along x-, y-, z-axis. Labels may contain TeX symbols also.
- at end deffn
-
- at deffn {MGL command} adjust ['dir'='xyzc']
-Set the ticks step, number of sub-ticks and initial ticks position to be the most human readable for the axis along direction(s) @var{dir}.
- at end deffn
-
-
- at c ##################################################################
- at node Transformation matrix (MGL), Export to file (MGL), Axis settings (MGL), MGL interface
- at section Transformation matrix (MGL)
- at cindex aspect
- at cindex rotate
- at cindex subplot
- at cindex inplot
- at cindex identity
- at cindex perspective
-
-These commands control how and where further plotting will be placed. There is a curtain order of calling of these commands for the better plot view. First one should be @code{subplot} or @code{inplot} for specifying the place. After it a @code{rotate} and @code{aspect}. And finally any other plotting commands may be called. Alternatevely you can use @code{columnplot} for position plots in the column one by another without gap between plot axis (bounding boxes).
-
- at deffn {MGL command} subplot @code{nx ny m [dx=0 dy=0]}
-Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. This command set off any aspects or rotations. So it should be used first for creating the subplot. From the aesthetical point of view it is not recommended to use this command with different matrices in the same frame. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}.
- at end deffn
-
- at deffn {MGL command} inplot @code{x1 x2 y1 y2 [rel=off]}
-Puts further plotting in some region of the whole frame surface. This command allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{on} then the relative position to current @code{subplot} is used. This command set off any aspects or rotations. So it should be used first for creating subplot.
- at end deffn
-
- at deffn {MGL command} columnplot @code{num ind}
-Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous @code{subplot} call (or @code{inplot} with @code{rel=off}).
- at end deffn
-
- at deffn {MGL command} rotate @code{tetz tetx [tety=0]}
-Rotates a further plotting relative to each axis (x, z, y) consecutively on angles @var{tetx}, @var{tetz}, @var{tety}.
- at end deffn
-
- at deffn {MGL command} rotate @code{tet x y z}
-Rotates a further plotting around vector @{x,y,z@} on angle @var{tet}.
- at end deffn
-
- at deffn {MGL command} aspect @code{ax ay [az=1]}
-Defines aspect ratio for the plot. The viewable axes will be related one to another as the ratio @var{ax:ay:az}. For the best effect it should be used after @code{rotate} command.
- at end deffn
-
- at deffn {MGL command} perspective @code{val}
-Add (switch on) the perspective to plot. The parameter @math{val ~ 1/z_@{eff@} \in [0,1)}. By default (@code{val=0}) the perspective is off.
- at end deffn
-
- at c ##################################################################
- at node Export to file (MGL), Primitives drawing (MGL), Transformation matrix (MGL), MGL interface
- at section Export to file (MGL)
- at cindex write
- at cindex setsize
-
- at deffn {MGL command} write 'fname' [@code{solid=off}]
-Exports current picture/frame to file 'fname' (file type is determined by extension). Solid (usually white) background will be used if @code{solid=on}. If 'fname'='' then the file @samp{frameNNNN.jpg} is used, where @samp{NNNN} is current frame id.
- at end deffn
-
- at deffn {MGL command} setsize @code{w h}
-Sets size of picture in pixels. This function call @strong{must be} placed before any plotting command because it completely remove picture content. In some program the call of this function is forbidden.
- at end deffn
-
-
- at c ##################################################################
- at node Primitives drawing (MGL), Text printing (MGL), Export to file (MGL), MGL interface
- at section Primitives drawing
- at cindex ball
- at cindex clf
- at cindex line
- at cindex curve
- at cindex facex
- at cindex facey
- at cindex facez
- at cindex cone
- at cindex drop
- at cindex sphere
-
-These commands draw some simple objects like line, point, sphere, drop, cone and so on.
-
- at deffn {MGL command} clf
-Clear the picture by removes all drawing from it. Does not change transformation matrix. 
- at end deffn
-
- at deffn {MGL command} ball @code{x y} ['col'='r']
- at deffnx {MGL command} ball @code{x y z} ['col'='r']
-Draws a point (ball) at position @{@var{x}, @var{y}, @var{z}@} with color defined by string @var{col}.
- at end deffn
-
- at deffn {MGL command} line @code{x1 y1 x2 y2} ['stl'='']
- at deffnx {MGL command} line @code{x1 y1 z1 x2 y2 z2} ['stl'='']
-Draws a geodesic line (straight line in Cartesian coordinates) from point @{@var{x1}, at var{y1}, at var{z1}@} to @{@var{x2}, at var{y2}, at var{z2}@} using line style @var{stl}.
- at end deffn
-
- at deffn {MGL command} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'='']
- at deffnx {MGL command} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'='']
-Draws Bezier-like curve from point @{@var{x1}, at var{y1}, at var{z1}@} to @{@var{x2}, at var{y2}, at var{z2}@} using line style @var{stl}. At this tangent is co-directed with @{@var{dx1}, at var{dy1}, at var{dz1}@}, @{@var{dx2}, at var{dy2}, at var{dz2}@} and proportional to its amplitude.
- at end deffn
-
- at deffn {MGL command} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}]
- at deffnx {MGL command} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}]
- at deffnx {MGL command} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}]
-Draws the solid rectangle (face) perpendicular to [x,y,z]-axis correspondingly at position @{@var{x0}, @var{y0}, @var{z0}@} with color @var{stl} and with widths @var{wx}, @var{wy}, @var{wz} along corresponding directions. At this colors can be the same for all vertexes or different if all 4 colors are specified for each vertex. Parameters @var{d1}!=0, @var{d2}!=0 set additional shift of the last vertex (i.e. to draw quadrangle).
- at end deffn
-
- at deffn {MGL command} sphere @code{x0 y0 r} ['col'='r']
- at deffnx {MGL command} sphere @code{x0 y0 z0 r} ['col'='r']
-Draw the sphere with radius @var{r} and center at point @{@var{x0}, @var{y0}, @var{z0}@} and color @var{stl}.
- at end deffn
-
- at deffn {MGL command} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}]
- at deffnx {MGL command} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}]
-Draw the drop with radius @var{r} at point @{@var{x0}, at var{y0}, at var{z0}@} elongated in direction @{@var{dx}, at var{dy}, at var{dz}@} and with color @var{col}. Parameter @var{sh} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{asp} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere). @sref{Drops sample}
- at end deffn
-
- at deffn {MGL command} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'st'='' @code{edge=off}]
-Draw tube (or truncated cone if @var{edge}=@code{off}) between points @{@var{x1}, at var{y1}, at var{z1}@}, @{@var{x2}, at var{y2}, at var{z2}@} with radiuses at the edges @var{r1}, @var{r2}. If @var{r2}<0 then it is supposed that @var{r2}=@var{r1}. The cone color is defined by string @var{stl}.
- at end deffn
-
- at deffn {MGL command} rect @code{x1 y1 x2 y2} ['st'='']
- at deffnx {MGL command} rect @code{x1 y1 z1 x2 y2 z2} ['st'='']
-Draw rectangle from point @{@var{x1}, at var{y1}, at var{z1}@} to point @{@var{x2}, at var{y2}, at var{z2}@} using colors @var{stl}. If @var{stl} have 4 or more colors then it defines colors for each rectangle vertex (useful for making gradients, like @samp{wwrr}) else first color is used for whole rectangle.
- at end deffn
-
- at c ##################################################################
- at node Text printing (MGL), Axis and Colorbar (MGL), Primitives drawing (MGL), MGL interface
- at section Text printing (MGL)
- at cindex fgets
- at cindex text
- at cindex title
-
-These commands draw the text. There are commands for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. It is possible to use arbitrary font-faces and parse many TeX commands. The Unicode text is supported. So sometimes you need to specify locale. The @code{size} argument control the size of text: if positive it give the value, if negative it give the value relative to defined by @code{font} command. @xref{Font style}.
-
- at deffn {MGL command} text @code{x y} 'text' ['fnt'='' @code{size=-1.4}]
- at deffnx {MGL command} text @code{x y z} 'text' ['fnt'='' @code{size=-1.4}]
-Draws unrotated text string @var{text} at position @{@var{x}, at var{y}, at var{z}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used.
- at end deffn
-
- at deffn {MGL command} text @code{x y dx dy} 'text' [@code{size=-1.4}]
- at deffnx {MGL command} text @code{x y z dx dy dz} 'text' [@code{size=-1.4}]
-The command plots the string @var{text} at position @{@var{x}, at var{y}, at var{z}@} along direction @{@var{dx}, at var{dy}, at var{dz}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used.
- at end deffn
-
- at deffn {MGL command} title 'text' ['fnt'='' @code{size=-2}]
-Print string @var{text} as title of the picture (at the top of the picture). Can be used at any place (even inside @code{subplot}).
- at end deffn
-
- at deffn {MGL command} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}]
- at deffnx {MGL command} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}]
-Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x}, at var{y}, at var{z}@} with specified @var{size}. By default parameters from @code{font} command are used.
- at end deffn
-
-
- at deffn {MGL command} text xdat 'text' ['fnt'='' @code{size=-1 zval=nan}]
- at deffnx {MGL command} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}]
- at deffnx {MGL command} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}]
-The command draws @var{text} along the curve between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} by font style @var{fnt} and with size @var{size}. The string @var{fnt} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{z}[i] = @var{zval} is used. @sref{Text sample}
- at end deffn
-
- at c ##################################################################
- at node Axis and Colorbar (MGL), Legend (MGL), Text printing (MGL), MGL interface
- at section Axis and Colorbar (MGL)
- at cindex axis
- at cindex box
- at cindex grid
- at cindex colorbar
- at cindex xlabel
- at cindex ylabel
- at cindex zlabel
- at cindex tlabel
-
-These commands draw the ``things for measuring'', like axis with ticks, colorbar with ticks, grid along axis, bounding box and labels for axis. For more information @pxref{Axis settings (MGL)}.
-
- at deffn {MGL command} axis ['dir'='xyz' @code{adjust=off}]
-Draws axes with ticks (@pxref{Axis settings (MGL)}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by command @code{font}. Ticks will be automatically adjusted if @var{adjust}=@code{on} (by call of @code{adjust 'dir'}).
- at end deffn
-
- at deffn {MGL command} colorbar ['sch'='' @code{pos=0}]
-Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=''}) at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample}
- at end deffn
-
- at deffn {MGL command} colorbar 'sch' @code{pos x y w h}
-Draws colorbar with color scheme @var{sch} (current scheme if not specified) at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameter @var{pos} specifies the position of colorbar labels: @samp{0} - at left, @samp{1} - at right, @samp{2} - at bottom, @samp{3} - at top. Parameters @var{w}, @var{h} set the relative width and height of the colorbar.
- at end deffn
-
- at deffn {MGL command} colorbar vdat ['sch'='' @code{pos=0}]
-Draws colorbar with sharp colors @var{sch} (current palette if @code{sch=NULL}) for values @var{vdat} at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample}
- at end deffn
-
- at deffn {MGL command} grid ['dir'='xyz' 'pen'='B']
-Draws grid lines perpendicular to direction determined by string parameter @var{dir}. The step of grid lines is the same as tick step for an @code{axis}. The style of lines is determined by @var{pen} parameter.
- at end deffn
-
- at deffn {MGL command} box ['stl'='k' @code{ticks=on}]
-Draws bounding box outside the plotting volume with line style 'stl'.
- at end deffn
-
- at deffn {MGL command} xlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} ylabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} zlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
- at deffnx {MGL command} tlabel 'text' [@code{pos=1 size=-1.4 shift=0}]
-Prints the label @var{text} for x-,y-,z-,t-axis (here @samp{t} is ``ternary'' axis @math{t=1-x-y}). The position of label is determined by @var{pos} parameter. If @var{pos}=0 then label is printed at the center of axis. If @var{pos}>0 then label is printed at the maximum of axis (default). If @var{pos}<0 then label is printed at the minimum of axis. The font size is 1.4 times larger than the one for ticks @code{font}. Parameter @code{shift} specify additional shifting of the label. @xref{Text printing (MGL)}.
- at end deffn
-
- at c ##################################################################
- at node Legend (MGL), 1D plotting (MGL), Axis and Colorbar (MGL), MGL interface
- at section Legend (MGL)
- at cindex legend
- at cindex addlegend
- at cindex clearlegend
-
-These commands draw legend to the graph (useful for @ref{1D plotting (MGL)}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included LaTeX parsing). The array of string are accumulated first to the internal arrays (by command @code{addlegend}) and are plotted later. The position of the legend can be selected automatic or manually. Parameters @var{fnt} and @var{size} specify the font style and size. Parameter @var{llen} set the relative width of the line sample and the text indent (default value is 0.1). If line style string for entry is empty then the corresponding text is printed without indent. @sref{Legend sample}
-
- at deffn {MGL command} legend [@code{pos=3} 'fnt'='rL' @code{size=-1 llen=0.1}]
-Draws legend of accumulated legend entries by font @var{fnt} with specified @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default).
- at end deffn
-
- at deffn {MGL command} legend @code{x y} ['fnt'='rL' @code{size=-1 llen=0.1}]
-Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Position of legend is determined by parameter @var{x}, @var{y} which supposed to be normalized to interval [0,1].
- at end deffn
-
- at deffn {MGL command} addlegend 'text' 'stl'
-Adds string @var{text} to internal legend accumulator. The style of described line and mark is specified in string @var{stl} (@pxref{Line styles}). Maximal number of entries is 100.
- at end deffn
-
- at deffn {MGL command} clearlegend
-Clears saved legend strings.
- at end deffn
-
- at deffn {MGL command} legendbox @code{val}
-Switches on/off the drawing of a box near legend. By default, the box is drawn.
- at end deffn
-
-
-
- at c ##################################################################
- at node 1D plotting (MGL), 2D plotting (MGL), Legend (MGL), MGL interface
- at section 1D plotting (MGL)
- at cindex plot
- at cindex tens
- at cindex area
- at cindex bars
- at cindex barh
- at cindex stem
- at cindex step
- at cindex torus
- at cindex chart
- at cindex mark
- at cindex textmark
- at cindex error
- at cindex tube
- at cindex region
-
-These commands perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. Most of plotting type has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is NULL then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}.
-
-The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=NULL}) solid line with color from palette is used (@pxref{Palette and colors}).
-
- at deffn {MGL command} plot ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} plot xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} plot xdat ydat zdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{tens, radar, area, step, stem, tube, mark, error, belt}. @sref{Plot sample}
- at end deffn
-
-
- at deffn {MGL command} radar adat ['stl'='' @code{r=-1}]
-Draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). The plots are drawn for each row if one of the data is the matrix. Parameter @var{r} set the additional shift of data (i.e. the data @var{adat}+ at var{r} is used instead of @var{adat}). If @code{r<0} then @code{r=max(0, -min(adat)}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @code{plot}. @sref{Radar sample}
- at end deffn
-
- at deffn {MGL command} tens ydat cdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tens xdat ydat cdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tens xdat ydat zdat cdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} with color defined by @var{cdat}[i] (look like tension plot). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, mesh, fall}. @sref{Tens sample}
- at end deffn
-
- at deffn {MGL command} area ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} area xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} area xdat ydat zdat ['stl'='']
-Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} and fills it down to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, bars, stem, region}. @sref{Area sample}
- at end deffn
-
- at deffn {MGL command} region fdat gdat ['stl'='' @code{inside=off}]
- at deffnx {MGL command} region xdat fdat gdat ['stl'='' @code{inside=off}]
-Fills area between curves @{@var{xdat}[i], @var{fdat}[i]@} and @{@var{xdat}[i], @var{gdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x.  Parameter  @code{inside=off} set to fill are with y1<y<y2 else the area with y2<y<y1 will be also filled.
- at c If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). 
-See also @code{area, bars, stem}. @sref{Region sample}
- at end deffn
-
- at deffn {MGL command} bars ydat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars xdat ydat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars xdat ydat zdat ['stl'='' @code{above=off}]
-Draws vertical bars from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). Bars are drawn side-by-side (if @code{above = off}) or one above another (if @code{above = on}). Marks at data points are not drawn. See also @code{area, barh, stem, chart}. @sref{Bars sample}
- at end deffn
-
- at deffn {MGL command} barh vdat ['stl'='' @code{zval=nan above=off}]
- at deffnx {MGL command} bars ydat vdat ['stl'='' @code{zval=nan above=off}]
-Draws horizontal bars from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to y-axis. If array @var{ydat} is not specified then its an automatic array is used with values equidistantly distributed along y. Bars are drawn side-by-side (if @code{above = off}) or one above another (if @code{above = on}). Marks at data points are not drawn.
- at c If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). 
-See also @code{bars}. @sref{Barh sample}
- at end deffn
-
- at deffn {MGL command} stem ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} stem xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} stem xdat ydat zdat ['stl'='']
-Draws vertical lines from points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{area, bars, plot, mark}. @sref{Stem sample}
- at end deffn
-
- at deffn {MGL command} step ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} step xdat ydat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} step xdat ydat zdat ['stl'='']
-Draws continuous stairs for points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, stem, tile, boxs}. @sref{Step sample}
- at end deffn
-
- at deffn {MGL command} torus zdat ['stl'='']
- at deffnx {MGL command} torus rdat zdat ['stl'='']
-Draws surface which is result of curve @{@var{rdat}[i], @var{zdat}[i], @var{zdat}[i]@} rotation around @code{axialdir} axis. If array @var{rdat} is not specified then its an automatic array is used with values equidistantly distributed along x. See also @code{plot, axial}. @sref{Torus sample}
- at end deffn
-
- at deffn {MGL command} chart adat ['col'='']
-The command draws colored stripes (boxes) for data in array @var{adat}. The number of stripes is equal to the number of rows in @var{adat} (equal to @var{a.ny}). The color of each next stripe is cyclically changed from colors specified in string @var{col} or in palette. Spaces in colors denote transparent ``color'', i.e. if @var{col} contain space(s) then corresponding stripe(s) are not drawn. The stripe width is proportional to value of element in @var{a}. Chart is plotted only for data with non-negative elements. If string @var{col} have symbol @samp{#} then black border lines are drawn. The most nice form the chart have in 3d (after rotation of coordinates) or in cylindrical coordinates (becomes so called Pie chart). @sref{Chart sample}
- at end deffn
-
- at deffn {MGL command} mark ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} mark xdat ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} mark xdat ydat zdat rdat ['stl'='']
-Draws  marks with size @var{rdat}[i]*@code{marksize} at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, textmark, stem, error}. @sref{Mark sample}
- at end deffn
-
- at deffn {MGL command} textmark ydat 'txt' ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} textmark ydat rdat 'txt' ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} textmark xdat ydat rdat 'txt' ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} textmark xdat ydat zdat rdat 'txt' ['stl'='']
-Draws string @var{txt} as marks with size @var{rdat}[i]*@code{marksize} at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). If array @var{rdat} is not specified then @var{rdat}[i] = 1. See also @code{plot, mark, stem}. @sref{TextMark sample}
- at end deffn
-
- at deffn {MGL command} error ydat yerr ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} error xdat ydat yerr ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} error xdat ydat xerr yerr ['stl'='' @code{zval=nan}]
-Draws error boxes @{@var{xerr}[i], @var{yerr}[i]@} at points @{@var{xdat}[i], @var{ydat}[i], @var{zval}@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. See also @code{plot}. @sref{TextMark sample}
- at end deffn
-
- at deffn {MGL command} tube ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube ydat @code{rval} ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat rdat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat @code{rval} ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} tube xdat ydat zdat rdat ['stl'='']
- at deffnx {MGL command} tube xdat ydat zdat @code{rval} ['stl'='']
-Draws tube with variable radius @var{rdat}[i] (or @var{rval}) at points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot}. @sref{TextMark sample}
- at end deffn
-
- at deffn {MGL command} boxplot adat ['stl'='' @code{zval=nan}]
- at deffnx {MGL command} boxplot xdat adat ['stl'='' @code{zval=nan}]
-Draws boxplot (also known as a box-and-whisker diagram) at points @var{xdat} in plane z=@code{zval} (by default is at the bottom of the bounding box). This is five-number summaries of data <em>adat</em> (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction.
- at end deffn
-
- at c ##################################################################
- at node 2D plotting (MGL), 3D plotting (MGL), 1D plotting (MGL), MGL interface
- at section 2D plotting (MGL)
- at cindex mesh
- at cindex fall
- at cindex belt
- at cindex surf
- at cindex boxs
- at cindex tile
- at cindex dens
- at cindex cont
- at cindex contf
- at cindex contd
- at cindex axial
- at cindex grid
-
-These commands perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are 6 generally different types of data representations: simple mesh lines plot (Mesh), surface plot (Surf), surface plot by boxes (Boxs), surface plot by tiles (Tile), waterfall-like plot (Fall), belt plot (Belt), density plot (Dens), contour lines plot (Cont), solid contours plot (ContF) and its rotational figure (Axial). Cont, ContF and Axial commands have variants for automatic and manual selection of level values for contours. Also there are commands for plotting data grid lines according to the data format (Grid) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
-
-String parameter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} should be equal @var{xdat.nx=zdat.nx && ydat.nx=zdat.ny} or @var{xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny}. Arrays @var{xdat} and @var{ydat} can be vectors (not matrices as @var{zdat}). If array @var{xdat}, @var{ydat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y. Graphics are plotted for each z-slice of the data.
-
- at deffn {MGL command} mesh zdat ['sch'='']
- at deffnx {MGL command} mesh xdat ydat zdat ['sch'='']
-Draws mesh lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, fall, meshnum, cont, tens}. @sref{Mesh sample}
- at end deffn
-
- at deffn {MGL command} fall zdat ['sch'='']
- at deffnx {MGL command} fall xdat ydat zdat ['sch'='']
-Draws fall lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{belt, mesh, meshnum, tens}. @sref{Fall sample}
- at end deffn
-
- at deffn {MGL command} belt zdat ['sch'='']
- at deffnx {MGL command} belt xdat ydat zdat ['sch'='']
-Draws belts for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{fall, surf, plot, meshnum}. @sref{Belt sample}
- at end deffn
-
- at deffn {MGL command} surf zdat ['sch'='']
- at deffnx {MGL command} surf xdat ydat zdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{mesh, dens, belt, tile, boxs, surfc, surfa}. @sref{Surf sample}
- at end deffn
-
- at deffn {MGL command} boxs zdat ['sch'='']
- at deffnx {MGL command} boxs xdat ydat zdat ['sch'='']
-Draws vertical boxes for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, tile, step}. @sref{Boxs sample}
- at end deffn
-
- at deffn {MGL command} tile zdat ['sch'='']
- at deffnx {MGL command} tile xdat ydat zdat ['sch'='']
-Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, boxs, tile, step}. @sref{Tile sample}
- at end deffn
-
- at deffn {MGL command} dens zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} dens xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws density plot for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{surf, cont, contf, boxs, tile, dens[xyz]}. @sref{Dens sample}
- at end deffn
-
- at deffn {MGL command} cont vdat zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} cont vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws contour lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens, contf, axial, cont[xyz]}. @sref{Cont sample}
- at end deffn
-
- at deffn {MGL command} cont zdat ['sch'='' @code{num=7 zval=nan}]
- at deffnx {MGL command} cont xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
- at end deffn
-
- at deffn {MGL command} contf vdat zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} contf vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). See also @code{dens, cont, contd, axial, contf[xyz]}. @sref{ContF sample}
- at end deffn
-
- at deffn {MGL command} contf zdat ['sch'='' @code{num=7 zval=nan}]
- at deffnx {MGL command} contf xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
- at end deffn
-
- at deffn {MGL command} contd vdat zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} contd vdat xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}) with manual colors. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). The color of k-th contour is @code{sch[k%strlen(sch)]}. See also @code{dens, cont, contf}. @sref{ContD sample}
- at end deffn
-
- at deffn {MGL command} contd zdat ['sch'='' @code{num=7 zval=nan}]
- at deffnx {MGL command} contd xdat ydat zdat ['sch'='' @code{num=7 zval=nan}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
- at end deffn
-
- at deffn {MGL command} axial vdat zdat ['sch'='']
- at deffnx {MGL command} axial vdat xdat ydat zdat ['sch'='']
-Draws surface which is result of contour plot rotation surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string @var{sch} contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @code{axialdir} will be set to specified direction. If string @var{sch} have symbol @samp{#} then wire plot is produced. See also @code{cont, contf, torus, surf3}. @sref{Axial sample}
- at end deffn
-
- at deffn {MGL command} axial zdat ['sch'='' @code{num=3}]
- at deffnx {MGL command} axial xdat ydat zdat ['sch'='' @code{num=3}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}).
- at end deffn
-
- at deffn {MGL command} grid zdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} grid xdat ydat zdat ['sch'='' @code{zval=nan}]
-Draws grid lines for density plot of surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{dens, cont, contf}.
- at end deffn
-
-
- at c ##################################################################
- at node 3D plotting (MGL), Dual plotting (MGL), 2D plotting (MGL), MGL interface
- at section 3D plotting (MGL)
- at cindex surf3
- at cindex dens3
- at cindex cont3
- at cindex conta
- at cindex densa
- at cindex grid3
- at cindex grida
- at cindex cloud
- at cindex contf3
- at cindex contfa
- at cindex beam
-
-These commands perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 4 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 commands have variants for automatic and manual selection of level values for surfaces/contours. Also there are commands for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
-
-String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z.
-
-
- at deffn {MGL command} surf3 adat @code{val} ['sch'='']
- at deffnx {MGL command} surf3 xdat ydat zdat adat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. If string contain @samp{#} then wire plot is produced. See also @code{cloud, dens3, surf3c, surf3a, axial}. @sref{Surf3 sample}
- at end deffn
-
- at deffn {MGL command} surf3 adat ['sch'='' @code{num=5}]
- at deffnx {MGL command} surf3 xdat ydat zdat adat ['sch'='' @code{num=5}]
-Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} dens3 adat 'dir' [@code{sval=-1} 'sch'='']
- at deffnx {MGL command} dens3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws density plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Density is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample}
- at end deffn
-
- at deffn {MGL command} densa adat ['sch'='']
- at deffnx {MGL command} densa xdat ydat zdat adat ['sch'='']
-Draws density plots at all central slices of the 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} cont3 vdat adat 'dir' [@code{sval=-1} 'sch'='']
- at deffnx {MGL command} cont3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens3, contf3, cont, grid3}. @sref{Cont3 sample}
- at end deffn
-
- at deffn {MGL command} cont3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
- at deffnx {MGL command} cont3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}).
- at end deffn
-
- at deffn {MGL command} conta adat ['sch'='' @code{num=7}]
- at deffnx {MGL command} conta xdat ydat zdat adat ['sch'='' @code{num=7}]
-Draws contour plots at all central slices of the 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} contf3 vdat adat 'dir' [@code{sval=-1} 'sch'='']
- at deffnx {MGL command} contf3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws solid contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{dens3, cont3, contf, grid3}. @sref{ContF3 sample}
- at end deffn
-
- at deffn {MGL command} contf3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
- at deffnx {MGL command} contf3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}]
-The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}).
- at end deffn
-
- at deffn {MGL command} contfa adat ['sch'='' @code{num=7}]
- at deffnx {MGL command} contfa xdat ydat zdat adat ['sch'='' @code{num=7}]
-Draws solid contour plots at all central slices of the 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} grid3 adat 'dir' [@code{sval=-1} 'sch'='']
- at deffnx {MGL command} grid3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='']
-Draws grid for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Grid is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample}
- at end deffn
-
- at deffn {MGL command} grida adat ['sch'='']
- at deffnx {MGL command} grida xdat ydat zdat adat ['sch'='']
-Draws grids at all central slices of the 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} cloud adat ['sch'='']
- at deffnx {MGL command} cloud xdat ydat zdat adat ['sch'='']
-Draws cloud for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). This plot is a set of cubes with color and transparency proportional to value of @var{adat}. The resulting plot is like cloud -- low value is transparent but higher ones are not. The number of plotting cells depend on @code{meshnum}. Command @var{alpha} changes the overall transparency of plot. See also @code{surf3}. @sref{Cloud sample}
- at end deffn
-
- at deffn {MGL command} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}]
-Draws  @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d array @var{adat}. This is special kind of plot for @var{adat} specified in accompanied coordinates along curve @var{tr} with orts @var{g1}, @var{g2} and with transverse scale @var{rval}. Variable @var{flag} is bitwise: @samp{0x1} - draw in accompanied (not laboratory) coordinates; @samp{0x2} - draw projection to @math{\rho-z} plane; @samp{0x4} - draw normalized in each slice field. The x-size of data arrays @var{tr}, @var{g1}, @var{g2} must be nx>2. The y-size of data arrays @var{tr}, @var{g1}, @var{g2} and z-size of the data array @var{a} must be equal. @xref{Surf3}.
- at end deffn
-
-
- at c ##################################################################
- at node Dual plotting (MGL), Vector fields (MGL), 3D plotting (MGL), MGL interface
- at section Dual plotting (MGL)
- at cindex surfc
- at cindex surf3c
- at cindex surfa
- at cindex surf3a
- at cindex map
- at cindex tile
- at cindex stfa
-
-These plotting commands draw @emph{two matrix} simultaneously. There are 5 generally different types of data representations: surface or isosurface colored by other data (SurfC, Surf3C), surface or isosurface transpared by other data (SurfA, Surf3A), tiles with variable size (TileS), mapping diagram (Map), STFA diagram (STFA). Surf3A and Surf3C have variants for automatic and manual selection of level values for isosurfaces. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument.
-
-String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z.
-
- at deffn {MGL command} surfc zdat cdat ['sch'='']
- at deffnx {MGL command} surfc xdat ydat zdat cdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and color it by matrix @var{cdat}[i,j]. See also @code{surf, surfa, surf3c}. @sref{SurfC sample}
- at end deffn
-
- at deffn {MGL command} surf3c adat cdat @code{val} ['sch'='']
- at deffnx {MGL command} surf3c xdat ydat zdat adat cdat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the color of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3a, surfc}. @sref{Surf3C sample}
- at end deffn
-
- at deffn {MGL command} surf3c adat cdat ['sch'='' @code{num=5}]
- at deffnx {MGL command} surf3c xdat ydat zdat adat cdat ['sch'='' @code{num=5}]
-Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} surfa zdat cdat ['sch'='']
- at deffnx {MGL command} surfa xdat ydat zdat cdat ['sch'='']
-Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and transparent it by matrix @var{cdat}[i,j]. See also @code{surf, surfc, surf3a, tile}. @sref{SurfA sample}
- at end deffn
-
- at deffn {MGL command} surf3a adat cdat @code{val} ['sch'='']
- at deffnx {MGL command} surf3a xdat ydat zdat adat cdat @code{val} ['sch'='']
-Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the transparency of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3c, surfa}. @sref{Surf3A sample}
- at end deffn
-
- at deffn {MGL command} surf3a adat cdat ['sch'='' @code{num=5}]
- at deffnx {MGL command} surf3a xdat ydat zdat adat cdat ['sch'='' @code{num=5}]
-Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically.
- at end deffn
-
- at deffn {MGL command} tile zdat rdat ['sch'='']
- at deffnx {MGL command} tile xdat ydat zdat rdat ['sch'='']
-Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. It is mostly the same as @code{tile} but the size of tiles is determined by @var{rdat} array. See also @code{surfa, tile}. @sref{TileS sample}
- at end deffn
-
- at deffn {MGL command} map udat vdat ['sch'='' @code{pnts=on}]
- at deffnx {MGL command} map xdat ydat udat vdat ['sch'='' @code{pnts=on}]
-Draws mapping plot for matrixes @{@var{udat}, @var{vdat} @} which parametrically depend on coordinates @var{xdat}, @var{ydat}. The previous position of the cell (point) is marked by color. Height is proportional to Jacobian(udat,vdat). This plot is like Arnold diagram ???. If @code{pnts=off} then face is drawn otherwise the color ball at matrix knots are drawn. The size of @var{udat} and @var{vdat} must be the same. @sref{Map sample}
- at end deffn
-
- at deffn {MGL command} stfa re im @code{dn} ['sch'='' @code{pnts=on}]
- at deffnx {MGL command} stfa xdat ydat re im @code{dn} ['sch'='' @code{pnts=on}]
-Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}.
- at end deffn
-
-
-
-
- at c ##################################################################
- at node Vector fields (MGL), Other plotting (MGL), Dual plotting (MGL), MGL interface
- at section Vector fields (MGL)
- at cindex vectc
- at cindex vect
- at cindex flow
- at cindex pipe
- at cindex traj
- at cindex dew
-
-These commands perform plotting of 2D and 3D vector fields. There are 6 generally different types of vector fields representations: simple vector field (Vect), vector field with coloring (VectC), vector field by dew-drops (Dew), flow threads (Flow), flow pipes (Pipe), vectors along a curve (Traj). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
-
-The color is specified by the string argument @var{sch}. Previous color scheme is used by default. Parameter @var{flag} setup the hachures (arrows). It is compination of vlaues: @code{MGL_VEC_COL=1} for drawing bi-color arrow, @code{MGL_VEC_LEN=2} for drawing fixed length arrows, @code{MGL_VEC_DOT=16} for drawing hachures with dots instead of arrows, @code{MGL_VEC_END=4} for drawing arrows to the cell point, @code{MGL_VEC_MID=8} for drawing arrows with center at cell point. 
-
-The size of @var{udat}, @var{vdat} and @var{wdat} must be equal. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} and @var{udat} must be equal too. Arrays @var{xdat}, @var{ydat} and @var{zdat} can be vectors (not matrices as @var{udat}). The graphics is plotted for each z slice of @var{udat}, @var{vdat} for 2D case.
-
- at deffn {MGL command} traj xdat ydat udat vdat ['sch'='' @code{zval=nan len=0}]
- at deffnx {MGL command} traj xdat ydat zdat udat vdat wdat ['sch'='' @code{len=0}]
-Draws vectors @{@var{udat}, @var{vdat}, @var{wdat}@} along a curve @var{xdat}, @var{ydat}, @var{zdat}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. See also @code{vect}. @sref{Traj sample}
- at end deffn
-
- at deffn {MGL command} vect udat vdat ['sch'='' @code{zval=nan flag=0}]
- at deffnx {MGL command} vect xdat ydat udat vdat ['sch'='' @code{zval=nan flag=0}]
-Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample}
- at end deffn
-
- at deffn {MGL command} vect udat vdat wdat ['sch'='' @code{flag=0}]
- at deffnx {MGL command} vect xdat ydat zdat udat vdat wdat ['sch'='' @code{flag=0}]
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample}
- at end deffn
-
- at deffn {MGL command} vectc udat vdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} vectc xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vect, flow, pipe, dew}. @sref{VectC sample}
- at end deffn
-
- at deffn {MGL command} vectc udat vdat wdat ['sch'='']
- at deffnx {MGL command} vectc xdat ydat zdat udat vdat wdat ['sch'='']
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectC 3D sample}
- at end deffn
-
- at deffn {MGL command} vectl udat vdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} vectl xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample}
- at end deffn
-
- at deffn {MGL command} vectl udat vdat wdat ['sch'='']
- at deffnx {MGL command} vectl xdat ydat zdat udat vdat wdat ['sch'='']
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample}
- at end deffn
-
- at deffn {MGL command} dew udat vdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} dew xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws dew-drops for plane vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of drops is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of drops depend on @var{meshnum}. Note that this is very expensive plot in memory usage and creation time! See also @code{vectc}. @sref{Dew sample}
- at end deffn
-
- at deffn {MGL command} flow udat vdat ['sch'='' @code{num=5 zval=nan}]
- at deffnx {MGL command} flow xdat ydat udat vdat ['sch'='' @code{num=5 zval=nan}]
-Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of threads is proportional to @var{num}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample}
- at end deffn
-
- at deffn {MGL command} flow udat vdat wdat ['sch'='' @code{num=3}]
- at deffnx {MGL command} flow xdat ydat zdat udat vdat wdat ['sch'='' @code{num=3}]
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample}
- at end deffn
-
- at deffn {MGL command} flow @code{x0 y0} udat vdat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} flow @code{x0 y0} xdat ydat udat vdat ['sch'='' @code{zval=nan}]
-Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} from point @{@var{x0}, @var{y0}@} at level @var{z=zVal}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample}
- at end deffn
-
- at deffn {MGL command} flow @code{x0 y0 z0} udat vdat wdat ['sch'='']
- at deffnx {MGL command} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'='']
-Draws flow thread from point @{@var{x0}, @var{y0}, @var{z0}@}. Arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample}
- at end deffn
-
-
- at deffn {MGL command} pipe udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}]
- at deffnx {MGL command} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}]
-Draws plane flow pipes for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of pipes is proportional to @var{num}. The color of pipes is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. See also @code{vect, vectc, pipe}. @sref{Flow sample}
- at end deffn
-
- at deffn {MGL command} pipe udat vdat wdat ['sch'='' @code{r0=0.05 num=3}]
- at deffnx {MGL command} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05 num=3}]
-This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample}
- at end deffn
-
-
- at c ##################################################################
- at node Other plotting (MGL), Nonlinear fitting (MGL), Vector fields (MGL), MGL interface
- at section Other plotting (MGL)
- at cindex cont[xyz]
- at cindex dens[xyz]
- at cindex contf[xyz]
- at cindex dots
- at cindex crust
- at cindex triplot
- at cindex fplot
- at cindex fsurf
-
-
-These commands perform miscelaneous plotting. There is unstructured data points plots (Dots), surface reconstruction (Crust), surfaces on the triangular mesh (TriPlot), textual formula plotting (Plots by formula), data plots at edges (Dens[XYZ], Cont[XYZ], ContF[XYZ]), simple plot (SimplePlot). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}.
-
- at deffn {MGL command} densx dat ['sch'='' @code{val=nan}]
- at deffnx {MGL command} densy dat ['sch'='' @code{val=nan}]
- at deffnx {MGL command} densz dat ['sch'='' @code{val=nan}]
-These plotting commands draw density plot in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{cont[xyz], contf[xyz], dens}. @sref{Dens projection sample}
- at end deffn
-
- at deffn {MGL command} contx dat ['sch'='' @code{val=nan num=7}]
- at deffnx {MGL command} conty dat ['sch'='' @code{val=nan num=7}]
- at deffnx {MGL command} contz dat ['sch'='' @code{val=nan num=7}]
-These plotting commands draw contour lines in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], contf[xyz], cont}. @sref{Cont projection sample}
- at end deffn
-
- at deffn {MGL command} contfx dat ['sch'='' @code{val=nan num=7}]
- at deffnx {MGL command} contfy dat ['sch'='' @code{val=nan num=7}]
- at deffnx {MGL command} contfz dat ['sch'='' @code{val=nan num=7}]
-These plotting commands draw solid contours in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], cont[xyz], contf}.
- at end deffn
-
- at deffn {MGL command} dots xdat ydat zdat ['sch'='']
- at deffnx {MGL command} dots xdat ydat zdat adat ['sch'='']
-Draws the arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Variable @var{adat}[i] set transparency for dots. See also @code{crust, mark, plot}. @sref{Dots sample}
- at end deffn
-
- at deffn {MGL command} crust xdat ydat zdat ['sch'='']
-Reconstructs and draws the surface for arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. See also @code{dots, triplot}. @sref{Crust sample}
- at end deffn
-
- at deffn {MGL command} triplot idat xdat ydat ['sch'='' @code{zval=nan}]
- at deffnx {MGL command} triplot idat xdat ydat zdat ['sch'='']
- at deffnx {MGL command} triplot idat xdat ydat zdat cdat ['sch'='']
-Draws the surface of triangles. Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 3 or greater. See also @code{dots, crust}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx).
- at end deffn
-
- at deffn {MGL command} fplot 'y(x)' ['pen'='' @code{zval=nan num=100}]
-Draws command function @samp{y(x)} at plane z=@var{zval} where @samp{x} variable is changed in @code{xrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}.
- at end deffn
-
- at deffn {MGL command} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'='' @code{num=100}]
-Draws command parametrical curve @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@} where @samp{t} variable is changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}.
- at end deffn
-
- at deffn {MGL command} fsurf 'z(x,y)' ['sch'='' @code{num=100}]
-Draws command surface for function @samp{z(x,y)} where @samp{x}, @samp{y} variable are changed in @code{xrange, yrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}.
- at end deffn
-
- at deffn {MGL command} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'='' @code{num=100}]
-Draws command parametrical surface @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@} where @samp{u}, @samp{v} variable are changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}.
- at end deffn
-
-
- at c ##################################################################
- at node Nonlinear fitting (MGL), Data create (MGL), Other plotting (MGL), MGL interface
- at section Nonlinear fitting (MGL)
- at cindex fit
- at cindex fits
- at cindex putsfit
-
-These commands fit data to formula. Fitting goal is to find formula parameters for the best fit the data points, i.e. to minimize the sum @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. At this, approximation command @samp{f} can depend only on one argument @samp{x} (1D case), on two arguments @samp{x,y} (2D case) and on three arguments @samp{x,y,z} (3D case). The command @samp{f} also may depend on parameters. Normally the list of fitted parameters is specified by @var{var} string (like, @samp{abcd}). Usually user should supply initial values for fitted parameters by @var{ini} variable. But if he/she don't supply it then the zeros are used.
-
-Commands @code{fit} and @code{fits} do not draw the obtained data themselves. They fill the data @var{out} by formula @samp{f} with found coefficients. At this, the @samp{x,y,z} coordinates are equidistantly distributed in the bounding box. Number of points in @var{out} is selected as maximal value of @var{out} size or 100. Also you may print the last formula with found coefficients by @code{putsfit} command. @sref{Fitting sample}
-
-The dimensions of arrays must be at least the same as the number of specified arrays @var{xdat}, @var{ydat}, @var{zdat}. Also the fitting only along specified directions will be performed (for example, along x and y if only @var{xdat} and @var{ydat} are specified). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x.
-
-
- at deffn {MGL command} fits adat sdat 'func' 'var' [ini=0]
- at deffnx {MGL command} fits xdat adat sdat 'func' 'var' [ini=0]
- at deffnx {MGL command} fits xdat ydat adat sdat 'func' 'var' [ini=0]
- at deffnx {MGL command} fits xdat ydat zdat adat sdat 'func' 'var' [ini=0]
-Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor @var{sdat}[i,j,k].
- at end deffn
-
- at deffn {MGL command} fit adat 'func' 'var' [ini=0]
- at deffnx {MGL command} fit xdat adat 'func' 'var' [ini=0]
- at deffnx {MGL command} fit xdat ydat adat 'func' 'var' [ini=0]
- at deffnx {MGL command} fit xdat ydat zdat adat 'func' 'var' [ini=0]
-Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor =1.
- at end deffn
-
- at deffn {MGL command} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}]
-Print last fitted formula with found coefficients (as numbers) at position @{@var{x}, @var{y}@}. The string @var{pre} will be printed before formula. All other parameters are the same as in @ref{Text printing (MGL)}.
- at end deffn
-
-
- at c ##################################################################
- at node Data create (MGL), Data filling (MGL), Nonlinear fitting (MGL), MGL interface
- at section Data create (MGL)
- at cindex new
- at cindex var
- at cindex list
- at cindex delete
- at cindex copy
- at cindex column
- at cindex set_id
-
- at deffn {MGL command} new dat [@code{nx=1 ny=1 nz=1}]
-Creates or recreates the array @var{dat} with specified size and fills it by zero. This command does nothing if one of parameters @var{nx}, @var{ny}, @var{nz} is zero or negative.
- at end deffn
-
- at deffn {MGL command} var dat @code{num v1 [v2=nan]}
-Creates new variable with name dat for one-dimensional array of size num. Array elements are equidistantly distributed in range [@var{v1}, @var{v2}]. If @var{v2}=@code{nan} then @var{v2=v1} is used. 
- at end deffn
-
- at deffn {MGL command} list dat @code{v1 ...}
-Creates new variable with name @var{dat} and fills it by numeric values of command arguments @code{v1 ...}. Command can create one-dimensional and two-dimensional arrays with arbitrary values. For creating 2d array the user should use delimiter - which means that the following values lie in next row. Array sizes are [maximal of row sizes * number of rows]. For example, command @code{list 1 | 2 3} creates the array [1 0; 2 3]. Note, that the maximal number of arguments is 1000. 
- at end deffn
-
- at deffn {MGL command} list dat d1 ...
-Creates new variable with name @var{dat} and fills it by data values of arrays of command arguments @var{d1 ...}. Command can create two-dimensional or three-dimensional (if arrays in arguments are 2d arrays) arrays with arbitrary values. Minor dimensions of all arrays in arguments should be equal to dimensions of first array d1. In the opposite case the argument will be ignored. Note, that the maximal number of arguments is 1000. 
- at end deffn
-
- at deffn {MGL command} copy dat1 dat2 ['eq'='' @code{on_axis=on}]
- at deffnx {MGL command} copy dat1 @code{val}
-Creates new variable with name @var{dat1} and fills it by data values of array @var{dat2}. At this, if parameter @var{eq} is specified then the data will be modified by corresponding formula by the same way as in @code{fill} command (for @code{on_axis=on}) or in @code{modify} command (for @code{on_axis=off}).
- at end deffn
-
- at deffn {MGL command} delete dat
-Deletes variable @var{dat} and makes its memory free. Can be useful for huge data arrays.
- at end deffn
-
- at deffn {MGL command} set_id dat 'ids'
-Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces).
- at end deffn
-
- at deffn {MGL command} info dat [@code{detail=off}]
-Display information (sizes, maximum/minimum, momentums and so on) about the data dat. Show brief information by default (if @code{detail=off}).
- at end deffn
-
- at deffn {MGL command} info 'text'
-Display @var{text} as information (warning).
- at end deffn
-
- at c ------------------------------------------------------------------
- at node Data filling (MGL), Rearrange data (MGL), Data create (MGL), MGL interface
- at section Data filling (MGL)
- at cindex fill
- at cindex modify
-
- at deffn {MGL command} fill dat v1 v2 ['dir'='x']
-Equidistantly fills the data values to range [@var{x1}, @var{x2}] in direction @var{dir}=@{@samp{x}, at samp{y}, at samp{z}@}.
- at end deffn
-
- at deffn {MGL command} fill dat 'eq' [vdat=0 wdat=0]
-Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in @emph{bounding box} (in difference from @code{modify} commands). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}.
- at end deffn
-
- at deffn {MGL command} modify dat 'eq' [@code{dim=0}]
-Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}.
- at end deffn
-
- at deffn {MGL command} modify dat 'eq' vdat [wdat=0]
-Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending  on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. If optional data @var{vdat}, @var{wdat} (must be the same size as @var{dat}) are specified then variables @samp{v} and @samp{w} denote its values else they are zero.
- at end deffn
-
-
- at deffn {MGL command} put a @code{val [i=: j=: k=:]}
-Function sets value(s) of array a[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the value @var{val} to whole range in corresponding direction(s). For example, @code{put a val : 0 :} sets a[i,0,j]=@var{val} for i=0...(a.nx-1), j=0...(a.nz-1).
- at end deffn
-
- at deffn {MGL command} put a v [@code{i=: j=: k=:}]
-Function copies value(s) from array @var{v} to the range of array @var{a}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the range in corresponding direction(s). At this minor dimensions of array @var{v} should be large than corresponding dimensions of array @var{a}. For example, @code{put a v : 0 :} sets a[i,0,j]=v.ny>nz ? v[i,j] : v[i], where i=0...(a.nx-1), j=0...(a.nz-1) and condition v.nx>=a.nx is true.
- at end deffn
-
-
-
- at c ------------------------------------------------------------------
- at node Rearrange data (MGL), File I/O (MGL), Data filling (MGL), MGL interface
- at section Rearrange data (MGL)
- at cindex rearrange
- at cindex extend
- at cindex transpose
- at cindex squeeze
- at cindex crop
-
- at deffn {MGL command} rearrange dat @code{mx [my=0 mz=0]}
-Rearrange dimensions without changing data array so that resulting sizes should  be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz} will be 1.
- at end deffn
-
- at deffn {MGL command} extend dat @code{n1 [n2=0]}
-Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be 
- at iftex
- at math{a_{ij}^{new} = a_i^{old}} where j=0... at var{n1}. Correspondingly, for @var{n1}<0 new array will be @math{a_{ij}^{new} = a_j^{old}} where i=0...|@var{n1}|.
- at end iftex
- at ifnottex
-a_ij^new = a_i^old where j=0... at var{n1}. Correspondingly, for @var{n1}<0 new array will be a_ij^new = a_j^old where i=0...|@var{n1}|.
- at end ifnottex
- at end deffn
-
- at deffn {MGL command} transpose dat ['dim'='yxz']
-Transposes (shift order of) dimensions of the data. New order of dimensions is specified int string @var{dim}. This command may be useful also for the reading of one-dimensional data.
- at end deffn
-
- at deffn {MGL command} squeeze dat @code{rx [ry=1 rz=1 sm=off]}
-Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{sm} set to use smoothing
- at iftex
-(i.e. @math{a_{out}[i]=\sum_{j=i}^{i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}).
- at end iftex
- at ifnottex
-(i.e. out[i]=\sum_@{j=i@}^@{i+r@} a[j]/r) or not (i.e. out[i]=a[j*r]).
- at end ifnottex
- at end deffn
-
- at deffn {MGL command} crop dat @code{n1 n2} 'dir'
-Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}- at var{n2} if @var{n2}<=0 along direction @var{dir}.
- at end deffn
-
- at c ------------------------------------------------------------------
- at node File I/O (MGL), Make another data (MGL), Rearrange data (MGL), MGL interface
- at section File I/O (MGL)
- at cindex read
- at cindex readhdf
- at cindex readmat
- at cindex readall
- at cindex save
- at cindex savehdf
- at cindex export
- at cindex import
-
- at deffn {MGL command} read dat 'fname'
-Reads data from tab-separated text file with auto determining sizes of the data.
- at end deffn
-
- at deffn {MGL command} read dat 'fname' @code{mx [my=1 mz=1]}
-Reads data from text file with specified data sizes. This command does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative.
- at end deffn
-
- at deffn {MGL command} readmat dat 'fname' [@code{dim=2}]
-Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions.
- at end deffn
-
- at deffn {MGL command} readall dat 'templ' @code{v1 v2 [dv=1 slice=off]}
-Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{v1} to @var{v2} with step @var{dv}. The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}.
- at end deffn
-
- at deffn {MGL command} readall dat 'templ' @code{[slice=off]}
-Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}.
- at end deffn
-
- at deffn {MGL command} save dat 'fname'
-Saves the whole data array to tab-separated text file.
- at end deffn
-
- at deffn {MGL command} readhdf dat 'fname' 'dname'
-Reads data array named @var{dname} from HDF file @var{fname}.
- at end deffn
- at deffn {MGL command} savehdf dat 'fname' 'dname'
-Saves data array named @var{dname} from HDF file @var{fname}.
- at end deffn
-
- at deffn {MGL command} import dat 'fname' 'sch' [@code{v1=0 v2=1}]
-Reads data from bitmap file. The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{sch} (@pxref{Color scheme}).
- at end deffn
-
- at deffn {MGL command} export dat 'fname' 'sch' [@code{v1=0 v2=0}]
-Saves data matrix to bitmap file. The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{sch} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array.
- at end deffn
-
- at c ------------------------------------------------------------------
- at node Make another data (MGL), Commands on direction (MGL), File I/O (MGL), MGL interface
- at section Make another data (MGL)
- at cindex subdata
- at cindex hist
- at cindex momentum
- at cindex sum
- at cindex max
- at cindex min
- at cindex combine
- at cindex evaluate
- at cindex resize
-
- at deffn {MGL command} combine res adat bdat
-Returns direct multiplication of arrays (like, res[i,j] = adat[i]*bdat[j] and so on).
- at end deffn
-
- at deffn {MGL command} evaluate res dat idat [@code{norm=on}]
- at deffnx {MGL command} evaluate res dat idat jdat [@code{norm=on}]
- at deffnx {MGL command} evaluate res dat idat jdat kdat [@code{norm=on}]
-Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly.
- at end deffn
-
- at deffn {MGL command} hist res dat @code{num v1 v2 [nsub=0]}
- at deffnx {MGL command} hist res dat wdat @code{num v1 v2 [nsub=0]}
-Creates @var{num}-th points distribution @var{res} of the data values of @var{dat} in range [@var{v1}, @var{v2}]. Array @var{wdat} specifies weights of the data elements (all weight is 1 if @var{wdat} is not specified). Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram).
- at end deffn
-
- at deffn {MGL command} momentum res dat 'how' ['dir'='z']
-Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as
- at iftex
- at math{res_k = \sum_{ij} how(x_i,y_j,z_k) a_{ij}/\sum_{ij} a_{ij}}
- at end iftex
 @ifnottex
-res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij
- at end ifnottex
-if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1].
- at end deffn
-
- at deffn {MGL command} sum res dat 'dir'
-Gets array which is the result of summation in given direction or direction(s).
- at end deffn
- at deffn {MGL command} max res dat 'dir'
-Gets array which is the maximal data values in given direction or direction(s).
- at end deffn
- at deffn {MGL command} min res dat 'dir'
-Gets array which is the minimal data values in given direction or direction(s).
- at end deffn
-
- at deffn {MGL command} resize res dat @code{mx [my=1 mz=1]}
-Makes array @var{res} of sizes @var{mx}, @var{my}, @var{mz} with interpolated data of array @var{dat}. 
- at end deffn
-
- at deffn {MGL command} subdata res dat @code{xx [yy=: zz=:]}
-Extracts sub-array data @var{res} from the original data @var{dat} array keeping fixed positive index. For example @code{subdata a b : 2} extracts 3d row (indexes are zero based), @code{subdata a b 4 :} extracts 5th column, @code{subdata a b : : 3} extracts 4th slice and so on. Note that symbol @samp{:} is defined @samp{:}=@code{-1} in MGL.
- at end deffn
-
- at deffn {MGL command} trace res dat
-Gets array of diagonal elements dat[i,i] (for 2D case) or dat[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1.
- at end deffn
-
- at deffn {MGL command} transform dat 'type' real imag
-Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
- at end deffn
-
- at deffn {MGL command} transforma dat 'type' ampl phase
-Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation.
- at end deffn
-
- at deffn {MGL command} stfad res real imag @code{dn} ['dir'='x']
-Short time Fourier analysis for real and imaginary parts. Output  is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}.
- at end deffn
-
- at deffn {MGL command} pde res 'ham' ini_re ini_im [@code{dz=0.1 k0=100}]
-Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Coordinates of the equation (and the solution) are supposed to be in the bounding box. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham='p^2+q^2-u^2'}. You may specify imaginary part for wave absorption, like @code{ham = 'p^2+i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}).
- at end deffn
+ at node Top
+ at top Язык MGL
 
- at deffn {MGL command} ray res 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]}
-Solves GO ray equation like d at emph{r}/dt = d @var{ham}/d at emph{p}, d at emph{p}/dt = -d @var{ham}/d at emph{r}. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordiantes @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}.
- at end deffn
+Это документация для языка MGL (версии @value{VERSION}). Пожалуйста сообщайте о любых ошибках в этом руководстве на @email{mathgl.abalakin@@gmail.org}. Дополнительную информацию о MGL и MathGL можно найти на домашней странице проекта @uref{http://mathgl.sourceforge.net/}.
 
- at deffn {MGL command} qo2d res 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx=0 yy=0]
-Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} 
- at end deffn
+Copyright @copyright{} 2010 Алексей Балакин. 
 
- at deffn {MGL command} jacobian res xdat ydat [zdat=0]
-Computates the Jacobian for transformation @{i,j,k@} to @{@var{xdat}, at var{ydat}, at var{zdat}@} where initial coordinates  @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{xdat}, at var{ydat}, at var{zdat}@} and @math{\xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{xdat}, at var{ydat}, at var{zdat}@} are specified or 2D if only 2 arrays @{@var{xdat}, at var{ydat}@} are specified.
- at end deffn
+ at quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License.''
 
+(a) The FSF's Back-Cover Text is: ``You have the freedom to
+copy and modify this GNU manual.  Buying copies from the FSF
+supports it in developing GNU and promoting software freedom.''
+ at end quotation
 
-
- at c ------------------------------------------------------------------
- at node Commands on direction (MGL), Operators (MGL), Make another data (MGL), MGL interface
- at section Commands on direction (MGL)
- at cindex cumsum
- at cindex integral
- at cindex diff
- at cindex diff2
- at cindex swap
- at cindex mirror
- at cindex sew
- at cindex smooth
- at cindex envelop
- at cindex norm
- at cindex normsl
-
-These commands change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondingly.
-
- at deffn {MGL command} cumsum dat 'dir'
-Cumulative summation of the data in given direction or directions.
- at end deffn
- at deffn {MGL command} integrate dat 'dir'
-Integrates (like cumulative summation) the data in given direction or directions.
- at end deffn
- at deffn {MGL command} diff dat 'dir'
-Differentiates the data in given direction or directions.
- at end deffn
- at deffn {MGL command} diff dat xdat ydat [zdat=0]
-Differentiates the data @var{dat} specified parametrically in direction @var{xdat} with @var{ydat}, @var{zdat}=constant. Parameter @var{zdat} can be omitted that correspond to 2D case. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{diff a x y} and usual derivative along @samp{y} will be @code{diff a y x}.
- at end deffn
-
- at deffn {MGL command} diff2 dat 'dir'
-Double-differentiates (like Laplace operator) the data in given direction.
- at end deffn
- at deffn {MGL command} swap dat 'dir'
-Swaps the left and right part of the data in given direction (useful for Fourier spectrum).
- at end deffn
- at deffn {MGL command} mirror dat 'dir'
-Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}.
- at end deffn
-
- at deffn {MGL command} sew dat ['dir'='xyz' @code{da=2*pi}]
-Remove value steps (like phase jumps after inverse trigonometric commands) with period @var{da} in given direction.
- at end deffn
- at deffn {MGL command} smooth data @code{type} ['dir'='xyz']
-Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @samp{0} does nothing, @samp{1} linear averaging by 3 points, @samp{2} linear averaging by 5 points, @samp{3} quadratic averaging by 5 points.
- at end deffn
-
- at deffn {MGL command} envelop dat ['dir'='x']
-Find envelop for data values along direction @var{dir}. Only one direction can be specified at once.
- at end deffn
-
- at deffn {MGL command} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}]
-Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep} is set then maximal value of k-th slice will be limited by 
- at iftex
- at math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}.
- at end iftex
- at ifnottex
- at math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}.
 @end ifnottex
- at end deffn
-
- at deffn {MGL command} norm dat @code{v1 v2 [sym=off dim=0]}
-Normalizes the data to range [@var{v1}, at var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}.
- at end deffn
-
 
- at c ------------------------------------------------------------------
- at node Operators (MGL), Program flow (MGL), Commands on direction (MGL), MGL interface
- at section Operators (MGL)
- at cindex multo
- at cindex addto
- at cindex divto
- at cindex subto
-
- at deffn {MGL command} multo dat dat2
-Multiplies the data by the other one for each element.
- at end deffn
- at deffn {MGL command} divto dat dat2
-Divides the data by the other one for each element.
- at end deffn
- at deffn {MGL command} addto dat dat2
-Adds the other data.
- at end deffn
- at deffn {MGL command} subto dat dat2
-Subtracts the other data.
- at end deffn
- at deffn {MGL command} multo dat @code{val}
-Multiplies each element by the number.
- at end deffn
- at deffn {MGL command} divto dat @code{val}
-Divides each element by the number.
- at end deffn
- at deffn {MGL command} addto dat @code{val}
-Adds the number to each element.
- at end deffn
- at deffn {MGL command} subto dat @code{val}
-Subtracts the number to each element.
- at end deffn
-
- at c ------------------------------------------------------------------
- at node Program flow (MGL), Command options (MGL), Operators (MGL), MGL interface
- at section Program flow (MGL)
- at cindex call
- at cindex chdir
- at cindex define
- at cindex if
- at cindex elseif
- at cindex else
- at cindex endif
- at cindex for
- at cindex next
- at cindex once
- at cindex stop
-
-These commands control program flow, like, conditions, cycles, define script arguments and so on.
-
- at deffn {MGL command} call 'fname'
-Executes script @var{fname}.
- at end deffn
- at deffn {MGL command} chdir 'path'
-Changes the current directory to @var{path}.
- at end deffn
- at deffn {MGL command} define $N smth
-Sets @var{N}-th script argument to @var{smth}. Note, that @var{smth} is used as is (with @samp{'} symbols if present).
- at end deffn
- at deffn {MGL command} define name smth
-Create scalar variable @code{name} which have the numeric value of @code{smth}. Later you can use this variable as usual number.
- at end deffn
- at deffn {MGL command} if dat 'cond'
-Starts block which will be executed if @var{dat} satisfy to @var{cond}.
- at end deffn
- at deffn {MGL command} if @code{val}
-Starts block which will be executed if @code{val} is nonzero.
- at end deffn
- at deffn {MGL command} elseif dat 'cond'
-Starts block which will be executed if previous @code{if} or @code{elseif} is false and @var{dat} satisfy to @var{cond}.
- at end deffn
- at deffn {MGL command} elseif @code{val}
-Starts block which will be executed if previous @code{if} or @code{elseif} is false and @code{val} is nonzero.
- at end deffn
- at deffn {MGL command} else
-Starts block which will be executed if previous @code{if} or @code{elseif} is false.
- at end deffn
- at deffn {MGL command} endif
-Finishes @code{if/elseif/else} block.
- at end deffn
- at deffn {MGL command} for $N @code{v1 v2 [dv=1]}
-Starts cycle with @var{N}-th argument changing from @var{v1} to @var{v2} with the step @var{dv}.
- at end deffn
- at deffn {MGL command} for $N dat
-Starts cycle with @var{N}-th argument changing for @var{dat} values.
- at end deffn
- at deffn {MGL command} next
-Finishes @code{for} cycle.
- at end deffn
- at deffn {MGL command} once @code{val}
-The code between once on and once off will be executed only once. Useful for large data manipulation in programs like UDAV.
- at end deffn
- at deffn {MGL command} stop
-Terminate execution.
- at end deffn
-
- at c ------------------------------------------------------------------
- at node  Command options (MGL), Suffixes, Program flow (MGL), MGL interface
- at section Command options (MGL)
- at cindex alpha
- at cindex alphadef
- at cindex xrange
- at cindex yrange
- at cindex zrange
- at cindex crange
- at cindex cut
- at cindex ambient
- at cindex fontsize
- at cindex marksize
- at cindex meshnum
- at cindex legend
-
-Command options allow the easy setup of the plot by changing of global settings only for this plot. Options are specified at the end of string. Each option is separated from the previous text by symbol @samp{;}. Options work so that them remember the current settings, change settings as it being set in the option, execute command and return the original settings back. So, the options usage for data handling commands or for graphics setup commands is useless.
-
-The most useful options are @code{xrange, yrange, zrange}. They sets the boundaries for data change. This boundaries are used for automatically filled variables. So, these options allow one to change the position of some plots. For example, in command @code{plot y; xrange 0.1 0.9} the x coordinate will be equidistantly distributed in range 0.1 ... 0.9.
+ at menu
+* MGL interface::
+* Examples::
+* Samples::
+* Copying This Manual::
+* Index::
+ at end menu
 
-The full list of options are:
- at deffn {MGL command} alpha @code{val}
-Sets alpha value (transparency) of the plot. The value should be in range [0, 1].
- at end deffn
- at deffn {MGL command} alphadef @code{val}
-Sets alpha value (transparency) of the plot. The value should be in range [0, 1].
- at end deffn
- at deffn {MGL command} ambient @code{val}
-Sets brightness of ambient light for the plot. The value should be in range [0, 1].
- at end deffn
- at deffn {MGL command} crange @code{val1 val2}
-Sets boundaries of color change for the plot.
- at end deffn
- at deffn {MGL command} xrange @code{val1 val2}
-Sets boundaries of x coordinate change for the plot.
- at end deffn
- at deffn {MGL command} yrange @code{val1 val2}
-Sets boundaries of y coordinate change for the plot.
- at end deffn
- at deffn {MGL command} zrange @code{val1 val2}
-Sets boundaries of z coordinate change for the plot.
- at end deffn
- at deffn {MGL command} cut @code{val}
-Sets whether to cut or to project the plot points lying outside the bounding box.
- at end deffn
- at deffn {MGL command} fontsize @code{val}
-Sets the size of text.
- at end deffn
- at deffn {MGL command} marksize @code{val}
-Sets the size of marks.
- at end deffn
- at deffn {MGL command} meshnum @code{val}
-Work like @code{meshnum} command.
- at end deffn
- at deffn {MGL command} legend 'txt'
-Adds string 'txt' to internal legend accumulator. The style of described line and mark is taken from arguments of the plot command. The maximal number of entries is 100.
- at end deffn
+ at rmacro sref {arg}
+См. раздел @ref{\arg\}, для примеров кода и графика.
+ at end rmacro
+ at macro tdref{nam}
+ at uref{http://mathgl.sourceforge.net/pdf_u3d/\nam\.pdf, 3D pdf}
+ at end macro
+ at macro MGL
+ at end macro
+ at set UDAV
 
- at c ------------------------------------------------------------------
- at node  Suffixes, Utilities, Command options (MGL), MGL interface
- at section Suffixes for variable
+ at node MGL interface, Examples, , Top
+ at include mgl_cmd_ru.texi
 
-Suffixes can get some numerical value (like its size, maximal or minimal value, the sum of elements and so on) of the data array in variable and use it later as usual number in command arguments. The suffixes start from point @samp{.} right after (without spaces) variable name or its sub-array. For example, @code{a.nx} give the x-size of data a, @code{b(1).max} give maximal value of second row of variable b, @code{c(:,0).sum} give sum of element in first column of c and so on.
+ at node Examples, Samples, MGL interface, Top
+ at include ex_mgl_ru.texi
 
-The full list of suffixes are:
- at table @strong
- at item nx, ny, nz
-Give the data size in x-, y-, z-direction correspondingly.
- at item max
-Give maximal value of the data.
- at item min
-Give minimal value of the data.
- at item mx, my, mz
-Give x-, y-, z-position of data maximum.
- at item ax, ay, az, aa
-Give x-, y-, z-position of data mass center or average data value.
- at item wx, wy, wz, wa
-Give width in x-, y-, z-direction or data dispersion value.
- at item sx, sy, sz, sa
-Give skewness in x-, y-, z-direction or data skewness value.
- at item kx, ky, kz, ka
-Give kurtosis in x-, y-, z-direction or data kurtosis value.
- at item sum
-Give sum of data values.
- at item a
-Give first value of data array.
- at item fst
-Give first nonzero value of data array.
- at item lst
-Give last nonzero value of data array.
- at end table
+ at node Samples,Copying This Manual, Examples, Top
+ at include samples_ru.texi
 
- at c ------------------------------------------------------------------
- at node  Utilities, , Suffixes, MGL interface
- at section Utilities for parsing MGL
+ at node Copying This Manual, Index, Samples, Top
+ at appendix GNU Free Documentation License
+ at include fdl.texi
 
-MathGL library provides several tools for parsing MGL scripts. There is tools saving it to bitmap (@code{mgl2png}, @code{mgl2gif}) or vectorial (@code{mgl2eps}, @code{mgl2svg}) images. Tool @code{mglview} show MGL script and allow to rotate and setup the image. Also you can translate MGL script to C++ file by help of @code{mgl2cpp} tool.
+ at node Index, , Copying This Manual, Top
+ at unnumbered Индекс
 
-All of this tools have similar set of arguments. First argument is name of script file, next argument is optional output file name, last arguments are options. There are options for setting script parameters (it is @code{$0, $1, ... $9}) and locale settings. The script parameters have format @samp{-Nval}. Here N=0,1...9 is parameter ID and val is its value. For example, option @samp{-1test} set to substitute @samp{test} instead of @code{$1} in the script. Option -Lval set locale to val. For example, @samp{-Lutf8} will set UTF-8 locale for script.
+ at printindex cp
 
-Additionally you can create animated GIF file or a set of JPEG files with names @samp{frameNNNN.jpg} (here @samp{NNNN} is frame index). You should use @code{mgl2gif} tool and specify the values of @code{$0} parameter for making animation. Values of the parameter @code{$0} can be specified inside the script by comment @code{##a val} for each value @code{val} (one comment for one value) or by option(s) @samp{-Aval}. Tool @code{mgl2gif} will execute script several times (once for each specified value of @code{$0}) and save result in animated GIF file. For saving each frame in JPEG just add command @code{write ''} at the end of the script.
+ at bye
diff --git a/texinfo/other_en.texi b/texinfo/other_en.texi
new file mode 100644
index 0000000..83f546b
--- /dev/null
+++ b/texinfo/other_en.texi
@@ -0,0 +1,442 @@
+
+ at c ------------------------------------------------------------------
+ at chapter Other classes
+
+ at menu
+* mglParse class::              
+* mglFormula class::            
+* mglFont class::               
+* mglColor class::              
+* mglPoint class::              
+* mglVar class::                
+* mglCommand class::            
+* mglArg class::                
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node mglParse class, mglFormula class, , Other classes
+ at section mglParse class
+ at cindex mglParse
+
+Class for parsing and executing MGL script. This class is defined in @code{#include <mgl/mgl_parse.h>}.
+
+Class mglParse is the interpreter for MGL scripts (@pxref{MGL interface}). The main function of mglParse class is @code{Parse()}. Exactly this function parses and executes the script string-by-string. Also there are two subservient functions for the finding and creation of a variable. These functions can be useful for displaying values of variables (arrays) in some external program (in window, for example). The variable @var{DataList} contains full list of variables in script. Flag @var{AllowSetSize} allows one to prevent changing the size of the  picture inside the script (forbids the MGL command @code{setsize}). 
+
+Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}).
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{} mglParse (@code{bool} setsize=@code{false})
+ at deftypefnx {C function} @code{HMPR} mgl_create_parser ()
+Constructor initializes all values with zero and set @var{AllowSetSize} value.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{} ~mglParse ()
+ at deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p)
+Destructor delete parser
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0})
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0})
+ at deftypefnx {C function} @code{int} mgl_parse (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos)
+ at deftypefnx {C function} @code{int} mgl_parsew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos)
+Main function in the class. It parses the string @var{str} and executes it by  using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++)} @code{int} Export (@code{wchar_t} cpp_out at code{[1024]}, @code{mglGraph *}gr, @code{const wchar_t *}str)
+Function parses the string @var{str}, executes it by  using @var{gr} as a graphics plotter and exports it to C++ code. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Output C++ text will be placed in @var{out} variable. If string @var{str} have options (defined after ';' symbol) then the corresponding C++ texts are placed in variables @var{op1}, @var{op2}.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false})
+Function parse and execute line-by-line MGL script in file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. Also this function support the @code{for|next} MGL commands.
+ at end deftypefn
+ at deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{int} num, @code{const wchar_t **}text, @code{void (*} error @code{)(int line, int kind)=NULL})
+Function parse and execute line-by-line MGL script in array @var{text}. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text, @code{void (*} error @code{)(int line, int kind)=NULL})
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text, @code{void (*} error @code{)(int line, int kind)=NULL})
+ at deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text)
+ at deftypefnx {C function} @code{void} mgl_parsew_text (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text)
+Function parse and execute line-by-line MGL script in string @var{text}. Lines are separated by @samp{\n} symbol as usual. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{bool} AddParam (@code{int} n, @code{const char *}str, @code{bool} isstr=@code{true})
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{bool} AddParam (@code{int} n, @code{const wchar_t *}str, @code{bool} isstr=@code{true})
+ at deftypefnx {C function} @code{void} mgl_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val)
+ at deftypefnx {C function} @code{void} mgl_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val)
+Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 9). It return @code{true} for success.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} FindVar (@code{const char *}name)
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} FindVar (@code{const wchar_t *}name)
+ at deftypefnx {C function} @code{const HMDT} mgl_find_var  (@code{HMPR} p, @code{const char *}name)
+Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script.
+ at end deftypefn
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} AddVar (@code{const char *}name)
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} AddVar (@code{const wchar_t *}name)
+ at deftypefnx {C function} @code{const HMDT} mgl_add_var (@code{HMPR} p, @code{const char *}name)
+Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{mglVar *}v)
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name)
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name)
+Function delete the variable specified by its name or by its pointer.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{inline void} RestoreOnce ()
+ at deftypefnx {C function} @code{void} mgl_restore_once (@code{HMPR} p)
+Restore Once flag.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (Python)} @code{void} AllowSetSize (@code{bool} a)
+ at deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a)
+Allow to parse 'setsize' command or not.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++)} @code{void} AddCommand (@code{mglCommand *}cmd, @code{int} num=@code{0})
+Add @var{num} commands @var{cmd} to the defined MGL commands list. Parameter @var{cmd} is array of @code{mglCommand} structures. If parameter @var{num}=0 then it will be determined automatically. At this, array @var{cmd} @strong{must have} last element with @code{name=L""}
+ at end deftypefn
+
+ at deftypecv {Option} mglParse @code{mglVar *} DataList
+List of variables defined in script.
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{bool} AllowSetSize
+Flag which allows/forbids the command @code{setsize} in scripts.
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{bool} Stop
+Flag which interrupt script execution.
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{mglCommand *} Cmd
+Table (array) of recognizable MGL commands (can be changed by user). Items in the table @strong{MUST be sorted} by @var{name} field !!! Last items must have empty name (i.e. @code{L""}).
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{wchar_t *} op1
+These strings contain command options and should be placed before the command. These variables are used for MGL->C++ (or other language) conversion.
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{wchar_t *} op2
+These strings contain command options and should be placed after the command. These variables are used for MGL->C++ (or other language) conversion.
+ at end deftypecv
+
+ at c ------------------------------------------------------------------
+ at node mglFormula class, mglFont class, mglParse class, Other classes
+ at section mglFormula class
+ at cindex mglFormula
+
+Class for evaluating of formula specified by the string. This class is defined in @code{#include <mgl/mgl_eval.h>}.
+
+It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN. @xref{Textual formulas}.
+
+ at deftypemethod mglFormula @code{} mglFormula (@code{const char *}str)
+Parses the formula @var{str} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}, @code{float} u=@code{0})
+Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. Error code (if one) can be obtained from function @code{GetError()}.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y, @code{float} z, @code{float} u, @code{float} v, @code{float} w)
+Evaluates the formula for @code{'x'}=@var{x}, @code{'y'}=@var{y}, @code{'z'}=@var{z}, @code{'u'}=@var{u}, @code{'v'}=@var{v}, @code{'w'}=@var{w}. Error code (if one) can be obtained from function @code{GetError()}.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{float} Calc (@code{float} var at code{['z'-'a'+1]})
+Evaluates the formula for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{float} CalcD (@code{float} var at code{['z'-'a'+1]}, @code{char} diff)
+Evaluates the formula derivation respect to @var{diff} for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{int} GetError ()
+Returns error code: @code{0} means no error; @code{ERR_LOG} means error in logarithm or power functions; @code{ERR_ARC} means error in inverse functions (like asin); @code{ERR_SQRT} means error in sqrt function.
+ at end deftypemethod
+
+ at c ------------------------------------------------------------------
+ at node mglFont class, mglColor class, mglFormula class, Other classes
+ at section mglFont class
+ at cindex mglFont
+
+Class for working with font: load, get metrics, parse and draw strings. This class is defined in @code{#include <mgl/mgl_font.h>}.
+
+The class is based on loading and drawing of vector Hershey font. There are two styles of specifying of the font type and aligning: by integer parameters or by string.
+
+The string can be any combination of characters: @samp{rbiLCRwou}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman font (that is @samp{} or @samp{r}) is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wire, @samp{o} -- over-lined, @samp{u} -- underlined. Parsing of the string to special (TeX-like) commands will be done if variable @var{parse} is true (it's default). See also @pxref{Font styles}.
+
+The over way of font and alignment setting is the using of the integer constant. Integer font Id can be one of predefined constants: @code{MGL_FONT_ITAL, MGL_FONT_BOLD, MGL_FONT_BOLD_ITAL = MGL_FONT_ITAL+MGL_FONT_BOLD}. Default font is @code{MGL_FONT_ROMAN}. Also there are flags @code{MGL_FONT_ULINE, MGL_FONT_OLINE, MGL_FONT_WIRE} for additional font effects. Align parameter controls the text alignment: 0 -- align left, 1 -- align center, 2 -- align right.
+
+
+ at menu
+* Format of font files::        
+ at end menu
+
+
+ at deftypemethod mglFont @code{} mglFont (@code{const char *}name=@code{MGL_DEF_FONT_NAME}, @code{const char *}path=@code{NULL})
+Initialize the font and load data from file @var{name} (default name is "STIX" for Linux and MacOS) or if  @var{name}=@code{NULL} limited data from memory (default for Windows).
+ at end deftypemethod
+ at deftypemethod mglFont @code{bool} Load (@code{const char *} base, @code{const char *}path=@code{NULL})
+Load font from file @var{path}/@var{base} into the memory. The font may contain 4 files: @var{base}.vfm, @var{base}_b.vfm, @var{base}_i.vfm, @var{base}_bi.vfm. Appendix contain detailed description of font format.
+ at end deftypemethod
+ at deftypemethod mglFont @code{void} Restore ()
+Restore default font.
+ at end deftypemethod
+ at deftypemethod mglFont @code{void}  (@code{mglFont *} fnt)
+Copy data from other font instance.
+ at end deftypemethod
+ at deftypemethod mglFont @code{void} Clear ()
+Clear memory by deleting the loaded font.
+ at end deftypemethod
+ at deftypemethod mglFont @code{inline unsigned} GetNumGlyph ()
+Return the number of glyphs in the font.
+ at end deftypemethod
+ at deftypemethod mglFont @code{inline bool} Ready ()
+Return true if font is loaded and ready for use.
+ at end deftypemethod
+
+
+ at deftypemethod mglFont @code{float} Height (@code{int} font)
+Gets height of text for font specified by integer constant.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{int} font=@code{0}, @code{int} align=@code{0})
+Prints 8-bit text string for font specified by integer constant.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{int} font=@code{0})
+Gets width of 8-bit text string for font specified by integer constant.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{int} font=@code{0}, @code{int} align=@code{0})
+Prints Unicode text string for font specified by integer constant.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{int} font=@code{0})
+Gets width of Unicode text string for font specified by integer constant.
+ at end deftypemethod
+
+
+ at deftypemethod mglFont @code{float} Height (@code{const char *}how)
+Gets height of text for font specified by string.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{const char *}how)
+Prints 8-bit text string for font specified by string.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{const char *}how)
+Gets width of 8-bit text string for font specified by string.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{const char *}how)
+Prints Unicode text string for font specified by string.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{const char *}how)
+Gets width of Unicode text string for font specified by string.
+ at end deftypemethod
+
+ at deftypecv {Parameter} mglFont @code{mglGraph *} gr
+Instance of mglGraph class which is used for character drawing.
+ at end deftypecv
+ at deftypecv {Parameter} mglFont @code{bool} parse
+Flag for switching on/off the parsing of TeX commands. Default value is @code{true}.
+ at end deftypecv
+
+ at c ------------------------------------------------------------------
+ at node Format of font files, , , mglFont class
+ at subsection Format of font files
+
+Starting from v.1.6 the MathGL library uses new font files. The font is defined in 4 files with suffixes @samp{*.vfm}, @samp{*_b.vfm}, @samp{*_i.vfm}, @samp{*_bi.vfm}. These files are text files containing the data for roman font, bold font, italic font and bold italic font. The files (or some symbols in the files) for bold, italic or bold italic fonts can be absent. In this case the roman glyph will be used for them. By analogy, if the bold italic font is absent but the bold font is present then bold glyph will be used for bold italic. You may create these font files by yourself from *.ttf, *.otf files with the help of program @code{font_tools}. This program can be found at MathGL home site.
+
+The format of font files (*.vfm -- vector font for MathGL) is the following.
+ at enumerate
+ at item
+First string contains human readable comment and is always ignored.
+ at item
+Second string contains 3 numbers, delimited by space or tabulation. The order of numbers is the following: @var{numg} -- the number of glyphs in the file (integer), @var{fact} -- the factor for glyph sizing (float), @var{size} -- the size of buffer for glyph description (integer).
+ at item
+After it @var{numg}-th strings with glyphs description are placed. Each string contains 6 positive numbers, delimited by space of tabulation. The order of numbers is the following: Unicode glyph ID, glyph width, number of lines in glyph, position of lines coordinates in the buffer (length is 2*number of lines), number of triangles in glyph, position of triangles coordinates in the buffer (length is 6*number of triangles).
+ at item
+The end of file contains the buffer with point coordinates at lines or triangles vertexes. The size of buffer (the number of integer) is @var{size}.
+ at end enumerate
+
+Each font file can be compressed by gzip.
+
+Note: the closing contour line  is done automatically (so the last segment may be absent). For starting new contour use a point with coordinates @code{@{0x3fff, 0x3fff@}}.
+
+
+ at c ------------------------------------------------------------------
+ at node mglColor class, mglPoint class, mglFont class, Other classes
+ at section mglColor class
+ at cindex mglColor
+
+Structure for working with colors. This structure is defined in @code{#include <mgl/mgl.h>}.
+
+There are two ways to set the color in MathGL. First one is using of float values of red, green and blue channels for precise color definition. The second way is the using of character id. There are a set of characters specifying frequently used colors. Normally capital letter gives more dark color than lowercase one. @xref{Line styles}.
+
+ at deftypecv {Parameter} mglVar @code{float} {r, g, b}
+Reg, green and blue component of color.
+ at end deftypecv
+
+ at deftypemethod mglColor @code{} mglColor (@code{float} R, @code{float} G, @code{float} B)
+Constructor sets the color by float values of Red, Green and Blue channels.
+ at end deftypemethod
+ at deftypemethod mglColor @code{} mglColor (@code{char} c=@code{'k'})
+Constructor sets the color from character id. The black color is used by default.
+ at end deftypemethod
+ at deftypemethod mglColor @code{void} Set (@code{float} R, @code{float} G, @code{float} B)
+Sets color from values of Red, Green and Blue channels. This values should be in interval [0,1].
+ at end deftypemethod
+ at deftypemethod mglColor @code{void} Set (@code{mglColor} c, @code{float} bright=@code{1})
+Sets color as ``lighted'' version of color @var{c}.
+ at end deftypemethod
+ at deftypemethod mglColor @code{void} Set (@code{char} p)
+Sets color from symbolic id.
+ at end deftypemethod
+ at deftypemethod mglColor @code{bool} Valid ()
+Checks correctness of the color.
+ at end deftypemethod
+ at deftypemethod mglColor @code{float} Norm ()
+Gets maximal of spectral component.
+ at end deftypemethod
+ at deftypemethod mglColor @code{bool} operator== (@code{const mglColor &}c)
+Compare with another color
+ at end deftypemethod
+
+ at deftypefn {Library Function} {inline mglColor} operator+ (@code{const mglColor &}a, @code{const mglColor &}b)
+Adds colors by its RGB values.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator- (@code{const mglColor &}a, @code{const mglColor &}b)
+Subtracts colors by its RGB values.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator* (@code{const mglColor &}a, @code{float} b)
+Multiplies color by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator* (@code{float} a, @code{const mglColor &}b)
+Multiplies color by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator/ (@code{const mglColor &}a, @code{float} b)
+Divide color by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator! (@code{const mglColor &}a)
+Return inverted color.
+ at end deftypefn
+
+ at c ------------------------------------------------------------------
+ at node mglPoint class, mglArg class, mglColor class, Other classes
+ at section mglPoint class
+ at cindex mglPoint
+
+Structure describes point in space. This structure is defined in @code{#include <mgl/mgl.h>}
+
+ at deftypecv {Parameter} mglVar @code{float} {x, y, z}
+Point coordinates. By default all values are zero.
+ at end deftypecv
+
+ at deftypefn {Library Function} {inline mglPoint} operator+ (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Point of summation (summation of vectors).
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Point of difference (difference of vectors).
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator* (@code{float} a, @code{const mglPoint &}b)
+Multiplies (scale) points by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator* (@code{const mglPoint &}a, @code{float} b)
+Multiplies (scale) points by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator/ (@code{const mglPoint &}a, @code{float} b)
+Multiplies (scale) points by number 1/b.
+ at end deftypefn
+ at deftypefn {Library Function} {inline float} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Scalar product of vectors.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator^ (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Cross-product of vectors.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator& (@code{const mglPoint &}a, @code{const mglPoint &}b)
+The part of @var{a} which is perpendicular to vector @var{b}.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator| (@code{const mglPoint &}a, @code{const mglPoint &}b)
+The part of @var{a} which is parallel to vector @var{b}.
+ at end deftypefn
+
+ at deftypefn {Library Function} {inline mglPoint} operator! (@code{const mglPoint &}a)
+Return vector perpendicular to vector @var{a}.
+ at end deftypefn
+ at deftypefn {Library Function} {inline bool} Norm (@code{const mglPoint &}a)
+Return the norm |@var{a}|^2 of vector @var{a}.
+ at end deftypefn
+
+ at deftypefn {Library Function} {inline bool} operator== (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Return true if points are the same.
+ at end deftypefn
+ at deftypefn {Library Function} {inline bool} operator!= (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Return true if points are different.
+ at end deftypefn
+
+ at c ------------------------------------------------------------------
+ at node mglVar class, mglCommand class, mglArg class, Other classes
+ at section mglVar class
+ at cindex mglVar
+
+Structure describes variable of type @code{mglData} and its name in MGL script. This structure is used by @code{mglParse} and is defined in @code{#include <mgl/mgl_parse.h>}.
+
+ at deftypecv {Parameter} mglVar @code{mglData} d
+Data itself
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{wchar_t} s[256]
+Data name
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{void *} o
+Pointer to external object for function @var{func}.
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{mglVar *} next
+Pointer to next instance in list
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{mglVar *} prev
+Pointer to prev instance in list
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{bool} temp
+Flag for temporar variable. Temporal variables will be destroyed after script execution.
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{void (*} func @code{)(void *)}
+Callback function for destroying non-temporal variable.
+ at end deftypecv
+
+ at deftypemethod mglVar @code{void} MoveAfter (@code{mglVar *}var)
+Move variable after @var{var} and copy @code{func} from @code{var} (if @code{func} is not 0)
+ at end deftypemethod
+
+
+ at c ------------------------------------------------------------------
+ at node mglCommand class, , mglVar class, Other classes
+ at section mglCommand class
+ at cindex mglCommand
+
+Structure describes MGL command, its name, short description, executable and export functions. The structure is used by @code{mglParse} and is defined in @code{#include <mgl/mgl_parse.h>}.
+
+ at deftypecv {Parameter} mglCommand @code{const wchar_t *} name
+Name of command.
+ at end deftypecv
+ at deftypecv {Parameter} mglCommand @code{const wchar_t *} desc
+Short command description (can be NULL).
+ at end deftypecv
+ at deftypecv {Parameter} mglCommand @code{const wchar_t *} form
+Format of command arguments (can be NULL).
+ at end deftypecv
+ at deftypecv {Parameter} mglCommand @code{int (*} exec @code{)(mglGraph *gr, long n, mglArg *a, int k[10])const wchar_t *}
+Function for executing (plotting) the command using grapher @var{gr} and having @var{n}-th arguments @var{a}. Function must return 0 if all is OK; or 1 if arguments are wrong.
+ at end deftypecv
+ at deftypecv {Parameter} mglCommand @code{void (*} save @code{)(wchar_t out[1024], long n, mglArg *a, int k[10])const wchar_t *}
+Function for exporting in C++ (can be NULL).
+ at end deftypecv
+
+
+ at c ------------------------------------------------------------------
+ at node mglArg class, mglVar class, mglPoint class, Other classes
+ at section mglArg class
+ at cindex mglArg
+
+Structure describes arguments of functions in the stucture @code{mglCommand}. It is defined in @code{#include <mgl/mgl_parse.h>}.
+
+ at deftypecv {Parameter} mglArg @code{int} type
+Type of argument: 0-data, 1-string, 2-number.
+ at end deftypecv
+ at deftypecv {Parameter} mglArg @code{mglData *} d
+Pointer to data (used if type=0).
+ at end deftypecv
+ at deftypecv {Parameter} mglArg @code{wchar_t} w[2048]
+String with parameters (used if type=1 or if type=0 as variable name).
+ at end deftypecv
+ at deftypecv {Parameter} mglArg @code{char} s[2048]
+String with parameters (used if type=1).
+ at end deftypecv
+ at deftypecv {Parameter} mglArg @code{float} v
+Numerical value (used if type==2)
+ at end deftypecv
+
diff --git a/texinfo/other_ru.texi b/texinfo/other_ru.texi
new file mode 100644
index 0000000..83f546b
--- /dev/null
+++ b/texinfo/other_ru.texi
@@ -0,0 +1,442 @@
+
+ at c ------------------------------------------------------------------
+ at chapter Other classes
+
+ at menu
+* mglParse class::              
+* mglFormula class::            
+* mglFont class::               
+* mglColor class::              
+* mglPoint class::              
+* mglVar class::                
+* mglCommand class::            
+* mglArg class::                
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node mglParse class, mglFormula class, , Other classes
+ at section mglParse class
+ at cindex mglParse
+
+Class for parsing and executing MGL script. This class is defined in @code{#include <mgl/mgl_parse.h>}.
+
+Class mglParse is the interpreter for MGL scripts (@pxref{MGL interface}). The main function of mglParse class is @code{Parse()}. Exactly this function parses and executes the script string-by-string. Also there are two subservient functions for the finding and creation of a variable. These functions can be useful for displaying values of variables (arrays) in some external program (in window, for example). The variable @var{DataList} contains full list of variables in script. Flag @var{AllowSetSize} allows one to prevent changing the size of the  picture inside the script (forbids the MGL command @code{setsize}). 
+
+Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}).
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{} mglParse (@code{bool} setsize=@code{false})
+ at deftypefnx {C function} @code{HMPR} mgl_create_parser ()
+Constructor initializes all values with zero and set @var{AllowSetSize} value.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{} ~mglParse ()
+ at deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p)
+Destructor delete parser
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0})
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0})
+ at deftypefnx {C function} @code{int} mgl_parse (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos)
+ at deftypefnx {C function} @code{int} mgl_parsew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos)
+Main function in the class. It parses the string @var{str} and executes it by  using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++)} @code{int} Export (@code{wchar_t} cpp_out at code{[1024]}, @code{mglGraph *}gr, @code{const wchar_t *}str)
+Function parses the string @var{str}, executes it by  using @var{gr} as a graphics plotter and exports it to C++ code. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Output C++ text will be placed in @var{out} variable. If string @var{str} have options (defined after ';' symbol) then the corresponding C++ texts are placed in variables @var{op1}, @var{op2}.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false})
+Function parse and execute line-by-line MGL script in file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. Also this function support the @code{for|next} MGL commands.
+ at end deftypefn
+ at deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{int} num, @code{const wchar_t **}text, @code{void (*} error @code{)(int line, int kind)=NULL})
+Function parse and execute line-by-line MGL script in array @var{text}. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text, @code{void (*} error @code{)(int line, int kind)=NULL})
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text, @code{void (*} error @code{)(int line, int kind)=NULL})
+ at deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text)
+ at deftypefnx {C function} @code{void} mgl_parsew_text (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text)
+Function parse and execute line-by-line MGL script in string @var{text}. Lines are separated by @samp{\n} symbol as usual. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{bool} AddParam (@code{int} n, @code{const char *}str, @code{bool} isstr=@code{true})
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{bool} AddParam (@code{int} n, @code{const wchar_t *}str, @code{bool} isstr=@code{true})
+ at deftypefnx {C function} @code{void} mgl_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val)
+ at deftypefnx {C function} @code{void} mgl_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val)
+Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 9). It return @code{true} for success.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} FindVar (@code{const char *}name)
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} FindVar (@code{const wchar_t *}name)
+ at deftypefnx {C function} @code{const HMDT} mgl_find_var  (@code{HMPR} p, @code{const char *}name)
+Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script.
+ at end deftypefn
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} AddVar (@code{const char *}name)
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} AddVar (@code{const wchar_t *}name)
+ at deftypefnx {C function} @code{const HMDT} mgl_add_var (@code{HMPR} p, @code{const char *}name)
+Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{mglVar *}v)
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name)
+ at deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name)
+Function delete the variable specified by its name or by its pointer.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++, Python)} @code{inline void} RestoreOnce ()
+ at deftypefnx {C function} @code{void} mgl_restore_once (@code{HMPR} p)
+Restore Once flag.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (Python)} @code{void} AllowSetSize (@code{bool} a)
+ at deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a)
+Allow to parse 'setsize' command or not.
+ at end deftypefn
+
+ at deftypefn {Method on @code{mglParse} (C++)} @code{void} AddCommand (@code{mglCommand *}cmd, @code{int} num=@code{0})
+Add @var{num} commands @var{cmd} to the defined MGL commands list. Parameter @var{cmd} is array of @code{mglCommand} structures. If parameter @var{num}=0 then it will be determined automatically. At this, array @var{cmd} @strong{must have} last element with @code{name=L""}
+ at end deftypefn
+
+ at deftypecv {Option} mglParse @code{mglVar *} DataList
+List of variables defined in script.
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{bool} AllowSetSize
+Flag which allows/forbids the command @code{setsize} in scripts.
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{bool} Stop
+Flag which interrupt script execution.
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{mglCommand *} Cmd
+Table (array) of recognizable MGL commands (can be changed by user). Items in the table @strong{MUST be sorted} by @var{name} field !!! Last items must have empty name (i.e. @code{L""}).
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{wchar_t *} op1
+These strings contain command options and should be placed before the command. These variables are used for MGL->C++ (or other language) conversion.
+ at end deftypecv
+ at deftypecv {Option} mglParse @code{wchar_t *} op2
+These strings contain command options and should be placed after the command. These variables are used for MGL->C++ (or other language) conversion.
+ at end deftypecv
+
+ at c ------------------------------------------------------------------
+ at node mglFormula class, mglFont class, mglParse class, Other classes
+ at section mglFormula class
+ at cindex mglFormula
+
+Class for evaluating of formula specified by the string. This class is defined in @code{#include <mgl/mgl_eval.h>}.
+
+It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN. @xref{Textual formulas}.
+
+ at deftypemethod mglFormula @code{} mglFormula (@code{const char *}str)
+Parses the formula @var{str} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}, @code{float} u=@code{0})
+Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. Error code (if one) can be obtained from function @code{GetError()}.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y, @code{float} z, @code{float} u, @code{float} v, @code{float} w)
+Evaluates the formula for @code{'x'}=@var{x}, @code{'y'}=@var{y}, @code{'z'}=@var{z}, @code{'u'}=@var{u}, @code{'v'}=@var{v}, @code{'w'}=@var{w}. Error code (if one) can be obtained from function @code{GetError()}.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{float} Calc (@code{float} var at code{['z'-'a'+1]})
+Evaluates the formula for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{float} CalcD (@code{float} var at code{['z'-'a'+1]}, @code{char} diff)
+Evaluates the formula derivation respect to @var{diff} for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}.
+ at end deftypemethod
+ at deftypemethod mglFormula @code{int} GetError ()
+Returns error code: @code{0} means no error; @code{ERR_LOG} means error in logarithm or power functions; @code{ERR_ARC} means error in inverse functions (like asin); @code{ERR_SQRT} means error in sqrt function.
+ at end deftypemethod
+
+ at c ------------------------------------------------------------------
+ at node mglFont class, mglColor class, mglFormula class, Other classes
+ at section mglFont class
+ at cindex mglFont
+
+Class for working with font: load, get metrics, parse and draw strings. This class is defined in @code{#include <mgl/mgl_font.h>}.
+
+The class is based on loading and drawing of vector Hershey font. There are two styles of specifying of the font type and aligning: by integer parameters or by string.
+
+The string can be any combination of characters: @samp{rbiLCRwou}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman font (that is @samp{} or @samp{r}) is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wire, @samp{o} -- over-lined, @samp{u} -- underlined. Parsing of the string to special (TeX-like) commands will be done if variable @var{parse} is true (it's default). See also @pxref{Font styles}.
+
+The over way of font and alignment setting is the using of the integer constant. Integer font Id can be one of predefined constants: @code{MGL_FONT_ITAL, MGL_FONT_BOLD, MGL_FONT_BOLD_ITAL = MGL_FONT_ITAL+MGL_FONT_BOLD}. Default font is @code{MGL_FONT_ROMAN}. Also there are flags @code{MGL_FONT_ULINE, MGL_FONT_OLINE, MGL_FONT_WIRE} for additional font effects. Align parameter controls the text alignment: 0 -- align left, 1 -- align center, 2 -- align right.
+
+
+ at menu
+* Format of font files::        
+ at end menu
+
+
+ at deftypemethod mglFont @code{} mglFont (@code{const char *}name=@code{MGL_DEF_FONT_NAME}, @code{const char *}path=@code{NULL})
+Initialize the font and load data from file @var{name} (default name is "STIX" for Linux and MacOS) or if  @var{name}=@code{NULL} limited data from memory (default for Windows).
+ at end deftypemethod
+ at deftypemethod mglFont @code{bool} Load (@code{const char *} base, @code{const char *}path=@code{NULL})
+Load font from file @var{path}/@var{base} into the memory. The font may contain 4 files: @var{base}.vfm, @var{base}_b.vfm, @var{base}_i.vfm, @var{base}_bi.vfm. Appendix contain detailed description of font format.
+ at end deftypemethod
+ at deftypemethod mglFont @code{void} Restore ()
+Restore default font.
+ at end deftypemethod
+ at deftypemethod mglFont @code{void}  (@code{mglFont *} fnt)
+Copy data from other font instance.
+ at end deftypemethod
+ at deftypemethod mglFont @code{void} Clear ()
+Clear memory by deleting the loaded font.
+ at end deftypemethod
+ at deftypemethod mglFont @code{inline unsigned} GetNumGlyph ()
+Return the number of glyphs in the font.
+ at end deftypemethod
+ at deftypemethod mglFont @code{inline bool} Ready ()
+Return true if font is loaded and ready for use.
+ at end deftypemethod
+
+
+ at deftypemethod mglFont @code{float} Height (@code{int} font)
+Gets height of text for font specified by integer constant.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{int} font=@code{0}, @code{int} align=@code{0})
+Prints 8-bit text string for font specified by integer constant.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{int} font=@code{0})
+Gets width of 8-bit text string for font specified by integer constant.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{int} font=@code{0}, @code{int} align=@code{0})
+Prints Unicode text string for font specified by integer constant.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{int} font=@code{0})
+Gets width of Unicode text string for font specified by integer constant.
+ at end deftypemethod
+
+
+ at deftypemethod mglFont @code{float} Height (@code{const char *}how)
+Gets height of text for font specified by string.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{const char *}how)
+Prints 8-bit text string for font specified by string.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{const char *}how)
+Gets width of 8-bit text string for font specified by string.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{const char *}how)
+Prints Unicode text string for font specified by string.
+ at end deftypemethod
+ at deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{const char *}how)
+Gets width of Unicode text string for font specified by string.
+ at end deftypemethod
+
+ at deftypecv {Parameter} mglFont @code{mglGraph *} gr
+Instance of mglGraph class which is used for character drawing.
+ at end deftypecv
+ at deftypecv {Parameter} mglFont @code{bool} parse
+Flag for switching on/off the parsing of TeX commands. Default value is @code{true}.
+ at end deftypecv
+
+ at c ------------------------------------------------------------------
+ at node Format of font files, , , mglFont class
+ at subsection Format of font files
+
+Starting from v.1.6 the MathGL library uses new font files. The font is defined in 4 files with suffixes @samp{*.vfm}, @samp{*_b.vfm}, @samp{*_i.vfm}, @samp{*_bi.vfm}. These files are text files containing the data for roman font, bold font, italic font and bold italic font. The files (or some symbols in the files) for bold, italic or bold italic fonts can be absent. In this case the roman glyph will be used for them. By analogy, if the bold italic font is absent but the bold font is present then bold glyph will be used for bold italic. You may create these font files by yourself from *.ttf, *.otf files with the help of program @code{font_tools}. This program can be found at MathGL home site.
+
+The format of font files (*.vfm -- vector font for MathGL) is the following.
+ at enumerate
+ at item
+First string contains human readable comment and is always ignored.
+ at item
+Second string contains 3 numbers, delimited by space or tabulation. The order of numbers is the following: @var{numg} -- the number of glyphs in the file (integer), @var{fact} -- the factor for glyph sizing (float), @var{size} -- the size of buffer for glyph description (integer).
+ at item
+After it @var{numg}-th strings with glyphs description are placed. Each string contains 6 positive numbers, delimited by space of tabulation. The order of numbers is the following: Unicode glyph ID, glyph width, number of lines in glyph, position of lines coordinates in the buffer (length is 2*number of lines), number of triangles in glyph, position of triangles coordinates in the buffer (length is 6*number of triangles).
+ at item
+The end of file contains the buffer with point coordinates at lines or triangles vertexes. The size of buffer (the number of integer) is @var{size}.
+ at end enumerate
+
+Each font file can be compressed by gzip.
+
+Note: the closing contour line  is done automatically (so the last segment may be absent). For starting new contour use a point with coordinates @code{@{0x3fff, 0x3fff@}}.
+
+
+ at c ------------------------------------------------------------------
+ at node mglColor class, mglPoint class, mglFont class, Other classes
+ at section mglColor class
+ at cindex mglColor
+
+Structure for working with colors. This structure is defined in @code{#include <mgl/mgl.h>}.
+
+There are two ways to set the color in MathGL. First one is using of float values of red, green and blue channels for precise color definition. The second way is the using of character id. There are a set of characters specifying frequently used colors. Normally capital letter gives more dark color than lowercase one. @xref{Line styles}.
+
+ at deftypecv {Parameter} mglVar @code{float} {r, g, b}
+Reg, green and blue component of color.
+ at end deftypecv
+
+ at deftypemethod mglColor @code{} mglColor (@code{float} R, @code{float} G, @code{float} B)
+Constructor sets the color by float values of Red, Green and Blue channels.
+ at end deftypemethod
+ at deftypemethod mglColor @code{} mglColor (@code{char} c=@code{'k'})
+Constructor sets the color from character id. The black color is used by default.
+ at end deftypemethod
+ at deftypemethod mglColor @code{void} Set (@code{float} R, @code{float} G, @code{float} B)
+Sets color from values of Red, Green and Blue channels. This values should be in interval [0,1].
+ at end deftypemethod
+ at deftypemethod mglColor @code{void} Set (@code{mglColor} c, @code{float} bright=@code{1})
+Sets color as ``lighted'' version of color @var{c}.
+ at end deftypemethod
+ at deftypemethod mglColor @code{void} Set (@code{char} p)
+Sets color from symbolic id.
+ at end deftypemethod
+ at deftypemethod mglColor @code{bool} Valid ()
+Checks correctness of the color.
+ at end deftypemethod
+ at deftypemethod mglColor @code{float} Norm ()
+Gets maximal of spectral component.
+ at end deftypemethod
+ at deftypemethod mglColor @code{bool} operator== (@code{const mglColor &}c)
+Compare with another color
+ at end deftypemethod
+
+ at deftypefn {Library Function} {inline mglColor} operator+ (@code{const mglColor &}a, @code{const mglColor &}b)
+Adds colors by its RGB values.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator- (@code{const mglColor &}a, @code{const mglColor &}b)
+Subtracts colors by its RGB values.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator* (@code{const mglColor &}a, @code{float} b)
+Multiplies color by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator* (@code{float} a, @code{const mglColor &}b)
+Multiplies color by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator/ (@code{const mglColor &}a, @code{float} b)
+Divide color by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglColor} operator! (@code{const mglColor &}a)
+Return inverted color.
+ at end deftypefn
+
+ at c ------------------------------------------------------------------
+ at node mglPoint class, mglArg class, mglColor class, Other classes
+ at section mglPoint class
+ at cindex mglPoint
+
+Structure describes point in space. This structure is defined in @code{#include <mgl/mgl.h>}
+
+ at deftypecv {Parameter} mglVar @code{float} {x, y, z}
+Point coordinates. By default all values are zero.
+ at end deftypecv
+
+ at deftypefn {Library Function} {inline mglPoint} operator+ (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Point of summation (summation of vectors).
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Point of difference (difference of vectors).
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator* (@code{float} a, @code{const mglPoint &}b)
+Multiplies (scale) points by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator* (@code{const mglPoint &}a, @code{float} b)
+Multiplies (scale) points by number.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator/ (@code{const mglPoint &}a, @code{float} b)
+Multiplies (scale) points by number 1/b.
+ at end deftypefn
+ at deftypefn {Library Function} {inline float} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Scalar product of vectors.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator^ (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Cross-product of vectors.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator& (@code{const mglPoint &}a, @code{const mglPoint &}b)
+The part of @var{a} which is perpendicular to vector @var{b}.
+ at end deftypefn
+ at deftypefn {Library Function} {inline mglPoint} operator| (@code{const mglPoint &}a, @code{const mglPoint &}b)
+The part of @var{a} which is parallel to vector @var{b}.
+ at end deftypefn
+
+ at deftypefn {Library Function} {inline mglPoint} operator! (@code{const mglPoint &}a)
+Return vector perpendicular to vector @var{a}.
+ at end deftypefn
+ at deftypefn {Library Function} {inline bool} Norm (@code{const mglPoint &}a)
+Return the norm |@var{a}|^2 of vector @var{a}.
+ at end deftypefn
+
+ at deftypefn {Library Function} {inline bool} operator== (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Return true if points are the same.
+ at end deftypefn
+ at deftypefn {Library Function} {inline bool} operator!= (@code{const mglPoint &}a, @code{const mglPoint &}b)
+Return true if points are different.
+ at end deftypefn
+
+ at c ------------------------------------------------------------------
+ at node mglVar class, mglCommand class, mglArg class, Other classes
+ at section mglVar class
+ at cindex mglVar
+
+Structure describes variable of type @code{mglData} and its name in MGL script. This structure is used by @code{mglParse} and is defined in @code{#include <mgl/mgl_parse.h>}.
+
+ at deftypecv {Parameter} mglVar @code{mglData} d
+Data itself
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{wchar_t} s[256]
+Data name
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{void *} o
+Pointer to external object for function @var{func}.
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{mglVar *} next
+Pointer to next instance in list
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{mglVar *} prev
+Pointer to prev instance in list
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{bool} temp
+Flag for temporar variable. Temporal variables will be destroyed after script execution.
+ at end deftypecv
+ at deftypecv {Parameter} mglVar @code{void (*} func @code{)(void *)}
+Callback function for destroying non-temporal variable.
+ at end deftypecv
+
+ at deftypemethod mglVar @code{void} MoveAfter (@code{mglVar *}var)
+Move variable after @var{var} and copy @code{func} from @code{var} (if @code{func} is not 0)
+ at end deftypemethod
+
+
+ at c ------------------------------------------------------------------
+ at node mglCommand class, , mglVar class, Other classes
+ at section mglCommand class
+ at cindex mglCommand
+
+Structure describes MGL command, its name, short description, executable and export functions. The structure is used by @code{mglParse} and is defined in @code{#include <mgl/mgl_parse.h>}.
+
+ at deftypecv {Parameter} mglCommand @code{const wchar_t *} name
+Name of command.
+ at end deftypecv
+ at deftypecv {Parameter} mglCommand @code{const wchar_t *} desc
+Short command description (can be NULL).
+ at end deftypecv
+ at deftypecv {Parameter} mglCommand @code{const wchar_t *} form
+Format of command arguments (can be NULL).
+ at end deftypecv
+ at deftypecv {Parameter} mglCommand @code{int (*} exec @code{)(mglGraph *gr, long n, mglArg *a, int k[10])const wchar_t *}
+Function for executing (plotting) the command using grapher @var{gr} and having @var{n}-th arguments @var{a}. Function must return 0 if all is OK; or 1 if arguments are wrong.
+ at end deftypecv
+ at deftypecv {Parameter} mglCommand @code{void (*} save @code{)(wchar_t out[1024], long n, mglArg *a, int k[10])const wchar_t *}
+Function for exporting in C++ (can be NULL).
+ at end deftypecv
+
+
+ at c ------------------------------------------------------------------
+ at node mglArg class, mglVar class, mglPoint class, Other classes
+ at section mglArg class
+ at cindex mglArg
+
+Structure describes arguments of functions in the stucture @code{mglCommand}. It is defined in @code{#include <mgl/mgl_parse.h>}.
+
+ at deftypecv {Parameter} mglArg @code{int} type
+Type of argument: 0-data, 1-string, 2-number.
+ at end deftypecv
+ at deftypecv {Parameter} mglArg @code{mglData *} d
+Pointer to data (used if type=0).
+ at end deftypecv
+ at deftypecv {Parameter} mglArg @code{wchar_t} w[2048]
+String with parameters (used if type=1 or if type=0 as variable name).
+ at end deftypecv
+ at deftypecv {Parameter} mglArg @code{char} s[2048]
+String with parameters (used if type=1).
+ at end deftypecv
+ at deftypecv {Parameter} mglArg @code{float} v
+Numerical value (used if type==2)
+ at end deftypecv
+
diff --git a/texinfo/overview_en.texi b/texinfo/overview_en.texi
index 96cc233..feb038e 100644
--- a/texinfo/overview_en.texi
+++ b/texinfo/overview_en.texi
@@ -1,5 +1,3 @@
-
- at node Overview, Examples, , Top
 @chapter Overview
 
 @cindex MathGL overview
@@ -62,7 +60,7 @@ All texts are drawn by vector fonts, which allows for high scalability and porta
 
 Special mglData class is used for data encapsulation (@pxref{mglData class}). In addition to a safe creation and deletion of data arrays it includes functions for data processing (smoothing, differentiating, integrating, interpolating and so on) and reading of data files with automatic size determination. Class mglData can handle arrays with up to three dimensions (arrays which depend on up to 3 independent indexes @math{a_@{ijk@}}). Using an array with higher number of dimensions is not meaningful, because I do not know how it can be plotted. Data filling and modification may be done manually or by textual formulas.
 
-The mglFormula class allows a fast evaluation of a textual mathematical expression (@pxref{mglFormula class}). It is based on string precompilation to tree-like code at the creation of class instance. At evaluation stage code performs only fast tree-walk and returns the value of the expression. In addition to changing data values, textual formulas are also used for drawing in @emph{arbitrary} curvilinear coordinates. A set of such curvilinear coordinates is limited only by user's imagination rather than a fixed list like: polar, parabolic, spherical, and so on.
+The mglFormula class allows a fast evaluation of a textual mathematical expression (@pxref{mglFormula class}). It is based on string precompilation to tree-like code at the creation of class instance. At evaluation stage code performs only fast tree-walk and returns the value of the expression. In addition to changing data values, textual formulas are also used for drawing in @emph{arbitrary} curvilinear coordinates. A set of such curvilinear coordinates is limited only by user</samp>&rsquo;s imagination rather than a fixed list like: polar, parabolic, spherical, and so on.
 
 @node Installation and usage, General concepts, MathGL features, Overview
 @section Installation and usage
@@ -72,7 +70,7 @@ MathGL can be installed in 3 different ways.
 @item
 Compile from sources. The standard script for autoconf/automake tool is included in the library beginning from version 1.2.1. To run it, one should execute 3 commands: @code{./configure} after it @code{make} and @code{make install} with root/sudo rights. Sometimes after installation you may need to update the library list -- just execute @code{ldconfig} with root/sudo rights.
 
-Script @code{./configure} have several additional options which are switched off by default. They are: @code{--enable-fltk, --enable-glut, --enable-qt} for ebabling FLTK, GLUT and/or Qt windows; @code{--enable-jpeg, --enable-tiff, --enable-hdf5} for enabling corresponding file formats; @code{--enable-all} for enabling all additional features. For enabling language interfaces use @code{--enable-python, --enable-octave} or @code{--enable-langall} for all languages. The full list of options can be viewed by command @code{./configure --help}.
+Script @code{./configure} have several additional options which are switched off by default. They are: @code{--enable-fltk, --enable-glut, --enable-qt} for ebabling FLTK, GLUT and/or Qt windows; @code{--enable-jpeg, --enable-tiff, --enable-hdf5} for enabling corresponding file formats; @code{--enable-all} for enabling all additional features. For using @code{double} as base internal data type use option @code{--enable-double}. For enabling language interfaces use @code{--enable-python, --enable-octave} or @code{--enable-langall} for all languages. The full list of options can be viewed by command @code{./configure --help}.
 @item
 Use a precompiled binary. There are binaries for MinGW (platform Win32). For a precompiled variant one needs only to unpack the archive to the location of the compiler (or in any other folder and setup paths). By default, precompiled versions include the support of GSL (www.gsl.org) and PNG. So, one needs to have these libraries installed on system.
 @item
@@ -95,7 +93,7 @@ There are six most general (base) concepts:
 @item
 @strong{Every plot settings (style of lines, font, color scheme) are specified by a string.} It provides convenience for user/programmer -- short string with parameters is more comprehensible than a large set of parameters. Also it provides portability -- the strings are the same in any OS so that it is not necessary to think about argument types.
 @item
- at strong{All functions have ``simplified'' and ``advanced'' forms.} It is done for user's convenience. One needs to specify only one data array in the ``simplified'' form in order to see the result. But one may set parametric dependence of coordinates and produce rather complex curves and surfaces in the ``advanced'' form. In both cases the order of function arguments is the same: first data arrays, second the string with plot parameters, and later optional arguments for plot tuning.
+ at strong{All functions have ``simplified'' and ``advanced'' forms.} It is done for user</samp>&rsquo;s convenience. One needs to specify only one data array in the ``simplified'' form in order to see the result. But one may set parametric dependence of coordinates and produce rather complex curves and surfaces in the ``advanced'' form. In both cases the order of function arguments is the same: first data arrays, second the string with plot parameters, and later optional arguments for plot tuning.
 @item
 @strong{All data arrays for plotting are encapsulated in mglData class.} This reduces the number of errors while working with memory and provides a uniform interface for data of different types (float, double and so on) or for formula plotting.
 @item
@@ -110,126 +108,11 @@ In addition to the general concepts I want to comment on some non-trivial or les
 * Coordinate axes::             
 * Line styles::                 
 * Color scheme::                
-* Font style::                  
+* Font styles::                  
+* Textual formulas::            
 @end menu
 
-
- at node Coordinate axes, Line styles, , General concepts
- at subsection Coordinate axes
-
-Two axis representations are used in MathGL. The first one consists of normalizing the data point coordinates in a box @var{Min}x at var{Max} (@pxref{Axis settings}). If @var{Cut} is @code{true} then the outlier points are omitted, otherwise they are projected to the bounding box (@pxref{Cutting}). Also, the point will be omitted if it lies inside the box defined by @var{CutMin} x @var{CutMax} or if the value of formula @code{CutOff}() is nonzero for its coordinates. After that, transformation formulas are applied to the data point (@pxref{Curved coordinates}). Finally, the data point is plotted by one of the functions.
-
-There is a possibility to set members @var{Max}, @var{Min} directly, but one should call @code{RecalcBorder()} function to setup plotting routines. A safer way is to set these values by calling the @code{Axis()} function, which calls @code{RecalcBorder()} automatically. Another way to specify the scaling of the axis is to set it as a minimal or maximal value of the data array. Functions @code{XRange(), YRange(), ZRange()} do it. The second (optional) argument is used to replace the axis range or to join with the existed range.
-
-The axis origin is defined by the variable @var{Org} and is applied to all consequent calls of axes or grid drawing. By default, if this point lies outside the bounding box then it is projected onto the one (variable @var{AutoOrg} controls it). If one of the values of @var{Org} is equal to NAN then the corresponding value will be selected automatically.
-
-There is 4-th axis @emph{c} (color axis or colorbar) in addition to the usual axes @emph{x, y, z}. It sets the range of values for the surface coloring. Its borders are automatically set to values of Min.z, Max.z during the call of @code{Axis()} function. Also, one can directly change the color range by setting variables @var{Cmax}, @var{Cmax}, or calling functions @code{CAxis()} or @code{CRange()}. Use @code{Colorbar()} function for showing the colorbar.
-
-The form (appearence) of tick labels is controlled by @code{SetTicks()} function (@pxref{Ticks}). It has 3 arguments: first one @var{d} sets the tick step (if positive) or tick number (if negative) or switches logarithmic ticks on (if zero); the second one, @var{ns}, sets the number of subticks; the last one is the starting point for ticks (default is axis origin). Function @var{SetTuneTicks} switches on/off tick enhancing by factoring out acommon multiplier (for small coordinate values, like 0.001 to 0.002, or large, like from 1000 to 2000) or common component (for narrow range, like from 0.999 to 1.000). Finally, you may use functions @code{SetXTT(), SetYTT(), SetZTT(), SetCTT()} for setting templates for tick labels (it supports TeX symbols). Also, there is a possibility to print arbitrary text as tick labels the by help of @code{SetTicksVal()} function.
-
- at node Line styles, Color scheme, Coordinate axes, General concepts
- at subsection Line styles
-
- at cindex Line style
- at cindex Mark style
- at cindex Arrows
-
-The line style is defined by the string which may contain specifications for color (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), dashing style (@samp{-|;:ji} or space), width (@samp{0123456789}) and marks (@samp{o+xsd.^v} and @samp{#} modifier). If one of the type of information is omitted then default values used with the previous color are adopted.
-
-The color types are the same as described in mglColor class (@pxref{mglColor class}): @samp{k} -- black, @samp{r} -- red, @samp{R} -- dark red, @samp{g} -- green, @samp{G} -- dark green, @samp{b} -- blue, @samp{B} -- dark blue, @samp{c} -- cyan, @samp{C} -- dark cyan, @samp{m} -- magenta, @samp{M} -- dark magenta, @samp{y} -- yellow, @samp{Y} -- dark yellow (gold), @samp{h} -- gray, @samp{H} -- dark gray, @samp{w} -- white, @samp{W} -- bright gray, @samp{l} -- green-blue, @samp{L} -- dark green-blue, @samp{e} -- green-yellow, @samp{E} -- dark green-yellow, @samp{n} -- sky-blue, @samp{N} -- dark sky-blue, @samp{u} -- blue-violet, @samp{U} -- dark blue-violet, @samp{p} -- purple, @samp{P} -- dark purple, @samp{q} -- orange, @samp{Q} -- dark orange (brown).
-
-Dashing style has the following meaning: space -- no line (usable for plotting only marks), @samp{-} -- solid line (################), @samp{|} -- dashed line (########________), @samp{;} -- small dashed line (####____####____), @samp{:} -- dotted line (#___#___#___#___), @samp{j} -- dash-dotted line (#######____#____), @samp{i} -- small dash-dotted line (###__#__###__#__).
-
-Marker types are: @samp{o} -- circle, @samp{+} -- cross, @samp{x} -- skew cross, @samp{s} - square, @samp{d} - rhomb (or diamond), @samp{.} -- point, @samp{^} -- triangle up, @samp{v} -- triangle down. If string contain symbol @samp{#} then the solid versions of markers are used.
-
- at float
- at image{png/sample5, 7cm}
- at caption{Styles of lines and marks.}
- at end float
-
-One may specify to draw a special symbol (an arrow) at the beginning and at the end of line. This is done if the specification string contains one of the following symbols: @samp{A} -- outer arrow, @samp{V} -- inner arrow, @samp{I} -- transverse hatches, @samp{K} -- arrow with hatches, @samp{T} -- triangle, @samp{S} -- square, @samp{D} -- rhombus, @samp{O} -- circle, @samp{_} -- nothing (the default). The following rule applies: the first symbol specifies the arrow at the end of line, the second specifies the arrow at the beginning of the line. For example, @samp{r-A} defines a red solid line with usual arrow at the end, @samp{b|AI} defines a blue dash line with an arrow at the end and with hatches at the beginning, @samp{_O} defines a line with the current style and with a circle at the beginning. These styles are applicable during the graphics plotting as well (for example, @ref{Plot}).
-
- at float
- at image{png/sampled, 7cm}
- at caption{Arrow styles.}
- at end float
-
- at node Color scheme, Font style, Line styles, General concepts
- at subsection Color scheme
-
- at cindex Color scheme
-
-The color scheme is used for determining the color of surfaces, isolines, isosurfaces and so on. The color scheme is defined by the string, which may contain several characters that are color id (@pxref{mglColor class} or @pxref{Line styles}) or characters @samp{d#:|}. Symbol @samp{d} denotes the interpolation by 3d position instead of the coloring by amplitude. Symbol @samp{#} switches to mesh drawing or to a wire plot. Symbol @samp{|} disables color interpolation in color scheme, which can be useful, for example, for sharp colors during matrix plotting. Symbol @samp{:} finishes the color scheme parsing. Following it, the user may put styles for the text, rotation axis for curves/isocontours, and so on. Color scheme may contain up to 32 color values.
-
-You may also use ``lighted'' colors in the color scheme specification (@emph{not in line style!}). The ``lighted'' color contain 2 symbols: first one is the usual symbol for color specification, the second one is a digit for its brightness. The digit can be in range @samp{1}... at samp{9}. 
-Number @samp{5} corresponds to a normal color, @samp{1} is a very dark version of the color (practically black), and @samp{9} is a very bright version of the color (practically white). For example, the color scheme can be @samp{b2b7wr7r2}.
-
- at float
- at image{png/colors, 7cm}
- at caption{Colors and its ids.}
- at end float
-
-For coloring by @emph{amplitude} (most common) the final color is a linear interpolation of color array. The color array is constructed from the string ids. The argument is the amplitude normalized between @var{Cmin} -- @var{Cmax} (@pxref{Ranges (bounding box)}). For example, string containing 4 characters @samp{bcyr} corresponds to a colorbar from blue (lowest value) through cyan (next value) through yellow (next value) to the red (highest value). String @samp{kw} corresponds to a colorbar from black (lowest value) to white (highest value). String @samp{m} corresponds to a simple magenta color.
-
-There are several useful combinations. String @samp{kw} corresponds to the simplest gray color scheme where higher values are brighter. String @samp{wk} presents the inverse gray color scheme where higher value is darker. Strings @samp{kRryw}, @samp{kGgw}, @samp{kBbcw} present the well-known @emph{hot}, @emph{summer} and @emph{winter} color schemes. Strings @samp{BbwrR} and @samp{bBkRr} allow to view bi-color figure on white or black background, where negative values are blue and positive values are red. String @samp{BbcyrR} gives a color scheme similar to the well-known @emph{jet} color scheme.
-
-Examples of the most popular color schemes:
- at table @samp
- at item kw
- at image{png_static/kw}
- at item wk
- at image{png_static/wk}
- at item hHCcw
- at image{png_static/kHCcw}
-
- at item kRryw
- at image{png_static/kRryw}
- at item kGgew
- at image{png_static/kGgew}
- at item kBbcw
- at image{png_static/kBbcw}
-
- at item BbwrR
- at image{png_static/BbwrR}
- at item BbwgG
- at image{png_static/BbwgG}
- at item GgwmM
- at image{png_static/GgwmM}
-
- at item bcwyr
- at image{png_static/bcwyr}
- at item QqwcC
- at image{png_static/QqwcC}
- at item CcwyY
- at image{png_static/CcwyY}
-
- at item BbcyrR
- at image{png_static/BbcyrR}
- at item BbcwyrR
- at image{png_static/BbcwyrR}
- at item bwr
- at image{png_static/bwr}
-
- at item bcyr
- at image{png_static/bcyr}
- at item bgr
- at image{png_static/bgr}
- at item BbcyrR|
- at image{png_static/sharp}
- at end table
-
-When coloring by @emph{coordinate}, the final color is determined by the position of the point in 3d space and is calculated from formula c=x*c[1] + y*c[2] + z*c[3]. Here, c[1], c[2], c[3] are the first three elements of color array; x, y, z are normalized to @var{Min} -- @var{Max} coordinates of the point. This type of coloring is useful for isosurface plot where color may show the exact position of a piece of surface. For example, @pxref{Surf3}.
-
- at node Font style, , Color scheme, General concepts
- at subsection Font style
-
- at cindex Font style
-
-Text style is specified by the string which may contain several characters of font (@samp{ribwou}) and/or alignment (@samp{LRC}) specifications. The string also may contain the color id characters @samp{wkrgbcymhRGBCYMHW} (@pxref{mglColor class}) after the symbol @samp{:}. For example, @samp{biC:b} sets the bold italic font text aligned at the center and with blue color.
-
-The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wired, @samp{o} -- over-lined, @samp{u} -- underlined. Also a parsing of the LaTeX-like syntax is provided (for detail, @pxref{mglFont class} and @ref{Font settings}).
-
-The font size can be defined explicitly (if @var{size}>0) or relative to a base font size as |@var{size}|*@var{FontSize} (if @var{size}<0). The value @var{size}=0 specifies that the string will not be printed. The base font size is measured in internal ``MathGL'' units. Special functions @code{SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()} allow one to set it in more ``common'' variables for a given dpi value of the picture.
+ at include concept_en.texi
 
 @node FAQ, Interfaces, General concepts, Overview
 @section FAQ
@@ -245,7 +128,7 @@ Most ``new'' types of plots can be created by using the existing drawing functio
 No. The MathGL library is self-contained and does not require the knowledge of external libraries.
 
 @item In which language is the library written? For which languages does it have an interface?
-The core of the MathGL library is written in C++. But there are interfaces for: pure C, Fortran, Pascal, Forth, and its own command language MGL. Also there is a large set of interpreted languages, which are supported (Python, Java,  ALLEGROCL, CHICKEN, Lisp, CFFI, C#, Guile, Lua, Modula 3, Mzscheme, Ocaml, Octave, Perl, PHP, Pike, R, Ruby, Tcl). These interfaces are written using SWIG (both pure C functions and classes) but only the interface for Python and Octave is included in the autoconf/automake script. The reason is that I don't know any other interpreted languages :(. Note that most other languages can use (link to) the pure C functions.
+The core of the MathGL library is written in C++. But there are interfaces for: pure C, Fortran, Pascal, Forth, and its own command language MGL. Also there is a large set of interpreted languages, which are supported (Python, Java,  ALLEGROCL, CHICKEN, Lisp, CFFI, C#, Guile, Lua, Modula 3, Mzscheme, Ocaml, Octave, Perl, PHP, Pike, R, Ruby, Tcl). These interfaces are written using SWIG (both pure C functions and classes) but only the interface for Python and Octave is included in the autoconf/automake script. The reason is that I don</samp>&rsquo;t know any other interpreted languages :(. Note that most other languages can use (link to) the pure C functions.
 
 @item How can I use MathGL with Fortran?
 You can use MathGL as is with @code{gfortran} because it uses by default the AT&T notation for external functions. For other compilers (like Visual Fortran) you have to switch on the AT&T notation manually. The AT&T notation requires that the symbol @samp{_} is added at the end of each function name, function argument(s) is passed by pointers and the string length(s) is passed at the end of the argument list. For example:
@@ -278,6 +161,45 @@ In version 1.10, you can use the header file @code{#include <mgl/mgl_w.h>} which
 
 @c @strong{Finally!} Please @emph{do not} ask me Windows-specific questions. I do not use Windows. I know nothing about Visual Basic, Visual C++, CBuiled or .NET. Please find the appropriate Usenet discussion group and ask your question there.
 
+ at item How I can build MathGL under Windows?
+The simplest way is using the combination CMake+MinGW. Also you need some extra libraries like GSL, PNG, JPEG and so on. All of them can be found at @url{http://gnuwin32.sourceforge.net/packages.html}. After installing all components, just run CMake configurator and make the MathGL itself.
+
+ at item How I can create FLTK/GLUT/Qt window in parallel with calculation?
+You should create a separate thread for processing window messages. The cross-platform way is using the @code{pthread} library. You can update the data by calling @code{mglGraphFLTK::Update()} function. The code can look like this:
+ at verbatim
+//-----------------------------------------------------------------------------
+#include <mgl/mgl_fltk.h>
+#include <pthread.h>
+#include <unistd.h>
+
+mglPoint pnt;  // some global variable for changable data
+//-----------------------------------------------------------------------------
+int sample(mglGraph *gr, void *)
+{
+  gr->Box();  gr->Line(mglPoint(),pnt,"Ar2"); // just draw a vector
+  return 0;
+}
+//-----------------------------------------------------------------------------
+void *mgl_fltk_tmp(void *)      {       mglFlRun();     return 0;       }
+int main (int argc, char ** argv)
+{
+  mglGraphFLTK gr;
+  gr.Window(argc,argv,sample,"test");  // create window
+  static pthread_t tmp;
+  pthread_create(&tmp, 0, mgl_fltk_tmp, 0);
+  pthread_detach(tmp);    // run window handling in the separate thread
+  for(int i=0;i<10;i++)   // do calculation
+  {
+    sleep(1);             // which can be very long
+    pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);
+    gr.Update();          // update window
+  }
+  return 0;   // finish calculations and close the window
+}
+//-----------------------------------------------------------------------------
+ at end verbatim
+
+
 @item How many people write this library?
 Most of the library was written by one person. This is a result of nearly a year of work (mostly in the evening and on holidays): I spent half a year to write the kernel and half a year to a year on extending, improving the library and writing documentation. This process continues now :). The autoconf/automake script was written mostly by D.Kulagin, and the export to IDTF was written mostly by M.Vidassov.
 
@@ -285,7 +207,7 @@ Most of the library was written by one person. This is a result of nearly a year
 You can import data into a @code{mglData} instance and display it by @code{Dens()} function. For example, for black-and-white bitmap you can use the code: @code{mglData bmp; bmp.Import("fname.png","wk"); gr->Dens(bmp,"wk");}.
 
 @item How can I use MathGL in Qt, FLTK, wxWidgets etc.?
-There are special classes (widgets) for these libraries: QMathGL for Qt, Fl_MathGL for FLTK and so on. If you don't find the appropriate class then you can create your own widget that displays a bitmap using mglGraphAB::GetBits().
+There are special classes (widgets) for these libraries: QMathGL for Qt, Fl_MathGL for FLTK and so on. If you don</samp>&rsquo;t find the appropriate class then you can create your own widget that displays a bitmap using mglGraphAB::GetBits().
 
 @item How can I create U3D file (make 3D in PDF)?
 There are 2 steps: first you should create IDTF file, and later convert it to U3D. You can use @uref{http://sourceforge.net/project/showfiles.php?group_id=152187&package_id=300628, U3D tools} for converting IDTF file to U3D. It needs @uref{http://libharu.org, libharu} 2.1.0 or later. For installation use @code{./bootstrap, ./configure, make, sudo make install}. It provides  IDTFConverter program for converting text files *.idtf to binary files *.u3d. The latter can be included into PDF.
@@ -328,7 +250,7 @@ All C functions are described in the header file @code{#include <mgl/mgl_c.h>} a
 @end itemize
 These variables contain identifiers for graphics drawing objects and for the data objects. 
 
-Fortran functions/subroutines have the same names as C functions. However, there is a difference. Variable of type @code{HMGL, HMDT} must be an integer with sufficient size (@code{integer*4} in the 32-bit operating system or @code{integer*8} in the 64-bit operating system). All C functions are subroutines in Fortran, which are called by operator @code{call}. The exceptions are functions, which return variables of types @code{HMGL} or @code{HMDT}. These functions should be declared as integer in Fortran code. Also, one should keep in mind that strings in Fortran are denoted by @code{'} symbol, not the @code{"} symbol.
+Fortran functions/subroutines have the same names as C functions. However, there is a difference. Variable of type @code{HMGL, HMDT} must be an integer with sufficient size (@code{integer*4} in the 32-bit operating system or @code{integer*8} in the 64-bit operating system). All C functions are subroutines in Fortran, which are called by operator @code{call}. The exceptions are functions, which return variables of types @code{HMGL} or @code{HMDT}. These functions should be declared as integer in Fortran code. Also, one should keep in mind that strings in Fortran are denoted by @code{</samp>&rsquo;} symbol, not the @code{"} symbol.
 
 @strong{Create and delete objects}
 
@@ -407,21 +329,21 @@ Delete the instance of a class. Must be used after the use of every created data
 @node Python interface, , C interface, Interfaces
 @subsection Python interface
 
-MathGL provides the interface to a set of languages via SWIG library. Some of these languages support classes. The typical example is Python -- which is named in this chapter's title.
+MathGL provides the interface to a set of languages via SWIG library. Some of these languages support classes. The typical example is Python -- which is named in this chapter</samp>&rsquo;s title.
 
 To use Python classes just execute @samp{import mathgl}. The simplest example will be:
 @verbatim
 import mathgl
 a=mathgl.mglGraph()
 a.Box()
-a.WritePNG('test.png')
+a.WritePNG(</samp>&rsquo;test.png</samp>&rsquo;)
 @end verbatim
 Alternatively you can import all classes from @code{mathgl} module and easily access MathGL classes like this:
 @verbatim
 from mathgl import *
 a=mglGraph()
 a.Box()
-a.WritePNG('test.png')
+a.WritePNG(</samp>&rsquo;test.png</samp>&rsquo;)
 @end verbatim
 This becomes useful if you create many @code{mglData} objects, for example.
 
@@ -438,14 +360,14 @@ To use Python classes just execute @samp{import mathgl}. The simplest example wi
 import mathgl
 a=mathgl.mglGraph()
 a.Box()
-a.WritePNG('test.png')
+a.WritePNG(</samp>&rsquo;test.png</samp>&rsquo;)
 @end verbatim
 Alternatively, you can import all the classes from @code{mathgl} module and easily access MathGL classes: 
 @verbatim
 from mathgl import *
 a=mglGraph()
 a.Box()
-a.WritePNG('test.png')
+a.WritePNG(</samp>&rsquo;test.png</samp>&rsquo;)
 @end verbatim
 This is useful if you create many @code{mglData} objects, for example.
 
@@ -481,11 +403,11 @@ Create the instance of class mglGraph with specified sizes @var{width} and @var{
 @item
 My special thanks to Marina Balakina for the patience during the writing of this library and for the help in documentation writing and spelling.
 @item
-I'm thankful to D. Kulagin and S.M. Plis for making Debian packages.
+I</samp>&rsquo;m thankful to D. Kulagin and S.M. Plis for making Debian packages.
 @item
-I'm thankful to M. Vidassov for the help in handling solid UTF-8 fonts.
+I</samp>&rsquo;m thankful to M. Vidassov for the help in handling solid UTF-8 fonts.
 @item
-I'm thankful to N. Troickiy and V. Lipatov for making RPM packages.
+I</samp>&rsquo;m thankful to N. Troickiy and V. Lipatov for making RPM packages.
 @item
-I'm thankful to S. Skobelev, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, M. Vidiassov and V. Lipatov for fruitful comments.
+I</samp>&rsquo;m thankful to S. Skobelev, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, M. Vidiassov and V. Lipatov for fruitful comments.
 @end itemize
diff --git a/texinfo/overview_ru.texi b/texinfo/overview_ru.texi
index 52bd561..7e6277b 100644
--- a/texinfo/overview_ru.texi
+++ b/texinfo/overview_ru.texi
@@ -1,5 +1,4 @@
 
- at node Overview, Examples, , Top
 @chapter Обзор MathGL
 
 @cindex Обзор MathGL
@@ -72,7 +71,7 @@ MathGL это ...
 @item
 Скомпилировать библиотеку непосредственно из исходных файлов. С библиотекой поставляется стандартный скрипт для autoconf/automake. Для его запуска достаточно в командной строке выполнить 3 команды: сначала @code{./configure} далее @code{make} и, наконец, с правами суперпользователя @code{make install}. Иногда после компиляции библиотеки может потребоваться обновление списка библиотека в системе -- выполните команду @code{ldconfig} с правами суперпользователя.
 
-Скрипт @code{./configure} имеет несколько дополнительных опций, которые по умолчанию отключены. К их числу относятся: @code{--enable-fltk, --enable-glut, --enable-qt} для поддержки FLTK, GLUT и/или Qt окон; @code{--enable-jpeg, --enable-tiff, --enable-hdf5} для поддержки соответствующих форматов; @code{--enable-all} для включения всех возможностей. Для создания интерфейсов к другим языкам (кроме С/Фортран/MGL) используйте опции @code{--enable-python, --enable-octave} или @code{--enable-langall} для всех поддерживаемых языков. Полный список опций можно увидеть, выполнив @code{./configure --help}.
+Скрипт @code{./configure} имеет несколько дополнительных опций, которые по умолчанию отключены. К их числу относятся: @code{--enable-fltk, --enable-glut, --enable-qt} для поддержки FLTK, GLUT и/или Qt окон; @code{--enable-jpeg, --enable-tiff, --enable-hdf5} для поддержки соответствующих форматов; @code{--enable-all} для включения всех возможностей. Для использования типа @code{double} для внутреннего хранения данных используйте опцию @code{--enable-double}. Для создания интерфейсов к другим языкам (кроме С/Фортран/MGL) используйте опции @code{--enable-python, --enable-octave} или @code{--enable-langall} для всех поддерживаемых языков. Полный список опций можно увидеть, выполнив @code{./configure --help}.
 @item
 Использовать предварительно скомпилированные файлы -- с библиотекой поставляются файлы для MinGW (платформа Win32). В скомпилированной версии достаточно распаковать заголовочные файлы в папку с заголовочными файлами и библиотеку libmgl.a в папку с библиотеками. По умолчанию, скомпилированная версия включают поддержку GSL (www.gsl.org) и PNG. Соответственно, при сборке программы эти библиотеки должны быть установлены (их можно найти на @uref{http://gnuwin32.sf.net}).
 @item
@@ -108,125 +107,12 @@ MathGL это ...
 * Coordinate axes::             
 * Line styles::                 
 * Color scheme::                
-* Font style::                  
+* Font styles::                  
+* Textual formulas::            
 @end menu
 
+ at include concept_ru.texi
 
- at node Coordinate axes, Line styles, , General concepts
- at subsection Оси координат
-
-Представление системы координат в MathGL состоит из двух частей. Вначале координаты нормируются в интервал @var{Min}x at var{Max} (@pxref{Axis settings}). Если флаг @var{Cut} установлен, то точки вне интервала отбрасываются, в противном случае, они проецируются на ограничивающий параллелепипед (@pxref{Cutting}). Кроме того, отбрасываются точки внутри границ, определенных переменными @var{CutMin}x at var{CutMax} и точки, для которых значение функции @code{CutOff}() не равно нулю. После этого формулы перехода в криволинейную систему координат @code{SetFunc()}применяются к каждой точке. Наконец, точка данных отображается с помощью одной из графических функций.
-
-Величины @var{Max}, @var{Min} можно изменять вручную. Однако, после этого необходимо вызвать функцию @code{RecalcBorder()} для настройки графика. Более удобный и безопасный путь состоит в вызове функций @code{Axis(), SetRanges()} и др. В последнем случае функция @code{RecalcBorder()} вызывается автоматически. Размеры осей можно задавать и автоматически по минимальному и максимальному значениям массива данных. Для этого предназначены функции @code{XRange(), YRange(), ZRange()}. Второй не обязательный аргумент указывает, заменять ли новые значения диапазона изменения оси координат (по умолчанию) или только расширить уже существующий диапазон.
-
-Точка пересечения осей координат задается переменной @var{Org} и действует на последующие вызовы функций рисования осей координат и сетки. По умолчанию, если точка пересечения осей координат попадает вне диапазона осей координат, то она проецируется на границу области. Изменить такое поведение можно, задав @var{AutoOrg}=@code{false}. В случае, если одно из значений @var{Org} равно NAN, то соответствующее значение будет выбрано автоматически.
-
-Кроме привычных осей @emph{x, y, z} есть еще одна ось -- цветовая шкала -- ось @emph{c}. Она используется при окрашивании поверхностей и задает границы изменения функции при окрашивании. При вызове @code{Axis()} ее границы автоматически устанавливаются равными Min.z и Max.z. Возможно и ручное изменение границ цветового интервала посредством вызова функции @code{CAxis()} или изменение границ по заданному массиву @code{CRange()}. Используйте @code{Colorbar()} для отображения цветовой шкалы.
-
-Вид меток по осям определяется функцией @code{SetTicks()} (@pxref{Ticks}). Она имеет 3 аргумента: первый @var{d} задает шаг меток (если положительны) или их число (если отрицательны) или логарифмические метки (если равны нулю); второ @var{ns} задает число "подметок"; последний определяет начальную точку для меток (по умолчанию это точка пересечения осей). Функция @var{SetTuneTicks} включает/выключает выделение общего множителя (большого или малого факторов в диапазоне) для меток осей координат. Наконец, если стандартный вид меток не устраивает пользователя, то их шаблон можно задать явно (можно использовать и ТеХ символы), воспользовавшись функциями  @code{SetXTT(), SetYTT(). SetZTT(). SetCTT()}. Кроме того, в качестве меток можно вывести произвольный текст использовав функцию @code{SetTicksVal()}.
-
- at node Line styles, Color scheme, Coordinate axes, General concepts
- at subsection Стиль линий
-
- at cindex Стиль линий
- at cindex Стиль маркеров
- at cindex Стиль стрелок
-
-Стиль линии задается строкой, которая может содержать символ цвета (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), тип пунктира (@samp{-|;:ji} или пробел), ширину линии (@samp{0123456789}) и тип маркера (@samp{o+xsd.^v} и модификатор @samp{#}). Если пропущен цвет или тип пунктира, то используется значение по умолчанию с последним указанным цветом.
-
-Символы цвета те же, что и в классе mglColor (@pxref{mglColor class}): @samp{k} -- черный, @samp{r} -- красный, @samp{R} -- темно красный, @samp{g} -- зеленый, @samp{G} -- темно зеленый, @samp{b} -- синий, @samp{B} -- темно синий, @samp{c} -- голубой, @samp{C} -- темно голубой, @samp{m} -- пурпурный, @samp{M} -- темно пурпурный, @samp{y} -- желтый, @samp{Y} -- темно желтый (золотой), @samp{h} -- серый, @samp{H} -- темно серый, @samp{w} -- белый, @samp{W} -- светло серый, @samp{l} -- сине-зеленый, @samp{L} -- темно сине-зеленый, @samp{e} -- желто-зеленый, @samp{E} -- темно желто-зеленый, @samp{n} -- небесно-синий, @samp{N} -- темно небесно-синий, @samp{u} -- сине-фиолетовый, @samp{U} -- темно сине-фиолетовый, @samp{p} -- фиолетовый, @samp{P} -- темно фиолетовый, @samp{q} -- оранжевый, @samp{Q} -- темно оранжевый (коричневый).
-
-Тип пунктира: пробел -- нет линии (для рисования только маркеров), @samp{-} -- сплошная линия (################), @samp{|} -- пунктир (########________), @samp{;} -- мелкий пунктир (####____####____), @samp{:} -- точки (#___#___#___#___), @samp{j} -- пунктир с точками  (#######____#____), @samp{i} -- мелкий пунктир с точками (###__#__###__#__).
-
-Типы маркеров: @samp{o} -- окружность, @samp{+} -- крест, @samp{x} -- косой крест, @samp{s} - квадрат, @samp{d} - ромб, @samp{.} -- точка, @samp{^} -- треугольник вверх, @samp{v} -- треугольник вниз. Если в строке присутствует символ @samp{#}, то используются символы с заполнением.
-
- at float
- at image{png/sample5, 7cm}
- at caption{Стили линий и маркеров.}
- at end float
-
-На конце и в начале линии можно выводить специальный символ (стрелку), если в строке указать один из символов: @samp{A} -- стрелка наружу, @samp{V} -- стрелка внутрь, @samp{I} -- поперечная черта, @samp{K} -- стрелка с чертой, @samp{T} -- треугольник, @samp{S} -- квадрат, @samp{D} -- ромб, @samp{O} -- круг, @samp{_} -- нет стрелки (по умолчанию). При этом действует следующее правило: первый символ определяет стрелку на конце линии, второй символ -- стрелку в начале линии. Например, @samp{r-A} -- красная сплошная линия со стрелкой на конце, @samp{b|AI} -- синий пунктир со стрелкой на конце и чертой вначале, @samp{_O} -- линия с текущим стилем и кружком вначале. Эти стили действуют и при построении графиков (например, @ref{Plot}).
-
- at float
- at image{png/sampled, 7cm}
- at caption{Стили стрелок.}
- at end float
-
- at node Color scheme, Font style, Line styles, General concepts
- at subsection Цветовая схема
-
- at cindex Цветовая схема
-
-Цветовая схема используется для определения цвета поверхностей, линий уровня и пр. Цветовая схема задается строкой @emph{s}, которая содержит символы цвета (@pxref{Line styles}) или символы @samp{d#:|}. Символ @samp{d} указывает на определение цвета в зависимости от положения точки в пространстве, а не по амплитуде данных. Символ @samp{#} переключает рисование поверхности на сетчатое (для трехмерных поверхностей) или включает рисование сетки на поверхности. Символ @samp{|} отключает интерполяцию цвета в цветовой схеме. Это может быть полезно для ``резких'' цветов, например, при рисовании матриц. Если в строке встречается символ @samp{:}, то он принудительно заканчивает разбор строки для стиля поверхности. После этого символа могут идти описание стиля текста или оси вращения кривой/линий уровня. Цветовая схема может содержать до 32 значений цвета.
-
-В цветовой схеме можно использовать тональные (``подсвеченные'') цвета (@emph{не в стиле линий!}). Тональный цвет задается двумя символами: первый -- обычный цвет, второй -- его яркость цифрой. Цифра может быть в диапазоне @samp{1}... at samp{9}. При этом @samp{5} соответствует нормальному цвету, @samp{1} -- очень темная версия цвета (почти черный), @samp{9} -- очень светлая версия цвета (почти белый). Например цветовая схема может быть @samp{b2b7wr7r2}.
-
- at float
- at image{png/colors, 7cm}
- at caption{Цвета и их идентификаторы.}
- at end float
-
-При определении цвета по @emph{амплитуде} (наиболее часто используется) окончательный цвет определяется путем линейной интерполяции массива цветов. Массив цветов формируется из цветов, указанных в строке спецификации. Аргумент -- амплитуда, нормированная между @var{Cmin} -- @var{Cmax} (@pxref{Ranges (bounding box)}). Например, строка из 4 символов @samp{bcyr} соответствует изменению цвета от синего (минимальное значение) через голубой и желтый (промежуточные значения) к красному (максимальное значение). Строка @samp{kw} соответствует изменению цвета от черного (минимальное значение) к белому (максимальное значение). Строка из одного символоа (например, @samp{g}) соответствует однотонному цвету (в данному случае зеленому).
-
-Есть несколько полезных цветовых схем. Строка @samp{kw} дает обычную серую (черно-белую) схему, когда большие значения светлее. Строка @samp{wk} представляет обратную серую схему, когда большие значения темнее. Строки @samp{kRryw}, @samp{kGgw}, @samp{kBbcw} представляют собой хорошо известные схемы @emph{hot}, @emph{summer} и @emph{winter}. Строки @samp{BbwrR} и @samp{bBkRr} позволяют рисовать двухцветные фигуры на белом или черном фоне, когда отрицательные значения показаны синим цветом, а положительные -- красным. Строка @samp{BbcyrR} дает цветовую схему, близкую к хорошо известной схеме @emph{jet}.
-
-Примеры наиболее популярных цветовых схем:
- at table @samp
- at item kw
- at image{png_static/kw}
- at item wk
- at image{png_static/wk}
- at item hHCcw
- at image{png_static/kHCcw}
-
- at item kRryw
- at image{png_static/kRryw}
- at item kGgew
- at image{png_static/kGgew}
- at item kBbcw
- at image{png_static/kBbcw}
-
- at item BbwrR
- at image{png_static/BbwrR}
- at item BbwgG
- at image{png_static/BbwgG}
- at item GgwmM
- at image{png_static/GgwmM}
-
- at item bcwyr
- at image{png_static/bcwyr}
- at item QqwcC
- at image{png_static/QqwcC}
- at item CcwyY
- at image{png_static/CcwyY}
-
- at item BbcyrR
- at image{png_static/BbcyrR}
- at item BbcwyrR
- at image{png_static/BbcwyrR}
- at item bwr
- at image{png_static/bwr}
-
- at item bcyr
- at image{png_static/bcyr}
- at item bgr
- at image{png_static/bgr}
- at item BbcyrR|
- at image{png_static/sharp}
- at end table
-
-При определении цвета по @emph{положению точки в пространстве} окончательный цвет определяется по формуле c=x*c[1] + y*c[2] + z*c[3]. Здесь c[1], c[2], c[3] -- первые три цвета в цветовом массиве; x, y, z -- координаты точки, нормированные на @var{Min}x at var{Max}. Такой тип определения цвета полезен, например, при построении поверхностей уровня, когда цвет дает представление о положении точки в пространстве. Например, @pxref{Surf3}.
-
- at node Font style, , Color scheme, General concepts
- at subsection Стиль текста
-
- at cindex Стиль текста
-
-Стиль текста задается строкой, которая может содержать несколько символов: тип шрифта (@samp{ribwou}) и/или выравнивания (@samp{LRC}), а также цвет текста @samp{wkrgbcymhRGBCYMHW} (@pxref{mglColor class}) после символа @samp{:}. Например, @samp{biC:b} соответствует жирному курсиву с выравниванием по центру синего цвета.
-
-Начертания шрифта: @samp{r} -- прямой шрифт, @samp{i} -- курсив, @samp{b} -- жирный. По умолчанию используется прямой шрифт. Типы выравнивания текста: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Дополнительные эффекты шрифта: @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. Синтаксический разбор LaTeX-их команд по умолчанию включен (подробнее см. @pxref{mglFont class} и @ref{Font settings}).
-
-Размер текста может быть задан явно (если @var{size}>0) или относительно базового размера шрифта для рисунка |@var{size}|*@var{FontSize} при @var{size}<0. Значение @var{size}=0 указывает, что соответствующая строка выводиться не будет. Базовый размер шрифта измеряется во внутренних единицах. Специальные функции @code{SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()} позволяют задавать его в более ``привычных'' единицах.
 
 @node FAQ, Interfaces, General concepts, Overview
 @section FAQ
@@ -275,6 +161,46 @@ gr->Window(argc,argv,foo_draw,"Title",this);
 
 @c @strong{Наконец!} Пожалуйста @emph{не спрашивайте} меня вопросы про Windows. Я не использую Windows. Я ничего не знаю о Visual Basic, Visual C++, CBuiled или .NET. Найдите подходящие форумы в интернете и задайте свой вопрос там.
 
+ at item Как мне собрать MathGL под Windows?
+Простейший путь -- использование комбинации CMake и MinGW. Также Вам может потребоваться дополнительные библиотеки, такие как GSL, PNG, JPEG и пр. Все они могут быть найдены на @url{http://gnuwin32.sourceforge.net/packages.html}. После установки всех компонент, просто запустите конфигуратор CMake и соберите MathGL командой make.
+
+ at item Как создать окно FLTK/GLUT/Qt с текущими результатами параллельно с выполнением основных вычислений?
+Следует создать отдельный поток для обработки сообщений в окно. Кросс-платформенный путь -- использование библиотеки @code{pthread}. Обновление данных в окне можно выполнить вызовом функции @code{mglGraphFLTK::Update()}. Пример код имеет вид:
+ at verbatim
+//-----------------------------------------------------------------------------
+#include <mgl/mgl_fltk.h>
+#include <pthread.h>
+#include <unistd.h>
+
+mglPoint pnt;  // some global variable for changable data
+//-----------------------------------------------------------------------------
+int sample(mglGraph *gr, void *)
+{
+  gr->Box();  gr->Line(mglPoint(),pnt,"Ar2"); // just draw a vector
+  return 0;
+}
+//-----------------------------------------------------------------------------
+void *mgl_fltk_tmp(void *)      {       mglFlRun();     return 0;       }
+int main (int argc, char ** argv)
+{
+  mglGraphFLTK gr;
+  gr.Window(argc,argv,sample,"test");  // create window
+  static pthread_t tmp;
+  pthread_create(&tmp, 0, mgl_fltk_tmp, 0);
+  pthread_detach(tmp);    // run window handling in the separate thread
+  for(int i=0;i<10;i++)   // do calculation
+  {
+    sleep(1);             // which can be very long
+    pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);
+    gr.Update();          // update window
+  }
+  return 0;   // finish calculations and close the window
+}
+//-----------------------------------------------------------------------------
+ at end verbatim
+
+
+
 @item Сколько человек участвовало в создании библиотеки?
 Большую часть библиотеки написал один человек. Это результат примерно года работы на написание ядра библиотеки и базовых функций (в основном вечерами и по выходным). Процесс усовершенствования продолжается и теперь :). Скрипты сборки в основном написаны Д.Кулагиным, а экспорт в IDTF написан М.Видассовым.
 
@@ -325,7 +251,7 @@ C интерфейс является базовым для большинств
 @end itemize
 Эти переменные содержат идентификаторы объектов графики или данных. 
 
-Фортрановские функции имеют те же имена, что и функции C. Однако, есть различие: переменные типов @code{HMGL, HMDT} должны быть объявлены как целые достаточной разрядности (integer*4 на 32-битных системах или integer*8 на 64-битных системах). Все С функции являются процедурами для Фортрана (должны вызываться с помощью оператора call). Исключение составляют функции, возвращающие переменные типа @code{HMGL} или @code{HMDT}. Последние должны быть объявлены целыми  для использования в фортрановском коде. Также помните, что строки в фортране обозначаются одинарной кавычкой @code{'}, а не двойной @code{"} как в С/С++.
+Фортрановские функции имеют те же имена, что и функции C. Однако, есть различие: переменные типов @code{HMGL, HMDT} должны быть объявлены как целые достаточной разрядности (integer*4 на 32-битных системах или integer*8 на 64-битных системах). Все С функции являются процедурами для Фортрана (должны вызываться с помощью оператора call). Исключение составляют функции, возвращающие переменные типа @code{HMGL} или @code{HMDT}. Последние должны быть объявлены целыми  для использования в фортрановском коде. Также помните, что строки в фортране обозначаются одинарной кавычкой @code{</samp>&rsquo;}, а не двойной @code{"} как в С/С++.
 
 @strong{Создание и удаление графического объекта}
 
@@ -411,14 +337,14 @@ To use Python classes just execute @samp{import mathgl}. The simplest example wi
 import mathgl
 a=mathgl.mglGraph()
 a.Box()
-a.WritePNG('test.png')
+a.WritePNG(</samp>&rsquo;test.png</samp>&rsquo;)
 @end verbatim
 Alternatively you can import all classes from @code{mathgl} module and easily access MathGL classes: 
 @verbatim
 from mathgl import *
 a=mglGraph()
 a.Box()
-a.WritePNG('test.png')
+a.WritePNG(</samp>&rsquo;test.png</samp>&rsquo;)
 @end verbatim
 It become useful if you will create many @code{mglData} object, for example.
 
@@ -435,14 +361,14 @@ To use Python classes just execute @samp{import mathgl}. The simplest example wi
 import mathgl
 a=mathgl.mglGraph()
 a.Box()
-a.WritePNG('test.png')
+a.WritePNG(</samp>&rsquo;test.png</samp>&rsquo;)
 @end verbatim
 Alternatively you can import all classes from @code{mathgl} module and easily access MathGL classes: 
 @verbatim
 from mathgl import *
 a=mglGraph()
 a.Box()
-a.WritePNG('test.png')
+a.WritePNG(</samp>&rsquo;test.png</samp>&rsquo;)
 @end verbatim
 It become useful if you will create many @code{mglData} object, for example.
 
@@ -455,7 +381,7 @@ There are 2 classes in Python interface:
 @c @item @code{mglParse} -- practically the same as C++ class @code{mglParse} (@pxref{mglParse class}).
 @end itemize
 
-There is main difference from C++ classes -- Python class @code{mglGraph} don't have variables (options). All corresponding features are moved to methods.
+There is main difference from C++ classes -- Python class @code{mglGraph} don</samp>&rsquo;t have variables (options). All corresponding features are moved to methods.
 The core of MathGL Python class is @strong{mglGraph} class. It contains a lot of plotting functions for 1D, 2D and 3D plots. So most of sections is describe its methods. Its constructor have following arguments:
 
 @defop Constructor {mglGraph (Python)} @code{} mglGraph (@code{int} kind=@code{0}, @code{int} width=@code{600}, @code{int} height=@code{400})
@@ -463,7 +389,7 @@ Create the instance of class mglGraph with specified sizes @var{width} and @var{
 @end defop
 @end itemize
 
-There is main difference from C++ classes -- Python class @code{mglGraph} don't have variables (options). All corresponding features are moved to methods. The core of MathGL Python class is @strong{mglGraph} class. It contains a lot of plotting functions for 1D, 2D and 3D plots. So most of sections is describe its methods. Its constructor have following arguments:
+There is main difference from C++ classes -- Python class @code{mglGraph} don</samp>&rsquo;t have variables (options). All corresponding features are moved to methods. The core of MathGL Python class is @strong{mglGraph} class. It contains a lot of plotting functions for 1D, 2D and 3D plots. So most of sections is describe its methods. Its constructor have following arguments:
 
 @defop Constructor {mglGraph (Python)} @code{} mglGraph (@code{int} kind=@code{0}, @code{int} width=@code{600}, @code{int} height=@code{400})
 Create the instance of class mglGraph with specified sizes @var{width} and @var{height}. Parameter @var{type} may have following values: @samp{0} -- use @code{mglGraphZB} plotter (default), @samp{1} -- use @code{mglGraphPS} plotter, @samp{2} -- use @code{mglGraphGL} plotter, @samp{3} -- use @code{mglGraphIDTF} plotter.
@@ -477,11 +403,11 @@ Create the instance of class mglGraph with specified sizes @var{width} and @var{
 @item
 My special thanks to Marina Balakina for the patience during library writing and for the help in documentation writing and spelling.
 @item
-I'm thankful to D. Kulagin and S.M. Plis for making Debian packages.
+I</samp>&rsquo;m thankful to D. Kulagin and S.M. Plis for making Debian packages.
 @item
-I'm thankful to M. Vidassov for the help in handling solid UTF-8 fonts.
+I</samp>&rsquo;m thankful to M. Vidassov for the help in handling solid UTF-8 fonts.
 @item
-I'm thankful to N. Troickiy and V. Lipatov for making RPM packages.
+I</samp>&rsquo;m thankful to N. Troickiy and V. Lipatov for making RPM packages.
 @item
-I'm thankful to S. Skobelev, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, M. Vidiassov and V. Lipatov for fruitful comments.
+I</samp>&rsquo;m thankful to S. Skobelev, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, M. Vidiassov and V. Lipatov for fruitful comments.
 @end itemize
diff --git a/texinfo/png/Makefile.in b/texinfo/png/Makefile.in
index 27b62da..8fe45dd 100644
--- a/texinfo/png/Makefile.in
+++ b/texinfo/png/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -38,7 +38,11 @@ subdir = texinfo/png
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -112,6 +116,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -132,6 +138,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
diff --git a/texinfo/png_static/BbcwyrR.png b/texinfo/png_static/BbcwyrR.png
deleted file mode 100644
index 92f7cda..0000000
Binary files a/texinfo/png_static/BbcwyrR.png and /dev/null differ
diff --git a/texinfo/png_static/BbcyrR.png b/texinfo/png_static/BbcyrR.png
deleted file mode 100644
index 524f007..0000000
Binary files a/texinfo/png_static/BbcyrR.png and /dev/null differ
diff --git a/texinfo/png_static/BbwgG.png b/texinfo/png_static/BbwgG.png
deleted file mode 100644
index 86ec705..0000000
Binary files a/texinfo/png_static/BbwgG.png and /dev/null differ
diff --git a/texinfo/png_static/BbwrR.png b/texinfo/png_static/BbwrR.png
deleted file mode 100644
index fb213b6..0000000
Binary files a/texinfo/png_static/BbwrR.png and /dev/null differ
diff --git a/texinfo/png_static/CcwyY.png b/texinfo/png_static/CcwyY.png
deleted file mode 100644
index 3539c1e..0000000
Binary files a/texinfo/png_static/CcwyY.png and /dev/null differ
diff --git a/texinfo/png_static/GgwmM.png b/texinfo/png_static/GgwmM.png
deleted file mode 100644
index 47b76ae..0000000
Binary files a/texinfo/png_static/GgwmM.png and /dev/null differ
diff --git a/texinfo/png_static/QqwcC.png b/texinfo/png_static/QqwcC.png
deleted file mode 100644
index e47ccbc..0000000
Binary files a/texinfo/png_static/QqwcC.png and /dev/null differ
diff --git a/texinfo/png_static/bBkRr.png b/texinfo/png_static/bBkRr.png
deleted file mode 100644
index e8c6d8c..0000000
Binary files a/texinfo/png_static/bBkRr.png and /dev/null differ
diff --git a/texinfo/png_static/bcwyr.png b/texinfo/png_static/bcwyr.png
deleted file mode 100644
index e69143d..0000000
Binary files a/texinfo/png_static/bcwyr.png and /dev/null differ
diff --git a/texinfo/png_static/bcyr.png b/texinfo/png_static/bcyr.png
deleted file mode 100644
index 5970690..0000000
Binary files a/texinfo/png_static/bcyr.png and /dev/null differ
diff --git a/texinfo/png_static/bgr.png b/texinfo/png_static/bgr.png
deleted file mode 100644
index 9738dc0..0000000
Binary files a/texinfo/png_static/bgr.png and /dev/null differ
diff --git a/texinfo/png_static/br.png b/texinfo/png_static/br.png
deleted file mode 100644
index 54fb8cd..0000000
Binary files a/texinfo/png_static/br.png and /dev/null differ
diff --git a/texinfo/png_static/bwr.png b/texinfo/png_static/bwr.png
deleted file mode 100644
index 376538c..0000000
Binary files a/texinfo/png_static/bwr.png and /dev/null differ
diff --git a/texinfo/png_static/kBbcw.png b/texinfo/png_static/kBbcw.png
deleted file mode 100644
index ccdb7fb..0000000
Binary files a/texinfo/png_static/kBbcw.png and /dev/null differ
diff --git a/texinfo/png_static/kGgew.png b/texinfo/png_static/kGgew.png
deleted file mode 100644
index f345f84..0000000
Binary files a/texinfo/png_static/kGgew.png and /dev/null differ
diff --git a/texinfo/png_static/kHCcw.png b/texinfo/png_static/kHCcw.png
deleted file mode 100644
index 715cb6b..0000000
Binary files a/texinfo/png_static/kHCcw.png and /dev/null differ
diff --git a/texinfo/png_static/kRryw.png b/texinfo/png_static/kRryw.png
deleted file mode 100644
index b16d633..0000000
Binary files a/texinfo/png_static/kRryw.png and /dev/null differ
diff --git a/texinfo/png_static/kw.png b/texinfo/png_static/kw.png
deleted file mode 100644
index 5ec39ff..0000000
Binary files a/texinfo/png_static/kw.png and /dev/null differ
diff --git a/texinfo/png_static/r.png b/texinfo/png_static/r.png
deleted file mode 100644
index 87efae7..0000000
Binary files a/texinfo/png_static/r.png and /dev/null differ
diff --git a/texinfo/png_static/s_aleph.png b/texinfo/png_static/s_aleph.png
deleted file mode 100644
index dad366a..0000000
Binary files a/texinfo/png_static/s_aleph.png and /dev/null differ
diff --git a/texinfo/png_static/s_in.png b/texinfo/png_static/s_in.png
deleted file mode 100644
index 092470e..0000000
Binary files a/texinfo/png_static/s_in.png and /dev/null differ
diff --git a/texinfo/png_static/s_sqrt.png b/texinfo/png_static/s_sqrt.png
deleted file mode 100644
index 09619c5..0000000
Binary files a/texinfo/png_static/s_sqrt.png and /dev/null differ
diff --git a/texinfo/png_static/sharp.png b/texinfo/png_static/sharp.png
deleted file mode 100644
index b9a809f..0000000
Binary files a/texinfo/png_static/sharp.png and /dev/null differ
diff --git a/texinfo/png_static/u2v2.png b/texinfo/png_static/u2v2.png
deleted file mode 100644
index 1e2d333..0000000
Binary files a/texinfo/png_static/u2v2.png and /dev/null differ
diff --git a/texinfo/png_static/u2v2w2.png b/texinfo/png_static/u2v2w2.png
deleted file mode 100644
index 50d5be1..0000000
Binary files a/texinfo/png_static/u2v2w2.png and /dev/null differ
diff --git a/texinfo/png_static/wk.png b/texinfo/png_static/wk.png
deleted file mode 100644
index 8b92d89..0000000
Binary files a/texinfo/png_static/wk.png and /dev/null differ
diff --git a/texinfo/samples_en.texi b/texinfo/samples_en.texi
index 14d0dae..8586e99 100644
--- a/texinfo/samples_en.texi
+++ b/texinfo/samples_en.texi
@@ -1,13 +1,10 @@
 @c ------------------------------------------------------------------
- at node Samples, TeX-like symbols, MGL interface, Top
 @chapter Samples
-
-This chapter contain a lot of sample codes for all types of plots and for most important examples and hints. The same sample (with pictures) you can find at @uref{http://mathgl.sf.net/pictures.html}. Most of examples have the sample code on 5 languages: C++, MGL, C, Fortran and Python. However, I put only C++ code for some of examples due to a lot of them and clearency how to write code for other languages. All samples are divided on 6 large categories.
-
+This chapter contain a lot of sample codes for all types of plots and for most important examples and hints. The same sample (with pictures) you can find at @uref{http://mathgl.sf.net/pictures.html}. 
+ at ifclear UDAV
+Most of examples have the sample code on 5 languages: C++, MGL, C, Fortran and Python. However, I put only C++ code for some of examples due to a lot of them and clearency how to write code for other languages. All samples are divided on 6 large categories.
 The minimal code to view the samples for different languages are following.
-
 @strong{C++ code}
-
 For compilation use: @code{g++ -o sample sample.cpp -lmgl}.
 @verbatim
 #include <mgl/mgl_zb.h>
@@ -22,7 +19,6 @@ int main()
 }
 @end verbatim
 @strong{MGL code}
-
 For preview use: @code{mglview sample.mgl}.
 @verbatim
 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -31,7 +27,6 @@ For preview use: @code{mglview sample.mgl}.
 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 @end verbatim
 @strong{Pure C code}
-
 For compilation use: @code{gcc -o sample sample.c -lmgl}.
 @verbatim
 #include <mgl/mgl_c.h>
@@ -47,7 +42,6 @@ int main()
 }
 @end verbatim
 @strong{Fortran code}
-
 For compilation use: @code{gfortran -o sample sample.f90 -lmgl}. Note, fortran don't have argument checking. So you have to take special attention to pass real variables to real arguments of functions and integer variables to integer arguments of functions. There is no other special checking for that!!!
 @verbatim
 integer gr, mgl_create_graph_zb
@@ -60,7 +54,6 @@ call mgl_delete_graph(gr)
 end
 @end verbatim
 @strong{Python}
-
 For preview use: @code{python sample.py}.
 @verbatim
 from mathgl import *
@@ -70,31 +63,34 @@ gr = mglGraph();
 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 gr.ShowImage();
 @end verbatim
-
-
+ at end ifclear
 @menu
 * 1D plotting samples::         
 * 2D plotting samples::         
 * 3D plotting samples::         
 * Dual plotting samples::       
+* Basic features::             
 * Additional features::         
 * Advanced features::           
 @end menu
-
 @c ------------------------------------------------------------------
 @node 1D plotting samples, 2D plotting samples, , Samples
 @section 1D plotting samples
-
 @menu
 * Plot sample::                 
-* Radar sample::                 
+* Radar sample::                
 * Tens sample::                 
 * Area sample::                 
+* Area gradient sample::   
 * Bars sample::                 
+* Bars 2 colors sample::                 
+* Bars above sample::                 
+* Bars fall sample::                 
 * Barh sample::                 
 * Step sample::                 
 * Stem sample::                 
 * Region sample::               
+* Region gradient sample::               
 * Error sample::                
 * BoxPlot sample::                
 * Mark sample::                 
@@ -104,18 +100,17 @@ gr.ShowImage();
 * Torus sample::                
 * Chart sample::                
 * Pie chart sample::            
+* Ring chart sample::            
 @end menu
-
 @c ------------------------------------------------------------------
 @node Plot sample, Radar sample, , 1D plotting samples
 @subsection Plot sample
 @cindex Plot
-
 @float
- at image{png/plot, 7cm}
- at caption{Example of Plot. @tdref{plot}}
+ at image{../png/plot, 7cm}
+ at c @caption{Example of Plot. @tdref{plot}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3);
@@ -126,6 +121,7 @@ gr->Box();
 gr->Plot(y);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -134,6 +130,7 @@ modify y 'cos(2*pi*x)' 2
 box
 plot y
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -164,19 +161,16 @@ y.Modify("cos(2*pi*x)",2);
 gr.Box();
 gr.Plot(y);
 @end verbatim
-
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Radar sample, Tens sample, Plot sample, 1D plotting samples
 @subsection Radar sample
 @cindex Radar
-
 @float
- at image{png/radar, 7cm}
- at caption{Example of Plot. @tdref{radar}}
+ at image{../png/radar, 7cm}
+ at c @caption{Example of Plot. @tdref{radar}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(10,3);
@@ -184,11 +178,13 @@ y.Modify("0.4*sin(pi*(2*x+y/2))+0.1*rnd");
 gr->Radar(y,"#");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 10 3
 modify y '0.4*sin(pi*(2*x+y/2))+0.1*rnd'
 radar y '#'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(10,3,1);
@@ -210,18 +206,16 @@ y = mglData(10,3);
 y.Modify("0.4*sin(pi*(2*x+y/2))+0.1*rnd");
 gr.Radar(y,"#");
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Tens sample, Area sample, Radar sample, 1D plotting samples
 @subsection Tens sample
 @cindex Tens
-
 @float
- at image{png/tens, 7cm}
- at caption{Example of Tens. @tdref{tens}}
+ at image{../png/tens, 7cm}
+ at c @caption{Example of Tens. @tdref{tens}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50), c(50);
@@ -231,6 +225,7 @@ gr->Box();
 gr->Tens(y,c);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50
 new c 50
@@ -239,6 +234,7 @@ modify c 'sin(2*pi*x)'
 box
 tens y c
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,1,1);
@@ -271,17 +267,16 @@ c.Modify("sin(2*pi*x)");
 gr.Box();
 gr.Tens(y,c);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Area sample, Bars sample, Tens sample, 1D plotting samples
+ at node Area sample, Area gradient sample, Tens sample, 1D plotting samples
 @subsection Area sample
 @cindex Area
-
 @float
- at image{png/area, 7cm}
- at caption{Example of Area. @tdref{area}}
+ at image{../png/area, 7cm}
+ at c @caption{Example of Area. @tdref{area}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3);
@@ -293,6 +288,7 @@ gr->Box();
 gr->Area(y);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -302,6 +298,7 @@ origin 0 0
 box
 area y
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -335,17 +332,81 @@ gr.SetOrigin(0.,0.);
 gr.Box();
 gr.Area(y);
 @end verbatim
-
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Area gradient sample, Bars sample, Area sample, 1D plotting samples
+ at subsection Area with gradient filling sample
+ at cindex Area
+ at float
+ at image{../png/area_2, 7cm}
+ at c @caption{Example of Area. @tdref{area}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData y(50,3);
+y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
+y.Modify("sin(2*pi*x)",1);
+y.Modify("cos(2*pi*x)",2);
+gr->Org=mglPoint(0,0);
+gr->Box();
+gr->Area(y,"cbgGyr");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+origin 0 0
+box
+area y 'cbgGyr'
+ at end verbatim
+ at ifclear UDAV
+ at strong{Pure C code}
+ at verbatim
+HMDT y = mgl_create_data_size(50,3,1);
+mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
+mgl_data_modify(y,"sin(2*pi*x)",1);
+mgl_data_modify(y,"cos(2*pi*x)",2);
+mgl_set_origin(gr,0.,0.,0.);
+mgl_box(gr,1);
+mgl_area(gr,y,"cbgGyr");
+mgl_delete_data(y);
+ at end verbatim
+ at strong{Fortran code}
+ at verbatim
+integer y, mgl_create_data_size
+y = mgl_create_data_size(50,3,1)
+call mgl_data_modify(y,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)',0)
+call mgl_data_modify(y,'sin(2*pi*x)',1)
+call mgl_data_modify(y,'cos(2*pi*x)',2)
+call mgl_set_origin(gr,0.,0.,0.)
+call mgl_box(gr,1)
+call mgl_area(gr,y,'cbgGyr')
+call mgl_delete_data(y)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y = mglData(50,3);
+y.Modify("0.7*sin(2*pi*x)+0.5*cos(3*pi*x)+0.2*sin(pi*x)",0);
+y.Modify("sin(2*pi*x)",1);
+y.Modify("cos(2*pi*x)",2);
+gr.SetOrigin(0.,0.);
+gr.Box();
+gr.Area(y,"cbgGyr");
+ at end verbatim
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Bars sample, Barh sample, Area sample, 1D plotting samples
+ at node Bars sample, Bars 2 colors sample, Area gradient sample, 1D plotting samples
 @subsection Bars sample
 @cindex Bars
-
 @float
- at image{png/bars, 7cm}
- at caption{Example of Bars. @tdref{bars}}
+ at image{../png/bars, 7cm}
+ at c @caption{Example of Bars. @tdref{bars}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(10,3);
@@ -355,6 +416,7 @@ gr->Box();
 gr->Bars(y);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 10 3
 modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
@@ -362,6 +424,7 @@ origin 0 0
 box
 bars y
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(10,3,1);
@@ -389,17 +452,181 @@ gr.SetOrigin(0.,0.);
 gr.Box();
 gr.Bars(y);
 @end verbatim
-
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Bars 2 colors sample, Bars above sample, Bars sample, 1D plotting samples
+ at subsection Bars 2 colors sample
+ at cindex Bars
+ at float
+ at image{../png/bars_2, 7cm}
+ at c @caption{Example of Bars. @tdref{bars}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData y(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr->Org=mglPoint(0,0);
+gr->Box();
+gr->Bars(y,"cbgGyr");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'cbgGyr'
+ at end verbatim
+ at ifclear UDAV
+ at strong{Pure C code}
+ at verbatim
+HMDT y = mgl_create_data_size(10,3,1);
+mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+mgl_set_origin(gr,0.,0.,0.);
+mgl_box(gr,1);
+mgl_bars(gr,y,"cbgGyr");
+mgl_delete_data(y);
+ at end verbatim
+ at strong{Fortran code}
+ at verbatim
+integer y, mgl_create_data_size
+y = mgl_create_data_size(10,3,1)
+call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd')
+call mgl_set_origin(gr,0.,0.,0.)
+call mgl_box(gr,1)
+call mgl_bars(gr,y,'cbgGyr')
+call mgl_delete_data(y)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y = mglData(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr.SetOrigin(0.,0.);
+gr.Box();
+gr.Bars(y,"cbgGyr");
+ at end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Bars above sample, Bars fall sample, Bars 2 colors sample, 1D plotting samples
+ at subsection Bars above sample
+ at cindex Bars
+ at float
+ at image{../png/bars_a, 7cm}
+ at c @caption{Example of Bars. @tdref{bars}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData y(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr->Org=mglPoint(0,0);
+gr->Box();
+gr->Bars(y,"a");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'a'
+ at end verbatim
+ at ifclear UDAV
+ at strong{Pure C code}
+ at verbatim
+HMDT y = mgl_create_data_size(10,3,1);
+mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+mgl_set_origin(gr,0.,0.,0.);
+mgl_box(gr,1);
+mgl_bars(gr,y,"a");
+mgl_delete_data(y);
+ at end verbatim
+ at strong{Fortran code}
+ at verbatim
+integer y, mgl_create_data_size
+y = mgl_create_data_size(10,3,1)
+call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd')
+call mgl_set_origin(gr,0.,0.,0.)
+call mgl_box(gr,1)
+call mgl_bars(gr,y,'a')
+call mgl_delete_data(y)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y = mglData(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr.SetOrigin(0.,0.);
+gr.Box();
+gr.Bars(y,"a");
+ at end verbatim
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Barh sample, Step sample, Bars sample, 1D plotting samples
+ at node Bars fall sample, Barh sample, Bars above sample, 1D plotting samples
+ at subsection Bars fall sample
+ at cindex Bars
+ at float
+ at image{../png/bars_f, 7cm}
+ at c @caption{Example of Bars. @tdref{bars}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData y(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr->Org=mglPoint(0,0);
+gr->Box();
+gr->Bars(y,"f");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'f'
+ at end verbatim
+ at ifclear UDAV
+ at strong{Pure C code}
+ at verbatim
+HMDT y = mgl_create_data_size(10,3,1);
+mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+mgl_set_origin(gr,0.,0.,0.);
+mgl_box(gr,1);
+mgl_bars(gr,y,"f");
+mgl_delete_data(y);
+ at end verbatim
+ at strong{Fortran code}
+ at verbatim
+integer y, mgl_create_data_size
+y = mgl_create_data_size(10,3,1)
+call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd')
+call mgl_set_origin(gr,0.,0.,0.)
+call mgl_box(gr,1)
+call mgl_bars(gr,y,'f')
+call mgl_delete_data(y)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y = mglData(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr.SetOrigin(0.,0.);
+gr.Box();
+gr.Bars(y,"f");
+ at end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Barh sample, Step sample, Bars fall sample, 1D plotting samples
 @subsection Barh sample
 @cindex Barh
-
 @float
- at image{png/barh, 7cm}
- at caption{Example of Barh. @tdref{barh}}
+ at image{../png/barh, 7cm}
+ at c @caption{Example of Barh. @tdref{barh}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(10,3);
@@ -409,6 +636,7 @@ gr->Box();
 gr->Barh(y);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 10 3
 modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
@@ -416,6 +644,7 @@ origin 0 0
 box
 barh y
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(10,3,1);
@@ -443,17 +672,16 @@ gr.SetOrigin(0.,0.);
 gr.Box();
 gr.Barh(y);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Step sample, Stem sample, Barh sample, 1D plotting samples
 @subsection Step sample
 @cindex Step
-
 @float
- at image{png/step, 7cm}
- at caption{Example of Step. @tdref{step}}
+ at image{../png/step, 7cm}
+ at c @caption{Example of Step. @tdref{step}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3);
@@ -464,6 +692,7 @@ gr->Box();
 gr->Step(y);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -472,6 +701,7 @@ modify y 'cos(2*pi*x)' 2
 box
 step y
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -502,17 +732,16 @@ y.Modify("cos(2*pi*x)",2);
 gr.Box();
 gr.Step(y);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Stem sample, Region sample, Step sample, 1D plotting samples
 @subsection Stem sample
 @cindex Stem
-
 @float
- at image{png/stem, 7cm}
- at caption{Example of Stem. @tdref{stem}}
+ at image{../png/stem, 7cm}
+ at c @caption{Example of Stem. @tdref{stem}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3);
@@ -524,6 +753,7 @@ gr->Box();
 gr->Stem(y,"o");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -533,6 +763,7 @@ origin 0 0
 box
 stem y 'o'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -566,17 +797,16 @@ gr.SetOrigin(0.,0.);
 gr.Box();
 gr.Stem(y,"o");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Region sample, Error sample, Stem sample, 1D plotting samples
+ at node Region sample, Region gradient sample, Stem sample, 1D plotting samples
 @subsection Region sample
 @cindex Region
-
 @float
- at image{png/region, 7cm}
- at caption{Example of Region. @tdref{region}}
+ at image{../png/region, 7cm}
+ at c @caption{Example of Region. @tdref{region}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y1(50), y2(50);
@@ -588,6 +818,7 @@ gr->Plot(y1,"k2");
 gr->Plot(y2,"k2");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y1 50
 new y2 50
@@ -598,6 +829,7 @@ region y1 y2 'r'
 plot y1 'k2'
 plot y2 'k2'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y1 = mgl_create_data_size(50,1,1);
@@ -635,17 +867,86 @@ gr.Region(y1,y2,"r");
 gr.Plot(y1,"k2");
 gr.Plot(y2,"k2");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Error sample, BoxPlot sample, Region sample, 1D plotting samples
+ at node Region gradient sample, Error sample, Region sample, 1D plotting samples
+ at subsection Region gradient sample
+ at cindex Region
+ at float
+ at image{../png/region_2, 7cm}
+ at c @caption{Example of Region. @tdref{region}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData y1(50), y2(50);
+y1.Modify("0.3*sin(2*pi*x)");
+y2.Modify("0.5+0.3*cos(2*pi*x)");
+gr->Box();
+gr->Region(y1,y2,"yr");
+gr->Plot(y1,"k2");
+gr->Plot(y2,"k2");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new y1 50
+new y2 50
+modify y1 '0.3*sin(2*pi*x)'
+modify y2 '0.5+0.3*cos(2*pi*x)'
+box
+region y1 y2 'yr'
+plot y1 'k2'
+plot y2 'k2'
+ at end verbatim
+ at ifclear UDAV
+ at strong{Pure C code}
+ at verbatim
+HMDT y1 = mgl_create_data_size(50,1,1);
+HMDT y2 = mgl_create_data_size(50,1,1);
+mgl_data_modify(y1,"0.3*sin(2*pi*x)",0);
+mgl_data_modify(y2,"0.5+0.3*cos(2*pi*x)",0);
+mgl_box(gr,1);
+mgl_region(gr,y1,y2,"yr",1);
+mgl_plot(gr,y1,"k2");
+mgl_plot(gr,y2,"k2");
+mgl_delete_data(y1);
+mgl_delete_data(y2);
+ at end verbatim
+ at strong{Fortran code}
+ at verbatim
+integer y1, y2, mgl_create_data_size
+y1 = mgl_create_data_size(50,1,1);
+y2 = mgl_create_data_size(50,1,1);
+call mgl_data_modify(y1,'0.3*sin(2*pi*x)',0);
+call mgl_data_modify(y2,'0.5+0.3*cos(2*pi*x)',0);
+call mgl_box(gr,1);
+call mgl_region(gr,y1,y2,'yr',1);
+call mgl_plot(gr,y1,'k2');
+call mgl_plot(gr,y2,'k2');
+call mgl_delete_data(y1);
+call mgl_delete_data(y2);
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y1, y2, x = mglData(50), mglData(50), mglData(50);
+y1.Modify("0.3*sin(2*pi*x)");
+y2.Modify("0.5+0.3*cos(2*pi*x)");
+gr.Box();
+gr.Region(y1,y2,"yr");
+gr.Plot(y1,"k2");
+gr.Plot(y2,"k2");
+ at end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Error sample, BoxPlot sample, Region gradient sample, 1D plotting samples
 @subsection Error sample
 @cindex Error
-
 @float
- at image{png/error, 7cm}
- at caption{Example of Error. @tdref{error}}
+ at image{../png/error, 7cm}
+ at c @caption{Example of Error. @tdref{error}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,1), x0(10), y0(10), ex(10), ey(10);
@@ -658,6 +959,7 @@ gr->Plot(y);
 gr->Error(x0,y0,ex,ey,"ko");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50
 new x0 10
@@ -673,6 +975,7 @@ box
 plot y
 error x0 y0 ex ey 'ko'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,1,1);
@@ -684,7 +987,6 @@ mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
 mgl_data_modify(x0,"2*x-1 + 0.1*rnd-0.05",0);
 mgl_data_modify(y0,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x) + 0.2*rnd-0.1",0);
 mgl_data_modify(ey,"0.2",0); mgl_data_modify(ex,"0.1",0);
-
 mgl_box(gr,1);
 mgl_plot(gr,y,NULL);
 mgl_error_exy(gr,x0,y0,ex,ey,"ko");
@@ -706,7 +1008,6 @@ call mgl_data_modify(y0,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + &
                          0.2*sin(pi*x) + 0.2*rnd-0.1',0);
 call mgl_data_modify(ey,'0.2',0)
 call mgl_data_modify(ex,'0.1',0);
-
 call mgl_box(gr,1)
 call mgl_plot(gr,y,'')
 call mgl_error_exy(gr,x0,y0,ex,ey,'ko')
@@ -726,17 +1027,16 @@ ey.Modify("0.2");   ex.Modify("0.1");
 gr.Box();           gr.Plot(y);
 gr.Error(x0,y0,ex,ey,"ko");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node BoxPlot sample, Mark sample, Error sample, 1D plotting samples
 @subsection BoxPlot sample
 @cindex BoxPlot
-
 @float
- at image{png/boxplot, 7cm}
- at caption{Example of BoxPlot. @tdref{boxplot}}
+ at image{../png/boxplot, 7cm}
+ at c @caption{Example of BoxPlot. @tdref{boxplot}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(10,7);
@@ -746,17 +1046,18 @@ gr->Box();
 gr->Plot(a," ko");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 10 7
 modify a '(2*rnd-1)^3/2'
 boxplot a
 box:plot a ' ko'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(10,7,1);
 mgl_data_modify(a,"(2*rnd-1)^3/2",0);
-
 mgl_box(gr,1);
 mgl_plot(gr,a," ko");
 mgl_boxplot(gr,a,NULL);
@@ -767,7 +1068,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 y = mgl_create_data_size(10,7,1)
 call mgl_data_modify(a,'(2*rnd-1)^3/2',0);
-
 call mgl_box(gr,1)
 call mgl_plot(gr,a,' ko')
 call mgl_boxplot(gr,a,'')
@@ -781,17 +1081,16 @@ gr.Box();
 gr.Plot(a," ko");
 gr.BoxPlot(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Mark sample, TextMark sample, BoxPlot sample, 1D plotting samples
 @subsection Mark sample
 @cindex Mark
-
 @float
- at image{png/mark, 7cm}
- at caption{Example of Mark. @tdref{mark}}
+ at image{../png/mark, 7cm}
+ at c @caption{Example of Mark. @tdref{mark}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3), y1(50);
@@ -803,6 +1102,7 @@ gr->Box();
 gr->Mark(y,y1,"bs");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -813,6 +1113,7 @@ modify y1 '0.5+0.3*cos(2*pi*x)'
 box
 mark y y1 'bs'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -849,17 +1150,16 @@ y1.Modify("0.5+0.3*cos(2*pi*x)");
 gr.Box();
 gr.Mark(y,y1,"bs");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node TextMark sample, Tube sample, Mark sample, 1D plotting samples
 @subsection TextMark sample
 @cindex TextMark
-
 @float
- at image{png/textmark, 7cm}
- at caption{Example of TextMark. @tdref{textmark}}
+ at image{../png/textmark, 7cm}
+ at c @caption{Example of TextMark. @tdref{textmark}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3), y1(50);
@@ -871,6 +1171,7 @@ gr->Box();
 gr->TextMark(y,y1,"\\gamma");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -881,6 +1182,7 @@ modify y1 '0.5+0.3*cos(2*pi*x)'
 box
 textmark y y1 '\gamma'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y, y1;
@@ -918,48 +1220,46 @@ y1.Modify("0.5+0.3*cos(2*pi*x)");
 gr.Box();
 gr.TextMark(y,y1,"\\gamma");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Tube sample, Text sample, TextMark sample, 1D plotting samples
 @subsection Tube sample
 @cindex Tube
-
 @float
- at image{png/tube, 7cm}
- at caption{Example of Tube. @tdref{tube}}
+ at image{../png/tube, 7cm}
+ at c @caption{Example of Tube. @tdref{tube}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3);
 y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
 y.Modify("sin(2*pi*x)",1);
 y.Modify("cos(2*pi*x)",2);
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Tube(y,0.05);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
 modify y 'sin(2*pi*x)' 1
 modify y 'cos(2*pi*x)' 2
-
 rotate 40 60
 light on
 box
 tube y 0.05
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
 mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
 mgl_data_modify(y,"sin(2*pi*x)",1);
 mgl_data_modify(y,"cos(2*pi*x)",2);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -973,7 +1273,6 @@ y = mgl_create_data_size(50,3,1)
 call mgl_data_modify(y,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)',0)
 call mgl_data_modify(y,'sin(2*pi*x)',1)
 call mgl_data_modify(y,'cos(2*pi*x)',2)
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -988,17 +1287,16 @@ y.Modify("sin(2*pi*x)",1);  y.Modify("cos(2*pi*x)",2);
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Tube(y,0.05);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Text sample, Torus sample, Tube sample, 1D plotting samples
 @subsection Text sample
 @cindex Text
-
 @float
- at image{png/text, 7cm}
- at caption{Example of Text. @tdref{text}}
+ at image{../png/text, 7cm}
+ at c @caption{Example of Text. @tdref{text}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3);
@@ -1011,6 +1309,7 @@ gr->Text(y,"This is very long string drawn along a curve",":k");
 gr->Text(y,"Another string drawn above a curve","T:r");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -1021,6 +1320,7 @@ plot y(:,0)
 text y 'This is very long string drawn along a curve' ':k'
 text y 'Another string drawn above a curve' 'T:r'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,1,1);
@@ -1052,47 +1352,45 @@ gr.Plot(y.SubData(-1,0));
 gr.Text(y,"This is very long string drawn along a curve",":k");
 gr.Text(y,"Another string drawn above a curve","T:r");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Torus sample, Chart sample, Text sample, 1D plotting samples
 @subsection Torus sample
 @cindex Torus
-
 @float
- at image{png/torus, 7cm}
- at caption{Example of Torus. @tdref{torus}}
+ at image{../png/torus, 7cm}
+ at c @caption{Example of Torus. @tdref{torus}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y1(50), y2(50);
 y1.Modify("0.5+0.3*cos(2*pi*x)");
 y2.Modify("0.3*sin(2*pi*x)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Torus(y1,y2,"pz");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y1 50
 new y2 50
 modify y1 '0.5+0.3*cos(2*pi*x)'
 modify y2 '0.3*sin(2*pi*x)'
-
 rotate 40 60
 light on
 box
 torus y1 y2 'pz'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y1 = mgl_create_data_size(50,1,1);
 HMDT y2 = mgl_create_data_size(50,1,1);
 mgl_data_modify(y1,"0.5+0.3*cos(2*pi*x)",0);
 mgl_data_modify(y2,"0.3*sin(2*pi*x)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1107,7 +1405,6 @@ y1 = mgl_create_data_size(50,1,1);
 y2 = mgl_create_data_size(50,1,1);
 call mgl_data_modify(y1,"0.5+0.3*cos(2*pi*x)",0);
 call mgl_data_modify(y2,"0.3*sin(2*pi*x)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1124,42 +1421,40 @@ gr.Rotate(40,60);    gr.Light(True);
 gr.Box();
 gr.Torus(y1,y2,"pz");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Chart sample, Pie chart sample, Torus sample, 1D plotting samples
 @subsection Chart sample
 @cindex Chart
-
 @float
- at image{png/chart, 7cm}
- at caption{Example of Chart. @tdref{chart}}
+ at image{../png/chart, 7cm}
+ at c @caption{Example of Chart. @tdref{chart}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData ch(7,2);
 ch.Modify("rnd+0.1");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Chart(ch,"#");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new ch 7 2
 modify ch 'rnd+0.1'
-
 rotate 40 60
 light on
 box
 chart ch
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT ch = mgl_create_data_size(7,2,1);
 mgl_data_modify(ch,"rnd+0.1",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1171,7 +1466,6 @@ mgl_delete_data(ch);
 integer ch, mgl_create_data_size
 ch = mgl_create_data_size(7,2,1)
 call mgl_data_modify(ch,'rnd+0.1',0)
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1185,23 +1479,21 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.Chart(ch,"#");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Pie chart sample, , Chart sample, 1D plotting samples
+ at node Pie chart sample, Ring chart sample, Chart sample, 1D plotting samples
 @subsection Pie chart sample
 @cindex Chart
 @cindex Axis
-
 @float
- at image{png/pie_chart, 7cm}
- at caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}}
+ at image{../png/pie_chart, 7cm}
+ at c @caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData ch(7,2);
 ch.Modify("rnd+0.1");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)");
@@ -1209,21 +1501,21 @@ gr->Box();
 gr->Chart(ch,"bgr cmy#");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new ch 7 2
 modify ch 'rnd+0.1'
-
 rotate 40 60
 light on
 axis '(y+1)/2*cos(pi*x)' '(y+1)/2*sin(pi*x)' ''
 box
 chart ch 'bgr cmy#'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT ch = mgl_create_data_size(7,2,1);
 mgl_data_modify(ch,"rnd+0.1",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_func(gr,"(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)",0);
@@ -1236,7 +1528,6 @@ mgl_delete_data(ch);
 integer ch, mgl_create_data_size
 ch = mgl_create_data_size(7,2,1)
 call mgl_data_modify(ch,'rnd+0.1',0)
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_func(gr,'(y+1)/2*cos(pi*x)','(y+1)/2*sin(pi*x)','');
@@ -1252,11 +1543,74 @@ gr.SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)");
 gr.Box();
 gr.Chart(ch,"bgr cmy#");
 @end verbatim
-
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Ring chart sample, , Pie chart sample, 1D plotting samples
+ at subsection Ring chart sample
+ at cindex Chart
+ at cindex Axis
+ at float
+ at image{../png/ring_chart, 7cm}
+ at c @caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData ch(7,2);
+ch.Modify("rnd+0.1");
+gr->Rotate(40,60);
+gr->Light(true);
+gr->SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)");
+gr->Box();
+gr->Chart(ch,"bgr cmy#");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new ch 7 2
+modify ch 'rnd+0.1'
+rotate 40 60
+light on
+axis '(y+2)/3*cos(pi*x)' '(y+2)/3*sin(pi*x)' ''
+box
+chart ch 'bgr cmy#'
+ at end verbatim
+ at ifclear UDAV
+ at strong{Pure C code}
+ at verbatim
+HMDT ch = mgl_create_data_size(7,2,1);
+mgl_data_modify(ch,"rnd+0.1",0);
+mgl_rotate(gr,40.,60.,0.);
+mgl_set_light(gr,1);
+mgl_set_func(gr,"(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)",0);
+mgl_box(gr,1);
+mgl_chart(gr,ch,"bgr cmy#");
+mgl_delete_data(ch);
+ at end verbatim
+ at strong{Fortran code}
+ at verbatim
+integer ch, mgl_create_data_size
+ch = mgl_create_data_size(7,2,1)
+call mgl_data_modify(ch,'rnd+0.1',0)
+call mgl_rotate(gr,40.,60.,0.)
+call mgl_set_light(gr,1)
+call mgl_set_func(gr,'(y+2)/3*cos(pi*x)','(y+2)/3*sin(pi*x)','');
+call mgl_box(gr,1)
+call mgl_chart(gr,ch,'bgr cmy#')
+call mgl_delete_data(ch)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+ch = mglData(7,2);  ch.Modify("rnd+0.1");
+gr.Rotate(40,60);   gr.Light(True);
+gr.SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)");
+gr.Box();
+gr.Chart(ch,"bgr cmy#");
+ at end verbatim
+ at end ifclear
 @c ------------------------------------------------------------------
 @node 2D plotting samples, 3D plotting samples, 1D plotting samples, Samples
 @section 2D plotting samples
-
 @menu
 * Surf sample::                 
 * Transparent surface sample::  
@@ -1272,43 +1626,41 @@ gr.Chart(ch,"bgr cmy#");
 * ContF sample::                
 * ContD sample::                
 * Axial sample::                
+* Grad sample::                 
 @end menu
-
 @c ------------------------------------------------------------------
 @node Surf sample, Transparent surface sample, , 2D plotting samples
 @subsection Surf sample
 @cindex Surf
-
 @float
- at image{png/surf, 7cm}
- at caption{Example of Surf. @tdref{surf}}
+ at image{../png/surf, 7cm}
+ at c @caption{Example of Surf. @tdref{surf}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Surf(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 surf a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1320,7 +1672,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1334,23 +1685,21 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Surf(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Transparent surface sample, Surface in fog sample, Surf sample, 2D plotting samples
 @subsection Transparent surface sample
 @cindex Surf
 @cindex Alpha
-
 @float
- at image{png/surf_alpha, 7cm}
- at caption{Example of Surf & Alpha. @tdref{surf_alpha}}
+ at image{../png/surf_alpha, 7cm}
+ at c @caption{Example of Surf & Alpha. @tdref{surf_alpha}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -1358,21 +1707,21 @@ gr->Box();
 gr->Surf(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 alpha on
 box
 surf a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -1385,7 +1734,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -1401,23 +1749,21 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Alpha(True);
 gr.Surf(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Surface in fog sample, Sharp colors sample, Transparent surface sample, 2D plotting samples
 @subsection Surface in fog sample
 @cindex Surf
 @cindex Fog
-
 @float
- at image{png/surf_fog, 7cm}
- at caption{Example of Surf & Fog. @tdref{surf_fog}}
+ at image{../png/surf_fog, 7cm}
+ at c @caption{Example of Surf & Fog. @tdref{surf_fog}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Fog(1);
@@ -1425,21 +1771,21 @@ gr->Box();
 gr->Surf(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 fog 1
 box
 surf a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_fog(gr,1.,0.25);
@@ -1452,7 +1798,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_fog(gr,1.,0.25)
@@ -1468,42 +1813,40 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Fog(1);
 gr.Surf(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Sharp colors sample, Mesh sample, Surface in fog sample, 2D plotting samples
 @subsection Sharp colors sample
 @cindex Surf
-
 @float
- at image{png/surf_sl, 7cm}
- at caption{Example of sharp color scheme. @tdref{surf_sl}}
+ at image{../png/surf_sl, 7cm}
+ at c @caption{Example of sharp color scheme. @tdref{surf_sl}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Surf(a,"BbcyrR|");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 surf a 'BbcyrR|'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1515,7 +1858,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1529,40 +1871,38 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Surf(a,"BbcyrR|");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Mesh sample, Fall sample, Sharp colors sample, 2D plotting samples
 @subsection Mesh sample
 @cindex Mesh
-
 @float
- at image{png/mesh, 7cm}
- at caption{Example of Mesh. @tdref{mesh}}
+ at image{../png/mesh, 7cm}
+ at c @caption{Example of Mesh. @tdref{mesh}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->Mesh(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 box
 mesh a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_mesh(gr,a,0);
@@ -1573,7 +1913,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_mesh(gr,a,'')
@@ -1586,40 +1925,38 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Mesh(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Fall sample, Belt sample, Mesh sample, 2D plotting samples
 @subsection Fall sample
 @cindex Fall
-
 @float
- at image{png/fall, 7cm}
- at caption{Example of Fall. @tdref{fall}}
+ at image{../png/fall, 7cm}
+ at c @caption{Example of Fall. @tdref{fall}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->Fall(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 box
 fall a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_fall(gr,a,0);
@@ -1630,7 +1967,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_fall(gr,a,'')
@@ -1643,42 +1979,40 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Fall(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Belt sample, Tile sample, Fall sample, 2D plotting samples
 @subsection Belt sample
 @cindex Belt
-
 @float
- at image{png/belt, 7cm}
- at caption{Example of Belt. @tdref{belt}}
+ at image{../png/belt, 7cm}
+ at c @caption{Example of Belt. @tdref{belt}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Belt(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 belt a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1690,7 +2024,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1704,42 +2037,40 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Belt(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Tile sample, Boxs sample, Belt sample, 2D plotting samples
 @subsection Tile sample
 @cindex Tile
-
 @float
- at image{png/tile, 7cm}
- at caption{Example of Tile. @tdref{tile}}
+ at image{../png/tile, 7cm}
+ at c @caption{Example of Tile. @tdref{tile}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Tile(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 tile a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1751,7 +2082,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1765,17 +2095,16 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Tile(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Boxs sample, Dens sample, Tile sample, 2D plotting samples
 @subsection Boxs sample
 @cindex Boxs
-
 @float
- at image{png/boxs, 7cm}
- at caption{Example of Boxs. @tdref{boxs}}
+ at image{../png/boxs, 7cm}
+ at c @caption{Example of Boxs. @tdref{boxs}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
@@ -1786,6 +2115,7 @@ gr->Box();
 gr->Boxs(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
@@ -1795,11 +2125,11 @@ origin 0 0 0
 box
 boxs a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_origin(gr,0.,0.,0.);
@@ -1812,7 +2142,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_origin(gr,0.,0.,0.);
@@ -1828,18 +2157,17 @@ gr.Rotate(40,60);       gr.Light(True);
 gr.SetOrigin(0.,0.,0.); gr.Box();
 gr.Boxs(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dens sample, Cont sample, Boxs sample, 2D plotting samples
 @subsection Dens sample
 @cindex Dens
 @cindex Colorbar
-
 @float
- at image{png/dens, 7cm}
- at caption{Example of Dens & Colorbar. @tdref{dens}}
+ at image{../png/dens, 7cm}
+ at c @caption{Example of Dens & Colorbar. @tdref{dens}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
@@ -1849,6 +2177,7 @@ gr->Dens(a);
 gr->Colorbar();
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
@@ -1856,6 +2185,7 @@ box
 dens a
 colorbar
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
@@ -1883,17 +2213,16 @@ gr.Box();
 gr.Dens(a);
 gr.Colorbar();
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cont sample, ContF sample, Dens sample, 2D plotting samples
 @subsection Cont sample
 @cindex Cont
-
 @float
- at image{png/cont, 7cm}
- at caption{Example of Cont. @tdref{cont}}
+ at image{../png/cont, 7cm}
+ at c @caption{Example of Cont. @tdref{cont}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
@@ -1903,6 +2232,7 @@ gr->Box();
 gr->Cont(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
@@ -1910,11 +2240,11 @@ rotate 40 60
 box
 cont a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_cont(gr,a,0,7,NAN);
@@ -1928,7 +2258,6 @@ real zero, nan
 zero = 0; nan = zero/zero 
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_cont(gr,a,'',7,nan)
@@ -1942,41 +2271,39 @@ gr.Rotate(40,60);
 gr.Box();
 gr.Cont(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node ContF sample, ContD sample, Cont sample, 2D plotting samples
 @subsection ContF sample
 @cindex ContF
-
 @float
- at image{png/contf, 7cm}
- at caption{Example of ContF. @tdref{contf}}
+ at image{../png/contf, 7cm}
+ at c @caption{Example of ContF. @tdref{contf}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);  gr->Light(true);
 gr->Box();
 gr->ContF(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 contf a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1991,7 +2318,6 @@ real zero, nan
 zero = 0; nan = zero/zero
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -2006,17 +2332,16 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.ContF(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node ContD sample, Axial sample, ContF sample, 2D plotting samples
 @subsection ContD sample
 @cindex ContD
-
 @float
- at image{png/contd, 7cm}
- at caption{Example of ContD. @tdref{contd}}
+ at image{../png/contd, 7cm}
+ at c @caption{Example of ContD. @tdref{contd}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40), v(9);
@@ -2027,6 +2352,7 @@ gr->ContD(v,a);
 gr->Colorbar(v);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
@@ -2035,6 +2361,7 @@ box
 contd v a
 colorbar v
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
@@ -2069,22 +2396,20 @@ gr.Box();
 gr.ContD(v,a);
 gr.Colorbar(v);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Axial sample, , ContD sample, 2D plotting samples
+ at node Axial sample, Grad sample, ContD sample, 2D plotting samples
 @subsection Axial sample
 @cindex Axial
-
 @float
- at image{png/axial, 7cm}
- at caption{Example of Axial. @tdref{axial}}
+ at image{../png/axial, 7cm}
+ at c @caption{Example of Axial. @tdref{axial}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -2092,21 +2417,21 @@ gr->Box();
 gr->Axial(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 alpha on
 box
 axial a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -2119,7 +2444,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -2135,11 +2459,64 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Alpha(True);
 gr.Box();
 gr.Axial(a);
 @end verbatim
-
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Grad sample, , Axial sample, 2D plotting samples
+ at subsection Grad sample
+ at cindex Grad
+ at float
+ at image{../png/grad, 7cm}
+ at c @caption{Example of Grad. @tdref{grad}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+gr->Box();  gr->Alpha(true);    gr->Dens(a);
+gr->Grad(a);
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box:alpha on:dens a
+grad a
+ at end verbatim
+ at ifclear UDAV
+ at strong{Pure C code}
+ at verbatim
+HMDT a = mgl_create_data_size(50,40,1);
+mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
+mgl_box(gr,1);
+mgl_set_alpha(gr,1);
+mgl_dens(gr,a,0,0);
+mgl_grad(gr,a,0,0);
+mgl_delete_data(a);
+ at end verbatim
+ at strong{Fortran code}
+ at verbatim
+integer a, mgl_create_data_size
+a = mgl_create_data_size(50,40,1);
+call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
+call mgl_box(gr,1)
+call mgl_set_alpha(gr,1)
+call mgl_dens(gr,a,'',0)
+call mgl_grad(gr,a,'',0)
+call mgl_delete_data(a)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+a = mglData(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
+gr.Box();   gr.Alpha(1);    gr.Dens(a);
+gr.Colorbar();
+ at end verbatim
+ at end ifclear
 @c ------------------------------------------------------------------
 @node 3D plotting samples, Dual plotting samples, 2D plotting samples, Samples
 @section 3D plotting samples
-
 @menu
 * Surf3 sample::                
 * Cloud sample::               
@@ -2150,25 +2527,22 @@ gr.Axial(a);
 * Cont projection sample::      
 * Dens projection sample::      
 * CutMinMax sample::            
-* ``Isocaps'' sample::          
+* Isocaps sample::          
 * CutOff sample::               
 @end menu
-
 @c ------------------------------------------------------------------
 @node Surf3 sample, Cloud sample, , 3D plotting samples
 @subsection Surf3 sample
 @cindex Surf3
-
 @float
- at image{png/surf3, 7cm}
- at caption{Example of Surf3. @tdref{surf3}}
+ at image{../png/surf3, 7cm}
+ at c @caption{Example of Surf3. @tdref{surf3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -2176,21 +2550,21 @@ gr->Box();
 gr->Surf3(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 alpha on
 box
 surf3 a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -2203,7 +2577,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -2219,42 +2592,40 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Alpha(True);
 gr.Box();
 gr.Surf3(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cloud sample, CloudP sample, Surf3 sample, 3D plotting samples
 @subsection Cloud sample
 @cindex Cloud
-
 @float
- at image{png/cloud, 7cm}
- at caption{Example of Cloud. @tdref{cloud}}
+ at image{../png/cloud, 7cm}
+ at c @caption{Example of Cloud. @tdref{cloud}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Alpha(true);
 gr->Box();
 gr->Cloud(a,"wyrRk");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 alpha on
 box
 cloud a 'wyrRk'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_alpha(gr,1);
 mgl_box(gr,1);
@@ -2266,7 +2637,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_alpha(gr,1)
 call mgl_box(gr,1)
@@ -2281,36 +2651,33 @@ gr.Rotate(40,60);   gr.Alpha(True);
 gr.Box();
 gr.Cloud(a,"wyrRk");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node CloudP sample, Dens3 sample, Cloud sample, 3D plotting samples
 @subsection CloudP sample
 @cindex CloudP
-
 @float
- at image{png/cloudp, 7cm}
- at caption{Example of CloudP. @tdref{cloudp}}
+ at image{../png/cloudp, 7cm}
+ at c @caption{Example of CloudP. @tdref{cloudp}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Alpha(true);
 gr->Box();
 gr->CloudP(a,"wyrRk");
 @end verbatim
 @strong{MGL code}
-
+ at end ifclear
 Not available.
-
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_alpha(gr,1);
 mgl_box(gr,1);
@@ -2322,7 +2689,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_alpha(gr,1)
 call mgl_box(gr,1)
@@ -2330,36 +2696,32 @@ call mgl_cloudp(gr,a,'wyrRk',1.)
 call mgl_delete_data(a)
 @end verbatim
 @strong{Python}
-
 Not available.
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dens3 sample, Cont3 sample, CloudP sample, 3D plotting samples
 @subsection Dens3 sample
 @cindex Dens3
 @cindex Axis
-
 @float
- at image{png/densa, 7cm}
- at caption{Example of Dens3. @tdref{densa}}
+ at image{../png/densa, 7cm}
+ at c @caption{Example of Dens3. @tdref{densa}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);  gr->Alpha(true);    gr->Org = mglPoint(0,0,0);
 gr->Box();
 gr->DensA(a);
 gr->Axis();
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 alpha on
 origin 0 0 0
@@ -2367,11 +2729,11 @@ box
 densa a
 axis
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_alpha(gr,1);
 mgl_set_origin(gr,0.,0.,0.);
@@ -2385,7 +2747,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_alpha(gr,1)
 call mgl_set_origin(gr,0.,0.,0.);
@@ -2403,40 +2764,38 @@ gr.SetOrigin(0,0,0);    gr.Box();
 gr.Axis();
 gr.DensA(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cont3 sample, ContF3 sample, Dens3 sample, 3D plotting samples
 @subsection Cont3 sample
 @cindex Cont3
-
 @float
- at image{png/conta, 7cm}
- at caption{Example of Cont3. @tdref{conta}}
+ at image{../png/conta, 7cm}
+ at c @caption{Example of Cont3. @tdref{conta}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->ContA(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 box
 conta a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_cont_all(gr,a,0,7);
@@ -2447,7 +2806,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_cont_all(gr,a,'',7)
@@ -2461,41 +2819,39 @@ gr.Rotate(40,60);
 gr.Box();
 gr.ContA(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node ContF3 sample, Cont projection sample, Cont3 sample, 3D plotting samples
 @subsection ContF3 sample
 @cindex ContF3
-
 @float
- at image{png/contfa, 7cm}
- at caption{Example of ContF3. @tdref{contfa}}
+ at image{../png/contfa, 7cm}
+ at c @caption{Example of ContF3. @tdref{contfa}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);  gr->Light(true);
 gr->Box();
 gr->ContFA(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 box
 contfa a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -2507,7 +2863,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -2522,24 +2877,22 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.ContFA(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cont projection sample, Dens projection sample, ContF3 sample, 3D plotting samples
 @subsection Cont projection sample
 @cindex ContX
 @cindex ContY
 @cindex ContZ
-
 @float
- at image{png/cont_xyz, 7cm}
- at caption{Example of projection by Cont[XYZ]. @tdref{cont_xyz}}
+ at image{../png/cont_xyz, 7cm}
+ at c @caption{Example of projection by Cont[XYZ]. @tdref{cont_xyz}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->ContX(a.Sum("x"),"",-1);
@@ -2547,10 +2900,10 @@ gr->ContY(a.Sum("y"),"",1);
 gr->ContZ(a.Sum("z"),"",-1);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 box
 sum s a 'x'
@@ -2560,11 +2913,11 @@ conty s '' 1
 sum s a 'z'
 contz s '' -1
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40), s;
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 s=mgl_data_sum(a,"x"); mgl_cont_x(gr,s,0,-1.,7); mgl_delete_data(s);
@@ -2577,7 +2930,6 @@ mgl_delete_data(a);
 integer a,s, mgl_create_data_size, mgl_data_sum
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 s=mgl_data_sum(a,'x')
@@ -2600,24 +2952,22 @@ gr.ContX(a.Sum("x"),"",-1);
 gr.ContY(a.Sum("y"),"",1);
 gr.ContZ(a.Sum("z"),"",-1);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dens projection sample, CutMinMax sample, Cont projection sample, 3D plotting samples
 @subsection Dens projection sample
 @cindex DensX
 @cindex DensY
 @cindex DensZ
-
 @float
- at image{png/dens_xyz, 7cm}
- at caption{Example of projection by Dens[XYZ]. @tdref{dens_xyz}}
+ at image{../png/dens_xyz, 7cm}
+ at c @caption{Example of projection by Dens[XYZ]. @tdref{dens_xyz}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->DensX(a.Sum("x"),"",-1);
@@ -2625,10 +2975,10 @@ gr->DensY(a.Sum("y"),"",1);
 gr->DensZ(a.Sum("z"),"",-1);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 box
 sum s a 'x'
@@ -2638,11 +2988,11 @@ densy s '' 1
 sum s a 'z'
 densz s '' -1
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a, s; a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 s=mgl_data_sum(a,"x"); mgl_dens_x(gr,s,0,-1.); mgl_delete_data(s);
@@ -2655,7 +3005,6 @@ mgl_delete_data(a);
 integer a,s, mgl_create_data_size, mgl_data_sum
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 s=mgl_data_sum(a,'x')
@@ -2678,24 +3027,22 @@ gr.DensX(a.Sum("x"),"",-1);
 gr.DensY(a.Sum("y"),"",1);
 gr.DensZ(a.Sum("z"),"",-1);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node CutMinMax sample, ``Isocaps'' sample, Dens projection sample, 3D plotting samples
+ at node CutMinMax sample, Isocaps sample, Dens projection sample, 3D plotting samples
 @subsection CutMinMax sample
 @cindex Surf3
 @cindex CutMin
 @cindex CutMax
-
 @float
- at image{png/cutminmax, 7cm}
- at caption{Example of Surf3 & CutMin, CutMax. @tdref{cutminmax}}
+ at image{../png/cutminmax, 7cm}
+ at c @caption{Example of Surf3 & CutMin, CutMax. @tdref{cutminmax}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -2704,10 +3051,10 @@ gr->Box();
 gr->Surf3(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 alpha on
@@ -2715,11 +3062,11 @@ cut 0 -1 -1 1 0 1
 box
 surf3 a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -2733,7 +3080,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -2750,25 +3096,23 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Alpha(True);
 gr.SetCutBox(0,-1,-1,1,0,1);    gr.Box();
 gr.Surf3(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node ``Isocaps'' sample, CutOff sample, CutMinMax sample, 3D plotting samples
+ at node Isocaps sample, CutOff sample, CutMinMax sample, 3D plotting samples
 @subsection ``Isocaps'' sample
 @cindex Surf3
 @cindex ContF3
 @cindex CutMin
 @cindex CutMax
-
 @float
- at image{png/cutminmax2, 7cm}
- at caption{Example of ``Isocaps''. @tdref{cutminmax2}}
+ at image{../png/cutminmax2, 7cm}
+ at c @caption{Example of ``Isocaps''. @tdref{cutminmax2}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(61,51,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->CutMin = mglPoint(0,-1,-1); gr->CutMax = mglPoint(1,0,1.1);
@@ -2778,10 +3122,10 @@ gr->ContF3(a,'x',-1); gr->ContF3(a,'y',-1);
 gr->ContF3(a,'z', 0); gr->ContF3(a,'z',39);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 61 51 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 cut 0 -1 -1 1 0 1.1
@@ -2792,11 +3136,11 @@ contf3 a 'y' -1
 contf3 a 'z' 0
 contf3 a 'z' 39
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(61,51,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_cut_box(gr,0.,-1.,-1.,1.,0.,1.1);
@@ -2812,7 +3156,6 @@ mgl_delete_data(a);
 @verbatim
 a = mgl_create_data_size(61,51,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_cut_box(gr,0.,-1.,-1.,1.,0.,1.1);
@@ -2834,23 +3177,21 @@ gr.Surf3(-1,a);
 gr.ContF3(a,"x",-1);    gr.ContF3(a,"y",-1);
 gr.ContF3(a,"z",0);     gr.ContF3(a,"z",39);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node CutOff sample, , ``Isocaps'' sample, 3D plotting samples
+ at node CutOff sample, , Isocaps sample, 3D plotting samples
 @subsection CutOff sample
 @cindex Surf3
 @cindex CutOff
-
 @float
- at image{png/surf3_cutoff, 7cm}
- at caption{Example of Surf3 & CutOff. @tdref{surf3_cutoff}}
+ at image{../png/surf3_cutoff, 7cm}
+ at c @caption{Example of Surf3 & CutOff. @tdref{surf3_cutoff}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -2859,10 +3200,10 @@ gr->Box();
 gr->Surf3(a);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 alpha on
@@ -2870,11 +3211,11 @@ cut '(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)'
 box
 surf3 a
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -2888,7 +3229,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,'-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)',0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -2906,12 +3246,10 @@ gr.CutOff("(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)");
 gr.Box();
 gr.Surf3(a);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Dual plotting samples, Additional features, 3D plotting samples, Samples
+ at node Dual plotting samples, Basic features, 3D plotting samples, Samples
 @section Dual plotting samples
-
 @menu
 * SurfC sample::                
 * SurfA sample::                
@@ -2934,47 +3272,44 @@ gr.Surf3(a);
 * Crust sample::                
 * Dots sample::                 
 @end menu
-
 @c ------------------------------------------------------------------
 @node SurfC sample, SurfA sample, , Dual plotting samples
 @subsection SurfC sample
 @cindex SurfC
-
 @float
- at image{png/surfc, 7cm}
- at caption{Example of SurfC. @tdref{surfc}}
+ at image{../png/surfc, 7cm}
+ at c @caption{Example of SurfC. @tdref{surfc}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40), b(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->SurfC(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 surfc a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 HMDT b = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -2988,7 +3323,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -3005,23 +3339,21 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.SurfC(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node SurfA sample, TileS sample, SurfC sample, Dual plotting samples
 @subsection SurfA sample
 @cindex SurfA
-
 @float
- at image{png/surfa, 7cm}
- at caption{Example of SurfA. @tdref{surfa}}
+ at image{../png/surfa, 7cm}
+ at c @caption{Example of SurfA. @tdref{surfa}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40), b(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -3029,18 +3361,19 @@ gr->Box();
 gr->SurfA(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 alpha on
 box
 surfa a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a, b;
@@ -3048,7 +3381,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -3063,7 +3395,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1);
@@ -3081,36 +3412,35 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Alpha(True);
 gr.Box();
 gr.SurfC(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node TileS sample, Map sample, SurfA sample, Dual plotting samples
- at subsection Tiles sample
+ at subsection TileS sample
 @cindex TileS
-
 @float
- at image{png/tiles, 7cm}
- at caption{Example of TileS. @tdref{tiles}}
+ at image{../png/tiles, 7cm}
+ at c @caption{Example of TileS. @tdref{tiles}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40), b(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->TileS(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 box
 tile a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a, b;
@@ -3118,7 +3448,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_tiles(gr,a,b,0);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3130,7 +3459,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_tiles(gr,a,b,'')
 call mgl_delete_data(a)
@@ -3144,28 +3472,25 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.TileS(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Map sample, Traj sample, TileS sample, Dual plotting samples
 @subsection Map sample
 @cindex Map
-
 @float
- at image{png/map, 7cm}
- at caption{Example of Map. @tdref{map}}
+ at image{../png/map, 7cm}
+ at c @caption{Example of Map. @tdref{map}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50, 40), b(50, 40);
 gr->Puts(mglPoint(0, 0), "\\to", "", -1.4);
 gr->Axis(mglPoint(-1,-1,-2),mglPoint(1,1,2));
-
 gr->SubPlot(2, 1, 0);
 a.Fill("x", gr->Min, gr->Max);	b.Fill("y", gr->Min, gr->Max);
 gr->Puts(mglPoint(0, 1.1), "\\{x, y\\}", "C", -2);		gr->Box();
 gr->Map(a, b, "brgk", 0, false);
-
 gr->SubPlot(2, 1, 1);
 a.Fill("(x^3+y^3)/2", gr->Min, gr->Max);
 b.Fill("(x-y)/2", gr->Min, gr->Max);
@@ -3174,19 +3499,18 @@ gr->Box();
 gr->Map(a, b, "brgk", 0, false);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
 text 0 0 '\to'
 zrange -2 2
-
 subplot 2 1 0
 text 0 1.1 '\{x, y\}' '' -2
 box
 fill a 'x'
 fill b 'y'
 map a b 'brgk' 0 0
-
 subplot 2 1 1
 text 0 1.1 '\{\frac{x^3+y^3}{2}, \frac{x-y}{2}\}' '' -2
 box
@@ -3194,27 +3518,25 @@ fill a '(x^3+y^3)/2'
 fill b '(x-y)/2'
 map a b 'brgk' 0 0
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 HMDT b = mgl_create_data_size(50,40,1);
 mgl_puts_ext(gr, 0.,0.,0., "\\to", "", -1.4, 't');
 mgl_set_axis_3d(gr,-1.,-1.,-2.,1.,1.,2.);
-
 mgl_subplot(gr, 2, 1, 0);
 mgl_data_fill_eq(gr, a, "x", 0, 0);
 mgl_data_fill_eq(gr, b, "y", 0, 0);
 mgl_puts_ext(gr, 0.,1.1,0., "\\{x, y\\}", "C", -2., 't');
 mgl_box(gr,1);
 mgl_map(gr, a, b, "brgk", 0, 0);
-
 mgl_subplot(gr, 2, 1, 1);
 mgl_data_fill_eq(gr, a, "(x^3+y^3)/2", 0, 0);
 mgl_data_fill_eq(gr, b, "(x-y)/2", 0, 0);
 mgl_puts_ext(gr, 0.,1.1,0., "\\{\\frac{x^3+y^3}{2}, \\frac{x-y}{2}\\}", "C", -2., 't');
 mgl_box(gr,1);
 mgl_map(gr, a, b, "brgk", 0, 0);
-
 mgl_box(gr,1);
 mgl_map(gr,a,b,0,0,1);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3226,14 +3548,12 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 call mgl_puts_ext(gr, 0.,0.,0., '\to', '', -1.4, 't');
 call mgl_set_axis_3d(gr,-1.,-1.,-2.,1.,1.,2.);
-
 call mgl_subplot(gr, 2, 1, 0);
 call mgl_data_fill_eq(gr, a, 'x', 0, 0);
 call mgl_data_fill_eq(gr, b, 'y', 0, 0);
 call mgl_puts_ext(gr, 0.,1.1,0., '\{x, y\}', 'C', -2., 't');
 call mgl_box(gr,1);
 call mgl_map(gr, a, b, 'brgk', 0, 0);
-
 call mgl_subplot(gr, 2, 1, 1);
 call mgl_data_fill_eq(gr, a, '(x^3+y^3)/2', 0, 0);
 call mgl_data_fill_eq(gr, b, '(x-y)/2', 0, 0);
@@ -3250,30 +3570,27 @@ call mgl_delete_data(b)
 a, b = mglData(50,40), mglData(50,40);
 gr.Puts(0, 0, 0, "\\to", "", -1.4);
 gr.SetRanges(-1,1,-1,1,-2,2);
-
 gr.SubPlot(2, 1, 0);
 gr.Fill(a, "x");    gr.Fill(b, "y");
 gr.Puts(0, 1.1, 0, "\\{x, y\\}", "C", -2);
 gr.Box();
 gr.Map(a, b, "brgk", 0, 0);
-
 gr.SubPlot(2, 1, 1);
 gr.Fill(a, "(x^3+y^3)/2");   gr.Fill(b, "(x-y)/2");
 gr.Puts(0, 1.1, 0, "\\{\\frac{x^3+y^3}{2}, \\frac{x-y}{2}\\}", "C", -2);
 gr.Box();
 gr.Map(a, b, "brgk", 0, 0);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Traj sample, Vect sample, Map sample, Dual plotting samples
 @subsection Traj sample
 @cindex Traj
-
 @float
- at image{png/traj, 7cm}
- at caption{Example of Plot. @tdref{traj}}
+ at image{../png/traj, 7cm}
+ at c @caption{Example of Plot. @tdref{traj}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y(50,3), x(50), y1(50), y2(50);
@@ -3283,12 +3600,12 @@ y.Modify("cos(2*pi*x)",2);
 y1.Modify("0.5+0.3*cos(2*pi*x)");
 y2.Modify("0.3*sin(2*pi*x)");
 x.Fill(-1,1,'x');
-
 gr->Box();
 gr->Plot(x,y);
 gr->Traj(x,y,y1,y2);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y 50 3
 new x 50
@@ -3304,6 +3621,7 @@ box
 plot x y
 traj x y y1 y2
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -3356,28 +3674,26 @@ gr.Box();
 gr.Plot(x,y);
 gr.Traj(x,y,y1,y2);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Vect sample, VectL sample, Traj sample, Dual plotting samples
 @subsection Vect sample
 @cindex Vect
-
 @float
- at image{png/vect, 7cm}
- at caption{Example of Vect. @tdref{vect}}
+ at image{../png/vect, 7cm}
+ at c @caption{Example of Vect. @tdref{vect}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(20,30), b(20,30);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->Vect(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3386,13 +3702,13 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 vect a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(20,30,1);
 HMDT b = mgl_create_data_size(20,30,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_vect_2d(gr,a,b,0,0.);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3404,7 +3720,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_vect_2d(gr,a,b,'',0.)
 call mgl_delete_data(a)
@@ -3418,27 +3733,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.Vect(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node VectL sample, VectC sample, Vect sample, Dual plotting samples
 @subsection VectL sample
 @cindex VectL
-
 @float
- at image{png/vectl, 7cm}
- at caption{Example of VectL. @tdref{vectl}}
+ at image{../png/vectl, 7cm}
+ at c @caption{Example of VectL. @tdref{vectl}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(20,30), b(20,30);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->VectL(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3447,6 +3761,7 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 vectl a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a, b;
@@ -3454,7 +3769,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_vectl_2d(gr,a,b,0,0.);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3466,7 +3780,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_vectl_2d(gr,a,b,'',0.)
 call mgl_delete_data(a)
@@ -3480,28 +3793,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.VectL(a,b);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node VectC sample, Flow sample, VectL sample, Dual plotting samples
 @subsection VectC sample
 @cindex VectC
-
 @float
- at image{png/vectc, 7cm}
- at caption{Example of VectC. @tdref{vectc}}
+ at image{../png/vectc, 7cm}
+ at c @caption{Example of VectC. @tdref{vectc}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(20,30), b(20,30);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->VectC(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3510,6 +3821,7 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 vectc a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a, b;
@@ -3517,7 +3829,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_vectc_2d(gr,a,b,0,0.);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3529,7 +3840,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_vectc_2d(gr,a,b,'',0.)
 call mgl_delete_data(a)
@@ -3543,28 +3853,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.VectC(a,b);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Flow sample, Pipe sample, VectC sample, Dual plotting samples
 @subsection Flow sample
 @cindex Flow
-
 @float
- at image{png/flow, 7cm}
- at caption{Example of Flow. @tdref{flow}}
+ at image{../png/flow, 7cm}
+ at c @caption{Example of Flow. @tdref{flow}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(20,30), b(20,30);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->Flow(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3573,13 +3881,13 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 flow a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(20,30,1);
 HMDT b = mgl_create_data_size(20,30,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_flow_2d(gr,a,b,0,5,1,0.);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3591,7 +3899,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_flow_2d(gr,a,b,'',5,1,0.)
 call mgl_delete_data(a)
@@ -3605,17 +3912,16 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.Flow(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Pipe sample, Dew sample, Flow sample, Dual plotting samples
 @subsection Pipe sample
 @cindex Pipe
-
 @float
- at image{png/pipe, 7cm}
- at caption{Example of Pipe. @tdref{pipe}}
+ at image{../png/pipe, 7cm}
+ at c @caption{Example of Pipe. @tdref{pipe}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(20,30), b(20,30);
@@ -3626,6 +3932,7 @@ gr->Box();
 gr->Pipe(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3635,6 +3942,7 @@ light on
 box
 pipe a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(20,30,1);
@@ -3667,17 +3975,16 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Light(True);    gr.Box();
 gr.Pipe(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dew sample, Surf3C sample, Pipe sample, Dual plotting samples
 @subsection Dew sample
 @cindex Dew
-
 @float
- at image{png/dew, 7cm}
- at caption{Example of Dew. @tdref{dew}}
+ at image{../png/dew, 7cm}
+ at c @caption{Example of Dew. @tdref{dew}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(20,30), b(20,30);
@@ -3688,6 +3995,7 @@ gr->Light(true);
 gr->Dew(a,b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3697,6 +4005,7 @@ box
 light on
 dew a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(20,30,1);
@@ -3729,23 +4038,21 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Light(True);    gr.Box();
 gr.Dew(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Surf3C sample, Surf3A sample, Dew sample, Dual plotting samples
 @subsection Surf3C sample
 @cindex Surf3C
-
 @float
- at image{png/surf3c, 7cm}
- at caption{Example of Surf3C. @tdref{surf3c}}
+ at image{../png/surf3c, 7cm}
+ at c @caption{Example of Surf3C. @tdref{surf3c}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40), b(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
 b.Modify("1-2*tanh(4*(x+y-1)^2)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -3753,25 +4060,25 @@ gr->Box();
 gr->Surf3C(a, b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 new b 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
 modify b '1-2*tanh(4*(x+y-1)^2)'
-
 rotate 40 60
 light on
 alpha on
 box
 surf3c a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 HMDT b = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
 mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -3786,7 +4093,6 @@ a = mgl_create_data_size(60,50,40);
 b = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
 call mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -3804,24 +4110,21 @@ gr.Rotate(40,60);   gr.Light(True);     gr.Alpha(True);
 gr.Box();
 gr.Surf3C(a,b);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Surf3A sample, Vect 3D sample, Surf3C sample, Dual plotting samples
 @subsection Surf3A sample
 @cindex Surf3A
-
 @float
- at image{png/surf3a, 7cm}
- at caption{Example of Surf3A. @tdref{surf3a}}
+ at image{../png/surf3a, 7cm}
+ at c @caption{Example of Surf3A. @tdref{surf3a}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40), b(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
 b.Modify("1-2*tanh(4*(x+y-1)^2)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -3829,25 +4132,25 @@ gr->Box();
 gr->Surf3A(a, b);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 new b 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
 modify b '1-2*tanh(4*(x+y-1)^2)'
-
 rotate 40 60
 light on
 alpha on
 box
 surf3a a b
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a, b; a = mgl_create_data_size(60,50,40);
 b = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
 mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -3862,7 +4165,6 @@ a = mgl_create_data_size(60,50,40);
 b = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
 call mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -3880,17 +4182,16 @@ gr.Rotate(40,60);   gr.Light(True);     gr.Alpha(True);
 gr.Box();
 gr.Surf3A(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Vect 3D sample, VectL 3D sample, Surf3A sample, Dual plotting samples
 @subsection Vect 3D sample
 @cindex Vect
-
 @float
- at image{png/vect3, 7cm}
- at caption{Example of Vect in 3D. @tdref{vect3}}
+ at image{../png/vect3, 7cm}
+ at c @caption{Example of Vect in 3D. @tdref{vect3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
@@ -3905,6 +4206,7 @@ gr->Box();
 gr->Vect(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new ex 10 10 10
 new ey 10 10 10
@@ -3912,11 +4214,11 @@ new ez 10 10 10
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 box
 vect ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT ex, ey, ez;
@@ -3929,7 +4231,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_vect_3d(gr,ex,ey,ez,"bwr");
@@ -3947,7 +4248,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1);
 call mgl_vect_3d(gr,ex,ey,ez,'bwr')
@@ -3967,17 +4267,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);       gr.Box();
 gr.Vect(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node VectL 3D sample, VectC 3D sample, Vect 3D sample, Dual plotting samples
 @subsection VectL 3D sample
 @cindex VectL
-
 @float
- at image{png/vectl3, 7cm}
- at caption{Example of VectL in 3D. @tdref{vectl3}}
+ at image{../png/vectl3, 7cm}
+ at c @caption{Example of VectL in 3D. @tdref{vectl3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
@@ -3992,6 +4291,7 @@ gr->Box();
 gr->VectL(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new ex 10 10 10
 new ey 10 10 10
@@ -3999,11 +4299,11 @@ new ez 10 10 10
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 box
 vectl ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT ex, ey, ez;
@@ -4016,7 +4316,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_vectl_3d(gr,ex,ey,ez,"bwr");
@@ -4034,7 +4333,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1);
 call mgl_vectl_3d(gr,ex,ey,ez,'bwr')
@@ -4054,17 +4352,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);       gr.Box();
 gr.VectL(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node VectC 3D sample, Flow 3D sample, VectL 3D sample, Dual plotting samples
 @subsection VectC 3D sample
 @cindex VectC
-
 @float
- at image{png/vectc3, 7cm}
- at caption{Example of VectC in 3D. @tdref{vectc3}}
+ at image{../png/vectc3, 7cm}
+ at c @caption{Example of VectC in 3D. @tdref{vectc3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
@@ -4079,6 +4376,7 @@ gr->Box();
 gr->VectC(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new ex 10 10 10
 new ey 10 10 10
@@ -4086,11 +4384,11 @@ new ez 10 10 10
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 box
 vectc ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT ex, ey, ez;
@@ -4103,7 +4401,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_vectc_3d(gr,ex,ey,ez,"bwr");
@@ -4121,7 +4418,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1);
 call mgl_vectc_3d(gr,ex,ey,ez,'bwr')
@@ -4141,17 +4437,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);       gr.Box();
 gr.VectC(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Flow 3D sample, Pipe 3D sample, VectC 3D sample, Dual plotting samples
 @subsection Flow 3D sample
 @cindex Flow
-
 @float
- at image{png/flow3, 7cm}
- at caption{Example of Flow in 3D. @tdref{flow3}}
+ at image{../png/flow3, 7cm}
+ at c @caption{Example of Flow in 3D. @tdref{flow3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData ex(30,30,30), ey(30,30,30), ez(30,30,30);
@@ -4166,6 +4461,7 @@ gr->Box();
 gr->Flow(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new ex 30 30 30
 new ey 30 30 30
@@ -4173,11 +4469,11 @@ new ez 30 30 30
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 box
 flow ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT ex, ey, ez;
@@ -4190,7 +4486,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_flow_3d(gr,ex,ey,ez,"bwr",3,1);
@@ -4208,7 +4503,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1);
 call mgl_flow_3d(gr,ex,ey,ez,'bwr',3,1)
@@ -4228,17 +4522,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);       gr.Box();
 gr.Flow(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Pipe 3D sample, Crust sample, Flow 3D sample, Dual plotting samples
 @subsection Pipe 3D sample
 @cindex Pipe
-
 @float
- at image{png/pipe3, 7cm}
- at caption{Example of Pipe in 3D. @tdref{pipe3}}
+ at image{../png/pipe3, 7cm}
+ at c @caption{Example of Pipe in 3D. @tdref{pipe3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
@@ -4254,6 +4547,7 @@ gr->Box();
 gr->Pipe(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new ex 10 10 10
 new ey 10 10 10
@@ -4261,12 +4555,12 @@ new ez 10 10 10
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 light on
 box
 pipe ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT ex, ey, ez;
@@ -4279,7 +4573,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -4298,7 +4591,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1);
 call mgl_box(gr,1);
@@ -4319,17 +4611,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Pipe(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Crust sample, Dots sample, Pipe 3D sample, Dual plotting samples
 @subsection Crust sample
 @cindex Crust
-
 @float
- at image{png/crust, 7cm}
- at caption{Example of Crust. @tdref{crust}}
+ at image{../png/crust, 7cm}
+ at c @caption{Example of Crust. @tdref{crust}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a("hotdogs.pts");
@@ -4340,6 +4631,7 @@ gr->Box();
 gr->Crust(a,"p");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 read a 'hotdogs.pts'
 norm a -1 1 on
@@ -4348,6 +4640,7 @@ light on
 box
 crust a 'p'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_file("hotdogs.pts");
@@ -4377,17 +4670,16 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.Crust(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dots sample, , Crust sample, Dual plotting samples
 @subsection Dots sample
 @cindex Dots
-
 @float
- at image{png/dots, 7cm}
- at caption{Example of Dots. @tdref{dots}}
+ at image{../png/dots, 7cm}
+ at c @caption{Example of Dots. @tdref{dots}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a("hotdogs.pts");
@@ -4397,6 +4689,7 @@ gr->Box();
 gr->Dots(a,"p");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 read a 'hotdogs.pts'
 norm a -1 1 on
@@ -4404,6 +4697,7 @@ rotate 40 60
 box
 dots a 'p'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_file("hotdogs.pts");
@@ -4431,13 +4725,695 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.Dots(a);
 @end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+
+ at c ------------------------------------------------------------------
+ at node Basic features, Additional features, Dual plotting samples, Samples
+ at section Basic features
+ at menu
+* 1D plot sample::              
+* 2D plot sample::              
+* 3D plot sample::              
+* Line styles sample::          
+* Arrow styles sample::         
+* Text styles sample::          
+* TeX parsing sample::          
+* Font faces sample::           
+* Colors sample::               
+* Color schemes sample::        
+* Normal transparency::         
+* Glass-like transparency::     
+* Lamp-like transparency::      
+ at end menu
+ at c ------------------------------------------------------------------
+ at node 1D plot sample, 2D plot sample, , Basic features
+ at subsection 1D plot sample
+ at cindex Plot
+ at cindex Bars
+ at cindex SubPlot
+ at float
+ at image{../png/sample8, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData y0(50);		y0.Modify("sin(pi*(2*x-1))");
+gr->SubPlot(2,2,0);
+gr->Plot(y0);		gr->Box();
+
+gr->SubPlot(2,2,1);
+mglData y1(50,2);
+y1.Modify("sin(pi*2*x-pi)");	y1.Modify("cos(pi*2*x-pi)/2",1);
+gr->Plot(y1);		gr->Box();
+
+mglData x(50);		x.Modify("cos(pi*2*x-pi)");
+gr->Plot(x,y0,"Y+");
+
+gr->Plot(y1.SubData(-1,0),y1.SubData(-1,1),"q|");
+
+gr->SubPlot(2,2,2);	gr->Rotate(60,40);
+mglData z(50);		z.Modify("2*x-1");
+gr->Plot(x,y0,z);		gr->Box();
+
+mglData y2(10,3);	y2.Modify("cos(pi*(2*x-1-y))");
+y2.Modify("2*x-1",2);
+gr->Plot(y2.SubData(-1,0),y2.SubData(-1,1),y2.SubData(-1,2),"bo ");
+
+gr->SubPlot(2,2,3);	gr->Rotate(60,40);
+gr->Bars(x,y0,z,"ri");		gr->Box();
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new y0 50: modify y0 'sin(pi*(2*x-1))'
+subplot 2 2 0
+plot y0: box
 
+subplot 2 2 1
+new y1 50 2
+modify y1 'sin(pi*2*x-pi)'
+modify y1 'cos(pi*2*x-pi)/2' 1
+plot y1: box
+
+new x 50: modify x 'cos(pi*2*x-pi)'
+plot x y0 'Y+'
+plot y1(:,0) y(:,1) 'q|'
+
+subplot 2 2 2:rotate 60 40
+new z 50:   modify z '2*x-1'
+plot x y0 z 'g':box
+new y2 10 3
+modify y2 'cos(pi*(2*x-1-y))'
+modify y2 '2*x-1' 2
+plot y2(:,0) y2(:,1) y2(:,2) 'bo '
+
+subplot 2 2 3:rotate 60 40
+bars x y0 z 'r':box
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node 2D plot sample, 3D plot sample, 1D plot sample, Basic features
+ at subsection 2D plot sample
+ at cindex Surf
+ at cindex Dens
+ at cindex Alpha
+ at float
+ at image{../png/sample9, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+gr->Light(true);
+mglData a0(50,40);
+a0.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+gr->SubPlot(2,2,0); gr->Rotate(60,40);
+gr->Surf(a0);       gr->Box();
+
+mglData x(50,40),y(50,40),z(50,40);
+x.Modify("0.8*sin(2*pi*x)*sin(pi*y)");
+y.Modify("0.8*cos(2*pi*x)*sin(pi*y)");
+z.Modify("0.8*cos(pi*y)");
+gr->SubPlot(2,2,1); gr->Rotate(60,40);
+gr->Surf(x,y,z,"BbwrR");    gr->Box();
+
+mglData a1(50,40,3);
+a1.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*sin(3*pi*(x*y))",1);
+a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",2);
+gr->SubPlot(2,2,2); gr->Rotate(60,40);
+gr->Alpha(true);
+gr->Surf(a1);       gr->Box();
+
+gr->SubPlot(2,2,3); gr->Rotate(60,40);
+gr->Dens(a1);       gr->Box();
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+light on
+
+new a0 50 40
+modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+subplot 2 2 0:rotate 60 40
+surf a0: box
+
+new x 50 40: new y 50 40: new z 50 40
+modify x '0.8*sin(2*pi*x)*sin(pi*y)'
+modify y '0.8*cos(2*pi*x)*sin(pi*y)'
+modify z '0.8*cos(pi*y)'
+subplot 2 2 1:rotate 60 40
+surf x y z 'bbwrr': box
+
+new a1 50 40 3
+modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2
+subplot 2 2 2:rotate 60 40
+alpha on
+surf a1: box
+
+subplot 2 2 3: rotate 60 40
+dens a1: box
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node 3D plot sample, Line styles sample, 2D plot sample, Basic features
+ at subsection 3D plot sample
+ at cindex Surf
+ at cindex Dens
+ at cindex Alpha
+ at float
+ at image{../png/sampleb, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+gr->Alpha(true);	gr->Light(true);	gr->Light(0,mglPoint(0,0,1));
+mglData a(30,30,30), b(30,30,30);
+a.Modify("exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))");
+b.Modify("16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)");
+gr->CAxis(0,1);
+
+gr->SubPlot(2,2,0);	gr->Rotate(40,60);
+gr->Surf3(a,"wgk");	gr->Box();
+gr->SubPlot(2,2,1);	gr->Rotate(40,60);
+gr->DensA(a);		gr->Box();	gr->Axis();
+gr->SubPlot(2,2,2);	gr->Rotate(40,60);
+gr->Cloud(a);		gr->Box();
+gr->SubPlot(2,2,3);	gr->Rotate(40,60);
+gr->Surf3A(b,a,"q");		gr->Box();
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+alpha on: light on
+light 0 0 0 1
+new a 30 30 30: new b 30 30 30
+modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))'
+modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)'
+caxis 0 1
+
+subplot 2 2 0: rotate 40 60
+surf3 a 'wgk': box
+subplot 2 2 1: rotate 40 60
+densa a: box: axis
+subplot 2 2 2: rotate 40 60
+cloud a: box
+subplot 2 2 3: rotate 40 60
+surf3a b a 'q': box
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Line styles sample, Arrow styles sample, 3D plot sample, Basic features
+ at subsection Line styles sample
+ at cindex Mark
+ at cindex Line
+ at float
+ at image{../png/sample5, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+float d,x1,x2,x0,y=0.95;
+d=0.3, x0=0.2, x1=0.5, x2=0.6;
+gr->Line(mglPoint(x0,1-0*d),mglPoint(x1,1-0*d),"k-");	gr->Puts(mglPoint(x2,y-0*d),"Solid '-'","rL");
+gr->Line(mglPoint(x0,1-1*d),mglPoint(x1,1-1*d),"k|");	gr->Puts(mglPoint(x2,y-1*d),"Long Dash '|'","rL");
+gr->Line(mglPoint(x0,1-2*d),mglPoint(x1,1-2*d),"k;");	gr->Puts(mglPoint(x2,y-2*d),"Dash ';'","rL");
+gr->Line(mglPoint(x0,1-3*d),mglPoint(x1,1-3*d),"k=");	gr->Puts(mglPoint(x2,y-3*d),"Small dash '='","rL");
+gr->Line(mglPoint(x0,1-4*d),mglPoint(x1,1-4*d),"kj");	gr->Puts(mglPoint(x2,y-4*d),"Dash-dot 'j'","rL");
+gr->Line(mglPoint(x0,1-5*d),mglPoint(x1,1-5*d),"ki");	gr->Puts(mglPoint(x2,y-5*d),"Small dash-dot 'i'","rL");
+gr->Line(mglPoint(x0,1-6*d),mglPoint(x1,1-6*d),"k:");	gr->Puts(mglPoint(x2,y-6*d),"Dots ':'","rL");
+gr->Line(mglPoint(x0,1-7*d),mglPoint(x1,1-7*d),"k ");	gr->Puts(mglPoint(x2,y-7*d),"None ' '","rL");
+
+d=0.25; x1=-1; x0=-0.8;	y = -0.05;
+gr->Mark(mglPoint(x1,5*d),'.');		gr->Puts(mglPoint(x0,y+5*d),"'.'","rL");
+gr->Mark(mglPoint(x1,4*d),'+');		gr->Puts(mglPoint(x0,y+4*d),"'+'","rL");
+gr->Mark(mglPoint(x1,3*d),'x');		gr->Puts(mglPoint(x0,y+3*d),"'x'","rL");
+gr->Mark(mglPoint(x1,2*d),'*');		gr->Puts(mglPoint(x0,y+2*d),"'*'","rL");
+gr->Mark(mglPoint(x1,d),'s');		gr->Puts(mglPoint(x0,y+d),"'s'","rL");
+gr->Mark(mglPoint(x1,0),'d');		gr->Puts(mglPoint(x0,y),"'d'","rL");
+gr->Mark(mglPoint(x1,-d,0),'o');	gr->Puts(mglPoint(x0,y-d),"'o'","rL");
+gr->Mark(mglPoint(x1,-2*d,0),'^');	gr->Puts(mglPoint(x0,y-2*d),"'\\^'","rL");
+gr->Mark(mglPoint(x1,-3*d,0),'v');	gr->Puts(mglPoint(x0,y-3*d),"'v'","rL");
+gr->Mark(mglPoint(x1,-4*d,0),'<');	gr->Puts(mglPoint(x0,y-4*d),"'<'","rL");
+gr->Mark(mglPoint(x1,-5*d,0),'>');	gr->Puts(mglPoint(x0,y-5*d),"'>'","rL");
+
+d=0.25; x1=-0.5; x0=-0.3;	y = -0.05;
+gr->Mark(mglPoint(x1,5*d),'C');		gr->Puts(mglPoint(x0,y+5*d),"'\\#.'","rL");
+gr->Mark(mglPoint(x1,4*d),'P');		gr->Puts(mglPoint(x0,y+4*d),"'\\#+'","rL");
+gr->Mark(mglPoint(x1,3*d),'X');		gr->Puts(mglPoint(x0,y+3*d),"'\\#x'","rL");
+gr->Mark(mglPoint(x1,2*d),'Y');		gr->Puts(mglPoint(x0,y+2*d),"'\\#*'","rL");
+gr->Mark(mglPoint(x1,d),'S');		gr->Puts(mglPoint(x0,y+d),"'\\#s'","rL");
+gr->Mark(mglPoint(x1,0),'D');		gr->Puts(mglPoint(x0,y),"'\\#d'","rL");
+gr->Mark(mglPoint(x1,-d,0),'O');	gr->Puts(mglPoint(x0,y-d),"'\\#o'","rL");
+gr->Mark(mglPoint(x1,-2*d,0),'T');	gr->Puts(mglPoint(x0,y-2*d),"'\\#\\^'","rL");
+gr->Mark(mglPoint(x1,-3*d,0),'V');	gr->Puts(mglPoint(x0,y-3*d),"'\\#v'","rL");
+gr->Mark(mglPoint(x1,-4*d,0),'L');	gr->Puts(mglPoint(x0,y-4*d),"'\\#<'","rL");
+gr->Mark(mglPoint(x1,-5*d,0),'R');	gr->Puts(mglPoint(x0,y-5*d),"'\\#>'","rL");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+NOT AVAILABLE
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Arrow styles sample, Text styles sample, Line styles sample, Basic features
+ at subsection Arrow styles sample
+ at cindex Line
+ at float
+ at image{../png/sampled, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+float a=0.1,b=0.4,c=0.5;
+gr->Line(mglPoint(a,1),mglPoint(b,1),"k-A");		gr->Puts(mglPoint(c,1),"Style 'A' or 'A\\_'","rL");
+gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"k-V");	gr->Puts(mglPoint(c,0.8),"Style 'V' or 'V\\_'","rL");
+gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"k-K");	gr->Puts(mglPoint(c,0.6),"Style 'K' or 'K\\_'","rL");
+gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"k-I");	gr->Puts(mglPoint(c,0.4),"Style 'I' or 'I\\_'","rL");
+gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"k-D");	gr->Puts(mglPoint(c,0.2),"Style 'D' or 'D\\_'","rL");
+gr->Line(mglPoint(a,0),mglPoint(b,0),"k-S");		gr->Puts(mglPoint(c,0),"Style 'S' or 'S\\_'","rL");
+gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"k-O");	gr->Puts(mglPoint(c,-0.2),"Style 'O' or 'O\\_'","rL");
+gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"k-T");	gr->Puts(mglPoint(c,-0.4),"Style 'T' or 'T\\_'","rL");
+gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-_");	gr->Puts(mglPoint(c,-0.6),"Style '\\_' or none","rL");
+gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-AS");	gr->Puts(mglPoint(c,-0.8),"Style 'AS'","rL");
+gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-_A");		gr->Puts(mglPoint(c,-1),"Style '\\_A'","rL");
+
+a=-1;	b=-0.7;	c=-0.6;
+gr->Line(mglPoint(a,1),mglPoint(b,1),"kAA");		gr->Puts(mglPoint(c,1),"Style 'AA'","rL");
+gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"kVV");	gr->Puts(mglPoint(c,0.8),"Style 'VV'","rL");
+gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"kKK");	gr->Puts(mglPoint(c,0.6),"Style 'KK'","rL");
+gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"kII");	gr->Puts(mglPoint(c,0.4),"Style 'II'","rL");
+gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"kDD");	gr->Puts(mglPoint(c,0.2),"Style 'DD'","rL");
+gr->Line(mglPoint(a,0),mglPoint(b,0),"kSS");		gr->Puts(mglPoint(c,0),"Style 'SS'","rL");
+gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"kOO");	gr->Puts(mglPoint(c,-0.2),"Style 'OO'","rL");
+gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"kTT");	gr->Puts(mglPoint(c,-0.4),"Style 'TT'","rL");
+gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-__");	gr->Puts(mglPoint(c,-0.6),"Style '\\_\\_'","rL");
+gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-VA");	gr->Puts(mglPoint(c,-0.8),"Style 'VA'","rL");
+gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-AV");		gr->Puts(mglPoint(c,-1),"Style 'AV'","rL");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+NOT AVAILABLE
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Text styles sample, TeX parsing sample, Arrow styles sample, Basic features
+ at subsection Text styles sample
+ at cindex Puts
+ at float
+ at image{../png/sample4, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+gr->Putsw(mglPoint(0,1),L"Text can be in ASCII and in Unicode");
+gr->Puts(mglPoint(0,0.6),"It can be \\wire{wire}, \\big{big} or #r{colored}");
+gr->Puts(mglPoint(0,0.2),"One can change style in string: "
+        "\\b{bold}, \\i{italic, \\b{both}}");
+gr->Puts(mglPoint(0,-0.2),"Easy to \\a{overline} or "
+        "\\u{underline}");
+gr->Puts(mglPoint(0,-0.6),"Easy to change indexes ^{up} _{down} @{center}");
+gr->Puts(mglPoint(0,-1),"It parse TeX: \\int \\alpha \\cdot "
+        "\\sqrt3{sin(\\pi x)^2 + \\gamma_{i_k}} dx");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+text 0 1 'Text can be in ASCII and in Unicode'
+text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}'
+text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}'
+text 0 -0.2 'Easy to \a{overline} or \u{underline}'
+text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}'
+text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx'
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node TeX parsing sample, Font faces sample, Text styles sample, Basic features
+ at subsection TeX parsing sample
+ at cindex Puts
+ at float
+ at image{../png/samplee, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+gr->Puts(mglPoint(0), "\\sqrt{\\frac{\\alpha^{\\gamma^2}+"
+        "\\overset 1{\\big\\infty}}{\\sqrt3{2+b}}}", 0, -4);
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}' '' -4
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Font faces sample, Colors sample, TeX parsing sample, Basic features
+ at subsection Font faces sample
+ at cindex Puts
+ at float
+ at image{../png/fonts, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+float h=1.1, d=0.25;
+gr->LoadFont("STIX");		gr->Puts(mglPoint(0,h), "default font (STIX)");
+gr->LoadFont("adventor");	gr->Puts(mglPoint(0,h-d), "adventor font");
+gr->LoadFont("bonum");		gr->Puts(mglPoint(0,h-2*d), "bonum font");
+gr->LoadFont("chorus");		gr->Puts(mglPoint(0,h-3*d), "chorus font");
+gr->LoadFont("cursor");		gr->Puts(mglPoint(0,h-4*d), "cursor font");
+gr->LoadFont("heros");		gr->Puts(mglPoint(0,h-5*d), "heros font");
+gr->LoadFont("heroscn");	gr->Puts(mglPoint(0,h-6*d), "heroscn font");
+gr->LoadFont("pagella");	gr->Puts(mglPoint(0,h-7*d), "pagella font");
+gr->LoadFont("schola");		gr->Puts(mglPoint(0,h-8*d), "schola font");
+gr->LoadFont("termes");		gr->Puts(mglPoint(0,h-9*d), "termes font");
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+NOT AVAILABLE
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Colors sample, Color schemes sample, Font faces sample, Basic features
+ at subsection Colors sample
+ at float
+ at image{../png/colors, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+//#LENUQ
+gr->FaceZ(-1,	-1, 0, 0.4, 0.3, "L#");	gr->Puts(mglPoint(-0.8,-0.9), "L", "C:w", -1.4);
+gr->FaceZ(-0.6,	-1, 0, 0.4, 0.3, "E#");	gr->Puts(mglPoint(-0.4,-0.9), "E", "C:w", -1.4);
+gr->FaceZ(-0.2,	-1, 0, 0.4, 0.3, "N#");	gr->Puts(mglPoint(0,  -0.9), "N", "C:w", -1.4);
+gr->FaceZ(0.2,	-1, 0, 0.4, 0.3, "U#");	gr->Puts(mglPoint(0.4,-0.9), "U", "C:w", -1.4);
+gr->FaceZ(0.6,	-1, 0, 0.4, 0.3, "Q#");	gr->Puts(mglPoint(0.8,-0.9), "Q", "C:w", -1.4);
+//#lenuq
+gr->FaceZ(-1,	-0.7, 0, 0.4, 0.3, "l#");	gr->Puts(mglPoint(-0.8,-0.6), "l", "C:k", -1.4);
+gr->FaceZ(-0.6,	-0.7, 0, 0.4, 0.3, "e#");	gr->Puts(mglPoint(-0.4,-0.6), "e", "C:k", -1.4);
+gr->FaceZ(-0.2,	-0.7, 0, 0.4, 0.3, "n#");	gr->Puts(mglPoint(0,  -0.6), "n", "C:k", -1.4);
+gr->FaceZ(0.2,	-0.7, 0, 0.4, 0.3, "u#");	gr->Puts(mglPoint(0.4,-0.6), "u", "C:k", -1.4);
+gr->FaceZ(0.6,	-0.7, 0, 0.4, 0.3, "q#");	gr->Puts(mglPoint(0.8,-0.6), "q", "C:k", -1.4);
+//#CMYkP
+gr->FaceZ(-1,	-0.4, 0, 0.4, 0.3, "C#");	gr->Puts(mglPoint(-0.8,-0.3), "C", "C:w", -1.4);
+gr->FaceZ(-0.6,	-0.4, 0, 0.4, 0.3, "M#");	gr->Puts(mglPoint(-0.4,-0.3), "M", "C:w", -1.4);
+gr->FaceZ(-0.2,	-0.4, 0, 0.4, 0.3, "Y#");	gr->Puts(mglPoint(0,  -0.3), "Y", "C:w", -1.4);
+gr->FaceZ(0.2,	-0.4, 0, 0.4, 0.3, "k#");	gr->Puts(mglPoint(0.4,-0.3), "k", "C:w", -1.4);
+gr->FaceZ(0.6,	-0.4, 0, 0.4, 0.3, "P#");	gr->Puts(mglPoint(0.8,-0.3), "P", "C:w", -1.4);
+//#cmywp
+gr->FaceZ(-1,	-0.1, 0, 0.4, 0.3, "c#");	gr->Puts(mglPoint(-0.8, 0), "c", "C:k", -1.4);
+gr->FaceZ(-0.6,	-0.1, 0, 0.4, 0.3, "m#");	gr->Puts(mglPoint(-0.4, 0), "m", "C:k", -1.4);
+gr->FaceZ(-0.2,	-0.1, 0, 0.4, 0.3, "y#");	gr->Puts(mglPoint(0,   0), "y", "C:k", -1.4);
+gr->FaceZ(0.2,	-0.1, 0, 0.4, 0.3, "w#");	gr->Puts(mglPoint(0.4, 0), "w", "C:k", -1.4);
+gr->FaceZ(0.6,	-0.1, 0, 0.4, 0.3, "p#");	gr->Puts(mglPoint(0.8, 0), "p", "C:k", -1.4);
+//#BGRHW
+gr->FaceZ(-1,	0.2, 0, 0.4, 0.3, "B#");	gr->Puts(mglPoint(-0.8, 0.3), "B", "C:w", -1.4);
+gr->FaceZ(-0.6,	0.2, 0, 0.4, 0.3, "G#");	gr->Puts(mglPoint(-0.4, 0.3), "G", "C:w", -1.4);
+gr->FaceZ(-0.2,	0.2, 0, 0.4, 0.3, "R#");	gr->Puts(mglPoint(0,   0.3), "R", "C:w", -1.4);
+gr->FaceZ(0.2,	0.2, 0, 0.4, 0.3, "H#");	gr->Puts(mglPoint(0.4, 0.3), "H", "C:w", -1.4);
+gr->FaceZ(0.6,	0.2, 0, 0.4, 0.3, "W#");	gr->Puts(mglPoint(0.8, 0.3), "W", "C:w", -1.4);
+//#bgrhw
+gr->FaceZ(-1,	0.2, 0, 0.4, 0.3, "b#");	gr->Puts(mglPoint(-0.8, 0.6), "b", "C:k", -1.4);
+gr->FaceZ(-0.6,	0.5, 0, 0.4, 0.3, "g#");	gr->Puts(mglPoint(-0.4, 0.6), "g", "C:k", -1.4);
+gr->FaceZ(-0.2,	0.2, 0, 0.4, 0.3, "r#");	gr->Puts(mglPoint(0,   0.6), "r", "C:k", -1.4);
+gr->FaceZ(0.2,	0.2, 0, 0.4, 0.3, "h#");	gr->Puts(mglPoint(0.4, 0.6), "h", "C:k", -1.4);
+gr->FaceZ(0.6,	0.2, 0, 0.4, 0.3, "w#");	gr->Puts(mglPoint(0.8, 0.6), "w", "C:k", -1.4);
+//#brighted
+gr->FaceZ(-1,	0.8, 0, 0.4, 0.3, "r1#");	gr->Puts(mglPoint(-0.8, 0.9), "r1", "C:w", -1.4);
+gr->FaceZ(-0.6,	0.8, 0, 0.4, 0.3, "r3#");	gr->Puts(mglPoint(-0.4, 0.9), "r3", "C:w", -1.4);
+gr->FaceZ(-0.2,	0.8, 0, 0.4, 0.3, "r5#");	gr->Puts(mglPoint(0,   0.9), "r5", "C:k", -1.4);
+gr->FaceZ(0.2,	0.8, 0, 0.4, 0.3, "r7#");	gr->Puts(mglPoint(0.4, 0.9), "r7", "C:k", -1.4);
+gr->FaceZ(0.6,	0.8, 0, 0.4, 0.3, "r9#");	gr->Puts(mglPoint(0.8, 0.9), "r9", "C:k", -1.4);
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+#LENUQ
+facez -1   -1 0 0.4 0.3 'L#': text -0.8 -0.9 'L' 'C:w'
+facez -0.6 -1 0 0.4 0.3 'E#': text -0.4 -0.9 'E' 'C:w'
+facez -0.2 -1 0 0.4 0.3 'N#': text  0   -0.9 'N' 'C:w'
+facez  0.2 -1 0 0.4 0.3 'U#': text  0.4 -0.9 'U' 'C:w'
+facez  0.6 -1 0 0.4 0.3 'Q#': text  0.8 -0.9 'Q' 'C:w'
+#lenuq
+facez -1   -0.7 0 0.4 0.3 'l#': text -0.8 -0.6 'l' 'C:k'
+facez -0.6 -0.7 0 0.4 0.3 'e#': text -0.4 -0.6 'e' 'C:k'
+facez -0.2 -0.7 0 0.4 0.3 'n#': text  0   -0.6 'n' 'C:k'
+facez  0.2 -0.7 0 0.4 0.3 'u#': text  0.4 -0.6 'u' 'C:k'
+facez  0.6 -0.7 0 0.4 0.3 'q#': text  0.8 -0.6 'q' 'C:k'
+#CMYkP
+facez -1   -0.4 0 0.4 0.3 'C#': text -0.8 -0.3 'C' 'C:w'
+facez -0.6 -0.4 0 0.4 0.3 'M#': text -0.4 -0.3 'M' 'C:w'
+facez -0.2 -0.4 0 0.4 0.3 'Y#': text  0   -0.3 'Y' 'C:w'
+facez  0.2 -0.4 0 0.4 0.3 'k#': text  0.4 -0.3 'k' 'C:w'
+facez  0.6 -0.4 0 0.4 0.3 'P#': text  0.8 -0.3 'P' 'C:w'
+#lenuq
+facez -1   -0.1 0 0.4 0.3 'c#': text -0.8 0 'c' 'C:k'
+facez -0.6 -0.1 0 0.4 0.3 'm#': text -0.4 0 'm' 'C:k'
+facez -0.2 -0.1 0 0.4 0.3 'y#': text  0   0 'y' 'C:k'
+facez  0.2 -0.1 0 0.4 0.3 'w#': text  0.4 0 'w' 'C:k'
+facez  0.6 -0.1 0 0.4 0.3 'p#': text  0.8 0 'p' 'C:k'
+#BGRHW
+facez -1   0.2 0 0.4 0.3 'B#': text -0.8 0.3 'B' 'C:k'
+facez -0.6 0.2 0 0.4 0.3 'G#': text -0.4 0.3 'G' 'C:k'
+facez -0.2 0.2 0 0.4 0.3 'R#': text  0   0.3 'R' 'C:k'
+facez  0.2 0.2 0 0.4 0.3 'H#': text  0.4 0.3 'H' 'C:k'
+facez  0.6 0.2 0 0.4 0.3 'W#': text  0.8 0.3 'W' 'C:k'
+#bgrhw
+facez -1   0.5 0 0.4 0.3 'b#': text -0.8 0.6 'b' 'C:w'
+facez -0.6 0.5 0 0.4 0.3 'g#': text -0.4 0.6 'g' 'C:w'
+facez -0.2 0.5 0 0.4 0.3 'r#': text  0   0.6 'r' 'C:w'
+facez  0.2 0.5 0 0.4 0.3 'h#': text  0.4 0.6 'h' 'C:w'
+facez  0.6 0.5 0 0.4 0.3 'w#': text  0.8 0.6 'w' 'C:w'
+#brighted
+facez -1   0.8 0 0.4 0.3 'r1#': text -0.8 0.9 'r1' 'C:k'
+facez -0.6 0.8 0 0.4 0.3 'r3#': text -0.4 0.9 'r3' 'C:k'
+facez -0.2 0.8 0 0.4 0.3 'r5#': text  0   0.9 'r5' 'C:k'
+facez  0.2 0.8 0 0.4 0.3 'r7#': text  0.4 0.9 'r7' 'C:k'
+facez  0.6 0.8 0 0.4 0.3 'r9#': text  0.8 0.9 'r9' 'C:k'
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Color schemes sample, Normal transparency, Colors sample, Basic features
+ at subsection Color schemes sample
+ at cindex Colorbar
+ at float
+ at image{../png/color_schemes, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData a(256,2);	a.Fill(-1,1);
+gr->SubPlot(2,10,0,0.2);	gr->Dens(a,"kw", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kw", "C", -8);
+gr->SubPlot(2,10,1,0.2);	gr->Dens(a,"wk", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "wk", "C", -8);
+gr->SubPlot(2,10,2,0.2);	gr->Dens(a,"kHCcw", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kHCcw", "C", -8);
+gr->SubPlot(2,10,3,0.2);	gr->Dens(a,"kBbcw", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kBbcw", "C", -8);
+gr->SubPlot(2,10,4,0.2);	gr->Dens(a,"kRryw", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kRryw", "C", -8);
+gr->SubPlot(2,10,5,0.2);	gr->Dens(a,"kGgew", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kGgew", "C", -8);
+gr->SubPlot(2,10,6,0.2);	gr->Dens(a,"BbwrR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbwrR", "C", -8);
+gr->SubPlot(2,10,7,0.2);	gr->Dens(a,"BbwgG", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbwgG", "C", -8);
+gr->SubPlot(2,10,8,0.2);	gr->Dens(a,"GgwmM", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "GgwmM", "C", -8);
+gr->SubPlot(2,10,9,0.2);	gr->Dens(a,"UuwqR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "UuwqR", "C", -8);
+gr->SubPlot(2,10,10,0.2);	gr->Dens(a,"QqwcC", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "QqwcC", "C", -8);
+gr->SubPlot(2,10,11,0.2);	gr->Dens(a,"CcwyY", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "CcwyY", "C", -8);
+gr->SubPlot(2,10,12,0.2);	gr->Dens(a,"bcwyr", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "bcwyr", "C", -8);
+gr->SubPlot(2,10,13,0.2);	gr->Dens(a,"bwr", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "bwr", "C", -8);
+gr->SubPlot(2,10,14,0.2);	gr->Dens(a,"BbcyrR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR", "C", -8);
+gr->SubPlot(2,10,15,0.2);	gr->Dens(a,"UbcyqR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "UbcyqR", "C", -8);
+gr->SubPlot(2,10,16,0.2);	gr->Dens(a,"BbcwyrR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbcwyrR", "C", -8);
+gr->SubPlot(2,10,17,0.2);	gr->Dens(a,"bcyr", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "bcyr", "C", -8);
+gr->SubPlot(2,10,18,0.2);	gr->Dens(a,"BbcyrR|", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR|", "C", -8);
+gr->SubPlot(2,10,19,0.2);	gr->Dens(a,"bgr", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "bgr", "C", -8);
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new a 256 2: fill a 'x'
+subplot 2 10 0 0.2:dens a 'kw'
+text -1.4 -0.3 'kw' '' -8
+subplot 2 10 1 0.2:dens a 'wk'
+text -1.4 -0.3 'wk' '' -8
+subplot 2 10 2 0.2:dens a 'kHCcw'
+text -1.4 -0.3 'kHCcw' '' -8
+subplot 2 10 3 0.2:dens a 'kBbcw'
+text -1.4 -0.3 'kBbcw' '' -8
+subplot 2 10 4 0.2:dens a 'kRryw'
+text -1.4 -0.3 'kRryw' '' -8
+subplot 2 10 5 0.2:dens a 'kGgew'
+text -1.4 -0.3 'kGgew' '' -8
+subplot 2 10 6 0.2:dens a 'BbwrR'
+text -1.4 -0.3 'BbwrR' '' -8
+subplot 2 10 7 0.2:dens a 'BbwgG'
+text -1.4 -0.3 'BbwgG' '' -8
+subplot 2 10 8 0.2:dens a 'GgwmM'
+text -1.4 -0.3 'GgwmM' '' -8
+subplot 2 10 9 0.2:dens a 'UuwqR'
+text -1.4 -0.3 'UuwqR' '' -8
+subplot 2 10 10 0.2:dens a 'QqwcC'
+text -1.4 -0.3 'QqwcC' '' -8
+subplot 2 10 11 0.2:dens a 'CcwyY'
+text -1.4 -0.3 'CcwyY' '' -8
+subplot 2 10 12 0.2:dens a 'bcwyr'
+text -1.4 -0.3 'bcwyr' '' -8
+subplot 2 10 13 0.2:dens a 'bwr'
+text -1.4 -0.3 'bwr' '' -8
+subplot 2 10 14 0.2:dens a 'BbcyrR'
+text -1.4 -0.3 'BbcyrR' '' -8
+subplot 2 10 15 0.2:dens a 'UbcyqR'
+text -1.4 -0.3 'UbcyqR' '' -8
+subplot 2 10 16 0.2:dens a 'BbcwyrR'
+text -1.4 -0.3 'BbcwyrR' '' -8
+subplot 2 10 17 0.2:dens a 'bcyr'
+text -1.4 -0.3 'bcyr' '' -8
+subplot 2 10 18 0.2:dens a 'BbcyrR|'
+text -1.4 -0.3 'BbcyrR|' '' -8
+subplot 2 10 19 0.2:dens a 'bgr'
+text -1.4 -0.3 'bgr' '' -8
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Normal transparency, Glass-like transparency, Color schemes sample, Basic features
+ at subsection Normal transparency
+ at cindex TranspType
+ at float
+ at image{../png/type0, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+gr->Alpha(true);	gr->Light(true);
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 
+gr->TranspType = 0;	gr->Clf();
+gr->SubPlot(2,2,0);	gr->Rotate(40,60);	gr->Surf(a);	gr->Box();
+gr->SubPlot(2,2,1);	gr->Rotate(40,60);	gr->Dens(a);	gr->Box();
+gr->SubPlot(2,2,2);	gr->Rotate(40,60);	gr->Cont(a);	gr->Box();
+gr->SubPlot(2,2,3);	gr->Rotate(40,60);	gr->Axial(a);	gr->Box();
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 
+transptype 0: clf
+subplot 2 2 0: rotate 40 60: surf a:  box
+subplot 2 2 1: rotate 40 60: dens a:  box
+subplot 2 2 2: rotate 40 60: cont a:  box
+subplot 2 2 3: rotate 40 60: axial a: box
+ at end verbatim
 @c ------------------------------------------------------------------
+ at node Glass-like transparency, Lamp-like transparency, Normal transparency, Basic features
+ at subsection Glass-like transparency
+ at cindex TranspType
+ at float
+ at image{../png/type1, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+gr->Alpha(true);	gr->Light(true);
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+
+gr->TranspType = 1;	gr->Clf();
+gr->SubPlot(2,2,0);	gr->Rotate(40,60);	gr->Surf(a);	gr->Box();
+gr->SubPlot(2,2,1);	gr->Rotate(40,60);	gr->Dens(a);	gr->Box();
+gr->SubPlot(2,2,2);	gr->Rotate(40,60);	gr->Cont(a);	gr->Box();
+gr->SubPlot(2,2,3);	gr->Rotate(40,60);	gr->Axial(a);	gr->Box();
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+transptype 1: clf
+subplot 2 2 0: rotate 40 60: surf a:  box
+subplot 2 2 1: rotate 40 60: dens a:  box
+subplot 2 2 2: rotate 40 60: cont a:  box
+subplot 2 2 3: rotate 40 60: axial a: box
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Lamp-like transparency, , Glass-like transparency, Basic features
+ at subsection Lamp-like transparency
+ at cindex TranspType
+ at float
+ at image{../png/type2, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+gr->Alpha(true);	gr->Light(true);
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+
+gr->TranspType = 2;	gr->Clf();
+gr->SubPlot(2,2,0);	gr->Rotate(40,60);	gr->Surf(a);	gr->Box();
+gr->SubPlot(2,2,1);	gr->Rotate(40,60);	gr->Dens(a);	gr->Box();
+gr->SubPlot(2,2,2);	gr->Rotate(40,60);	gr->Cont(a);	gr->Box();
+gr->SubPlot(2,2,3);	gr->Rotate(40,60);	gr->Axial(a);	gr->Box();
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+transptype 2: clf
+subplot 2 2 0: rotate 40 60: surf a:  box
+subplot 2 2 1: rotate 40 60: dens a:  box
+subplot 2 2 2: rotate 40 60: cont a:  box
+subplot 2 2 3: rotate 40 60: axial a: box
+ at end verbatim
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 @node Additional features, Advanced features, Dual plotting samples, Samples
 @section Additional features
-
 @menu
 * Legend sample::               
 * Adding mesh sample::          
@@ -4451,19 +5427,17 @@ gr.Dots(a);
 * Drops sample::                
 * Molecules drawing sample::    
 @end menu
-
 @c ------------------------------------------------------------------
 @node Legend sample, Adding mesh sample, , Additional features
 @subsection Legend sample
 @cindex Plot
 @cindex Legend
 @cindex AddLegend
-
 @float
- at image{png/legend, 7cm}
- at caption{Example of Legend usage. @tdref{legend}}
+ at image{../png/legend, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData f(50,3);
@@ -4478,12 +5452,12 @@ gr->AddLegend("sin(\\pi \\sqrt{\\a x})","r+");
 gr->Legend();
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new f 50 3
 modify f 'sin(2*pi*x*x)'
 modify f 'sin(2*pi*x)' 1
 modify f 'sin(2*pi*sqrt(x))' 2
-
 axis 0 -1 1 1
 box
 plot f
@@ -4493,6 +5467,7 @@ addlegend 'sin(\pi x)' 'g*'
 addlegend 'sin(\pi \sqrt{\a x})' 'r+'
 legend
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT f = mgl_create_data_size(50,3,1);
@@ -4516,7 +5491,6 @@ f = mgl_create_data_size(50,3,1)
 call mgl_data_modify(f,'sin(2*pi*x*x)',0)
 call mgl_data_modify(f,'sin(2*pi*x)',1)
 call mgl_data_modify(f,'sin(2*pi*sqrt(x))',2)
-
 call mgl_set_axis(gr, 0.,-1.,0., 1.,1.,1., 0.,0.,0.)
 call mgl_box(gr,1)
 call mgl_plot(gr,f,'')
@@ -4537,7 +5511,7 @@ gr.AddLegend("sin(\\pi x)","g*");
 gr.AddLegend("sin(\\pi\\sqrt{\\a x})","r+");
 gr.Legend();
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Adding mesh sample, Surf & Cont sample, Legend sample, Additional features
 @subsection Adding mesh sample
@@ -4546,19 +5520,17 @@ gr.Legend();
 @cindex Dens
 @cindex Cont
 @cindex Axial
-
 @float
- at image{png/samplea, 7cm}
- at caption{Example of adding mesh. @tdref{samplea}}
+ at image{../png/samplea, 7cm}
+ at c @caption{Example of adding mesh. @tdref{samplea}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 gr->Light(true);
 gr->Alpha(true);
-
 gr->SubPlot(2,2,0); gr->Rotate(40,60);
 gr->Surf(a,"BbcyrR#");  gr->Box();
 gr->SubPlot(2,2,1); gr->Rotate(40,60);
@@ -4569,13 +5541,12 @@ gr->SubPlot(2,2,3); gr->Rotate(40,60);
 gr->Axial(a,"BbcyrR#"); gr->Box();
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 alpha on
 light on
-
 subplot 2 2 0
 rotate 40 60
 surf a 'BbcyrR#'
@@ -4593,13 +5564,13 @@ rotate 40 60
 axial a 'BbcyrR#'
 box
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_set_alpha(gr,1);
 mgl_set_light(gr,1);
-
 mgl_subplot(gr,2,2,0); mgl_rotate(gr,40.,60.,0.);
 mgl_surf(gr,a,"BbcyrR#");       mgl_box(gr,1);
 mgl_subplot(gr,2,2,1); mgl_rotate(gr,40.,60.,0.);
@@ -4619,7 +5590,6 @@ a = mgl_create_data_size(50,40,1)
 call mgl_data_modify(a,'0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))',0)
 call mgl_set_alpha(gr,1)
 call mgl_set_light(gr,1)
-
 call mgl_subplot(gr,2,2,0)
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_surf(gr,a,'BbcyrR#')
@@ -4652,24 +5622,21 @@ gr.Rotate(40,60);   gr.Cont(a,"BbcyrR#");   gr.Box();
 gr.SubPlot(2,2,3);
 gr.Rotate(40,60);   gr.Axial(a,"BbcyrR#");  gr.Box();
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Surf & Cont sample, Flow & Dens sample, Adding mesh sample, Additional features
 @subsection Surf & Cont sample
 @cindex Surf
 @cindex Cont
-
 @float
- at image{png/surf_cont_y, 7cm}
- at caption{Example of Surf & Cont. @tdref{surf_cont_y}}
+ at image{../png/surf_cont_y, 7cm}
+ at c @caption{Example of Surf & Cont. @tdref{surf_cont_y}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
@@ -4677,21 +5644,21 @@ gr->Surf(a);
 gr->Cont(a,"y");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 surf a
 cont a 'y'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -4706,7 +5673,6 @@ real zero, nan
 zero = 0; nan = zero/zero
 a = mgl_create_data_size(50,40,1)
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0)
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -4722,18 +5688,17 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.Surf(a);         gr.Cont(a,"y");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Flow & Dens sample, Several light sample, Surf & Cont sample, Additional features
 @subsection Flow & Dens sample
 @cindex Flow
 @cindex Dens
-
 @float
- at image{png/flow_dens, 7cm}
- at caption{Example of Flow & Dens. @tdref{flow_dens}}
+ at image{../png/flow_dens, 7cm}
+ at c @caption{Example of Flow & Dens. @tdref{flow_dens}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40), b(50,40), d(a);
@@ -4744,6 +5709,7 @@ gr->Box();
 gr->Flow(a,b,"br"); gr->Dens(d,"BbcyrR");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
@@ -4755,6 +5721,7 @@ box
 flow a b 'br'
 dens d 'BbcyrR'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a, b, d;
@@ -4764,7 +5731,6 @@ d = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(d,"sqrt(v^2+w^2)",a,b);
-
 mgl_box(gr,1);
 mgl_flow_2d(gr,a,b,"br",5,1,0.);
 mgl_dens(gr,d,"BbcyrR",-1.);
@@ -4779,7 +5745,6 @@ d = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(d,"sqrt(v^2+w^2)",a,b);
-
 call mgl_box(gr,1)
 call mgl_flow_2d(gr,a,b,'br',5,1,0.)
 call mgl_dens(gr,d,'BbcyrR',-1.);
@@ -4796,23 +5761,21 @@ d.Modify("sqrt(v^2+w^2)",a,b);
 gr.Box();
 gr.Flow(a,b,"br");      gr.Dens(d,"BbcyrR");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Several light sample, Mirrored surface sample, Flow & Dens sample, Additional features
 @subsection Several light sample
 @cindex Surf
 @cindex Light
-
 @float
- at image{png/several_light, 7cm}
- at caption{Example of Surf with several light. @tdref{several_light}}
+ at image{../png/several_light, 7cm}
+ at c @caption{Example of Surf with several light. @tdref{several_light}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Light(1,mglPoint(0,1,0),'c');
@@ -4822,30 +5785,28 @@ gr->Box();
 gr->Surf(a,"h");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 light 1 0 1 0 'c'
 light 2 1 0 0 'y'
 light 3 0 -1 0 'm'
-
 box
 surf a 'h'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_add_light_rgb(gr,1,0.,1.,0.,1, 0.,1.,1.,0.5);
 mgl_add_light_rgb(gr,2,1.,0.,0.,1, 1.,1.,0.,0.5);
 mgl_add_light_rgb(gr,3,0.,-1.,0.,1, 1.,0.,1.,0.5);
-
 mgl_box(gr,1);
 mgl_surf(gr,a,"h");
 mgl_delete_data(a);
@@ -4855,13 +5816,11 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_add_light_rgb(gr,1,0.,1.,0.,1, 0.,1.,1.,0.5)
 call mgl_add_light_rgb(gr,2,1.,0.,0.,1, 1.,1.,0.,0.5)
 call mgl_add_light_rgb(gr,3,0.,-1.,0.,1, 1.,0.,1.,0.5)
-
 call mgl_box(gr,1)
 call mgl_surf(gr,a,'h')
 call mgl_delete_data(a)
@@ -4877,33 +5836,31 @@ gr.AddLight(3,0,-1,0,"m");
 gr.Box();
 gr.Surf(a,"h")
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Mirrored surface sample, Cont with labels sample, Several light sample, Additional features
 @subsection Mirrored surface sample
 @cindex Surf
-
 @float
- at image{png/mirror, 7cm}
- at caption{Example of mirrored surface. @tdref{mirror}}
+ at image{../png/mirror, 7cm}
+ at c @caption{Example of mirrored surface. @tdref{mirror}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(30,40),x(30),y1(40),y2(40);
 a.Modify("pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)");
 x.Fill(-1,1); y1.Fill(0,1); y2.Fill(0,-1);
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Surf(x,y1,a,"r"); gr->Surf(x,y2,a,"b");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 30 40
 modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)'
-
 rotate 40 60
 light on
 surf a 'r'; yrange 0 1
@@ -4917,13 +5874,13 @@ var x 30 -1 1
 var y1 40 0 1
 var y2 40 0 -1
 modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)'
-
 rotate 40 60
 light on
 surf x y1 a 'r'
 surf x y2 a 'b'
 box
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a,x,y1,y2;
@@ -4935,7 +5892,6 @@ mgl_data_modify(a,"pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)",0);
 mgl_data_fill(x,-1.,1.,'x');
 mgl_data_fill(y1,0.,1.,'x');
 mgl_data_fill(y2,0.,-1.,'x');
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -4954,7 +5910,6 @@ call mgl_data_modify(a,'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)',0)
 call mgl_data_fill(x,-1.,1.,'x')
 call mgl_data_fill(y1,0.,1.,'x')
 call mgl_data_fill(y2,0.,-1.,'x')
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -4973,17 +5928,16 @@ x.Fill(-1,1);   y1.Fill(0,1);   y2.Fill(0,-1);
 gr.Rotate(40,60);       gr.Light(True);         gr.Box();
 gr.Surf(x,y1,a,"r");    gr.Surf(x,y2,a,"b");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cont with labels sample, Ternary plot sample, Mirrored surface sample, Additional features
 @subsection Cont with labels sample
 @cindex Cont
-
 @float
- at image{png/contt, 7cm}
- at caption{Example of Cont with labels. @tdref{contt}}
+ at image{../png/contt, 7cm}
+ at c @caption{Example of Cont with labels. @tdref{contt}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(50,40);
@@ -4992,12 +5946,14 @@ gr->Box();
 gr->Cont(a,"BbcyrRt");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 cont a 'BbcyrRt'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
@@ -5011,7 +5967,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_cont(gr,a,'BbcyrRt',7,0)
 call mgl_delete_data(a)
@@ -5023,18 +5978,16 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.Cont(a,"BbcyrRt");
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Ternary plot sample, Coloring by coordinates sample, Cont with labels sample, Additional features
 @subsection Ternary plot sample
 @cindex Ternary
-
 @float
- at image{png/ternary, 7cm}
- at caption{Example of Ternary plot. @tdref{ternary}}
+ at image{../png/ternary, 7cm}
+ at c @caption{Example of Ternary plot. @tdref{ternary}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData x(50),y(50),rx(10),ry(10), a(20,30);
@@ -5042,7 +5995,6 @@ a.Modify("4*x*y");
 x.Modify("0.25*(1+cos(2*pi*x))");
 y.Modify("0.25*(1+sin(2*pi*x))");
 rx.Modify("rnd"); ry.Modify("(1-v)*rnd",rx);
-
 gr->Text(mglPoint(-0.8,1.3), "Ternary plot (x+y+t=1)");
 gr->Ternary(true);
 gr->Plot(x,y,"r2");
@@ -5055,6 +6007,7 @@ gr->Label('y',"y comp.");
 gr->Label('t',"t comp.");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new rx 10
 new ry 10
@@ -5078,6 +6031,7 @@ xlabel 'x comp.'
 ylabel 'y comp.'
 tlabel 't comp.'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT x,y,rx,ry,a;
@@ -5091,13 +6045,11 @@ mgl_data_modify(y,"0.25*(1+sin(2*pi*x))",0);
 mgl_data_modify(rx,"rnd",0);
 mgl_data_modify_vw(ry,"(1-v)*rnd",rx,0);
 mgl_data_modify(a,"4*x*y",0);
-
 mgl_puts_ext(gr,-0.8,1.3,0.,"Ternary plot (x+y+t=1)","C",-1.4,'t');
 mgl_set_ternary(gr,1);
 mgl_plot_xy(gr,x,y,"r2");
 mgl_plot_xy(gr,rx,ry,"q^ ");
 mgl_cont(gr,a,"",7,0.);
-
 mgl_line(gr,0.5,0.,0.,0.,0.75,0.,"g2",2);
 mgl_axis(gr,"xyz");
 mgl_axis_grid(gr,"xyz","B:");
@@ -5121,13 +6073,11 @@ call mgl_data_modify(y,'0.25*(1+sin(2*pi*x))',0)
 call mgl_data_modify(rx,'rnd',0)
 call mgl_data_modify_vw(ry,'(1-v)*rnd',rx,rx)
 call mgl_data_modify(a,'4*x*y',0)
-
 call mgl_puts_ext(gr,-0.8,1.3,0.,'Ternary plot (x+y+t=1)','C',-1.4,'t')
 call mgl_set_ternary(gr,1)
 call mgl_plot_xy(gr,x,y,'r2')
 call mgl_plot_xy(gr,rx,ry,'q^ ')
 call mgl_cont(gr,a,'',7,0.)
-
 call mgl_line(gr,0.5,0.,0.,0.,0.75,0.,'g2',2)
 call mgl_axis(gr,'xyz')
 call mgl_axis_grid(gr,'xyz','B:')
@@ -5155,40 +6105,38 @@ gr.Label("x","x comp.");
 gr.Label("y","y comp.");
 gr.Label("t","t comp.");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Coloring by coordinates sample, Drops sample, Ternary plot sample, Additional features
 @subsection Coloring by coordinates sample
 @cindex Surf3
-
 @float
- at image{png/surf3_rgbd, 7cm}
- at caption{Example of Surf3 colored by coordinates. @tdref{surf3_rgbd}}
+ at image{../png/surf3_rgbd, 7cm}
+ at c @caption{Example of Surf3 colored by coordinates. @tdref{surf3_rgbd}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->Surf3(a,"bgrd");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 box
 surf3 a 'bgrd'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_surf3(gr,a,"bgrd",3);
@@ -5199,7 +6147,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_surf3(gr,a,'bgrd',3)
@@ -5212,17 +6159,16 @@ a.Modify("-2*((2*x-1)^2+(2*y-1)^2+(2*z-1)^4-(2*z-1)^2-0.1)");
 gr.Rotate(40,60);       gr.Box();
 gr.Surf3(a,"bgrd");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Drops sample, Molecules drawing sample, Coloring by coordinates sample, Additional features
 @subsection Drops sample
 @cindex Drop
-
 @float
- at image{png/drops, 7cm}
- at caption{Example of Drop(s). @tdref{drops}}
+ at image{../png/drops, 7cm}
+ at c @caption{Example of Drop(s). @tdref{drops}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 gr->Light(true);
@@ -5241,6 +6187,7 @@ gr->Ball(mglPoint(1,0,1),'k');
 gr->Line(mglPoint(-1,0,1),mglPoint(1,0,1),"b");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 light on
 text -1 1.2 'sh=0'
@@ -5256,12 +6203,12 @@ ball -0.33 0 1 'k'
 ball 0.33 0 1 'k'
 ball 1 0 1 'k'
 line -1 0 1 1 0 1 'b'
-
 new h 100
 modify h '0.25*(1+x)^2'
 plot h 'k|'
 text -1 0.6 'h\sim(1+sh)^2' 'rL'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 mgl_set_light(gr,1);
@@ -5311,22 +6258,20 @@ gr.Ball(-1,0,1,"k");    gr.Ball(-0.33,0,1,"k");
 gr.Ball(0.33,0,1,"k");  gr.Ball(1,0,1,"k");
 gr.Line(-1,0,1,1,0,1,"b");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Molecules drawing sample, , Drops sample, Additional features
 @subsection Molecules drawing sample
 @cindex Drop
 @cindex Sphere
-
 @float
- at image{png/molecule, 7cm}
- at caption{Example of molecules drawing. @tdref{molecule}}
+ at image{../png/molecule, 7cm}
+ at c @caption{Example of molecules drawing. @tdref{molecule}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 gr->Alpha(true); gr->Light(true);
-
 gr->SubPlot(2,2,0);
 gr->Text(mglPoint(0,1.2),"Methane, CH_4",0,-3); gr->Rotate(60,120);
 gr->Sphere(mglPoint(0,0,0),0.25,"k");
@@ -5338,7 +6283,6 @@ gr->Drop(mglPoint(0,0,0),mglPoint(0.47,0.82,-0.33),0.35,"h",1,2);
 gr->Sphere(mglPoint(0.33,0.57,-0.23),0.25,"g");
 gr->Drop(mglPoint(0,0,0),mglPoint(0.47,-0.82,-0.33),0.35,"h",1,2);
 gr->Sphere(mglPoint(0.33,-0.57,-0.23),0.25,"g");
-
 gr->SubPlot(2,2,1);
 gr->Text(mglPoint(0,1.2),"Water, H{_2}O",0,-3); gr->Rotate(60,100);
 gr->Sphere(mglPoint(0,0,0),0.25,"r");
@@ -5346,14 +6290,12 @@ gr->Drop(mglPoint(0,0,0),mglPoint(0.3,0.5,0),0.3,"m",1,2);
 gr->Sphere(mglPoint(0.3,0.5,0),0.25,"g");
 gr->Drop(mglPoint(0,0,0),mglPoint(0.3,-0.5,0),0.3,"m",1,2);
 gr->Sphere(mglPoint(0.3,-0.5,0),0.25,"g");
-
 gr->SubPlot(2,2,2);
 gr->Text(mglPoint(0,1.2),"Oxygen, O_2",0,-3); gr->Rotate(60,120);
 gr->Drop(mglPoint(0,0.5,0),mglPoint(0,-0.3,0),0.3,"m",1,2);
 gr->Sphere(mglPoint(0,0.5,0),0.25,"r");
 gr->Drop(mglPoint(0,-0.5,0),mglPoint(0,0.3,0),0.3,"m",1,2);
 gr->Sphere(mglPoint(0,-0.5,0),0.25,"r");
-
 gr->SubPlot(2,2,3);
 gr->Text(mglPoint(0,1.2),"Ammonia, NH_3",0,-3); gr->Rotate(60,120);
 gr->Sphere(mglPoint(0,0,0),0.25,"b");
@@ -5365,10 +6307,10 @@ gr->Drop(mglPoint(0,0,0),mglPoint(-0.65,0,0),0.32,"n",1,2);
 gr->Sphere(mglPoint(-0.65,0,0),0.25,"g");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 alpha on
 light on
-
 subplot 2 2 0
 text 0 1.2 'Methane, CH_4' '' -3
 rotate 60 120
@@ -5381,7 +6323,6 @@ drop 0 0 0 0.47 0.82 -0.33 0.35 'h' 1 2
 sphere 0.33 0.57 -0.23 0.25 'g'
 drop 0 0 0 0.47 -0.82 -0.33 0.35 'h' 1 2
 sphere 0.33 -0.57 -0.23 0.25 'g'
-
 subplot 2 2 1
 text 0 1.2 'Water, H{_2}O' '' -3
 rotate 60 100
@@ -5390,7 +6331,6 @@ drop 0 0 0 0.3 0.5 0 0.3 'm' 1 2
 sphere 0.3 0.5 0 0.25 'g'
 drop 0 0 0 0.3 -0.5 0 0.3 'm' 1 2
 sphere 0.3 -0.5 0 0.25 'g'
-
 subplot 2 2 2
 text 0 1.2 'Oxygen, O_2' '' -3
 rotate 60 120
@@ -5398,7 +6338,6 @@ drop 0 0.5 0 0 -0.3 0 0.3 'm' 1 2
 sphere 0 0.5 0 0.25 'r'
 drop 0 -0.5 0 0 0.3 0 0.3 'm' 1 2
 sphere 0 -0.5 0 0.25 'r'
-
 subplot 2 2 3
 text 0 1.2 0 'Ammonia, NH_3' '' -3
 rotate 60 120
@@ -5410,24 +6349,9 @@ sphere 0.33 -0.57 0 0.25 'g'
 drop 0 0 0 -0.65 0 0 0.32 'n' 1 2
 sphere -0.65 0 0 0.25 'g'
 @end verbatim
- at c @strong{Pure C code}
- at c @verbatim
- at c TO BE DONE
- at c @end verbatim
- at c @strong{Fortran code}
- at c @verbatim
- at c TO BE DONE
- at c @end verbatim
- at c @strong{Python}
- at c @verbatim
- at c TO BE DONE
- at c @end verbatim
-
 @c ------------------------------------------------------------------
 @node Advanced features, , Additional features, Samples
 @section Advanced features
-
- at c ------------------------------------------------------------------
 @menu
 * Curvelinear coorinates sample::  
 * 2-axes sample::               
@@ -5443,38 +6367,34 @@ sphere -0.65 0 0 0.25 'g'
 * Manual ticks sample::         
 * ColumnPlot sample::           
 * StickPlot sample::            
+* Stereo image sample::         
 @end menu
-
+ at c ------------------------------------------------------------------
 @node Curvelinear coorinates sample, 2-axes sample, , Advanced features
 @subsection Curvelinear coorinates sample
 @cindex Axis
-
 @float
- at image{png/sample3, 7cm}
- at caption{Example of curvelinear coorinates usage. @tdref{sample3}}
+ at image{../png/sample3, 7cm}
+ at c @caption{Example of curvelinear coorinates usage. @tdref{sample3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 gr->Org = mglPoint(-1,1,-1);
-
 gr->SubPlot(2,2,0); gr->Rotate(60,40);
 gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100);
 gr->Axis(); gr->Grid();
 gr->Text(mglPoint(0,1.3,1),"Cartesian");
-
 gr->SubPlot(2,2,1); gr->Rotate(60,40);
 gr->SetFunc("y*sin(pi*x)","y*cos(pi*x)");
 gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100);
 gr->Axis(); gr->Grid();
 gr->Text(mglPoint(0,1.3,1),"Cylindrical");
-
 gr->SubPlot(2,2,2); gr->Rotate(60,40);
 gr->SetFunc("2*y*x","y*y - x*x");
 gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100);
 gr->Axis(); gr->Grid();
 gr->Text(mglPoint(0,1.3,1),"Parabolic");
-
 gr->SubPlot(2,2,3); gr->Rotate(60,40);
 gr->SetFunc("y*sin(pi*x)","y*cos(pi*x)","x+z");
 gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100);
@@ -5483,16 +6403,15 @@ gr->Text(mglPoint(0,1.3,1),"Spiral");
 gr->Axis(0,0,0); // set to default Cartesian
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 origin -1 1 -1
-
 subplot 2 2 0
 rotate 60 40
 line -1 0.5 0 1 0.5 0 'r2'
 axis
 grid
 text 0 1.3 1 'Cartesian'
-
 subplot 2 2 1
 rotate 60 40
 axis 'y*sin(pi*x)' 'y*cos(pi*x)' ''
@@ -5500,7 +6419,6 @@ line -1 0.5 0 1 0.5 0 'r2'
 axis
 grid
 text 0 1.3 1 'Cylindrical'
-
 subplot 2 2 2
 rotate 60 40
 axis '2*y*x' 'y*y - x*x' ''
@@ -5508,7 +6426,6 @@ line -1 0.5 0 1 0.5 0 'r2'
 axis
 grid
 text 0 1.3 1 'Parabolic'
-
 subplot 2 2 3
 rotate 60 40
 axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z'
@@ -5518,6 +6435,7 @@ grid
 text 0 1.3 1 'Spiral'
 axis '' '' '' # set to default Cartesian
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 mgl_set_origin(gr,-1,1,-1);
@@ -5525,19 +6443,16 @@ mgl_subplot(gr,2,2,0); mgl_rotate(gr,60,40,0);
 mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100);
 mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B");
 mgl_text(gr,0,1.3,1,"Cartesian");
-
 mgl_subplot(gr,2,2,1); mgl_rotate(gr,60,40,0);
 mgl_set_func(gr,"y*sin(pi*x)","y*cos(pi*x)",0);
 mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100);
 mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B");
 mgl_text(gr,0,1.3,1,"Cylindrical");
-
 mgl_subplot(gr,2,2,2); mgl_rotate(gr,60,40,0);
 mgl_set_func(gr,"2*y*x","y*y - x*x","");
 mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100);
 mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B");
 mgl_text(gr,0,1.3,1,"Parabolic");
-
 mgl_subplot(gr,2,2,3); mgl_rotate(gr,60,40,0);
 mgl_set_func(gr,"y*sin(pi*x)","y*cos(pi*x)","x+z");
 mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100);
@@ -5548,14 +6463,12 @@ mgl_set_func(gr,0,0,0); /* set to default Cartesian */
 @strong{Fortran code}
 @verbatim
 call mgl_set_origin(gr,-1.,1.,-1.)
-
 call mgl_subplot(gr,2,2,0)
 call mgl_rotate(gr,60.,40.,0.)
 call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100)
 call mgl_axis(gr,'xyz')
 call mgl_axis_grid(gr,'xyz','B')
 call mgl_text(gr,0.,1.3,1.,'Cartesian')
-
 call mgl_subplot(gr,2,2,1)
 call mgl_rotate(gr,60.,40.,0.)
 call mgl_set_func(gr,'y*sin(pi*x)','y*cos(pi*x)','')
@@ -5563,7 +6476,6 @@ call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100)
 call mgl_axis(gr,'xyz')
 call mgl_axis_grid(gr,'xyz','B')
 call mgl_text(gr,0.,1.3,1.,'Cylindrical')
-
 call mgl_subplot(gr,2,2,2)
 call mgl_rotate(gr,60.,40.,0.)
 call mgl_set_func(gr,'2*y*x','y*y - x*x','')
@@ -5571,7 +6483,6 @@ call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100)
 call mgl_axis(gr,'xyz')
 call mgl_axis_grid(gr,'xyz','B')
 call mgl_text(gr,0.,1.3,1.,"Parabolic")
-
 call mgl_subplot(gr,2,2,3)
 call mgl_rotate(gr,60.,40.,0.)
 call mgl_set_func(gr,'y*sin(pi*x)','y*cos(pi*x)','x+z')
@@ -5584,24 +6495,20 @@ call mgl_set_func(gr,'','','') ! set to default Cartesian
 @strong{Python}
 @verbatim
 gr.SetOrigin(-1,1,-1);
-
 gr.SubPlot(2,2,0);              gr.Rotate(60,40);
 gr.Line(-1,0.5,0,1,0.5,0,"r2",100);
 gr.Axis();              gr.Grid();
 gr.Puts(0,1.3,1,"Gartesian","rC",-1.5);
-
 gr.SubPlot(2,2,1);  gr.Rotate(60,40);
 gr.SetFunc("y*sin(pi*x)","y*cos(pi*x)");
 gr.Line(-1,0.5,0,1,0.5,0,"r2",100);
 gr.Axis();          gr.Grid();
 gr.Puts(0,1.3,1,"Cylindrical","rC",-1.5);
-
 gr.SubPlot(2,2,2);  gr.Rotate(60,40);
 gr.SetFunc("2*y*x","y*y-x*x");
 gr.Line(-1,0.5,0,1,0.5,0,"r2",100);
 gr.Axis();          gr.Grid();
 gr.Puts(0,1.3,1,"Parabolic","rC",-1.5);
-
 gr.SubPlot(2,2,3);  gr.Rotate(60,40);
 gr.SetFunc("y*sin(pi*x)","y*cos(pi*x)","x+z");
 gr.Line(-1,0.5,0,1,0.5,0,"r2",100);
@@ -5609,17 +6516,16 @@ gr.Axis();          gr.Grid();
 gr.Puts(0,1.3,1,"Spiral","rC",-1.5);
 gr.SetFunc("","");   # set to default Gartesian
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node 2-axes sample, Semi-log sample, Curvelinear coorinates sample, Advanced features
 @subsection 2-axes sample
 @cindex Axis
-
 @float
- at image{png/2_axis, 7cm}
- at caption{Example of 2 axes on the plot. @tdref{2_axis}}
+ at image{../png/2_axis, 7cm}
+ at c @caption{Example of 2 axes on the plot. @tdref{2_axis}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData y1(50), y2(50);
@@ -5632,6 +6538,7 @@ gr->Axis(); gr->Label('y',"axis 2",0);
 gr->Stem(y2,"r");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new y1 50
 new y2 50
@@ -5648,6 +6555,7 @@ axis
 ylabel 'axis 2' 0
 stem y2 'r'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT y1 = mgl_create_data_size(50,1,1);
@@ -5659,7 +6567,6 @@ mgl_set_origin(gr,-1.,-1.,-1.);
 mgl_axis(gr,"xyz");
 mgl_label_ext(gr,'y',"axis 1",0,-1.4,0.);
 mgl_plot(gr,y1,"b");
-
 mgl_set_axis_2d(gr,0.,0.,1.,1.);
 mgl_set_origin(gr,1.,1.,1.);
 mgl_axis(gr,"xyz");
@@ -5678,7 +6585,6 @@ call mgl_set_origin(gr,-1.,-1.,-1.)
 call mgl_axis(gr,'xyz')
 call mgl_label_ext(gr,'y','axis 1',0,-1.4,0.)
 call mgl_plot(gr,y1,'b')
-
 call mgl_set_axis_2d(gr,0.,0.,1.,1.)
 call mgl_set_origin(gr,1.,1.,1.)
 call mgl_axis(gr,'xyz')
@@ -5692,49 +6598,44 @@ y1.Modify("0.3*sin(2*pi*x)");   y2.Modify("0.5+0.3*cos(2*pi*x)");
 gr.SetRanges(-1,1,-1,1);   gr.SetOrigin(-1,-1);
 gr.Axis();      gr.Label("y","axis 1",0);
 gr.Plot(y1,"b");
-
 gr.SetRanges(0,1,0,1);      gr.SetOrigin(1,1);
 gr.Axis();      gr.Label("y","axis 2",0);
 gr.Stem(y2,"r");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Semi-log sample, Log-log sample, 2-axes sample, Advanced features
 @subsection Semi-log sample
 @cindex Axis
 @cindex SetTicks
 @cindex Plot
-
 @float
- at image{png/semilog, 7cm}
- at caption{Example of semi-log plot. @tdref{semilog}}
+ at image{../png/semilog, 7cm}
+ at c @caption{Example of semi-log plot. @tdref{semilog}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData x(2000), y(2000);
 x.Modify("0.01/(x+10^(-5))"); y.Modify("sin(1/v)",x);
-
 gr->Axis(mglPoint(0.01,-1),mglPoint(1000,1),mglPoint(0.01,-1));
 gr->SetFunc("lg(x)",0);  gr->SetTicks('x',0);
-
 gr->Box();
 gr->Plot(x,y,"b2");
 gr->Axis(); gr->Grid("xy","g");
 gr->Label('x',"x",0);   gr->Label('y', "y = sin 1/x",0);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new x 2000
 new y 2000
 modify x '0.01/(x+10^(-5))'
 modify y 'sin(1/v)' x
-
 xrange 0.01 1000
 origin 0.01 -1 0
 xtick 0
 axis 'lg(x)' '' ''
-
 plot x y 'b2'
 axis
 grid 'xy' 'g'
@@ -5742,17 +6643,16 @@ xlabel 'x' 0
 ylabel 'y = sin 1/x' 0
 box
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT x = mgl_create_data_size(2000,1,1);
 HMDT y = mgl_create_data_size(2000,1,1);
 mgl_data_modify(x,"0.01/(x+10^(-5))",0);
 mgl_data_modify_vw(y,"sin(1/v)",x,0);
-
 mgl_set_axis(gr,0.01,-1.,0.,1000.,1.,0.,0.01,-1.,0.);
 mgl_set_func(gr,"lg(x)",0,0);
 mgl_set_ticks(gr,0.,-5.,-5.);
-
 mgl_box(gr,1);
 mgl_plot_xy(gr,x,y,"b2");
 mgl_axis(gr,"xy"); mgl_axis_grid(gr,"xy","g");
@@ -5767,11 +6667,9 @@ x = mgl_create_data_size(2000,1,1)
 y = mgl_create_data_size(2000,1,1)
 call mgl_data_modify(x,'0.01/(x+10^(-5))',0)
 call mgl_data_modify_vw(y,'sin(1/v)',x,x)
-
 call mgl_set_axis(gr,0.01,-1.,0.,1000.,1.,0.,0.01,-1.,0.)
 call mgl_set_func(gr,'lg(x)','','')
 call mgl_set_ticks(gr,0.,-5.,-5.)
-
 call mgl_box(gr,1)
 call mgl_plot_xy(gr,x,y,'b2')
 call mgl_axis(gr,'xy')
@@ -5785,45 +6683,41 @@ call mgl_delete_data(y)
 @verbatim
 TO BE DONE
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Log-log sample, Fitting sample, Semi-log sample, Advanced features
 @subsection Log-log sample
 @cindex Axis
 @cindex SetTicks
 @cindex Plot
-
 @float
- at image{png/loglog, 7cm}
- at caption{Example of log-log plot. @tdref{loglog}}
+ at image{../png/loglog, 7cm}
+ at c @caption{Example of log-log plot. @tdref{loglog}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData x(100), y(100);
 x.Modify("pow(10,6*x-3)"); y.Modify("sqrt(1+v^2)",x);
-
 gr->Axis(mglPoint(0.001,0.1),mglPoint(1000,1000),mglPoint(0.001,0.1));
 gr->SetFunc("lg(x)","lg(y)");
 gr->SetTicks('x',0);    gr->SetTicks('y',0);
-
 gr->Box();
 gr->Plot(x,y,"b2");
 gr->Axis(); gr->Grid("xy","g;");
 gr->Label('x',"x",0); gr->Label('y', "y=\\sqrt{1+x^2}",0);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new x 100
 new y 100
 modify x 'pow(10,6*x-3)'
 modify y 'sqrt(1+v^2)' x
-
 axis 0.001 0.1 1000 1000
 xtick 0
 ytick 0
 axis 'lg(x)' 'lg(y)' ''
-
 plot x y 'b2'
 axis
 grid 'xy' 'g;'
@@ -5831,17 +6725,16 @@ xlabel 'x' 0
 ylabel 'y=\sqrt{1+x^2}' 0
 box
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT x = mgl_create_data_size(100,1,1);
 HMDT y = mgl_create_data_size(100,1,1);
 mgl_data_modify(x,"pow(10,6*x-3)",0);
 mgl_data_modify_vw(y,"sqrt(1+v^2)",x,0);
-
 mgl_set_axis(gr,0.001,0.1,0.,1000.,1000.,0.,0.001,0.1,0.);
 mgl_set_func(gr,"lg(x)","lg(y)",0);
 mgl_set_ticks(gr,0.,0.,-5.);
-
 mgl_box(gr,1);
 mgl_plot_xy(gr,x,y,"b2");
 mgl_axis(gr,"xy"); mgl_axis_grid(gr,"xy","g;");
@@ -5856,11 +6749,9 @@ x = mgl_create_data_size(100,1,1)
 y = mgl_create_data_size(100,1,1)
 call mgl_data_modify(x,'pow(10,6*x-3)',0)
 call mgl_data_modify_vw(y,'sqrt(1+v^2)',x,x)
-
 call mgl_set_axis(gr,0.001,0.1,0.,1000.,1000.,0.,0.001,0.1,0.)
 call mgl_set_func(gr,'lg(x)','lg(y)','')
 call mgl_set_ticks(gr,0.,0.,-5.)
-
 call mgl_box(gr,1)
 call mgl_plot_xy(gr,x,y,'b2')
 call mgl_axis(gr,'xy')
@@ -5881,28 +6772,25 @@ gr.Box();               gr.Plot(x,y,"b2");
 gr.Axis();              gr.Grid("xy","g;");
 gr.Label("x","x",0);    gr.Label("y","y=\\sqrt{1+x^2}",0);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Fitting sample, Envelop sample, Log-log sample, Advanced features
 @subsection Fitting sample
 @cindex Fit
 @cindex PutsFit
-
 @float
- at image{png/fit, 7cm}
- at caption{Example of nonlinear fitting. @tdref{fit}}
+ at image{../png/fit, 7cm}
+ at c @caption{Example of nonlinear fitting. @tdref{fit}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData rnd(100), in(100), res;
 rnd.Fill("0.4*rnd+0.1+sin(2*pi*x)", gr->Min, gr->Max);
 in.Fill("0.3+sin(2*pi*x)", gr->Min, gr->Max);
-
 gr->Axis(mglPoint(-1,-2), mglPoint(1,2));
 gr->Plot(rnd, ". ");
 gr->Box();
-
 float ini[3] = {1,1,3};
 gr->Fit(res, rnd, "a+b*sin(c*x)", "abc", ini);
 gr->Plot(res, "r");
@@ -5912,16 +6800,15 @@ gr->PutsFit(mglPoint(0, -1.8), "y = ", "C:r", -1);
 gr->Text(mglPoint(0, 2.2), "initial: y = 0.3+sin(2\\pi x)", "C:b", -1);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new rnd 100
 fill rnd '0.4*rnd+0.1+sin(2*pi*x)'
 new in 100
 fill in '0.3+sin(2*pi*x)'
-
 yrange -2 2
 plot rnd '. '
 box
-
 list ini 1 1 3
 fit res rnd 'a+b*sin(c*x)' 'abc' ini
 plot res 'r'
@@ -5930,6 +6817,7 @@ text -1 -1.3 'fitted:' 'L:r' -1
 putsfit 0 -1.8 'y = ' 'C:r'
 text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT rnd,in,res;
@@ -5942,7 +6830,6 @@ mgl_data_modify(in,"0.3+sin(4*pi*x)",0);
 mgl_set_axis_2d(gr,-1.,-2.,1.,2.);
 mgl_plot(gr,rnd,". ");
 mgl_box(gr,1);
-
 mgl_fit_1(gr,res,rnd,"a+b*sin(c*x)","abc",ini);
 mgl_plot(gr,res,"r");   mgl_plot(gr,in,"b");
 mgl_puts_ext(gr,-1.,-1.3,0.,"fitted:","L:r",-1.,'t');
@@ -5962,7 +6849,6 @@ call mgl_data_modify(in,"0.3+sin(4*pi*x)",0);
 call mgl_set_axis_2d(gr,-1.,-2.,1.,2.);
 call mgl_plot(gr,rnd,". ");
 call mgl_box(gr,1);
-
 call mgl_fit_1(gr,res,rnd,"a+b*sin(c*x)","abc",ini);
 call mgl_plot(gr,res,"r");
 call mgl_plot(gr,in,"b");
@@ -5978,7 +6864,6 @@ In.Modify("0.3+sin(4*pi*x)");
 gr.SetRanges(-1,1,-2,2);
 gr.Plot(rnd,". ");
 gr.Box();
-
 ini[0], ini[1], ini[2] = 1, 1, 3;
 gr.Fit(res,rnd,"a+b*sin(c*x)","abc",ini);
 gr.Plot(res,"r");   gr.Plot(In,"b");
@@ -5986,17 +6871,16 @@ gr.Puts(-1,-1.3,0,"fitted:","L:r",-1);
 gr.PutsFit(0,-1.8,0,"y = ","C:r",-1);
 gr.Puts(0,2.2,0,"initial: y = 0.3+sin(2\\pi x)","C:b",-1);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Envelop sample, Sew sample, Fitting sample, Advanced features
 @subsection Envelop sample
 @cindex Envelop
-
 @float
- at image{png/envelop, 7cm}
- at caption{Example of envelop reconstruction.}@c @tdref{envelop}}
+ at image{../png/envelop, 7cm}
+ at c @caption{Example of envelop reconstruction.}@c @tdref{envelop}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(1000);
@@ -6007,6 +6891,7 @@ gr->Plot(a, "r");
 gr->Axis();
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 1000
 fill a 'exp(-8*x^2)*sin(10*pi*x)'
@@ -6015,6 +6900,7 @@ envelop a
 plot a 'r'
 axis
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(1000,1,1);
@@ -6043,17 +6929,16 @@ a.Envelop("x");
 gr.Plot(a,"r");
 gr.Axis();
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Sew sample, STFA sample, Envelop sample, Advanced features
 @subsection Sew sample
 @cindex Sew
-
 @float
- at image{png/sew, 7cm}
- at caption{Example of phase ``sewing''.}@c @tdref{sew}}
+ at image{../png/sew, 7cm}
+ at c @caption{Example of phase ``sewing''.}@c @tdref{sew}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(100, 100);
@@ -6067,6 +6952,7 @@ gr->Surf(a, "r");
 gr->Box();
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 100 100
 modify a 'mod((y^2-(1-x)^2)/2,0.1)'
@@ -6078,6 +6964,7 @@ sew a 'xy' 0.1
 surf a 'r'
 box
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(100,100,1);
@@ -6085,7 +6972,6 @@ mgl_data_modify(a, "mod((y^2-(1-x)^2)/2, 0.1)", 0);
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
-
 mgl_surf(gr,a,"b");
 mgl_data_sew(a,"xy",0.1);
 mgl_surf(gr,a,"r");
@@ -6099,7 +6985,6 @@ call mgl_data_modify(a, 'mod((y^2-(1-x)^2)/2, 0.1)', 0)
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
-
 call mgl_surf(gr,a,'b')
 call mgl_data_sew(a,'xy',0.1)
 call mgl_surf(gr,a,'r')
@@ -6115,17 +7000,16 @@ a.Sew("xy", 0.1);
 gr.Surf(a, "r");
 gr.Box();
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node STFA sample, PDE sample, Sew sample, Advanced features
 @subsection STFA sample
 @cindex STFA
-
 @float
- at image{png/stfa, 7cm}
- at caption{Example of Short Time Fourier Analysis.}@c @tdref{stfa}}
+ at image{../png/stfa, 7cm}
+ at c @caption{Example of Short Time Fourier Analysis.}@c @tdref{stfa}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a(2000), b(2000);
@@ -6136,7 +7020,6 @@ gr->SubPlot(1, 2, 0);
 gr->Plot(a);
 gr->Axis();
 gr->Label('x', "\\i t");
-
 gr->SubPlot(1, 2, 1);
 gr->STFA(a, b, 64);
 gr->Axis();
@@ -6144,6 +7027,7 @@ gr->Label('x', "\\i t");
 gr->Label('y', "\\omega", 0);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 new a 2000
 new b 2000
@@ -6159,6 +7043,7 @@ axis
 ylabel '\omega' 0
 xlabel '\i t'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data_size(2000,1,1);
@@ -6169,7 +7054,6 @@ mgl_subplot(gr,1,2,0);
 mgl_plot(gr,a,"");
 mgl_axis(gr,"xy");
 mgl_label(gr,'x', "\\i t");
-
 mgl_subplot(gr,1,2,1);
 mgl_stfa(gr,a,b,64,"",0.);
 mgl_axis(gr,"xy");
@@ -6187,7 +7071,6 @@ call mgl_subplot(gr,1,2,0)
 call mgl_plot(gr,a,'')
 call mgl_axis(gr,'xy')
 call mgl_label(gr,'x', '\i t')
-
 call mgl_subplot(gr,1,2,1)
 call mgl_stfa(gr,a,b,64,'',0.)
 call mgl_axis(gr,'xy')
@@ -6203,25 +7086,23 @@ gr.SubPlot(1, 2, 0);
 gr.Plot(a);
 gr.Axis();
 gr.Label('x', "\\i t");
-
 gr.SubPlot(1, 2, 1);
 gr.STFA(a, b, 64);
 gr.Axis();
 gr.Label('x', "\\i t");
 gr.Label('y', "\\omega", 0);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node PDE sample, Beam tracing sample, STFA sample, Advanced features
 @subsection PDE sample
 @cindex mglPDE
 @cindex mglRay
-
 @float
- at image{png/pde, 7cm}
- at caption{Example of Partial Differential Eduation solving.}@c @tdref{pde}}
+ at image{../png/pde, 7cm}
+ at c @caption{Example of Partial Differential Eduation solving.}@c @tdref{pde}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData a,re(128),im(128);
@@ -6240,23 +7121,23 @@ gr->Title("\\r{Equation:} ik_0\\partial_zu + \\Delta u + x\\cdot u + \
 i \\frac{x+z}{2}\\cdot u = 0", "iC", -1.5);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 axis
 xlabel '\i x'
 ylabel '\i z'
-
 new re 128
 new im 128
 fill re 'exp(-48*(x+0.7)^2)'
 pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01 30
 transpose a
-
 crange 0 1
 dens a 'wyrRk'
 fplot '-x' 'k|'
 text 0 0.85 'absorption: (x+z)/2 for x+z>0' '' -1
 title 'Equation: ik_0\partial_zu + \Delta u + x\cdot u + i \frac{x+z}{2}\cdot u = 0' 'iC' -1.5
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 HMDT a = mgl_create_data();
@@ -6265,7 +7146,6 @@ HMDT im = mgl_create_data_size(128,1,1);
 mgl_axis(gr,"xyz");
 mgl_label(gr,'x', "\\i x");
 mgl_label(gr,'y', "\\i z");
-
 mgl_data_fill_eq(gr,re,"exp(-48*(x+0.7)^2)", 0, 0);
 a = mgl_pde_solve(gr, "p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)", re, im, 0.01, 30.);
 mgl_data_transpose(a, "yxz");
@@ -6288,7 +7168,6 @@ im = mgl_create_data_size(128,1,1)
 call mgl_axis(gr,'xyz')
 call mgl_label(gr,'x', '\i x')
 call mgl_label(gr,'y', '\i z')
-
 call mgl_data_fill_eq(gr,re,'exp(-48*(x+0.7)^2)', 0, 0)
 a = mgl_pde_solve(gr, 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)', re, im, 0.01, 30.)
 call mgl_data_transpose(a, 'yxz')
@@ -6319,18 +7198,17 @@ gr.Puts(0, 0.85, 0., "absorption: (x+z)/2 for x+z>0");
 gr.Title("\\r{Equation:} ik_0\\partial_zu + \\Delta u + x\\cdot u + \
 i \\frac{x+z}{2}\\cdot u = 0", "iC", -1.5);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Beam tracing sample, Parser sample, PDE sample, Advanced features
 @subsection Beam tracing sample
 @cindex mglQO2d
 @cindex mglRay
-
 @float
- at image{png/qo2d, 7cm}
- at caption{Example of ray and beam tracing. Compare with @ref{PDE sample}.}@c @tdref{qo2d}}
+ at image{../png/qo2d, 7cm}
+ at c @caption{Example of ray and beam tracing. Compare with @ref{PDE sample}.}@c @tdref{qo2d}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 mglData r, xx, yy, a, im(128), re(128);
@@ -6349,6 +7227,7 @@ gr->Puts(mglPoint(0.7, -0.05), "central ray");
 gr->Title("Beam and ray tracing", "C", -1.5);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
 ray r $1 -0.7 -1 0 0 0.5 0 0.02 2
@@ -6356,14 +7235,12 @@ plot r(0) r(1) 'k'
 axis
 xlabel '\i x'
 ylabel '\i z'
-
 new re 128
 new im 128
 new xx
 new yy
 fill re 'exp(-48*x^2)'
 qo2d a $1 re im r 1 30 xx yy 
-
 crange 0 1
 dens xx yy a 'wyrRk'
 fplot '-x' 'k|'
@@ -6371,6 +7248,7 @@ text -0.8 0.85 'absorption: (x+y)/2 for x+y>0' 'L' -1
 text 0.5 -0.05 'central ray' 'L' -1
 title 'Beam and ray tracing' 'C' -1.5
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 const char *ham = "p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)";
@@ -6384,7 +7262,6 @@ mgl_plot_xy(gr, xx, yy, "k");
 mgl_axis(gr,"xyz");
 mgl_label(gr,'x',"\\i x");
 mgl_label(gr,'y',"\\i z");
-
 mgl_data_fill_eq(gr,re,"exp(-48*x^2)", 0, 0);
 a = mgl_qo2d_solve(ham, re, im, r, 1, 30, xx, yy);
 mgl_set_caxis(gr,0.,1.);
@@ -6403,7 +7280,6 @@ integer r, xx, yy, a, im, re, mgl_create_data_size
 integer mgl_data_subdata, mgl_ray_trace, mgl_qo2d_solve
 character*64 ham
 ham = 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
-
 im = mgl_create_data_size(128,1,1)
 re = mgl_create_data_size(128,1,1)
 r = mgl_ray_trace(ham, -0.7, -1., 0., 0., 0.5, 0., 0.02, 2.)
@@ -6413,7 +7289,6 @@ call mgl_plot_xy(gr, xx, yy, 'k')
 call mgl_axis(gr,'xyz')
 call mgl_label(gr,'x','\i x')
 call mgl_label(gr,'y','\i z')
-
 call mgl_data_fill_eq(gr,re,'exp(-48*x^2)', 0, 0)
 a = mgl_qo2d_solve(ham, re, im, r, 1., 30., xx, yy)
 call mgl_set_caxis(gr,0.,1.)
@@ -6435,10 +7310,8 @@ ham = "p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)";
 r, xx, yy, a = mglData(), mglData(), mglData(), mglData();
 im, re = mglData(128), mglData(128);
 r = mglRay(ham, mglPoint(-0.7, -1), mglPoint(0, 0.5), 0.02, 2);
-
 gr.Plot(r.SubData(0), r.SubData(1), "k");
 gr.Axis();	gr.Label('x', "\\i x");	gr.Label('y', "\\i z");
-
 gr.Fill(re,"exp(-48*x^2)");
 a = mglQO2d(ham, re, im, r, 1, 30, xx, yy);
 gr.SetCRange(0, 1);
@@ -6448,17 +7321,16 @@ gr.Puts(0, 0.85, 0, "absorption: (x+y)/2 for x+y>0");
 gr.Puts(0.7, -0.05, 0, "central ray");
 gr.Title("Beam and ray tracing", "C", -1.5);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Parser sample, Manual ticks sample, Beam tracing sample, Advanced features
 @subsection Parser sample
 @cindex mglParse
-
+ at ifclear UDAV
 @float
- at image{png/parser, 7cm}
- at caption{Example of MGL parsing.}@c @tdref{parser}}
+ at image{../png/parser, 7cm}
+ at c @caption{Example of MGL parsing.}@c @tdref{parser}}
 @end float
-
 @strong{C++ code}
 @verbatim
 float a[100];   // let a_i = sin(4*pi*x), x=0...1
@@ -6532,17 +7404,16 @@ parser.Execute(gr, "xlabel 'x'\nylabel 'y'");
 # also you may use cycles or conditions in script
 parser.Execute(gr, "for $0 -1 1 0.1\nline 0 0 -1 $0 'r'\nnext");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Manual ticks sample, ColumnPlot sample, Parser sample, Advanced features
 @subsection Tick values sample
 @cindex SetTicksVal
-
 @float
- at image{png/tval, 7cm}
- at caption{Example of MGL parsing.}@c @tdref{tval}}
+ at image{../png/tval, 7cm}
+ at c @caption{Example of manual tick values.}@c @tdref{tval}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 gr->Axis(mglPoint(-M_PI, 0), mglPoint(M_PI, 2));
@@ -6552,6 +7423,7 @@ gr->Axis();     gr->Grid();
 gr->Plot("2*cos(x^2)^2", "r2", NAN, 300);
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 axis -pi 0 pi 2
 xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' 0.886 'x^*' 1.571 '\pi/2' pi '\pi'
@@ -6559,6 +7431,7 @@ axis
 grid
 fplot '2*cos(x^2)^2' 'r2' nan 300
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 mgl_set_axis_2d(gr, -M_PI, 0, M_PI, 2);
@@ -6582,21 +7455,16 @@ parser.Execute(gr, "xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' "
 gr.Axis();     gr.Grid();
 gr.Plot("2*cos(x^2)^2", "r2", 300);
 @end verbatim
-
-
-
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node ColumnPlot sample, StickPlot sample, Manual ticks sample, Advanced features
 @subsection ColumnPlot sample
- at cindex SetTicksVal
-
+ at cindex ColumnPlot
 @float
- at image{png/column, 7cm}
- at caption{Example of MGL parsing.}@c @tdref{tval}}
+ at image{../png/column, 7cm}
+ at c @caption{Example of ColumnPlot.}@c @tdref{column}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 char str[32];
@@ -6611,6 +7479,7 @@ for(int i=0;i<4;i++)
 }
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 for $1 0 3
 columnplot 4 $1
@@ -6619,6 +7488,7 @@ text -0.5 0.5 'Plot $1 of 4'
 fplot 'sin(pi*x+pi*$1/2)'
 next
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 int i;
@@ -6639,18 +7509,18 @@ NOT AVAILABLE
 @end verbatim
 @strong{Python}
 @verbatim
+NOT AVAILABLE
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node StickPlot sample, , ColumnPlot sample, Advanced features
+ at node StickPlot sample, Stereo image sample, ColumnPlot sample, Advanced features
 @subsection StickPlot sample
- at cindex SetTicksVal
-
+ at cindex StickPlot
 @float
- at image{png/column, 7cm}
- at caption{Example of MGL parsing.}@c @tdref{tval}}
+ at image{../png/stick, 7cm}
+ at c @caption{Example of StickPlot.}@c @tdref{stick}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ code}
 @verbatim
 gr->SetRanges(-1, 1, -1, 1, 0, 1);  gr->Light(true);
@@ -6666,6 +7536,7 @@ gr->Text(mglPoint(0.2, 0, 1.2), "z=2", "", -2);
 gr->Label('x',"\\tau", 0);  gr->Label('y', "\\rho");
 @end verbatim
 @strong{MGL code}
+ at end ifclear
 @verbatim
 ranges -1 1 -1 1 0 1:light on
 stickplot 3 0 40 30 : axis 'xyz_'
@@ -6679,6 +7550,7 @@ fsurf 'exp(-10*y^2/5-6*x^2)/sqrt(5)'
 text 0.2 0 1.2 'z=2' '' -2
 xlabel '\tau' 0 : ylabel '\rho'
 @end verbatim
+ at ifclear UDAV
 @strong{Pure C code}
 @verbatim
 mgl_set_axis_3d(gr, -1, -1, 0, 1, 1, 1);
@@ -6716,4 +7588,83 @@ gr->Surf("exp(-10*y^2/5-6*x^2)/sqrt(5)");
 gr->Text(mglPoint(0.2, 0, 1.2), "z=2", "", -2);
 gr->Label('x',"\\tau", 0);  gr->Label('y', "\\rho");
 @end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Stereo image sample, , StickPlot sample, Advanced features
+ at subsection Stereo image sample
+ at float
+ at image{../png/stereo, 7cm}
+ at c @caption{Example of stereo image.}@c @tdref{stereo}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ code}
+ at verbatim
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+gr->Light(true);
+gr->SubPlot(2,1,0);
+gr->Rotate(40,60+3);
+gr->Box();   gr->Surf(a);
+gr->SubPlot(2,1,1);
+gr->Rotate(40,60-3);
+gr->Box();   gr->Surf(a);
+ at end verbatim
+ at strong{MGL code}
+ at end ifclear
+ at verbatim
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+light on
+subplot 2 1 0
+rotate 40 60+3
+box:surf a
+subplot 2 1 1
+rotate 40 60-3
+box:surf a
+ at end verbatim
+ at ifclear UDAV
+ at strong{Pure C code}
+ at verbatim
+HMDT a = mgl_create_data_size(50,40,1);
+mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
+mgl_set_light(gr,1);
+mgl_subplot(gr,2,1,0);
+mgl_rotate(gr,40.,60.+3.,0.);
+mgl_box(gr,1);
+mgl_surf(gr,a,0);
+mgl_subplot(gr,2,1,1);
+mgl_rotate(gr,40.,60.-3.,0.);
+mgl_box(gr,1);
+mgl_surf(gr,a,0);
+mgl_delete_data(a);
+ at end verbatim
+ at strong{Fortran code}
+ at verbatim
+integer a, mgl_create_data_size
+a = mgl_create_data_size(50,40,1);
+call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
+call mgl_set_light(gr,1)
+call mgl_subplot(gr,2,1,0)
+call mgl_rotate(gr,40.,60.+3.,0.)
+call mgl_box(gr,1)
+call mgl_surf(gr,a,'')
+call mgl_subplot(gr,2,1,1)
+call mgl_rotate(gr,40.,60.-3.,0.)
+call mgl_box(gr,1)
+call mgl_surf(gr,a,'')
+call mgl_delete_data(a)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+a = mglData(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
+gr.Light(True);
+gr.SubPlot(2,1,0);
+gr.Rotate(40,60+3);
+gr.Surf(a);  gr.Box();
+gr.SubPlot(2,1,1);
+gr.Rotate(40,60-3);
+gr.Surf(a);  gr.Box();
+ at end verbatim
+ at end ifclear
 
diff --git a/texinfo/samples_ru.texi b/texinfo/samples_ru.texi
index 4ee92f3..a60a6b9 100644
--- a/texinfo/samples_ru.texi
+++ b/texinfo/samples_ru.texi
@@ -1,13 +1,10 @@
 @c ------------------------------------------------------------------
- at node Samples, Символы TeX, MGL interface, Top
 @chapter Примеры использования MathGL
-
-Эта глава содержит множество примеров кода для всех типов графиков, наиболее важных возможностей библиотеки и советов. Аналогичные примеры (с картинками) можно найти на @uref{http://mathgl.sf.net/pictures.html}. Большинство примеров содержат код на 5 языках: C++, MGL, C, Fortran и Python. Однако, в некоторых я помещал только C++ код, поскольку соответствующий код слишком большой и ясно как его можно переписать на другие языки.
-
+Эта глава содержит множество примеров кода для всех типов графиков, наиболее важных возможностей библиотеки и советов. Аналогичные примеры (с картинками) можно найти на @uref{http://mathgl.sf.net/pictures.html}. 
+ at ifclear UDAV
+MБольшинство примеров содержат код на 5 языках: C++, MGL, C, Fortran и Python. Однако, в некоторых я помещал только C++ код, поскольку соответствующий код слишком большой и ясно как его можно переписать на другие языки.
 Минимальный код для запуска и просмотра примеров на различных языках следующий.
-
 @strong{C++ код}
-
 Для компиляции используйте: @code{g++ -o sample sample.cpp -lmgl}.
 @verbatim
 #include <mgl/mgl_zb.h>
@@ -22,7 +19,6 @@ int main()
 }
 @end verbatim
 @strong{MGL скрипт}
-
 Для просмотра используйте: @code{mglview sample.mgl}.
 @verbatim
 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -31,7 +27,6 @@ int main()
 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 @end verbatim
 @strong{C-ый код}
-
 Для компиляции используйте: @code{gcc -o sample sample.c -lmgl}.
 @verbatim
 #include <mgl/mgl_c.h>
@@ -47,7 +42,6 @@ int main()
 }
 @end verbatim
 @strong{Fortran}
-
 Для компиляции используйте: @code{gfortran -o sample sample.f90 -lmgl}. Замечу, что фортран не имеет проверки аргументов. Поэтому обратите особое внимание на передаваемые аргументы -- не путайте целые и действительные (с плавающей точкой) числа/аргументы. Никакого контроля в компиляторе для этого не предусмотрено!!!
 @verbatim
 integer gr, mgl_create_graph_zb
@@ -60,7 +54,6 @@ call mgl_delete_graph(gr)
 end
 @end verbatim
 @strong{Python}
-
 Для просмотра используйте: @code{python sample.py}.
 @verbatim
 from mathgl import *
@@ -70,31 +63,34 @@ gr = mglGraph();
 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 gr.ShowImage();
 @end verbatim
-
-
+ at end ifclear
 @menu
 * 1D plotting samples::         
 * 2D plotting samples::         
 * 3D plotting samples::         
 * Dual plotting samples::       
+* Basic features::         
 * Additional features::         
 * Advanced features::           
 @end menu
-
 @c ------------------------------------------------------------------
 @node 1D plotting samples, 2D plotting samples,, Samples
 @section Примеры 1D графиков
-
 @menu
 * Plot sample::                 
 * Radar sample::                 
 * Tens sample::                 
 * Area sample::                 
+* Area gradient sample::   
 * Bars sample::                 
+* Bars 2 colors sample::                 
+* Bars above sample::                 
+* Bars fall sample::                 
 * Barh sample::                 
 * Step sample::                 
 * Stem sample::                 
 * Region sample::               
+* Region gradient sample::               
 * Error sample::                
 * BoxPlot sample::                
 * Mark sample::                 
@@ -104,18 +100,17 @@ gr.ShowImage();
 * Torus sample::                
 * Chart sample::                
 * Pie chart sample::            
+* Ring chart sample::            
 @end menu
-
 @c ------------------------------------------------------------------
 @node Plot sample, Radar sample,, 1D plotting samples
 @subsection Plot -- пример использования
 @cindex Plot
-
 @float
- at image{png/plot, 7cm}
- at caption{Example of Plot. @tdref{plot}}
+ at image{../png/plot, 7cm}
+ at c @caption{Example of Plot. @tdref{plot}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,3);
@@ -126,6 +121,7 @@ gr->Box();
 gr->Plot(y);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -134,6 +130,7 @@ modify y 'cos(2*pi*x)' 2
 box
 plot y
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -164,19 +161,16 @@ y.Modify("cos(2*pi*x)",2);
 gr.Box();
 gr.Plot(y);
 @end verbatim
-
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Radar sample, Tens sample, Plot sample, 1D plotting samples
 @subsection Radar -- пример использования
 @cindex Radar
-
 @float
- at image{png/radar, 7cm}
- at caption{Example of Plot. @tdref{radar}}
+ at image{../png/radar, 7cm}
+ at c @caption{Example of Plot. @tdref{radar}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(10,3);
@@ -184,11 +178,13 @@ y.Modify("0.4*sin(pi*(2*x+y/2))+0.1*rnd");
 gr->Radar(y,"#");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 10 3
 modify y '0.4*sin(pi*(2*x+y/2))+0.1*rnd'
 radar y '#'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(10,3,1);
@@ -210,18 +206,16 @@ y = mglData(10,3);
 y.Modify("0.4*sin(pi*(2*x+y/2))+0.1*rnd");
 gr.Radar(y,"#");
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Tens sample, Area sample, Radar sample, 1D plotting samples
 @subsection Tens -- пример использования
 @cindex Tens
-
 @float
- at image{png/tens, 7cm}
- at caption{Example of Tens. @tdref{tens}}
+ at image{../png/tens, 7cm}
+ at c @caption{Example of Tens. @tdref{tens}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50), c(50);
@@ -231,6 +225,7 @@ gr->Box();
 gr->Tens(y,c);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50
 new c 50
@@ -239,6 +234,7 @@ modify c 'sin(2*pi*x)'
 box
 tens y c
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,1,1);
@@ -271,17 +267,16 @@ c.Modify("sin(2*pi*x)");
 gr.Box();
 gr.Tens(y,c);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Area sample, Bars sample, Tens sample, 1D plotting samples
+ at node Area sample, Area gradient sample, Tens sample, 1D plotting samples
 @subsection Area -- пример использования
 @cindex Area
-
 @float
- at image{png/area, 7cm}
- at caption{Example of Area. @tdref{area}}
+ at image{../png/area, 7cm}
+ at c @caption{Example of Area. @tdref{area}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,3);
@@ -293,6 +288,7 @@ gr->Box();
 gr->Area(y);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -302,6 +298,7 @@ origin 0 0
 box
 area y
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -335,17 +332,81 @@ gr.SetOrigin(0.,0.);
 gr.Box();
 gr.Area(y);
 @end verbatim
-
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Area gradient sample, Bars sample, Tens sample, 1D plotting samples
+ at subsection Area с градиентной заливкой -- пример использования
+ at cindex Area
+ at float
+ at image{../png/area_2, 7cm}
+ at c @caption{Example of Area. @tdref{area}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData y(50,3);
+y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
+y.Modify("sin(2*pi*x)",1);
+y.Modify("cos(2*pi*x)",2);
+gr->Org=mglPoint(0,0);
+gr->Box();
+gr->Area(y,"cbgGyr");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new y 50 3
+modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
+modify y 'sin(2*pi*x)' 1
+modify y 'cos(2*pi*x)' 2
+origin 0 0
+box
+area y 'cbgGyr'
+ at end verbatim
+ at ifclear UDAV
+ at strong{C-ый код}
+ at verbatim
+HMDT y = mgl_create_data_size(50,3,1);
+mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
+mgl_data_modify(y,"sin(2*pi*x)",1);
+mgl_data_modify(y,"cos(2*pi*x)",2);
+mgl_set_origin(gr,0.,0.,0.);
+mgl_box(gr,1);
+mgl_area(gr,y,"cbgGyr");
+mgl_delete_data(y);
+ at end verbatim
+ at strong{Fortran}
+ at verbatim
+integer y, mgl_create_data_size
+y = mgl_create_data_size(50,3,1)
+call mgl_data_modify(y,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)',0)
+call mgl_data_modify(y,'sin(2*pi*x)',1)
+call mgl_data_modify(y,'cos(2*pi*x)',2)
+call mgl_set_origin(gr,0.,0.,0.)
+call mgl_box(gr,1)
+call mgl_area(gr,y,'cbgGyr')
+call mgl_delete_data(y)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y = mglData(50,3);
+y.Modify("0.7*sin(2*pi*x)+0.5*cos(3*pi*x)+0.2*sin(pi*x)",0);
+y.Modify("sin(2*pi*x)",1);
+y.Modify("cos(2*pi*x)",2);
+gr.SetOrigin(0.,0.);
+gr.Box();
+gr.Area(y,"cbgGyr");
+ at end verbatim
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Bars sample, Barh sample, Area sample, 1D plotting samples
+ at node Bars sample, Bars 2 colors sample, Area gradient sample, 1D plotting samples
 @subsection Bars -- пример использования
 @cindex Bars
-
 @float
- at image{png/bars, 7cm}
- at caption{Example of Bars. @tdref{bars}}
+ at image{../png/bars, 7cm}
+ at c @caption{Example of Bars. @tdref{bars}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(10,3);
@@ -355,6 +416,7 @@ gr->Box();
 gr->Bars(y);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 10 3
 modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
@@ -362,6 +424,7 @@ origin 0 0
 box
 bars y
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(10,3,1);
@@ -389,17 +452,184 @@ gr.SetOrigin(0.,0.);
 gr.Box();
 gr.Bars(y);
 @end verbatim
+ at end ifclear
+
+ at c ------------------------------------------------------------------
+ at node Bars 2 colors sample, Bars above sample, Bars sample, 1D plotting samples
+ at subsection Bars (2 цвета) -- пример использования
+ at cindex Bars
+ at float
+ at image{../png/bars_2, 7cm}
+ at c @caption{Example of Bars. @tdref{bars}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData y(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr->Org=mglPoint(0,0);
+gr->Box();
+gr->Bars(y,"cbgGyr");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'cbgGyr'
+ at end verbatim
+ at ifclear UDAV
+ at strong{C-ый код}
+ at verbatim
+HMDT y = mgl_create_data_size(10,3,1);
+mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+mgl_set_origin(gr,0.,0.,0.);
+mgl_box(gr,1);
+mgl_bars(gr,y,"cbgGyr");
+mgl_delete_data(y);
+ at end verbatim
+ at strong{Fortran}
+ at verbatim
+integer y, mgl_create_data_size
+y = mgl_create_data_size(10,3,1)
+call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd')
+call mgl_set_origin(gr,0.,0.,0.)
+call mgl_box(gr,1)
+call mgl_bars(gr,y,'cbgGyr')
+call mgl_delete_data(y)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y = mglData(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr.SetOrigin(0.,0.);
+gr.Box();
+gr.Bars(y,"cbgGyr");
+ at end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Bars above sample, Bars fall sample, Bars 2 colors sample, 1D plotting samples
+ at subsection Bars (один над другим) -- пример использования
+ at cindex Bars
+ at float
+ at image{../png/bars_a, 7cm}
+ at c @caption{Example of Bars. @tdref{bars}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData y(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr->Org=mglPoint(0,0);
+gr->Box();
+gr->Bars(y,"a");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'a'
+ at end verbatim
+ at ifclear UDAV
+ at strong{C-ый код}
+ at verbatim
+HMDT y = mgl_create_data_size(10,3,1);
+mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+mgl_set_origin(gr,0.,0.,0.);
+mgl_box(gr,1);
+mgl_bars(gr,y,"a");
+mgl_delete_data(y);
+ at end verbatim
+ at strong{Fortran}
+ at verbatim
+integer y, mgl_create_data_size
+y = mgl_create_data_size(10,3,1)
+call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd')
+call mgl_set_origin(gr,0.,0.,0.)
+call mgl_box(gr,1)
+call mgl_bars(gr,y,'a')
+call mgl_delete_data(y)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y = mglData(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr.SetOrigin(0.,0.);
+gr.Box();
+gr.Bars(y,"a");
+ at end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Bars fall sample, Bars above sample, Bars above sample, 1D plotting samples
+ at subsection Bars "водопад" -- пример использования
+ at cindex Bars
+ at float
+ at image{../png/bars_f, 7cm}
+ at c @caption{Example of Bars. @tdref{bars}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData y(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr->Org=mglPoint(0,0);
+gr->Box();
+gr->Bars(y,"f");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new y 10 3
+modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
+origin 0 0
+box
+bars y 'f'
+ at end verbatim
+ at ifclear UDAV
+ at strong{C-ый код}
+ at verbatim
+HMDT y = mgl_create_data_size(10,3,1);
+mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+mgl_set_origin(gr,0.,0.,0.);
+mgl_box(gr,1);
+mgl_bars(gr,y,"f");
+mgl_delete_data(y);
+ at end verbatim
+ at strong{Fortran}
+ at verbatim
+integer y, mgl_create_data_size
+y = mgl_create_data_size(10,3,1)
+call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd')
+call mgl_set_origin(gr,0.,0.,0.)
+call mgl_box(gr,1)
+call mgl_bars(gr,y,'f')
+call mgl_delete_data(y)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y = mglData(10,3);
+y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd");
+gr.SetOrigin(0.,0.);
+gr.Box();
+gr.Bars(y,"f");
+ at end verbatim
+ at end ifclear
+
 
 @c ------------------------------------------------------------------
- at node Barh sample, Step sample, Bars sample, 1D plotting samples
+ at node Barh sample, Step sample, Bars fall sample, 1D plotting samples
 @subsection Barh -- пример использования
 @cindex Barh
-
 @float
- at image{png/barh, 7cm}
- at caption{Example of Barh. @tdref{barh}}
+ at image{../png/barh, 7cm}
+ at c @caption{Example of Barh. @tdref{barh}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(10,3);
@@ -409,6 +639,7 @@ gr->Box();
 gr->Barh(y);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 10 3
 modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd'
@@ -416,6 +647,7 @@ origin 0 0
 box
 barh y
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(10,3,1);
@@ -443,17 +675,16 @@ gr.SetOrigin(0.,0.);
 gr.Box();
 gr.Barh(y);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Step sample, Stem sample, Barh sample, 1D plotting samples
 @subsection Step -- пример использования
 @cindex Step
-
 @float
- at image{png/step, 7cm}
- at caption{Example of Step. @tdref{step}}
+ at image{../png/step, 7cm}
+ at c @caption{Example of Step. @tdref{step}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,3);
@@ -464,6 +695,7 @@ gr->Box();
 gr->Step(y);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -472,6 +704,7 @@ modify y 'cos(2*pi*x)' 2
 box
 step y
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -502,18 +735,17 @@ y.Modify("cos(2*pi*x)",2);
 gr.Box();
 gr.Step(y);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Stem sample, Region sample, Step sample, 1D plotting samples
 @subsection Stem -- пример использования
 @cindex Stem
-
 @float
- at image{png/stem, 7cm}
- at caption{Example of Stem. @tdref{stem}}
+ at image{../png/stem, 7cm}
+ at c @caption{Example of Stem. @tdref{stem}}
 @end float
-
- at strong{C++ code}
+ at ifclear UDAV
+ at strong{C++ код}
 @verbatim
 mglData y(50,3);
 y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
@@ -523,7 +755,8 @@ gr->Org=mglPoint(0,0);
 gr->Box();
 gr->Stem(y,"o");
 @end verbatim
- at strong{MGL code}
+ at strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -533,7 +766,8 @@ origin 0 0
 box
 stem y 'o'
 @end verbatim
- at strong{Pure C code}
+ at ifclear UDAV
+ at strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
 mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
@@ -544,7 +778,7 @@ mgl_box(gr,1);
 mgl_stem(gr,y,"o");
 mgl_delete_data(y);
 @end verbatim
- at strong{Fortran code}
+ at strong{Fortran}
 @verbatim
 integer y, mgl_create_data_size
 y = mgl_create_data_size(50,3,1)
@@ -566,17 +800,16 @@ gr.SetOrigin(0.,0.);
 gr.Box();
 gr.Stem(y,"o");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Region sample, Error sample, Stem sample, 1D plotting samples
+ at node Region sample, Region gradient sample, Stem sample, 1D plotting samples
 @subsection Region -- пример использования
 @cindex Region
-
 @float
- at image{png/region, 7cm}
- at caption{Example of Region. @tdref{region}}
+ at image{../png/region, 7cm}
+ at c @caption{Example of Region. @tdref{region}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y1(50), y2(50);
@@ -588,6 +821,7 @@ gr->Plot(y1,"k2");
 gr->Plot(y2,"k2");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y1 50
 new y2 50
@@ -598,6 +832,7 @@ region y1 y2 'r'
 plot y1 'k2'
 plot y2 'k2'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y1 = mgl_create_data_size(50,1,1);
@@ -635,17 +870,86 @@ gr.Region(y1,y2,"r");
 gr.Plot(y1,"k2");
 gr.Plot(y2,"k2");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Error sample, BoxPlot sample, Region sample, 1D plotting samples
+ at node Region gradient sample, Error sample, Region sample, 1D plotting samples
+ at subsection Region с градиентной заливкой -- пример использования
+ at cindex Region
+ at float
+ at image{../png/region_2, 7cm}
+ at c @caption{Example of Region. @tdref{region}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData y1(50), y2(50);
+y1.Modify("0.3*sin(2*pi*x)");
+y2.Modify("0.5+0.3*cos(2*pi*x)");
+gr->Box();
+gr->Region(y1,y2,"yr");
+gr->Plot(y1,"k2");
+gr->Plot(y2,"k2");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new y1 50
+new y2 50
+modify y1 '0.3*sin(2*pi*x)'
+modify y2 '0.5+0.3*cos(2*pi*x)'
+box
+region y1 y2 'yr'
+plot y1 'k2'
+plot y2 'k2'
+ at end verbatim
+ at ifclear UDAV
+ at strong{C-ый код}
+ at verbatim
+HMDT y1 = mgl_create_data_size(50,1,1);
+HMDT y2 = mgl_create_data_size(50,1,1);
+mgl_data_modify(y1,"0.3*sin(2*pi*x)",0);
+mgl_data_modify(y2,"0.5+0.3*cos(2*pi*x)",0);
+mgl_box(gr,1);
+mgl_region(gr,y1,y2,"yr",1);
+mgl_plot(gr,y1,"k2");
+mgl_plot(gr,y2,"k2");
+mgl_delete_data(y1);
+mgl_delete_data(y2);
+ at end verbatim
+ at strong{Fortran}
+ at verbatim
+integer y1, y2, mgl_create_data_size
+y1 = mgl_create_data_size(50,1,1);
+y2 = mgl_create_data_size(50,1,1);
+call mgl_data_modify(y1,'0.3*sin(2*pi*x)',0);
+call mgl_data_modify(y2,'0.5+0.3*cos(2*pi*x)',0);
+call mgl_box(gr,1);
+call mgl_region(gr,y1,y2,'yr',1);
+call mgl_plot(gr,y1,'k2');
+call mgl_plot(gr,y2,'k2');
+call mgl_delete_data(y1);
+call mgl_delete_data(y2);
+ at end verbatim
+ at strong{Python}
+ at verbatim
+y1, y2, x = mglData(50), mglData(50), mglData(50);
+y1.Modify("0.3*sin(2*pi*x)");
+y2.Modify("0.5+0.3*cos(2*pi*x)");
+gr.Box();
+gr.Region(y1,y2,"yr");
+gr.Plot(y1,"k2");
+gr.Plot(y2,"k2");
+ at end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Error sample, BoxPlot sample, Region gradient sample, 1D plotting samples
 @subsection Error -- пример использования
 @cindex Error
-
 @float
- at image{png/error, 7cm}
- at caption{Example of Error. @tdref{error}}
+ at image{../png/error, 7cm}
+ at c @caption{Example of Error. @tdref{error}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,1), x0(10), y0(10), ex(10), ey(10);
@@ -658,6 +962,7 @@ gr->Plot(y);
 gr->Error(x0,y0,ex,ey,"ko");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50
 new x0 10
@@ -673,6 +978,7 @@ box
 plot y
 error x0 y0 ex ey 'ko'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,1,1);
@@ -684,7 +990,6 @@ mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
 mgl_data_modify(x0,"2*x-1 + 0.1*rnd-0.05",0);
 mgl_data_modify(y0,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x) + 0.2*rnd-0.1",0);
 mgl_data_modify(ey,"0.2",0); mgl_data_modify(ex,"0.1",0);
-
 mgl_box(gr,1);
 mgl_plot(gr,y,NULL);
 mgl_error_exy(gr,x0,y0,ex,ey,"ko");
@@ -706,7 +1011,6 @@ call mgl_data_modify(y0,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + &
                          0.2*sin(pi*x) + 0.2*rnd-0.1',0);
 call mgl_data_modify(ey,'0.2',0)
 call mgl_data_modify(ex,'0.1',0);
-
 call mgl_box(gr,1)
 call mgl_plot(gr,y,'')
 call mgl_error_exy(gr,x0,y0,ex,ey,'ko')
@@ -726,17 +1030,16 @@ ey.Modify("0.2");   ex.Modify("0.1");
 gr.Box();           gr.Plot(y);
 gr.Error(x0,y0,ex,ey,"ko");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node BoxPlot sample, Mark sample, Error sample, 1D plotting samples
 @subsection BoxPlot -- пример использования
 @cindex BoxPlot
-
 @float
- at image{png/boxplot, 7cm}
- at caption{Example of BoxPlot. @tdref{boxplot}}
+ at image{../png/boxplot, 7cm}
+ at c @caption{Example of BoxPlot. @tdref{boxplot}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(10,7);
@@ -746,6 +1049,7 @@ gr->BoxPlot(a);
 gr->Plot(a," ko");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 10 7
 modify a '(2*rnd-1)^3/2'
@@ -753,11 +1057,11 @@ box
 boxplot a
 plot a ' ko'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(10,7,1);
 mgl_data_modify(a,"(2*rnd-1)^3/2",0);
-
 mgl_box(gr,1);
 mgl_plot(gr,a," ko");
 mgl_boxplot(gr,a,NULL);
@@ -768,7 +1072,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 y = mgl_create_data_size(10,7,1)
 call mgl_data_modify(a,'(2*rnd-1)^3/2',0);
-
 call mgl_box(gr,1)
 call mgl_plot(gr,a,' ko')
 call mgl_boxplot(gr,a,'')
@@ -782,17 +1085,16 @@ gr.Box();
 gr.Plot(a," ko");
 gr.BoxPlot(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Mark sample, TextMark sample, BoxPlot sample, 1D plotting samples
 @subsection Mark -- пример использования
 @cindex Mark
-
 @float
- at image{png/mark, 7cm}
- at caption{Example of Mark. @tdref{mark}}
+ at image{../png/mark, 7cm}
+ at c @caption{Example of Mark. @tdref{mark}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,3), y1(50);
@@ -804,6 +1106,7 @@ gr->Box();
 gr->Mark(y,y1,"bs");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -814,6 +1117,7 @@ modify y1 '0.5+0.3*cos(2*pi*x)'
 box
 mark y y1 'bs'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -850,17 +1154,16 @@ y1.Modify("0.5+0.3*cos(2*pi*x)");
 gr.Box();
 gr.Mark(y,y1,"bs");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node TextMark sample, Tube sample, Mark sample, 1D plotting samples
 @subsection TextMark -- пример использования
 @cindex TextMark
-
 @float
- at image{png/textmark, 7cm}
- at caption{Example of TextMark. @tdref{textmark}}
+ at image{../png/textmark, 7cm}
+ at c @caption{Example of TextMark. @tdref{textmark}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,3), y1(50);
@@ -872,6 +1175,7 @@ gr->Box();
 gr->TextMark(y,y1,"\\gamma");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -882,6 +1186,7 @@ modify y1 '0.5+0.3*cos(2*pi*x)'
 box
 textmark y y1 '\gamma'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y, y1;
@@ -919,48 +1224,46 @@ y1.Modify("0.5+0.3*cos(2*pi*x)");
 gr.Box();
 gr.TextMark(y,y1,"\\gamma");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Tube sample, Text sample, TextMark sample, 1D plotting samples
 @subsection Tube -- пример использования
 @cindex Tube
-
 @float
- at image{png/tube, 7cm}
- at caption{Example of Tube. @tdref{tube}}
+ at image{../png/tube, 7cm}
+ at c @caption{Example of Tube. @tdref{tube}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,3);
 y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
 y.Modify("sin(2*pi*x)",1);
 y.Modify("cos(2*pi*x)",2);
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Tube(y,0.05);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
 modify y 'sin(2*pi*x)' 1
 modify y 'cos(2*pi*x)' 2
-
 rotate 40 60
 light on
 box
 tube y 0.05
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
 mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0);
 mgl_data_modify(y,"sin(2*pi*x)",1);
 mgl_data_modify(y,"cos(2*pi*x)",2);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -974,7 +1277,6 @@ y = mgl_create_data_size(50,3,1)
 call mgl_data_modify(y,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)',0)
 call mgl_data_modify(y,'sin(2*pi*x)',1)
 call mgl_data_modify(y,'cos(2*pi*x)',2)
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -989,17 +1291,16 @@ y.Modify("sin(2*pi*x)",1);  y.Modify("cos(2*pi*x)",2);
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Tube(y,0.05);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Text sample, Torus sample, Tube sample, 1D plotting samples
 @subsection Text -- пример использования
 @cindex Text
-
 @float
- at image{png/text, 7cm}
- at caption{Example of Text. @tdref{text}}
+ at image{../png/text, 7cm}
+ at c @caption{Example of Text. @tdref{text}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,3);
@@ -1012,6 +1313,7 @@ gr->Text(y,"This is very long string drawn along a curve",":k");
 gr->Text(y,"Another string drawn above a curve","T:r");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)'
@@ -1022,6 +1324,7 @@ plot y(:,0)
 text y 'This is very long string drawn along a curve' ':k'
 text y 'Another string drawn above a curve' 'T:r'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,1,1);
@@ -1053,47 +1356,45 @@ gr.Plot(y.SubData(-1,0));
 gr.Text(y,"This is very long string drawn along a curve",":k");
 gr.Text(y,"Another string drawn above a curve","T:r");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Torus sample, Chart sample, Text sample, 1D plotting samples
 @subsection Torus -- пример использования
 @cindex Torus
-
 @float
- at image{png/torus, 7cm}
- at caption{Example of Torus. @tdref{torus}}
+ at image{../png/torus, 7cm}
+ at c @caption{Example of Torus. @tdref{torus}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y1(50), y2(50);
 y1.Modify("0.5+0.3*cos(2*pi*x)");
 y2.Modify("0.3*sin(2*pi*x)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Torus(y1,y2,"pz");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y1 50
 new y2 50
 modify y1 '0.5+0.3*cos(2*pi*x)'
 modify y2 '0.3*sin(2*pi*x)'
-
 rotate 40 60
 light on
 box
 torus y1 y2 'pz'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y1 = mgl_create_data_size(50,1,1);
 HMDT y2 = mgl_create_data_size(50,1,1);
 mgl_data_modify(y1,"0.5+0.3*cos(2*pi*x)",0);
 mgl_data_modify(y2,"0.3*sin(2*pi*x)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1108,7 +1409,6 @@ y1 = mgl_create_data_size(50,1,1);
 y2 = mgl_create_data_size(50,1,1);
 call mgl_data_modify(y1,"0.5+0.3*cos(2*pi*x)",0);
 call mgl_data_modify(y2,"0.3*sin(2*pi*x)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1125,42 +1425,40 @@ gr.Rotate(40,60);    gr.Light(True);
 gr.Box();
 gr.Torus(y1,y2,"pz");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Chart sample, Pie chart sample, Torus sample, 1D plotting samples
 @subsection Chart -- пример использования
 @cindex Chart
-
 @float
- at image{png/chart, 7cm}
- at caption{Example of Chart. @tdref{chart}}
+ at image{../png/chart, 7cm}
+ at c @caption{Example of Chart. @tdref{chart}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData ch(7,2);
 ch.Modify("rnd+0.1");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Chart(ch,"#");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new ch 7 2
 modify ch 'rnd+0.1'
-
 rotate 40 60
 light on
 box
 chart ch
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT ch = mgl_create_data_size(7,2,1);
 mgl_data_modify(ch,"rnd+0.1",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1172,7 +1470,6 @@ mgl_delete_data(ch);
 integer ch, mgl_create_data_size
 ch = mgl_create_data_size(7,2,1)
 call mgl_data_modify(ch,'rnd+0.1',0)
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1186,23 +1483,21 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.Chart(ch,"#");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Pie chart sample,, Chart sample, 1D plotting samples
+ at node Pie chart sample, Ring chart sample, Chart sample, 1D plotting samples
 @subsection Pie chart -- пример использования
 @cindex Chart
 @cindex Axis
-
 @float
- at image{png/pie_chart, 7cm}
- at caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}}
+ at image{../png/pie_chart, 7cm}
+ at c @caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData ch(7,2);
 ch.Modify("rnd+0.1");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)");
@@ -1210,21 +1505,21 @@ gr->Box();
 gr->Chart(ch,"bgr cmy#");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new ch 7 2
 modify ch 'rnd+0.1'
-
 rotate 40 60
 light on
 axis '(y+1)/2*cos(pi*x)' '(y+1)/2*sin(pi*x)' ''
 box
 chart ch 'bgr cmy#'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT ch = mgl_create_data_size(7,2,1);
 mgl_data_modify(ch,"rnd+0.1",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_func(gr,"(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)",0);
@@ -1237,7 +1532,6 @@ mgl_delete_data(ch);
 integer ch, mgl_create_data_size
 ch = mgl_create_data_size(7,2,1)
 call mgl_data_modify(ch,'rnd+0.1',0)
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_func(gr,'(y+1)/2*cos(pi*x)','(y+1)/2*sin(pi*x)','');
@@ -1253,11 +1547,74 @@ gr.SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)");
 gr.Box();
 gr.Chart(ch,"bgr cmy#");
 @end verbatim
-
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Ring chart sample, , Pie chart sample, 1D plotting samples
+ at subsection Ring chart -- пример использования
+ at cindex Chart
+ at cindex Axis
+ at float
+ at image{../png/ring_chart, 7cm}
+ at c @caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData ch(7,2);
+ch.Modify("rnd+0.1");
+gr->Rotate(40,60);
+gr->Light(true);
+gr->SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)");
+gr->Box();
+gr->Chart(ch,"bgr cmy#");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new ch 7 2
+modify ch 'rnd+0.1'
+rotate 40 60
+light on
+axis '(y+2)/3*cos(pi*x)' '(y+2)/3*sin(pi*x)' ''
+box
+chart ch 'bgr cmy#'
+ at end verbatim
+ at ifclear UDAV
+ at strong{C-ый код}
+ at verbatim
+HMDT ch = mgl_create_data_size(7,2,1);
+mgl_data_modify(ch,"rnd+0.1",0);
+mgl_rotate(gr,40.,60.,0.);
+mgl_set_light(gr,1);
+mgl_set_func(gr,"(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)",0);
+mgl_box(gr,1);
+mgl_chart(gr,ch,"bgr cmy#");
+mgl_delete_data(ch);
+ at end verbatim
+ at strong{Fortran}
+ at verbatim
+integer ch, mgl_create_data_size
+ch = mgl_create_data_size(7,2,1)
+call mgl_data_modify(ch,'rnd+0.1',0)
+call mgl_rotate(gr,40.,60.,0.)
+call mgl_set_light(gr,1)
+call mgl_set_func(gr,'(y+2)/3*cos(pi*x)','(y+2)/3*sin(pi*x)','');
+call mgl_box(gr,1)
+call mgl_chart(gr,ch,'bgr cmy#')
+call mgl_delete_data(ch)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+ch = mglData(7,2);  ch.Modify("rnd+0.1");
+gr.Rotate(40,60);   gr.Light(True);
+gr.SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)");
+gr.Box();
+gr.Chart(ch,"bgr cmy#");
+ at end verbatim
+ at end ifclear
 @c ------------------------------------------------------------------
 @node 2D plotting samples, 3D plotting samples, 1D plotting samples, Samples
 @section Примеры 2D графиков
-
 @menu
 * Surf sample::                 
 * Transparent surface sample::  
@@ -1273,43 +1630,41 @@ gr.Chart(ch,"bgr cmy#");
 * ContF sample::                
 * ContD sample::                
 * Axial sample::                
+* Grad sample::                
 @end menu
-
 @c ------------------------------------------------------------------
 @node Surf sample, Transparent surface sample,, 2D plotting samples
 @subsection Surf -- пример использования
 @cindex Surf
-
 @float
- at image{png/surf, 7cm}
- at caption{Example of Surf. @tdref{surf}}
+ at image{../png/surf, 7cm}
+ at c @caption{Example of Surf. @tdref{surf}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Surf(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 surf a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1321,7 +1676,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1335,23 +1689,21 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Surf(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Transparent surface sample, Surface in fog sample, Surf sample, 2D plotting samples
 @subsection Transparent surface -- пример использования
 @cindex Surf
 @cindex Alpha
-
 @float
- at image{png/surf_alpha, 7cm}
- at caption{Example of Surf & Alpha. @tdref{surf_alpha}}
+ at image{../png/surf_alpha, 7cm}
+ at c @caption{Example of Surf & Alpha. @tdref{surf_alpha}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -1359,21 +1711,21 @@ gr->Box();
 gr->Surf(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 alpha on
 box
 surf a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -1386,7 +1738,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -1402,23 +1753,21 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Alpha(True);
 gr.Surf(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Surface in fog sample, Sharp colors sample, Transparent surface sample, 2D plotting samples
 @subsection Surface in fog -- пример использования
 @cindex Surf
 @cindex Fog
-
 @float
- at image{png/surf_fog, 7cm}
- at caption{Example of Surf & Fog. @tdref{surf_fog}}
+ at image{../png/surf_fog, 7cm}
+ at c @caption{Example of Surf & Fog. @tdref{surf_fog}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Fog(1);
@@ -1426,21 +1775,21 @@ gr->Box();
 gr->Surf(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 fog 1
 box
 surf a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_fog(gr,1.,0.25);
@@ -1453,7 +1802,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_fog(gr,1.,0.25)
@@ -1469,42 +1817,40 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Fog(1);
 gr.Surf(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Sharp colors sample, Mesh sample, Surface in fog sample, 2D plotting samples
 @subsection Sharp colors -- пример использования
 @cindex Surf
-
 @float
- at image{png/surf_sl, 7cm}
- at caption{Example of sharp color scheme. @tdref{surf_sl}}
+ at image{../png/surf_sl, 7cm}
+ at c @caption{Example of sharp color scheme. @tdref{surf_sl}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Surf(a,"BbcyrR|");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 surf a 'BbcyrR|'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1516,7 +1862,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1530,40 +1875,38 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Surf(a,"BbcyrR|");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Mesh sample, Fall sample, Sharp colors sample, 2D plotting samples
 @subsection Mesh -- пример использования
 @cindex Mesh
-
 @float
- at image{png/mesh, 7cm}
- at caption{Example of Mesh. @tdref{mesh}}
+ at image{../png/mesh, 7cm}
+ at c @caption{Example of Mesh. @tdref{mesh}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->Mesh(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 box
 mesh a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_mesh(gr,a,0);
@@ -1574,7 +1917,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_mesh(gr,a,'')
@@ -1587,40 +1929,38 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Mesh(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Fall sample, Belt sample, Mesh sample, 2D plotting samples
 @subsection Fall -- пример использования
 @cindex Fall
-
 @float
- at image{png/fall, 7cm}
- at caption{Example of Fall. @tdref{fall}}
+ at image{../png/fall, 7cm}
+ at c @caption{Example of Fall. @tdref{fall}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->Fall(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 box
 fall a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_fall(gr,a,0);
@@ -1631,7 +1971,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_fall(gr,a,'')
@@ -1644,42 +1983,40 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Fall(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Belt sample, Tile sample, Fall sample, 2D plotting samples
 @subsection Belt -- пример использования
 @cindex Belt
-
 @float
- at image{png/belt, 7cm}
- at caption{Example of Belt. @tdref{belt}}
+ at image{../png/belt, 7cm}
+ at c @caption{Example of Belt. @tdref{belt}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Belt(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 belt a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1691,7 +2028,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1705,42 +2041,40 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Belt(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Tile sample, Boxs sample, Belt sample, 2D plotting samples
 @subsection Tile -- пример использования
 @cindex Tile
-
 @float
- at image{png/tile, 7cm}
- at caption{Example of Tile. @tdref{tile}}
+ at image{../png/tile, 7cm}
+ at c @caption{Example of Tile. @tdref{tile}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Tile(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 tile a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1752,7 +2086,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -1766,17 +2099,16 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Tile(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Boxs sample, Dens sample, Tile sample, 2D plotting samples
 @subsection Boxs -- пример использования
 @cindex Boxs
-
 @float
- at image{png/boxs, 7cm}
- at caption{Example of Boxs. @tdref{boxs}}
+ at image{../png/boxs, 7cm}
+ at c @caption{Example of Boxs. @tdref{boxs}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
@@ -1787,6 +2119,7 @@ gr->Box();
 gr->Boxs(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
@@ -1796,11 +2129,11 @@ origin 0 0 0
 box
 boxs a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_origin(gr,0.,0.,0.);
@@ -1813,7 +2146,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_origin(gr,0.,0.,0.);
@@ -1829,18 +2161,17 @@ gr.Rotate(40,60);       gr.Light(True);
 gr.SetOrigin(0.,0.,0.); gr.Box();
 gr.Boxs(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dens sample, Cont sample, Boxs sample, 2D plotting samples
 @subsection Dens -- пример использования
 @cindex Dens
 @cindex Colorbar
-
 @float
- at image{png/dens, 7cm}
- at caption{Example of Dens & Colorbar. @tdref{dens}}
+ at image{../png/dens, 7cm}
+ at c @caption{Example of Dens & Colorbar. @tdref{dens}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
@@ -1850,6 +2181,7 @@ gr->Dens(a);
 gr->Colorbar();
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
@@ -1857,6 +2189,7 @@ box
 dens a
 colorbar
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
@@ -1884,17 +2217,16 @@ gr.Box();
 gr.Dens(a);
 gr.Colorbar();
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cont sample, ContF sample, Dens sample, 2D plotting samples
 @subsection Cont -- пример использования
 @cindex Cont
-
 @float
- at image{png/cont, 7cm}
- at caption{Example of Cont. @tdref{cont}}
+ at image{../png/cont, 7cm}
+ at c @caption{Example of Cont. @tdref{cont}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
@@ -1904,6 +2236,7 @@ gr->Box();
 gr->Cont(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
@@ -1911,11 +2244,11 @@ rotate 40 60
 box
 cont a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_cont(gr,a,0,7,NAN);
@@ -1929,7 +2262,6 @@ real zero, nan
 zero = 0; nan = zero/zero 
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_cont(gr,a,'',7,nan)
@@ -1943,41 +2275,39 @@ gr.Rotate(40,60);
 gr.Box();
 gr.Cont(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node ContF sample, ContD sample, Cont sample, 2D plotting samples
 @subsection ContF -- пример использования
 @cindex ContF
-
 @float
- at image{png/contf, 7cm}
- at caption{Example of ContF. @tdref{contf}}
+ at image{../png/contf, 7cm}
+ at c @caption{Example of ContF. @tdref{contf}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);  gr->Light(true);
 gr->Box();
 gr->ContF(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 contf a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -1992,7 +2322,6 @@ real zero, nan
 zero = 0; nan = zero/zero
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -2007,17 +2336,16 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.ContF(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node ContD sample, Axial sample, ContF sample, 2D plotting samples
 @subsection ContD -- пример использования
 @cindex ContD
-
 @float
- at image{png/contd, 7cm}
- at caption{Example of ContD. @tdref{contd}}
+ at image{../png/contd, 7cm}
+ at c @caption{Example of ContD. @tdref{contd}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40), v(9);
@@ -2028,6 +2356,7 @@ gr->ContD(v,a);
 gr->Colorbar(v);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
@@ -2036,6 +2365,7 @@ box
 contd v a
 colorbar v
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
@@ -2070,22 +2400,20 @@ gr.Box();
 gr.ContD(v,a);
 gr.Colorbar(v);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Axial sample,, ContD sample, 2D plotting samples
+ at node Axial sample, Grad sample, ContD sample, 2D plotting samples
 @subsection Axial -- пример использования
 @cindex Axial
-
 @float
- at image{png/axial, 7cm}
- at caption{Example of Axial. @tdref{axial}}
+ at image{../png/axial, 7cm}
+ at c @caption{Example of Axial. @tdref{axial}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -2093,21 +2421,21 @@ gr->Box();
 gr->Axial(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 alpha on
 box
 axial a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -2120,7 +2448,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -2136,11 +2463,64 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Alpha(True);
 gr.Box();
 gr.Axial(a);
 @end verbatim
-
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Grad sample, , Axial sample, 2D plotting samples
+ at subsection Grad -- пример использования
+ at cindex Grad
+ at float
+ at image{../png/grad, 7cm}
+ at c @caption{Example of Grad. @tdref{grad}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+gr->Box();  gr->Alpha(true);    gr->Dens(a);
+gr->Grad(a);
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+box:alpha on:dens a
+grad a
+ at end verbatim
+ at ifclear UDAV
+ at strong{C-ый код}
+ at verbatim
+HMDT a = mgl_create_data_size(50,40,1);
+mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
+mgl_box(gr,1);
+mgl_set_alpha(gr,1);
+mgl_dens(gr,a,0,0);
+mgl_grad(gr,a,0,0);
+mgl_delete_data(a);
+ at end verbatim
+ at strong{Fortran}
+ at verbatim
+integer a, mgl_create_data_size
+a = mgl_create_data_size(50,40,1);
+call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
+call mgl_box(gr,1)
+call mgl_set_alpha(gr,1)
+call mgl_dens(gr,a,'',0)
+call mgl_grad(gr,a,'',0)
+call mgl_delete_data(a)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+a = mglData(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
+gr.Box();   gr.Alpha(1);    gr.Dens(a);
+gr.Colorbar();
+ at end verbatim
+ at end ifclear
 @c ------------------------------------------------------------------
 @node 3D plotting samples, Dual plotting samples, 2D plotting samples, Samples
 @section Примеры 3D графиков
-
 @menu
 * Surf3 sample::                
 * Cloud sample::               
@@ -2151,25 +2531,22 @@ gr.Axial(a);
 * Cont projection sample::      
 * Dens projection sample::      
 * CutMinMax sample::            
-* ``Isocaps'' sample::          
+* Isocaps sample::          
 * CutOff sample::               
 @end menu
-
 @c ------------------------------------------------------------------
 @node Surf3 sample, Cloud sample,, 3D plotting samples
 @subsection Surf3 -- пример использования
 @cindex Surf3
-
 @float
- at image{png/surf3, 7cm}
- at caption{Example of Surf3. @tdref{surf3}}
+ at image{../png/surf3, 7cm}
+ at c @caption{Example of Surf3. @tdref{surf3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -2177,21 +2554,21 @@ gr->Box();
 gr->Surf3(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 alpha on
 box
 surf3 a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -2204,7 +2581,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -2220,42 +2596,40 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Alpha(True);
 gr.Box();
 gr.Surf3(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cloud sample, CloudP sample, Surf3 sample, 3D plotting samples
 @subsection Cloud -- пример использования
 @cindex Cloud
-
 @float
- at image{png/cloud, 7cm}
- at caption{Example of Cloud. @tdref{cloud}}
+ at image{../png/cloud, 7cm}
+ at c @caption{Example of Cloud. @tdref{cloud}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Alpha(true);
 gr->Box();
 gr->Cloud(a,"wyrRk");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 alpha on
 box
 cloud a 'wyrRk'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_alpha(gr,1);
 mgl_box(gr,1);
@@ -2267,7 +2641,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_alpha(gr,1)
 call mgl_box(gr,1)
@@ -2282,36 +2655,33 @@ gr.Rotate(40,60);   gr.Alpha(True);
 gr.Box();
 gr.Cloud(a,"wyrRk");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node CloudP sample, Dens3 sample, Cloud sample, 3D plotting samples
 @subsection CloudP -- пример использования
 @cindex CloudP
-
 @float
- at image{png/cloudp, 7cm}
- at caption{Example of CloudP. @tdref{cloudp}}
+ at image{../png/cloudp, 7cm}
+ at c @caption{Example of CloudP. @tdref{cloudp}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Alpha(true);
 gr->Box();
 gr->CloudP(a,"wyrRk");
 @end verbatim
 @strong{MGL скрипт}
-
+ at end ifclear
 Not available.
-
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_alpha(gr,1);
 mgl_box(gr,1);
@@ -2323,7 +2693,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_alpha(gr,1)
 call mgl_box(gr,1)
@@ -2331,36 +2700,32 @@ call mgl_cloudp(gr,a,'wyrRk',1.)
 call mgl_delete_data(a)
 @end verbatim
 @strong{Python}
-
 Not available.
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dens3 sample, Cont3 sample, CloudP sample, 3D plotting samples
 @subsection Dens3 -- пример использования
 @cindex Dens3
 @cindex Axis
-
 @float
- at image{png/densa, 7cm}
- at caption{Example of Dens3. @tdref{densa}}
+ at image{../png/densa, 7cm}
+ at c @caption{Example of Dens3. @tdref{densa}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);  gr->Alpha(true);    gr->Org = mglPoint(0,0,0);
 gr->Box();
 gr->DensA(a);
 gr->Axis();
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 alpha on
 origin 0 0 0
@@ -2368,11 +2733,11 @@ box
 densa a
 axis
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_alpha(gr,1);
 mgl_set_origin(gr,0.,0.,0.);
@@ -2386,7 +2751,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_alpha(gr,1)
 call mgl_set_origin(gr,0.,0.,0.);
@@ -2404,40 +2768,38 @@ gr.SetOrigin(0,0,0);    gr.Box();
 gr.Axis();
 gr.DensA(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cont3 sample, ContF3 sample, Dens3 sample, 3D plotting samples
 @subsection Cont3 -- пример использования
 @cindex Cont3
-
 @float
- at image{png/conta, 7cm}
- at caption{Example of Cont3. @tdref{conta}}
+ at image{../png/conta, 7cm}
+ at c @caption{Example of Cont3. @tdref{conta}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->ContA(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 box
 conta a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_cont_all(gr,a,0,7);
@@ -2448,7 +2810,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_cont_all(gr,a,'',7)
@@ -2462,41 +2823,39 @@ gr.Rotate(40,60);
 gr.Box();
 gr.ContA(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node ContF3 sample, Cont projection sample, Cont3 sample, 3D plotting samples
 @subsection ContF3 -- пример использования
 @cindex ContF3
-
 @float
- at image{png/contfa, 7cm}
- at caption{Example of ContF3. @tdref{contfa}}
+ at image{../png/contfa, 7cm}
+ at c @caption{Example of ContF3. @tdref{contfa}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);  gr->Light(true);
 gr->Box();
 gr->ContFA(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 box
 contfa a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -2508,7 +2867,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -2523,24 +2881,22 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.ContFA(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cont projection sample, Dens projection sample, ContF3 sample, 3D plotting samples
 @subsection Cont projection -- пример использования
 @cindex ContX
 @cindex ContY
 @cindex ContZ
-
 @float
- at image{png/cont_xyz, 7cm}
- at caption{Example of projection by Cont[XYZ]. @tdref{cont_xyz}}
+ at image{../png/cont_xyz, 7cm}
+ at c @caption{Example of projection by Cont[XYZ]. @tdref{cont_xyz}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->ContX(a.Sum("x"),"",-1);
@@ -2548,10 +2904,10 @@ gr->ContY(a.Sum("y"),"",1);
 gr->ContZ(a.Sum("z"),"",-1);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 box
 sum s a 'x'
@@ -2561,11 +2917,11 @@ conty s '' 1
 sum s a 'z'
 contz s '' -1
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40), s;
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 s=mgl_data_sum(a,"x"); mgl_cont_x(gr,s,0,-1.,7); mgl_delete_data(s);
@@ -2578,7 +2934,6 @@ mgl_delete_data(a);
 integer a,s, mgl_create_data_size, mgl_data_sum
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 s=mgl_data_sum(a,'x')
@@ -2601,24 +2956,22 @@ gr.ContX(a.Sum("x"),"",-1);
 gr.ContY(a.Sum("y"),"",1);
 gr.ContZ(a.Sum("z"),"",-1);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dens projection sample, CutMinMax sample, Cont projection sample, 3D plotting samples
 @subsection Dens projection -- пример использования
 @cindex DensX
 @cindex DensY
 @cindex DensZ
-
 @float
- at image{png/dens_xyz, 7cm}
- at caption{Example of projection by Dens[XYZ]. @tdref{dens_xyz}}
+ at image{../png/dens_xyz, 7cm}
+ at c @caption{Example of projection by Dens[XYZ]. @tdref{dens_xyz}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->DensX(a.Sum("x"),"",-1);
@@ -2626,10 +2979,10 @@ gr->DensY(a.Sum("y"),"",1);
 gr->DensZ(a.Sum("z"),"",-1);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 box
 sum s a 'x'
@@ -2639,11 +2992,11 @@ densy s '' 1
 sum s a 'z'
 densz s '' -1
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a, s; a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 s=mgl_data_sum(a,"x"); mgl_dens_x(gr,s,0,-1.); mgl_delete_data(s);
@@ -2656,7 +3009,6 @@ mgl_delete_data(a);
 integer a,s, mgl_create_data_size, mgl_data_sum
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 s=mgl_data_sum(a,'x')
@@ -2679,24 +3031,22 @@ gr.DensX(a.Sum("x"),"",-1);
 gr.DensY(a.Sum("y"),"",1);
 gr.DensZ(a.Sum("z"),"",-1);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node CutMinMax sample, ``Isocaps'' sample, Dens projection sample, 3D plotting samples
+ at node CutMinMax sample, Isocaps sample, Dens projection sample, 3D plotting samples
 @subsection CutMinMax -- пример использования
 @cindex Surf3
 @cindex CutMin
 @cindex CutMax
-
 @float
- at image{png/cutminmax, 7cm}
- at caption{Example of Surf3 & CutMin, CutMax. @tdref{cutminmax}}
+ at image{../png/cutminmax, 7cm}
+ at c @caption{Example of Surf3 & CutMin, CutMax. @tdref{cutminmax}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -2705,10 +3055,10 @@ gr->Box();
 gr->Surf3(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 alpha on
@@ -2716,11 +3066,11 @@ cut 0 -1 -1 1 0 1
 box
 surf3 a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -2734,7 +3084,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -2751,25 +3100,23 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Alpha(True);
 gr.SetCutBox(0,-1,-1,1,0,1);    gr.Box();
 gr.Surf3(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node ``Isocaps'' sample, CutOff sample, CutMinMax sample, 3D plotting samples
+ at node Isocaps sample, CutOff sample, CutMinMax sample, 3D plotting samples
 @subsection ``Isocaps'' -- пример использования
 @cindex Surf3
 @cindex ContF3
 @cindex CutMin
 @cindex CutMax
-
 @float
- at image{png/cutminmax2, 7cm}
- at caption{Example of ``Isocaps''. @tdref{cutminmax2}}
+ at image{../png/cutminmax2, 7cm}
+ at c @caption{Example of ``Isocaps''. @tdref{cutminmax2}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(61,51,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->CutMin = mglPoint(0,-1,-1); gr->CutMax = mglPoint(1,0,1.1);
@@ -2779,10 +3126,10 @@ gr->ContF3(a,'x',-1); gr->ContF3(a,'y',-1);
 gr->ContF3(a,'z', 0); gr->ContF3(a,'z',39);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 61 51 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 cut 0 -1 -1 1 0 1.1
@@ -2793,11 +3140,11 @@ contf3 a 'y' -1
 contf3 a 'z' 0
 contf3 a 'z' 39
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(61,51,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_cut_box(gr,0.,-1.,-1.,1.,0.,1.1);
@@ -2813,7 +3160,6 @@ mgl_delete_data(a);
 @verbatim
 a = mgl_create_data_size(61,51,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_cut_box(gr,0.,-1.,-1.,1.,0.,1.1);
@@ -2835,23 +3181,21 @@ gr.Surf3(-1,a);
 gr.ContF3(a,"x",-1);    gr.ContF3(a,"y",-1);
 gr.ContF3(a,"z",0);     gr.ContF3(a,"z",39);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node CutOff sample,, ``Isocaps'' sample, 3D plotting samples
+ at node CutOff sample,, Isocaps sample, 3D plotting samples
 @subsection CutOff -- пример использования
 @cindex Surf3
 @cindex CutOff
-
 @float
- at image{png/surf3_cutoff, 7cm}
- at caption{Example of Surf3 & CutOff. @tdref{surf3_cutoff}}
+ at image{../png/surf3_cutoff, 7cm}
+ at c @caption{Example of Surf3 & CutOff. @tdref{surf3_cutoff}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -2860,10 +3204,10 @@ gr->Box();
 gr->Surf3(a);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 light on
 alpha on
@@ -2871,11 +3215,11 @@ cut '(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)'
 box
 surf3 a
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -2889,7 +3233,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,'-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)',0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -2907,12 +3250,10 @@ gr.CutOff("(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)");
 gr.Box();
 gr.Surf3(a);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
- at node Dual plotting samples, Additional features, 3D plotting samples, Samples
+ at node Dual plotting samples, Basic features, 3D plotting samples, Samples
 @section Примеры парных/векторных графиков
-
 @menu
 * SurfC sample::                
 * SurfA sample::                
@@ -2935,47 +3276,44 @@ gr.Surf3(a);
 * Crust sample::                
 * Dots sample::                 
 @end menu
-
 @c ------------------------------------------------------------------
 @node SurfC sample, SurfA sample,, Dual plotting samples
 @subsection SurfC -- пример использования
 @cindex SurfC
-
 @float
- at image{png/surfc, 7cm}
- at caption{Example of SurfC. @tdref{surfc}}
+ at image{../png/surfc, 7cm}
+ at c @caption{Example of SurfC. @tdref{surfc}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40), b(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->SurfC(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 surfc a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 HMDT b = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -2989,7 +3327,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -3006,23 +3343,21 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.SurfC(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node SurfA sample, TileS sample, SurfC sample, Dual plotting samples
 @subsection SurfA -- пример использования
 @cindex SurfA
-
 @float
- at image{png/surfa, 7cm}
- at caption{Example of SurfA. @tdref{surfa}}
+ at image{../png/surfa, 7cm}
+ at c @caption{Example of SurfA. @tdref{surfa}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40), b(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -3030,18 +3365,19 @@ gr->Box();
 gr->SurfA(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 alpha on
 box
 surfa a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a, b;
@@ -3049,7 +3385,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -3064,7 +3399,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1);
@@ -3082,36 +3416,35 @@ gr.Rotate(40,60);   gr.Light(True);    gr.Alpha(True);
 gr.Box();
 gr.SurfC(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node TileS sample, Map sample, SurfA sample, Dual plotting samples
- at subsection Tiles -- пример использования
+ at subsection TileS -- пример использования
 @cindex TileS
-
 @float
- at image{png/tiles, 7cm}
- at caption{Example of TileS. @tdref{tiles}}
+ at image{../png/tiles, 7cm}
+ at c @caption{Example of TileS. @tdref{tiles}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40), b(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->TileS(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 box
 tile a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a, b;
@@ -3119,7 +3452,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_tiles(gr,a,b,0);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3131,7 +3463,6 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_tiles(gr,a,b,'')
 call mgl_delete_data(a)
@@ -3145,28 +3476,25 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.TileS(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Map sample, Traj sample, TileS sample, Dual plotting samples
 @subsection Map -- пример использования
 @cindex Map
-
 @float
- at image{png/map, 7cm}
- at caption{Example of Map. @tdref{map}}
+ at image{../png/map, 7cm}
+ at c @caption{Example of Map. @tdref{map}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50, 40), b(50, 40);
 gr->Puts(mglPoint(0, 0), "\\to", "", -1.4);
 gr->Axis(mglPoint(-1,-1,-2),mglPoint(1,1,2));
-
 gr->SubPlot(2, 1, 0);
 a.Fill("x", gr->Min, gr->Max);	b.Fill("y", gr->Min, gr->Max);
 gr->Puts(mglPoint(0, 1.1), "\\{x, y\\}", "C", -2);		gr->Box();
 gr->Map(a, b, "brgk", 0, false);
-
 gr->SubPlot(2, 1, 1);
 a.Fill("(x^3+y^3)/2", gr->Min, gr->Max);
 b.Fill("(x-y)/2", gr->Min, gr->Max);
@@ -3175,19 +3503,18 @@ gr->Box();
 gr->Map(a, b, "brgk", 0, false);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
 text 0 0 '\to'
 zrange -2 2
-
 subplot 2 1 0
 text 0 1.1 '\{x, y\}' '' -2
 box
 fill a 'x'
 fill b 'y'
 map a b 'brgk' 0 0
-
 subplot 2 1 1
 text 0 1.1 '\{\frac{x^3+y^3}{2}, \frac{x-y}{2}\}' '' -2
 box
@@ -3195,27 +3522,25 @@ fill a '(x^3+y^3)/2'
 fill b '(x-y)/2'
 map a b 'brgk' 0 0
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 HMDT b = mgl_create_data_size(50,40,1);
 mgl_puts_ext(gr, 0.,0.,0., "\\to", "", -1.4, 't');
 mgl_set_axis_3d(gr,-1.,-1.,-2.,1.,1.,2.);
-
 mgl_subplot(gr, 2, 1, 0);
 mgl_data_fill_eq(gr, a, "x", 0, 0);
 mgl_data_fill_eq(gr, b, "y", 0, 0);
 mgl_puts_ext(gr, 0.,1.1,0., "\\{x, y\\}", "C", -2., 't');
 mgl_box(gr,1);
 mgl_map(gr, a, b, "brgk", 0, 0);
-
 mgl_subplot(gr, 2, 1, 1);
 mgl_data_fill_eq(gr, a, "(x^3+y^3)/2", 0, 0);
 mgl_data_fill_eq(gr, b, "(x-y)/2", 0, 0);
 mgl_puts_ext(gr, 0.,1.1,0., "\\{\\frac{x^3+y^3}{2}, \\frac{x-y}{2}\\}", "C", -2., 't');
 mgl_box(gr,1);
 mgl_map(gr, a, b, "brgk", 0, 0);
-
 mgl_box(gr,1);
 mgl_map(gr,a,b,0,0,1);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3227,14 +3552,12 @@ a = mgl_create_data_size(50,40,1);
 b = mgl_create_data_size(50,40,1);
 call mgl_puts_ext(gr, 0.,0.,0., '\to', '', -1.4, 't');
 call mgl_set_axis_3d(gr,-1.,-1.,-2.,1.,1.,2.);
-
 call mgl_subplot(gr, 2, 1, 0);
 call mgl_data_fill_eq(gr, a, 'x', 0, 0);
 call mgl_data_fill_eq(gr, b, 'y', 0, 0);
 call mgl_puts_ext(gr, 0.,1.1,0., '\{x, y\}', 'C', -2., 't');
 call mgl_box(gr,1);
 call mgl_map(gr, a, b, 'brgk', 0, 0);
-
 call mgl_subplot(gr, 2, 1, 1);
 call mgl_data_fill_eq(gr, a, '(x^3+y^3)/2', 0, 0);
 call mgl_data_fill_eq(gr, b, '(x-y)/2', 0, 0);
@@ -3251,30 +3574,27 @@ call mgl_delete_data(b)
 a, b = mglData(50,40), mglData(50,40);
 gr.Puts(0, 0, 0, "\\to", "", -1.4);
 gr.SetRanges(-1,1,-1,1,-2,2);
-
 gr.SubPlot(2, 1, 0);
 gr.Fill(a, "x");    gr.Fill(b, "y");
 gr.Puts(0, 1.1, 0, "\\{x, y\\}", "C", -2);
 gr.Box();
 gr.Map(a, b, "brgk", 0, 0);
-
 gr.SubPlot(2, 1, 1);
 gr.Fill(a, "(x^3+y^3)/2");   gr.Fill(b, "(x-y)/2");
 gr.Puts(0, 1.1, 0, "\\{\\frac{x^3+y^3}{2}, \\frac{x-y}{2}\\}", "C", -2);
 gr.Box();
 gr.Map(a, b, "brgk", 0, 0);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Traj sample, Vect sample, Map sample, Dual plotting samples
 @subsection Traj -- пример использования
 @cindex Traj
-
 @float
- at image{png/traj, 7cm}
- at caption{Example of Plot. @tdref{traj}}
+ at image{../png/traj, 7cm}
+ at c @caption{Example of Plot. @tdref{traj}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y(50,3), x(50), y1(50), y2(50);
@@ -3284,12 +3604,12 @@ y.Modify("cos(2*pi*x)",2);
 y1.Modify("0.5+0.3*cos(2*pi*x)");
 y2.Modify("0.3*sin(2*pi*x)");
 x.Fill(-1,1,'x');
-
 gr->Box();
 gr->Plot(x,y);
 gr->Traj(x,y,y1,y2);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y 50 3
 new x 50
@@ -3305,6 +3625,7 @@ box
 plot x y
 traj x y y1 y2
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y = mgl_create_data_size(50,3,1);
@@ -3357,28 +3678,26 @@ gr.Box();
 gr.Plot(x,y);
 gr.Traj(x,y,y1,y2);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Vect sample, VectL sample, Traj sample, Dual plotting samples
 @subsection Vect -- пример использования
 @cindex Vect
-
 @float
- at image{png/vect, 7cm}
- at caption{Example of Vect. @tdref{vect}}
+ at image{../png/vect, 7cm}
+ at c @caption{Example of Vect. @tdref{vect}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(20,30), b(20,30);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->Vect(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3387,13 +3706,13 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 vect a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(20,30,1);
 HMDT b = mgl_create_data_size(20,30,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_vect_2d(gr,a,b,0,0.);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3405,7 +3724,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_vect_2d(gr,a,b,'',0.)
 call mgl_delete_data(a)
@@ -3419,27 +3737,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.Vect(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node VectL sample, VectC sample, Vect sample, Dual plotting samples
 @subsection VectL -- пример использования
 @cindex VectL
-
 @float
- at image{png/vectl, 7cm}
- at caption{Example of VectL. @tdref{vectl}}
+ at image{../png/vectl, 7cm}
+ at c @caption{Example of VectL. @tdref{vectl}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(20,30), b(20,30);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->VectL(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3448,6 +3765,7 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 vectl a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a, b;
@@ -3455,7 +3773,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_vectl_2d(gr,a,b,0,0.);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3467,7 +3784,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_vectl_2d(gr,a,b,'',0.)
 call mgl_delete_data(a)
@@ -3481,28 +3797,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.VectL(a,b);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node VectC sample, Flow sample, VectL sample, Dual plotting samples
 @subsection VectC -- пример использования
 @cindex VectC
-
 @float
- at image{png/vectc, 7cm}
- at caption{Example of VectC. @tdref{vectc}}
+ at image{../png/vectc, 7cm}
+ at c @caption{Example of VectC. @tdref{vectc}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(20,30), b(20,30);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->VectC(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3511,6 +3825,7 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 vectc a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a, b;
@@ -3518,7 +3833,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_vectc_2d(gr,a,b,0,0.);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3530,7 +3844,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_vectc_2d(gr,a,b,'',0.)
 call mgl_delete_data(a)
@@ -3544,28 +3857,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.VectC(a,b);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Flow sample, Pipe sample, VectC sample, Dual plotting samples
 @subsection Flow -- пример использования
 @cindex Flow
-
 @float
- at image{png/flow, 7cm}
- at caption{Example of Flow. @tdref{flow}}
+ at image{../png/flow, 7cm}
+ at c @caption{Example of Flow. @tdref{flow}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(20,30), b(20,30);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Box();
 gr->Flow(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3574,13 +3885,13 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 flow a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(20,30,1);
 HMDT b = mgl_create_data_size(20,30,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_box(gr,1);
 mgl_flow_2d(gr,a,b,0,5,1,0.);
 mgl_delete_data(a); mgl_delete_data(b);
@@ -3592,7 +3903,6 @@ a = mgl_create_data_size(20,30,1);
 b = mgl_create_data_size(20,30,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_flow_2d(gr,a,b,'',5,1,0.)
 call mgl_delete_data(a)
@@ -3606,17 +3916,16 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.Flow(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Pipe sample, Dew sample, Flow sample, Dual plotting samples
 @subsection Pipe -- пример использования
 @cindex Pipe
-
 @float
- at image{png/pipe, 7cm}
- at caption{Example of Pipe. @tdref{pipe}}
+ at image{../png/pipe, 7cm}
+ at c @caption{Example of Pipe. @tdref{pipe}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(20,30), b(20,30);
@@ -3627,6 +3936,7 @@ gr->Box();
 gr->Pipe(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3636,6 +3946,7 @@ light on
 box
 pipe a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(20,30,1);
@@ -3668,17 +3979,16 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Light(True);    gr.Box();
 gr.Pipe(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dew sample, Surf3C sample, Pipe sample, Dual plotting samples
 @subsection Dew -- пример использования
 @cindex Dew
-
 @float
- at image{png/dew, 7cm}
- at caption{Example of Dew. @tdref{dew}}
+ at image{../png/dew, 7cm}
+ at c @caption{Example of Dew. @tdref{dew}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(20,30), b(20,30);
@@ -3689,6 +3999,7 @@ gr->Light(true);
 gr->Dew(a,b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 20 30
 new b 20 30
@@ -3698,6 +4009,7 @@ box
 light on
 dew a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(20,30,1);
@@ -3730,23 +4042,21 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Light(True);    gr.Box();
 gr.Dew(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Surf3C sample, Surf3A sample, Dew sample, Dual plotting samples
 @subsection Surf3C -- пример использования
 @cindex Surf3C
-
 @float
- at image{png/surf3c, 7cm}
- at caption{Example of Surf3C. @tdref{surf3c}}
+ at image{../png/surf3c, 7cm}
+ at c @caption{Example of Surf3C. @tdref{surf3c}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40), b(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
 b.Modify("1-2*tanh(4*(x+y-1)^2)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -3754,25 +4064,25 @@ gr->Box();
 gr->Surf3C(a, b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 new b 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
 modify b '1-2*tanh(4*(x+y-1)^2)'
-
 rotate 40 60
 light on
 alpha on
 box
 surf3c a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 HMDT b = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
 mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -3787,7 +4097,6 @@ a = mgl_create_data_size(60,50,40);
 b = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
 call mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -3805,24 +4114,21 @@ gr.Rotate(40,60);   gr.Light(True);     gr.Alpha(True);
 gr.Box();
 gr.Surf3C(a,b);
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Surf3A sample, Vect 3D sample, Surf3C sample, Dual plotting samples
 @subsection Surf3A -- пример использования
 @cindex Surf3A
-
 @float
- at image{png/surf3a, 7cm}
- at caption{Example of Surf3A. @tdref{surf3a}}
+ at image{../png/surf3a, 7cm}
+ at c @caption{Example of Surf3A. @tdref{surf3a}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40), b(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
 b.Modify("1-2*tanh(4*(x+y-1)^2)");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Alpha(true);
@@ -3830,25 +4136,25 @@ gr->Box();
 gr->Surf3A(a, b);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 new b 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
 modify b '1-2*tanh(4*(x+y-1)^2)'
-
 rotate 40 60
 light on
 alpha on
 box
 surf3a a b
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a, b; a = mgl_create_data_size(60,50,40);
 b = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
 mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
@@ -3863,7 +4169,6 @@ a = mgl_create_data_size(60,50,40);
 b = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
 call mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
@@ -3881,17 +4186,16 @@ gr.Rotate(40,60);   gr.Light(True);     gr.Alpha(True);
 gr.Box();
 gr.Surf3A(a,b);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Vect 3D sample, VectL 3D sample, Surf3A sample, Dual plotting samples
 @subsection Vect 3D -- пример использования
 @cindex Vect
-
 @float
- at image{png/vect3, 7cm}
- at caption{Example of Vect in 3D. @tdref{vect3}}
+ at image{../png/vect3, 7cm}
+ at c @caption{Example of Vect in 3D. @tdref{vect3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
@@ -3906,6 +4210,7 @@ gr->Box();
 gr->Vect(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new ex 10 10 10
 new ey 10 10 10
@@ -3913,11 +4218,11 @@ new ez 10 10 10
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 box
 vect ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT ex, ey, ez;
@@ -3930,7 +4235,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_vect_3d(gr,ex,ey,ez,"bwr");
@@ -3948,7 +4252,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1);
 call mgl_vect_3d(gr,ex,ey,ez,'bwr')
@@ -3968,17 +4271,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);       gr.Box();
 gr.Vect(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node VectL 3D sample, VectC 3D sample, Vect 3D sample, Dual plotting samples
 @subsection VectL 3D -- пример использования
 @cindex VectL
-
 @float
- at image{png/vectl3, 7cm}
- at caption{Example of VectL in 3D. @tdref{vectl3}}
+ at image{../png/vectl3, 7cm}
+ at c @caption{Example of VectL in 3D. @tdref{vectl3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
@@ -3993,6 +4295,7 @@ gr->Box();
 gr->VectL(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new ex 10 10 10
 new ey 10 10 10
@@ -4000,11 +4303,11 @@ new ez 10 10 10
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 box
 vectl ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT ex, ey, ez;
@@ -4017,7 +4320,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_vectl_3d(gr,ex,ey,ez,"bwr");
@@ -4035,7 +4337,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1);
 call mgl_vectl_3d(gr,ex,ey,ez,'bwr')
@@ -4055,17 +4356,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);       gr.Box();
 gr.VectL(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node VectC 3D sample, Flow 3D sample, VectL 3D sample, Dual plotting samples
 @subsection VectC 3D -- пример использования
 @cindex VectC
-
 @float
- at image{png/vectc3, 7cm}
- at caption{Example of VectC in 3D. @tdref{vectc3}}
+ at image{../png/vectc3, 7cm}
+ at c @caption{Example of VectC in 3D. @tdref{vectc3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
@@ -4080,6 +4380,7 @@ gr->Box();
 gr->VectC(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new ex 10 10 10
 new ey 10 10 10
@@ -4087,11 +4388,11 @@ new ez 10 10 10
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 box
 vectc ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT ex, ey, ez;
@@ -4104,7 +4405,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_vectc_3d(gr,ex,ey,ez,"bwr");
@@ -4122,7 +4422,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1);
 call mgl_vectc_3d(gr,ex,ey,ez,'bwr')
@@ -4142,17 +4441,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);       gr.Box();
 gr.VectC(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Flow 3D sample, Pipe 3D sample, VectC 3D sample, Dual plotting samples
 @subsection Flow 3D -- пример использования
 @cindex Flow
-
 @float
- at image{png/flow3, 7cm}
- at caption{Example of Flow in 3D. @tdref{flow3}}
+ at image{../png/flow3, 7cm}
+ at c @caption{Example of Flow in 3D. @tdref{flow3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData ex(30,30,30), ey(30,30,30), ez(30,30,30);
@@ -4167,6 +4465,7 @@ gr->Box();
 gr->Flow(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new ex 30 30 30
 new ey 30 30 30
@@ -4174,11 +4473,11 @@ new ez 30 30 30
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 box
 flow ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT ex, ey, ez;
@@ -4191,7 +4490,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_flow_3d(gr,ex,ey,ez,"bwr",3,1);
@@ -4209,7 +4507,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1);
 call mgl_flow_3d(gr,ex,ey,ez,'bwr',3,1)
@@ -4229,17 +4526,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);       gr.Box();
 gr.Flow(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Pipe 3D sample, Crust sample, Flow 3D sample, Dual plotting samples
 @subsection Pipe 3D -- пример использования
 @cindex Pipe
-
 @float
- at image{png/pipe3, 7cm}
- at caption{Example of Pipe in 3D. @tdref{pipe3}}
+ at image{../png/pipe3, 7cm}
+ at c @caption{Example of Pipe in 3D. @tdref{pipe3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData ex(10,10,10), ey(10,10,10), ez(10,10,10);
@@ -4255,6 +4551,7 @@ gr->Box();
 gr->Pipe(ex, ey, ez, "bwr");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new ex 10 10 10
 new ey 10 10 10
@@ -4262,12 +4559,12 @@ new ez 10 10 10
 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)'
 fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)'
-
 rotate 40 60
 light on
 box
 pipe ex ey ez 'bwr'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT ex, ey, ez;
@@ -4280,7 +4577,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
 mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -4299,7 +4595,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
 call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - &
          0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1);
 call mgl_box(gr,1);
@@ -4320,17 +4615,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \
 gr.Rotate(40,60);   gr.Light(True);    gr.Box();
 gr.Pipe(ex,ey,ez,"bwr");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Crust sample, Dots sample, Pipe 3D sample, Dual plotting samples
 @subsection Crust -- пример использования
 @cindex Crust
-
 @float
- at image{png/crust, 7cm}
- at caption{Example of Crust. @tdref{crust}}
+ at image{../png/crust, 7cm}
+ at c @caption{Example of Crust. @tdref{crust}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a("hotdogs.pts");
@@ -4341,6 +4635,7 @@ gr->Box();
 gr->Crust(a,"p");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 read a 'hotdogs.pts'
 norm a -1 1 on
@@ -4349,6 +4644,7 @@ light on
 box
 crust a 'p'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_file("hotdogs.pts");
@@ -4378,17 +4674,16 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.Crust(a);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Dots sample,, Crust sample, Dual plotting samples
 @subsection Dots -- пример использования
 @cindex Dots
-
 @float
- at image{png/dots, 7cm}
- at caption{Example of Dots. @tdref{dots}}
+ at image{../png/dots, 7cm}
+ at c @caption{Example of Dots. @tdref{dots}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a("hotdogs.pts");
@@ -4398,6 +4693,7 @@ gr->Box();
 gr->Dots(a,"p");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 read a 'hotdogs.pts'
 norm a -1 1 on
@@ -4405,6 +4701,7 @@ rotate 40 60
 box
 dots a 'p'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_file("hotdogs.pts");
@@ -4432,13 +4729,690 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.Dots(a);
 @end verbatim
+ at end ifclear
+
+
+ at c ------------------------------------------------------------------
+ at node Basic features, Additional features, Dual plotting samples, Samples
+ at section Базовые возможности
+ at menu
+* 1D plot sample::              
+* 2D plot sample::              
+* 3D plot sample::              
+* Line styles sample::          
+* Arrow styles sample::         
+* Text styles sample::          
+* TeX parsing sample::          
+* Font faces sample::           
+* Colors sample::               
+* Color schemes sample::        
+* Normal transparency::         
+* Glass-like transparency::     
+* Lamp-like transparency::      
+ at end menu
+ at c ------------------------------------------------------------------
+ at node 1D plot sample, 2D plot sample, , Basic features
+ at subsection Пример графиков 1D данных
+ at cindex Plot
+ at cindex Bars
+ at cindex SubPlot
+ at float
+ at image{../png/sample8, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData y0(50);		y0.Modify("sin(pi*(2*x-1))");
+gr->SubPlot(2,2,0);
+gr->Plot(y0);		gr->Box();
+
+gr->SubPlot(2,2,1);
+mglData y1(50,2);
+y1.Modify("sin(pi*2*x-pi)");	y1.Modify("cos(pi*2*x-pi)/2",1);
+gr->Plot(y1);		gr->Box();
+
+mglData x(50);		x.Modify("cos(pi*2*x-pi)");
+gr->Plot(x,y0,"Y+");
+
+gr->Plot(y1.SubData(-1,0),y1.SubData(-1,1),"q|");
 
+gr->SubPlot(2,2,2);	gr->Rotate(60,40);
+mglData z(50);		z.Modify("2*x-1");
+gr->Plot(x,y0,z);		gr->Box();
 
+mglData y2(10,3);	y2.Modify("cos(pi*(2*x-1-y))");
+y2.Modify("2*x-1",2);
+gr->Plot(y2.SubData(-1,0),y2.SubData(-1,1),y2.SubData(-1,2),"bo ");
+
+gr->SubPlot(2,2,3);	gr->Rotate(60,40);
+gr->Bars(x,y0,z,"ri");		gr->Box();
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new y0 50: modify y0 'sin(pi*(2*x-1))'
+subplot 2 2 0
+plot y0: box
 
+subplot 2 2 1
+new y1 50 2
+modify y1 'sin(pi*2*x-pi)'
+modify y1 'cos(pi*2*x-pi)/2' 1
+plot y1: box
+
+new x 50: modify x 'cos(pi*2*x-pi)'
+plot x y0 'Y+'
+plot y1(:,0) y(:,1) 'q|'
+
+subplot 2 2 2:rotate 60 40
+new z 50:   modify z '2*x-1'
+plot x y0 z 'g':box
+new y2 10 3
+modify y2 'cos(pi*(2*x-1-y))'
+modify y2 '2*x-1' 2
+plot y2(:,0) y2(:,1) y2(:,2) 'bo '
+
+subplot 2 2 3:rotate 60 40
+bars x y0 z 'r':box
+ at end verbatim
 @c ------------------------------------------------------------------
- at node Additional features, Advanced features, Dual plotting samples, Samples
- at section Дополнительные возможности
+ at node 2D plot sample, 3D plot sample, 1D plot sample, Basic features
+ at subsection Пример графиков 2D данных
+ at cindex Surf
+ at cindex Dens
+ at cindex Alpha
+ at float
+ at image{../png/sample9, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+gr->Light(true);
+mglData a0(50,40);
+a0.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+gr->SubPlot(2,2,0); gr->Rotate(60,40);
+gr->Surf(a0);       gr->Box();
+
+mglData x(50,40),y(50,40),z(50,40);
+x.Modify("0.8*sin(2*pi*x)*sin(pi*y)");
+y.Modify("0.8*cos(2*pi*x)*sin(pi*y)");
+z.Modify("0.8*cos(pi*y)");
+gr->SubPlot(2,2,1); gr->Rotate(60,40);
+gr->Surf(x,y,z,"BbwrR");    gr->Box();
+
+mglData a1(50,40,3);
+a1.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*sin(3*pi*(x*y))",1);
+a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",2);
+gr->SubPlot(2,2,2); gr->Rotate(60,40);
+gr->Alpha(true);
+gr->Surf(a1);       gr->Box();
+
+gr->SubPlot(2,2,3); gr->Rotate(60,40);
+gr->Dens(a1);       gr->Box();
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+light on
+
+new a0 50 40
+modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+subplot 2 2 0:rotate 60 40
+surf a0: box
+
+new x 50 40: new y 50 40: new z 50 40
+modify x '0.8*sin(2*pi*x)*sin(pi*y)'
+modify y '0.8*cos(2*pi*x)*sin(pi*y)'
+modify z '0.8*cos(pi*y)'
+subplot 2 2 1:rotate 60 40
+surf x y z 'bbwrr': box
+
+new a1 50 40 3
+modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))'
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1
+modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2
+subplot 2 2 2:rotate 60 40
+alpha on
+surf a1: box
+
+subplot 2 2 3: rotate 60 40
+dens a1: box
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node 3D plot sample, Line styles sample, 2D plot sample, Basic features
+ at subsection Пример графиков 3D данных
+ at cindex Surf
+ at cindex Dens
+ at cindex Alpha
+ at float
+ at image{../png/sampleb, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+gr->Alpha(true);	gr->Light(true);	gr->Light(0,mglPoint(0,0,1));
+mglData a(30,30,30), b(30,30,30);
+a.Modify("exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))");
+b.Modify("16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)");
+gr->CAxis(0,1);
+
+gr->SubPlot(2,2,0);	gr->Rotate(40,60);
+gr->Surf3(a,"wgk");	gr->Box();
+gr->SubPlot(2,2,1);	gr->Rotate(40,60);
+gr->DensA(a);		gr->Box();	gr->Axis();
+gr->SubPlot(2,2,2);	gr->Rotate(40,60);
+gr->Cloud(a);		gr->Box();
+gr->SubPlot(2,2,3);	gr->Rotate(40,60);
+gr->Surf3A(b,a,"q");		gr->Box();
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+alpha on: light on
+light 0 0 0 1
+new a 30 30 30: new b 30 30 30
+modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))'
+modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)'
+caxis 0 1
+
+subplot 2 2 0: rotate 40 60
+surf3 a 'wgk': box
+subplot 2 2 1: rotate 40 60
+densa a: box: axis
+subplot 2 2 2: rotate 40 60
+cloud a: box
+subplot 2 2 3: rotate 40 60
+surf3a b a 'q': box
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Line styles sample, Arrow styles sample, 3D plot sample, Basic features
+ at subsection Пример стилей линий и маркеров
+ at cindex Mark
+ at cindex Line
+ at float
+ at image{../png/sample5, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+float d,x1,x2,x0,y=0.95;
+d=0.3, x0=0.2, x1=0.5, x2=0.6;
+gr->Line(mglPoint(x0,1-0*d),mglPoint(x1,1-0*d),"k-");	gr->Puts(mglPoint(x2,y-0*d),"Solid '-'","rL");
+gr->Line(mglPoint(x0,1-1*d),mglPoint(x1,1-1*d),"k|");	gr->Puts(mglPoint(x2,y-1*d),"Long Dash '|'","rL");
+gr->Line(mglPoint(x0,1-2*d),mglPoint(x1,1-2*d),"k;");	gr->Puts(mglPoint(x2,y-2*d),"Dash ';'","rL");
+gr->Line(mglPoint(x0,1-3*d),mglPoint(x1,1-3*d),"k=");	gr->Puts(mglPoint(x2,y-3*d),"Small dash '='","rL");
+gr->Line(mglPoint(x0,1-4*d),mglPoint(x1,1-4*d),"kj");	gr->Puts(mglPoint(x2,y-4*d),"Dash-dot 'j'","rL");
+gr->Line(mglPoint(x0,1-5*d),mglPoint(x1,1-5*d),"ki");	gr->Puts(mglPoint(x2,y-5*d),"Small dash-dot 'i'","rL");
+gr->Line(mglPoint(x0,1-6*d),mglPoint(x1,1-6*d),"k:");	gr->Puts(mglPoint(x2,y-6*d),"Dots ':'","rL");
+gr->Line(mglPoint(x0,1-7*d),mglPoint(x1,1-7*d),"k ");	gr->Puts(mglPoint(x2,y-7*d),"None ' '","rL");
+
+d=0.25; x1=-1; x0=-0.8;	y = -0.05;
+gr->Mark(mglPoint(x1,5*d),'.');		gr->Puts(mglPoint(x0,y+5*d),"'.'","rL");
+gr->Mark(mglPoint(x1,4*d),'+');		gr->Puts(mglPoint(x0,y+4*d),"'+'","rL");
+gr->Mark(mglPoint(x1,3*d),'x');		gr->Puts(mglPoint(x0,y+3*d),"'x'","rL");
+gr->Mark(mglPoint(x1,2*d),'*');		gr->Puts(mglPoint(x0,y+2*d),"'*'","rL");
+gr->Mark(mglPoint(x1,d),'s');		gr->Puts(mglPoint(x0,y+d),"'s'","rL");
+gr->Mark(mglPoint(x1,0),'d');		gr->Puts(mglPoint(x0,y),"'d'","rL");
+gr->Mark(mglPoint(x1,-d,0),'o');	gr->Puts(mglPoint(x0,y-d),"'o'","rL");
+gr->Mark(mglPoint(x1,-2*d,0),'^');	gr->Puts(mglPoint(x0,y-2*d),"'\\^'","rL");
+gr->Mark(mglPoint(x1,-3*d,0),'v');	gr->Puts(mglPoint(x0,y-3*d),"'v'","rL");
+gr->Mark(mglPoint(x1,-4*d,0),'<');	gr->Puts(mglPoint(x0,y-4*d),"'<'","rL");
+gr->Mark(mglPoint(x1,-5*d,0),'>');	gr->Puts(mglPoint(x0,y-5*d),"'>'","rL");
+
+d=0.25; x1=-0.5; x0=-0.3;	y = -0.05;
+gr->Mark(mglPoint(x1,5*d),'C');		gr->Puts(mglPoint(x0,y+5*d),"'\\#.'","rL");
+gr->Mark(mglPoint(x1,4*d),'P');		gr->Puts(mglPoint(x0,y+4*d),"'\\#+'","rL");
+gr->Mark(mglPoint(x1,3*d),'X');		gr->Puts(mglPoint(x0,y+3*d),"'\\#x'","rL");
+gr->Mark(mglPoint(x1,2*d),'Y');		gr->Puts(mglPoint(x0,y+2*d),"'\\#*'","rL");
+gr->Mark(mglPoint(x1,d),'S');		gr->Puts(mglPoint(x0,y+d),"'\\#s'","rL");
+gr->Mark(mglPoint(x1,0),'D');		gr->Puts(mglPoint(x0,y),"'\\#d'","rL");
+gr->Mark(mglPoint(x1,-d,0),'O');	gr->Puts(mglPoint(x0,y-d),"'\\#o'","rL");
+gr->Mark(mglPoint(x1,-2*d,0),'T');	gr->Puts(mglPoint(x0,y-2*d),"'\\#\\^'","rL");
+gr->Mark(mglPoint(x1,-3*d,0),'V');	gr->Puts(mglPoint(x0,y-3*d),"'\\#v'","rL");
+gr->Mark(mglPoint(x1,-4*d,0),'L');	gr->Puts(mglPoint(x0,y-4*d),"'\\#<'","rL");
+gr->Mark(mglPoint(x1,-5*d,0),'R');	gr->Puts(mglPoint(x0,y-5*d),"'\\#>'","rL");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+NOT AVAILABLE
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Arrow styles sample, Text styles sample, Line styles sample, Basic features
+ at subsection Пример стилей стрелок
+ at cindex Line
+ at float
+ at image{../png/sampled, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+float a=0.1,b=0.4,c=0.5;
+gr->Line(mglPoint(a,1),mglPoint(b,1),"k-A");		gr->Puts(mglPoint(c,1),"Style 'A' or 'A\\_'","rL");
+gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"k-V");	gr->Puts(mglPoint(c,0.8),"Style 'V' or 'V\\_'","rL");
+gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"k-K");	gr->Puts(mglPoint(c,0.6),"Style 'K' or 'K\\_'","rL");
+gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"k-I");	gr->Puts(mglPoint(c,0.4),"Style 'I' or 'I\\_'","rL");
+gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"k-D");	gr->Puts(mglPoint(c,0.2),"Style 'D' or 'D\\_'","rL");
+gr->Line(mglPoint(a,0),mglPoint(b,0),"k-S");		gr->Puts(mglPoint(c,0),"Style 'S' or 'S\\_'","rL");
+gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"k-O");	gr->Puts(mglPoint(c,-0.2),"Style 'O' or 'O\\_'","rL");
+gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"k-T");	gr->Puts(mglPoint(c,-0.4),"Style 'T' or 'T\\_'","rL");
+gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-_");	gr->Puts(mglPoint(c,-0.6),"Style '\\_' or none","rL");
+gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-AS");	gr->Puts(mglPoint(c,-0.8),"Style 'AS'","rL");
+gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-_A");		gr->Puts(mglPoint(c,-1),"Style '\\_A'","rL");
+
+a=-1;	b=-0.7;	c=-0.6;
+gr->Line(mglPoint(a,1),mglPoint(b,1),"kAA");		gr->Puts(mglPoint(c,1),"Style 'AA'","rL");
+gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"kVV");	gr->Puts(mglPoint(c,0.8),"Style 'VV'","rL");
+gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"kKK");	gr->Puts(mglPoint(c,0.6),"Style 'KK'","rL");
+gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"kII");	gr->Puts(mglPoint(c,0.4),"Style 'II'","rL");
+gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"kDD");	gr->Puts(mglPoint(c,0.2),"Style 'DD'","rL");
+gr->Line(mglPoint(a,0),mglPoint(b,0),"kSS");		gr->Puts(mglPoint(c,0),"Style 'SS'","rL");
+gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"kOO");	gr->Puts(mglPoint(c,-0.2),"Style 'OO'","rL");
+gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"kTT");	gr->Puts(mglPoint(c,-0.4),"Style 'TT'","rL");
+gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-__");	gr->Puts(mglPoint(c,-0.6),"Style '\\_\\_'","rL");
+gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-VA");	gr->Puts(mglPoint(c,-0.8),"Style 'VA'","rL");
+gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-AV");		gr->Puts(mglPoint(c,-1),"Style 'AV'","rL");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+NOT AVAILABLE
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Text styles sample, TeX parsing sample, Arrow styles sample, Basic features
+ at subsection Пример стилей текста
+ at cindex Puts
+ at float
+ at image{../png/sample4, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+gr->Putsw(mglPoint(0,1),L"Text can be in ASCII and in Unicode");
+gr->Puts(mglPoint(0,0.6),"It can be \\wire{wire}, \\big{big} or #r{colored}");
+gr->Puts(mglPoint(0,0.2),"One can change style in string: "
+        "\\b{bold}, \\i{italic, \\b{both}}");
+gr->Puts(mglPoint(0,-0.2),"Easy to \\a{overline} or "
+        "\\u{underline}");
+gr->Puts(mglPoint(0,-0.6),"Easy to change indexes ^{up} _{down} @{center}");
+gr->Puts(mglPoint(0,-1),"It parse TeX: \\int \\alpha \\cdot "
+        "\\sqrt3{sin(\\pi x)^2 + \\gamma_{i_k}} dx");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+text 0 1 'Text can be in ASCII and in Unicode'
+text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}'
+text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}'
+text 0 -0.2 'Easy to \a{overline} or \u{underline}'
+text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}'
+text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx'
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node TeX parsing sample, Font faces sample, Text styles sample, Basic features
+ at subsection Пример TeX формулы
+ at cindex Puts
+ at float
+ at image{../png/samplee, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+gr->Puts(mglPoint(0), "\\sqrt{\\frac{\\alpha^{\\gamma^2}+"
+        "\\overset 1{\\big\\infty}}{\\sqrt3{2+b}}}", 0, -4);
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}' '' -4
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Font faces sample, Colors sample, TeX parsing sample, Basic features
+ at subsection Примеры начертаний шрифта
+ at cindex Puts
+ at float
+ at image{../png/fonts, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+float h=1.1, d=0.25;
+gr->LoadFont("STIX");		gr->Puts(mglPoint(0,h), "default font (STIX)");
+gr->LoadFont("adventor");	gr->Puts(mglPoint(0,h-d), "adventor font");
+gr->LoadFont("bonum");		gr->Puts(mglPoint(0,h-2*d), "bonum font");
+gr->LoadFont("chorus");		gr->Puts(mglPoint(0,h-3*d), "chorus font");
+gr->LoadFont("cursor");		gr->Puts(mglPoint(0,h-4*d), "cursor font");
+gr->LoadFont("heros");		gr->Puts(mglPoint(0,h-5*d), "heros font");
+gr->LoadFont("heroscn");	gr->Puts(mglPoint(0,h-6*d), "heroscn font");
+gr->LoadFont("pagella");	gr->Puts(mglPoint(0,h-7*d), "pagella font");
+gr->LoadFont("schola");		gr->Puts(mglPoint(0,h-8*d), "schola font");
+gr->LoadFont("termes");		gr->Puts(mglPoint(0,h-9*d), "termes font");
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+NOT AVAILABLE
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Colors sample, Color schemes sample, Font faces sample, Basic features
+ at subsection Примеры цветов
+ at float
+ at image{../png/colors, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+//#LENUQ
+gr->FaceZ(-1,	-1, 0, 0.4, 0.3, "L#");	gr->Puts(mglPoint(-0.8,-0.9), "L", "C:w", -1.4);
+gr->FaceZ(-0.6,	-1, 0, 0.4, 0.3, "E#");	gr->Puts(mglPoint(-0.4,-0.9), "E", "C:w", -1.4);
+gr->FaceZ(-0.2,	-1, 0, 0.4, 0.3, "N#");	gr->Puts(mglPoint(0,  -0.9), "N", "C:w", -1.4);
+gr->FaceZ(0.2,	-1, 0, 0.4, 0.3, "U#");	gr->Puts(mglPoint(0.4,-0.9), "U", "C:w", -1.4);
+gr->FaceZ(0.6,	-1, 0, 0.4, 0.3, "Q#");	gr->Puts(mglPoint(0.8,-0.9), "Q", "C:w", -1.4);
+//#lenuq
+gr->FaceZ(-1,	-0.7, 0, 0.4, 0.3, "l#");	gr->Puts(mglPoint(-0.8,-0.6), "l", "C:k", -1.4);
+gr->FaceZ(-0.6,	-0.7, 0, 0.4, 0.3, "e#");	gr->Puts(mglPoint(-0.4,-0.6), "e", "C:k", -1.4);
+gr->FaceZ(-0.2,	-0.7, 0, 0.4, 0.3, "n#");	gr->Puts(mglPoint(0,  -0.6), "n", "C:k", -1.4);
+gr->FaceZ(0.2,	-0.7, 0, 0.4, 0.3, "u#");	gr->Puts(mglPoint(0.4,-0.6), "u", "C:k", -1.4);
+gr->FaceZ(0.6,	-0.7, 0, 0.4, 0.3, "q#");	gr->Puts(mglPoint(0.8,-0.6), "q", "C:k", -1.4);
+//#CMYkP
+gr->FaceZ(-1,	-0.4, 0, 0.4, 0.3, "C#");	gr->Puts(mglPoint(-0.8,-0.3), "C", "C:w", -1.4);
+gr->FaceZ(-0.6,	-0.4, 0, 0.4, 0.3, "M#");	gr->Puts(mglPoint(-0.4,-0.3), "M", "C:w", -1.4);
+gr->FaceZ(-0.2,	-0.4, 0, 0.4, 0.3, "Y#");	gr->Puts(mglPoint(0,  -0.3), "Y", "C:w", -1.4);
+gr->FaceZ(0.2,	-0.4, 0, 0.4, 0.3, "k#");	gr->Puts(mglPoint(0.4,-0.3), "k", "C:w", -1.4);
+gr->FaceZ(0.6,	-0.4, 0, 0.4, 0.3, "P#");	gr->Puts(mglPoint(0.8,-0.3), "P", "C:w", -1.4);
+//#cmywp
+gr->FaceZ(-1,	-0.1, 0, 0.4, 0.3, "c#");	gr->Puts(mglPoint(-0.8, 0), "c", "C:k", -1.4);
+gr->FaceZ(-0.6,	-0.1, 0, 0.4, 0.3, "m#");	gr->Puts(mglPoint(-0.4, 0), "m", "C:k", -1.4);
+gr->FaceZ(-0.2,	-0.1, 0, 0.4, 0.3, "y#");	gr->Puts(mglPoint(0,   0), "y", "C:k", -1.4);
+gr->FaceZ(0.2,	-0.1, 0, 0.4, 0.3, "w#");	gr->Puts(mglPoint(0.4, 0), "w", "C:k", -1.4);
+gr->FaceZ(0.6,	-0.1, 0, 0.4, 0.3, "p#");	gr->Puts(mglPoint(0.8, 0), "p", "C:k", -1.4);
+//#BGRHW
+gr->FaceZ(-1,	0.2, 0, 0.4, 0.3, "B#");	gr->Puts(mglPoint(-0.8, 0.3), "B", "C:w", -1.4);
+gr->FaceZ(-0.6,	0.2, 0, 0.4, 0.3, "G#");	gr->Puts(mglPoint(-0.4, 0.3), "G", "C:w", -1.4);
+gr->FaceZ(-0.2,	0.2, 0, 0.4, 0.3, "R#");	gr->Puts(mglPoint(0,   0.3), "R", "C:w", -1.4);
+gr->FaceZ(0.2,	0.2, 0, 0.4, 0.3, "H#");	gr->Puts(mglPoint(0.4, 0.3), "H", "C:w", -1.4);
+gr->FaceZ(0.6,	0.2, 0, 0.4, 0.3, "W#");	gr->Puts(mglPoint(0.8, 0.3), "W", "C:w", -1.4);
+//#bgrhw
+gr->FaceZ(-1,	0.2, 0, 0.4, 0.3, "b#");	gr->Puts(mglPoint(-0.8, 0.6), "b", "C:k", -1.4);
+gr->FaceZ(-0.6,	0.5, 0, 0.4, 0.3, "g#");	gr->Puts(mglPoint(-0.4, 0.6), "g", "C:k", -1.4);
+gr->FaceZ(-0.2,	0.2, 0, 0.4, 0.3, "r#");	gr->Puts(mglPoint(0,   0.6), "r", "C:k", -1.4);
+gr->FaceZ(0.2,	0.2, 0, 0.4, 0.3, "h#");	gr->Puts(mglPoint(0.4, 0.6), "h", "C:k", -1.4);
+gr->FaceZ(0.6,	0.2, 0, 0.4, 0.3, "w#");	gr->Puts(mglPoint(0.8, 0.6), "w", "C:k", -1.4);
+//#brighted
+gr->FaceZ(-1,	0.8, 0, 0.4, 0.3, "r1#");	gr->Puts(mglPoint(-0.8, 0.9), "r1", "C:w", -1.4);
+gr->FaceZ(-0.6,	0.8, 0, 0.4, 0.3, "r3#");	gr->Puts(mglPoint(-0.4, 0.9), "r3", "C:w", -1.4);
+gr->FaceZ(-0.2,	0.8, 0, 0.4, 0.3, "r5#");	gr->Puts(mglPoint(0,   0.9), "r5", "C:k", -1.4);
+gr->FaceZ(0.2,	0.8, 0, 0.4, 0.3, "r7#");	gr->Puts(mglPoint(0.4, 0.9), "r7", "C:k", -1.4);
+gr->FaceZ(0.6,	0.8, 0, 0.4, 0.3, "r9#");	gr->Puts(mglPoint(0.8, 0.9), "r9", "C:k", -1.4);
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+#LENUQ
+facez -1   -1 0 0.4 0.3 'L#': text -0.8 -0.9 'L' 'C:w'
+facez -0.6 -1 0 0.4 0.3 'E#': text -0.4 -0.9 'E' 'C:w'
+facez -0.2 -1 0 0.4 0.3 'N#': text  0   -0.9 'N' 'C:w'
+facez  0.2 -1 0 0.4 0.3 'U#': text  0.4 -0.9 'U' 'C:w'
+facez  0.6 -1 0 0.4 0.3 'Q#': text  0.8 -0.9 'Q' 'C:w'
+#lenuq
+facez -1   -0.7 0 0.4 0.3 'l#': text -0.8 -0.6 'l' 'C:k'
+facez -0.6 -0.7 0 0.4 0.3 'e#': text -0.4 -0.6 'e' 'C:k'
+facez -0.2 -0.7 0 0.4 0.3 'n#': text  0   -0.6 'n' 'C:k'
+facez  0.2 -0.7 0 0.4 0.3 'u#': text  0.4 -0.6 'u' 'C:k'
+facez  0.6 -0.7 0 0.4 0.3 'q#': text  0.8 -0.6 'q' 'C:k'
+#CMYkP
+facez -1   -0.4 0 0.4 0.3 'C#': text -0.8 -0.3 'C' 'C:w'
+facez -0.6 -0.4 0 0.4 0.3 'M#': text -0.4 -0.3 'M' 'C:w'
+facez -0.2 -0.4 0 0.4 0.3 'Y#': text  0   -0.3 'Y' 'C:w'
+facez  0.2 -0.4 0 0.4 0.3 'k#': text  0.4 -0.3 'k' 'C:w'
+facez  0.6 -0.4 0 0.4 0.3 'P#': text  0.8 -0.3 'P' 'C:w'
+#lenuq
+facez -1   -0.1 0 0.4 0.3 'c#': text -0.8 0 'c' 'C:k'
+facez -0.6 -0.1 0 0.4 0.3 'm#': text -0.4 0 'm' 'C:k'
+facez -0.2 -0.1 0 0.4 0.3 'y#': text  0   0 'y' 'C:k'
+facez  0.2 -0.1 0 0.4 0.3 'w#': text  0.4 0 'w' 'C:k'
+facez  0.6 -0.1 0 0.4 0.3 'p#': text  0.8 0 'p' 'C:k'
+#BGRHW
+facez -1   0.2 0 0.4 0.3 'B#': text -0.8 0.3 'B' 'C:k'
+facez -0.6 0.2 0 0.4 0.3 'G#': text -0.4 0.3 'G' 'C:k'
+facez -0.2 0.2 0 0.4 0.3 'R#': text  0   0.3 'R' 'C:k'
+facez  0.2 0.2 0 0.4 0.3 'H#': text  0.4 0.3 'H' 'C:k'
+facez  0.6 0.2 0 0.4 0.3 'W#': text  0.8 0.3 'W' 'C:k'
+#bgrhw
+facez -1   0.5 0 0.4 0.3 'b#': text -0.8 0.6 'b' 'C:w'
+facez -0.6 0.5 0 0.4 0.3 'g#': text -0.4 0.6 'g' 'C:w'
+facez -0.2 0.5 0 0.4 0.3 'r#': text  0   0.6 'r' 'C:w'
+facez  0.2 0.5 0 0.4 0.3 'h#': text  0.4 0.6 'h' 'C:w'
+facez  0.6 0.5 0 0.4 0.3 'w#': text  0.8 0.6 'w' 'C:w'
+#brighted
+facez -1   0.8 0 0.4 0.3 'r1#': text -0.8 0.9 'r1' 'C:k'
+facez -0.6 0.8 0 0.4 0.3 'r3#': text -0.4 0.9 'r3' 'C:k'
+facez -0.2 0.8 0 0.4 0.3 'r5#': text  0   0.9 'r5' 'C:k'
+facez  0.2 0.8 0 0.4 0.3 'r7#': text  0.4 0.9 'r7' 'C:k'
+facez  0.6 0.8 0 0.4 0.3 'r9#': text  0.8 0.9 'r9' 'C:k'
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Color schemes sample, Normal transparency, Colors sample, Basic features
+ at subsection Примеры цветовых схем
+ at cindex Colorbar
+ at float
+ at image{../png/color_schemes, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData a(256,2);	a.Fill(-1,1);
+gr->SubPlot(2,10,0,0.2);	gr->Dens(a,"kw", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kw", "C", -8);
+gr->SubPlot(2,10,1,0.2);	gr->Dens(a,"wk", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "wk", "C", -8);
+gr->SubPlot(2,10,2,0.2);	gr->Dens(a,"kHCcw", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kHCcw", "C", -8);
+gr->SubPlot(2,10,3,0.2);	gr->Dens(a,"kBbcw", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kBbcw", "C", -8);
+gr->SubPlot(2,10,4,0.2);	gr->Dens(a,"kRryw", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kRryw", "C", -8);
+gr->SubPlot(2,10,5,0.2);	gr->Dens(a,"kGgew", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "kGgew", "C", -8);
+gr->SubPlot(2,10,6,0.2);	gr->Dens(a,"BbwrR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbwrR", "C", -8);
+gr->SubPlot(2,10,7,0.2);	gr->Dens(a,"BbwgG", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbwgG", "C", -8);
+gr->SubPlot(2,10,8,0.2);	gr->Dens(a,"GgwmM", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "GgwmM", "C", -8);
+gr->SubPlot(2,10,9,0.2);	gr->Dens(a,"UuwqR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "UuwqR", "C", -8);
+gr->SubPlot(2,10,10,0.2);	gr->Dens(a,"QqwcC", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "QqwcC", "C", -8);
+gr->SubPlot(2,10,11,0.2);	gr->Dens(a,"CcwyY", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "CcwyY", "C", -8);
+gr->SubPlot(2,10,12,0.2);	gr->Dens(a,"bcwyr", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "bcwyr", "C", -8);
+gr->SubPlot(2,10,13,0.2);	gr->Dens(a,"bwr", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "bwr", "C", -8);
+gr->SubPlot(2,10,14,0.2);	gr->Dens(a,"BbcyrR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR", "C", -8);
+gr->SubPlot(2,10,15,0.2);	gr->Dens(a,"UbcyqR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "UbcyqR", "C", -8);
+gr->SubPlot(2,10,16,0.2);	gr->Dens(a,"BbcwyrR", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbcwyrR", "C", -8);
+gr->SubPlot(2,10,17,0.2);	gr->Dens(a,"bcyr", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "bcyr", "C", -8);
+gr->SubPlot(2,10,18,0.2);	gr->Dens(a,"BbcyrR|", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR|", "C", -8);
+gr->SubPlot(2,10,19,0.2);	gr->Dens(a,"bgr", nan);
+gr->Puts(mglPoint(-1.4, -0.3), "bgr", "C", -8);
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new a 256 2: fill a 'x'
+subplot 2 10 0 0.2:dens a 'kw'
+text -1.4 -0.3 'kw' '' -8
+subplot 2 10 1 0.2:dens a 'wk'
+text -1.4 -0.3 'wk' '' -8
+subplot 2 10 2 0.2:dens a 'kHCcw'
+text -1.4 -0.3 'kHCcw' '' -8
+subplot 2 10 3 0.2:dens a 'kBbcw'
+text -1.4 -0.3 'kBbcw' '' -8
+subplot 2 10 4 0.2:dens a 'kRryw'
+text -1.4 -0.3 'kRryw' '' -8
+subplot 2 10 5 0.2:dens a 'kGgew'
+text -1.4 -0.3 'kGgew' '' -8
+subplot 2 10 6 0.2:dens a 'BbwrR'
+text -1.4 -0.3 'BbwrR' '' -8
+subplot 2 10 7 0.2:dens a 'BbwgG'
+text -1.4 -0.3 'BbwgG' '' -8
+subplot 2 10 8 0.2:dens a 'GgwmM'
+text -1.4 -0.3 'GgwmM' '' -8
+subplot 2 10 9 0.2:dens a 'UuwqR'
+text -1.4 -0.3 'UuwqR' '' -8
+subplot 2 10 10 0.2:dens a 'QqwcC'
+text -1.4 -0.3 'QqwcC' '' -8
+subplot 2 10 11 0.2:dens a 'CcwyY'
+text -1.4 -0.3 'CcwyY' '' -8
+subplot 2 10 12 0.2:dens a 'bcwyr'
+text -1.4 -0.3 'bcwyr' '' -8
+subplot 2 10 13 0.2:dens a 'bwr'
+text -1.4 -0.3 'bwr' '' -8
+subplot 2 10 14 0.2:dens a 'BbcyrR'
+text -1.4 -0.3 'BbcyrR' '' -8
+subplot 2 10 15 0.2:dens a 'UbcyqR'
+text -1.4 -0.3 'UbcyqR' '' -8
+subplot 2 10 16 0.2:dens a 'BbcwyrR'
+text -1.4 -0.3 'BbcwyrR' '' -8
+subplot 2 10 17 0.2:dens a 'bcyr'
+text -1.4 -0.3 'bcyr' '' -8
+subplot 2 10 18 0.2:dens a 'BbcyrR|'
+text -1.4 -0.3 'BbcyrR|' '' -8
+subplot 2 10 19 0.2:dens a 'bgr'
+text -1.4 -0.3 'bgr' '' -8
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Normal transparency, Glass-like transparency, Color schemes sample, Basic features
+ at subsection Обычная прозрачность
+ at cindex TranspType
+ at float
+ at image{../png/type0, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+gr->Alpha(true);	gr->Light(true);
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+
+gr->TranspType = 0;	gr->Clf();
+gr->SubPlot(2,2,0);	gr->Rotate(40,60);	gr->Surf(a);	gr->Box();
+gr->SubPlot(2,2,1);	gr->Rotate(40,60);	gr->Dens(a);	gr->Box();
+gr->SubPlot(2,2,2);	gr->Rotate(40,60);	gr->Cont(a);	gr->Box();
+gr->SubPlot(2,2,3);	gr->Rotate(40,60);	gr->Axial(a);	gr->Box();
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+transptype 0: clf
+subplot 2 2 0: rotate 40 60: surf a:  box
+subplot 2 2 1: rotate 40 60: dens a:  box
+subplot 2 2 2: rotate 40 60: cont a:  box
+subplot 2 2 3: rotate 40 60: axial a: box
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Glass-like transparency, Lamp-like transparency, Normal transparency, Basic features
+ at subsection "Стеклянная" прозрачность
+ at cindex TranspType
+ at float
+ at image{../png/type1, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+gr->Alpha(true);	gr->Light(true);
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+
+gr->TranspType = 1;	gr->Clf();
+gr->SubPlot(2,2,0);	gr->Rotate(40,60);	gr->Surf(a);	gr->Box();
+gr->SubPlot(2,2,1);	gr->Rotate(40,60);	gr->Dens(a);	gr->Box();
+gr->SubPlot(2,2,2);	gr->Rotate(40,60);	gr->Cont(a);	gr->Box();
+gr->SubPlot(2,2,3);	gr->Rotate(40,60);	gr->Axial(a);	gr->Box();
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+transptype 1: clf
+subplot 2 2 0: rotate 40 60: surf a:  box
+subplot 2 2 1: rotate 40 60: dens a:  box
+subplot 2 2 2: rotate 40 60: cont a:  box
+subplot 2 2 3: rotate 40 60: axial a: box
+ at end verbatim
+ at c ------------------------------------------------------------------
+ at node Lamp-like transparency, , Glass-like transparency, Basic features
+ at subsection "Ламповая" прозрачность
+ at cindex TranspType
+ at float
+ at image{../png/type2, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+gr->Alpha(true);	gr->Light(true);
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+
+gr->TranspType = 2;	gr->Clf();
+gr->SubPlot(2,2,0);	gr->Rotate(40,60);	gr->Surf(a);	gr->Box();
+gr->SubPlot(2,2,1);	gr->Rotate(40,60);	gr->Dens(a);	gr->Box();
+gr->SubPlot(2,2,2);	gr->Rotate(40,60);	gr->Cont(a);	gr->Box();
+gr->SubPlot(2,2,3);	gr->Rotate(40,60);	gr->Axial(a);	gr->Box();
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+alpha on: light on
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+
+transptype 2: clf
+subplot 2 2 0: rotate 40 60: surf a:  box
+subplot 2 2 1: rotate 40 60: dens a:  box
+subplot 2 2 2: rotate 40 60: cont a:  box
+subplot 2 2 3: rotate 40 60: axial a: box
+ at end verbatim
 
+
+
+
+
+
+
+
+
+ at c ------------------------------------------------------------------
+ at node Additional features, Advanced features, Basic features, Samples
+ at section Дополнительные возможности
 @menu
 * Legend sample::               
 * Adding mesh sample::          
@@ -4452,19 +5426,17 @@ gr.Dots(a);
 * Drops sample::                
 * Molecules drawing sample::    
 @end menu
-
 @c ------------------------------------------------------------------
 @node Legend sample, Adding mesh sample,, Additional features
 @subsection Legend -- пример использования
 @cindex Plot
 @cindex Legend
 @cindex AddLegend
-
 @float
- at image{png/legend, 7cm}
- at caption{Example of Legend usage. @tdref{legend}}
+ at image{../png/legend, 7cm}
+ at c @caption{Example of Legend usage. @tdref{legend}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData f(50,3);
@@ -4479,12 +5451,12 @@ gr->AddLegend("sin(\\pi \\sqrt{\\a x})","r+");
 gr->Legend();
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new f 50 3
 modify f 'sin(2*pi*x*x)'
 modify f 'sin(2*pi*x)' 1
 modify f 'sin(2*pi*sqrt(x))' 2
-
 axis 0 -1 1 1
 box
 plot f
@@ -4494,6 +5466,7 @@ addlegend 'sin(\pi x)' 'g*'
 addlegend 'sin(\pi \sqrt{\a x})' 'r+'
 legend
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT f = mgl_create_data_size(50,3,1);
@@ -4517,7 +5490,6 @@ f = mgl_create_data_size(50,3,1)
 call mgl_data_modify(f,'sin(2*pi*x*x)',0)
 call mgl_data_modify(f,'sin(2*pi*x)',1)
 call mgl_data_modify(f,'sin(2*pi*sqrt(x))',2)
-
 call mgl_set_axis(gr, 0.,-1.,0., 1.,1.,1., 0.,0.,0.)
 call mgl_box(gr,1)
 call mgl_plot(gr,f,'')
@@ -4538,7 +5510,7 @@ gr.AddLegend("sin(\\pi x)","g*");
 gr.AddLegend("sin(\\pi\\sqrt{\\a x})","r+");
 gr.Legend();
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Adding mesh sample, Surf & Cont sample, Legend sample, Additional features
 @subsection Добавляем сетку
@@ -4547,19 +5519,17 @@ gr.Legend();
 @cindex Dens
 @cindex Cont
 @cindex Axial
-
 @float
- at image{png/samplea, 7cm}
- at caption{Example of adding mesh. @tdref{samplea}}
+ at image{../png/samplea, 7cm}
+ at c @caption{Example of adding mesh. @tdref{samplea}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
 gr->Light(true);
 gr->Alpha(true);
-
 gr->SubPlot(2,2,0); gr->Rotate(40,60);
 gr->Surf(a,"BbcyrR#");  gr->Box();
 gr->SubPlot(2,2,1); gr->Rotate(40,60);
@@ -4570,13 +5540,12 @@ gr->SubPlot(2,2,3); gr->Rotate(40,60);
 gr->Axial(a,"BbcyrR#"); gr->Box();
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 alpha on
 light on
-
 subplot 2 2 0
 rotate 40 60
 surf a 'BbcyrR#'
@@ -4594,13 +5563,13 @@ rotate 40 60
 axial a 'BbcyrR#'
 box
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_set_alpha(gr,1);
 mgl_set_light(gr,1);
-
 mgl_subplot(gr,2,2,0); mgl_rotate(gr,40.,60.,0.);
 mgl_surf(gr,a,"BbcyrR#");       mgl_box(gr,1);
 mgl_subplot(gr,2,2,1); mgl_rotate(gr,40.,60.,0.);
@@ -4620,7 +5589,6 @@ a = mgl_create_data_size(50,40,1)
 call mgl_data_modify(a,'0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))',0)
 call mgl_set_alpha(gr,1)
 call mgl_set_light(gr,1)
-
 call mgl_subplot(gr,2,2,0)
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_surf(gr,a,'BbcyrR#')
@@ -4653,24 +5621,21 @@ gr.Rotate(40,60);   gr.Cont(a,"BbcyrR#");   gr.Box();
 gr.SubPlot(2,2,3);
 gr.Rotate(40,60);   gr.Axial(a,"BbcyrR#");  gr.Box();
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Surf & Cont sample, Flow & Dens sample, Adding mesh sample, Additional features
 @subsection Surf & Cont -- пример использования
 @cindex Surf
 @cindex Cont
-
 @float
- at image{png/surf_cont_y, 7cm}
- at caption{Example of Surf & Cont. @tdref{surf_cont_y}}
+ at image{../png/surf_cont_y, 7cm}
+ at c @caption{Example of Surf & Cont. @tdref{surf_cont_y}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
@@ -4678,21 +5643,21 @@ gr->Surf(a);
 gr->Cont(a,"y");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 box
 surf a
 cont a 'y'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -4707,7 +5672,6 @@ real zero, nan
 zero = 0; nan = zero/zero
 a = mgl_create_data_size(50,40,1)
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0)
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -4723,18 +5687,17 @@ gr.Rotate(40,60);   gr.Light(True);
 gr.Box();
 gr.Surf(a);         gr.Cont(a,"y");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Flow & Dens sample, Several light sample, Surf & Cont sample, Additional features
 @subsection Flow & Dens -- пример использования
 @cindex Flow
 @cindex Dens
-
 @float
- at image{png/flow_dens, 7cm}
- at caption{Example of Flow & Dens. @tdref{flow_dens}}
+ at image{../png/flow_dens, 7cm}
+ at c @caption{Example of Flow & Dens. @tdref{flow_dens}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40), b(50,40), d(a);
@@ -4745,6 +5708,7 @@ gr->Box();
 gr->Flow(a,b,"br"); gr->Dens(d,"BbcyrR");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 new b 50 40
@@ -4756,6 +5720,7 @@ box
 flow a b 'br'
 dens d 'BbcyrR'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a, b, d;
@@ -4765,7 +5730,6 @@ d = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 mgl_data_modify(d,"sqrt(v^2+w^2)",a,b);
-
 mgl_box(gr,1);
 mgl_flow_2d(gr,a,b,"br",5,1,0.);
 mgl_dens(gr,d,"BbcyrR",-1.);
@@ -4780,7 +5744,6 @@ d = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
 call mgl_data_modify(d,"sqrt(v^2+w^2)",a,b);
-
 call mgl_box(gr,1)
 call mgl_flow_2d(gr,a,b,'br',5,1,0.)
 call mgl_dens(gr,d,'BbcyrR',-1.);
@@ -4797,23 +5760,21 @@ d.Modify("sqrt(v^2+w^2)",a,b);
 gr.Box();
 gr.Flow(a,b,"br");      gr.Dens(d,"BbcyrR");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Several light sample, Mirrored surface sample, Flow & Dens sample, Additional features
 @subsection Несколько источников света
 @cindex Surf
 @cindex Light
-
 @float
- at image{png/several_light, 7cm}
- at caption{Example of Surf with several light. @tdref{several_light}}
+ at image{../png/several_light, 7cm}
+ at c @caption{Example of Surf with several light. @tdref{several_light}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
 a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Light(1,mglPoint(0,1,0),'c');
@@ -4823,30 +5784,28 @@ gr->Box();
 gr->Surf(a,"h");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
-
 rotate 40 60
 light on
 light 1 0 1 0 'c'
 light 2 1 0 0 'y'
 light 3 0 -1 0 'm'
-
 box
 surf a 'h'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
 mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_add_light_rgb(gr,1,0.,1.,0.,1, 0.,1.,1.,0.5);
 mgl_add_light_rgb(gr,2,1.,0.,0.,1, 1.,1.,0.,0.5);
 mgl_add_light_rgb(gr,3,0.,-1.,0.,1, 1.,0.,1.,0.5);
-
 mgl_box(gr,1);
 mgl_surf(gr,a,"h");
 mgl_delete_data(a);
@@ -4856,13 +5815,11 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_add_light_rgb(gr,1,0.,1.,0.,1, 0.,1.,1.,0.5)
 call mgl_add_light_rgb(gr,2,1.,0.,0.,1, 1.,1.,0.,0.5)
 call mgl_add_light_rgb(gr,3,0.,-1.,0.,1, 1.,0.,1.,0.5)
-
 call mgl_box(gr,1)
 call mgl_surf(gr,a,'h')
 call mgl_delete_data(a)
@@ -4878,33 +5835,31 @@ gr.AddLight(3,0,-1,0,"m");
 gr.Box();
 gr.Surf(a,"h")
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Mirrored surface sample, Cont with labels sample, Several light sample, Additional features
 @subsection Отражение поверхности
 @cindex Surf
-
 @float
- at image{png/mirror, 7cm}
- at caption{Example of mirrored surface. @tdref{mirror}}
+ at image{../png/mirror, 7cm}
+ at c @caption{Example of mirrored surface. @tdref{mirror}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(30,40),x(30),y1(40),y2(40);
 a.Modify("pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)");
 x.Fill(-1,1); y1.Fill(0,1); y2.Fill(0,-1);
-
 gr->Rotate(40,60);
 gr->Light(true);
 gr->Box();
 gr->Surf(x,y1,a,"r"); gr->Surf(x,y2,a,"b");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 30 40
 modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)'
-
 rotate 40 60
 light on
 surf a 'r'; yrange 0 1
@@ -4918,13 +5873,13 @@ var x 30 -1 1
 var y1 40 0 1
 var y2 40 0 -1
 modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)'
-
 rotate 40 60
 light on
 surf x y1 a 'r'
 surf x y2 a 'b'
 box
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a,x,y1,y2;
@@ -4936,7 +5891,6 @@ mgl_data_modify(a,"pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)",0);
 mgl_data_fill(x,-1.,1.,'x');
 mgl_data_fill(y1,0.,1.,'x');
 mgl_data_fill(y2,0.,-1.,'x');
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_box(gr,1);
@@ -4955,7 +5909,6 @@ call mgl_data_modify(a,'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)',0)
 call mgl_data_fill(x,-1.,1.,'x')
 call mgl_data_fill(y1,0.,1.,'x')
 call mgl_data_fill(y2,0.,-1.,'x')
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_box(gr,1)
@@ -4974,17 +5927,16 @@ x.Fill(-1,1);   y1.Fill(0,1);   y2.Fill(0,-1);
 gr.Rotate(40,60);       gr.Light(True);         gr.Box();
 gr.Surf(x,y1,a,"r");    gr.Surf(x,y2,a,"b");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Cont with labels sample, Ternary plot sample, Mirrored surface sample, Additional features
 @subsection Cont и подписи -- пример использования
 @cindex Cont
-
 @float
- at image{png/contt, 7cm}
- at caption{Example of Cont with labels. @tdref{contt}}
+ at image{../png/contt, 7cm}
+ at c @caption{Example of Cont with labels. @tdref{contt}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(50,40);
@@ -4993,12 +5945,14 @@ gr->Box();
 gr->Cont(a,"BbcyrRt");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 50 40
 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
 box
 cont a 'BbcyrRt'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(50,40,1);
@@ -5012,7 +5966,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(50,40,1);
 call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
-
 call mgl_box(gr,1)
 call mgl_cont(gr,a,'BbcyrRt',7,0)
 call mgl_delete_data(a)
@@ -5024,18 +5977,16 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
 gr.Box();
 gr.Cont(a,"BbcyrRt");
 @end verbatim
-
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Ternary plot sample, Coloring by coordinates sample, Cont with labels sample, Additional features
 @subsection Ternary plot -- пример использования
 @cindex Ternary
-
 @float
- at image{png/ternary, 7cm}
- at caption{Example of Ternary plot. @tdref{ternary}}
+ at image{../png/ternary, 7cm}
+ at c @caption{Example of Ternary plot. @tdref{ternary}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData x(50),y(50),rx(10),ry(10), a(20,30);
@@ -5043,7 +5994,6 @@ a.Modify("4*x*y");
 x.Modify("0.25*(1+cos(2*pi*x))");
 y.Modify("0.25*(1+sin(2*pi*x))");
 rx.Modify("rnd"); ry.Modify("(1-v)*rnd",rx);
-
 gr->Text(mglPoint(-0.8,1.3), "Ternary plot (x+y+t=1)");
 gr->Ternary(true);
 gr->Plot(x,y,"r2");
@@ -5056,6 +6006,7 @@ gr->Label('y',"y comp.");
 gr->Label('t',"t comp.");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new rx 10
 new ry 10
@@ -5079,6 +6030,7 @@ xlabel 'x comp.'
 ylabel 'y comp.'
 tlabel 't comp.'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT x,y,rx,ry,a;
@@ -5092,13 +6044,11 @@ mgl_data_modify(y,"0.25*(1+sin(2*pi*x))",0);
 mgl_data_modify(rx,"rnd",0);
 mgl_data_modify_vw(ry,"(1-v)*rnd",rx,0);
 mgl_data_modify(a,"4*x*y",0);
-
 mgl_puts_ext(gr,-0.8,1.3,0.,"Ternary plot (x+y+t=1)","C",-1.4,'t');
 mgl_set_ternary(gr,1);
 mgl_plot_xy(gr,x,y,"r2");
 mgl_plot_xy(gr,rx,ry,"q^ ");
 mgl_cont(gr,a,"",7,0.);
-
 mgl_line(gr,0.5,0.,0.,0.,0.75,0.,"g2",2);
 mgl_axis(gr,"xyz");
 mgl_axis_grid(gr,"xyz","B:");
@@ -5122,13 +6072,11 @@ call mgl_data_modify(y,'0.25*(1+sin(2*pi*x))',0)
 call mgl_data_modify(rx,'rnd',0)
 call mgl_data_modify_vw(ry,'(1-v)*rnd',rx,rx)
 call mgl_data_modify(a,'4*x*y',0)
-
 call mgl_puts_ext(gr,-0.8,1.3,0.,'Ternary plot (x+y+t=1)','C',-1.4,'t')
 call mgl_set_ternary(gr,1)
 call mgl_plot_xy(gr,x,y,'r2')
 call mgl_plot_xy(gr,rx,ry,'q^ ')
 call mgl_cont(gr,a,'',7,0.)
-
 call mgl_line(gr,0.5,0.,0.,0.,0.75,0.,'g2',2)
 call mgl_axis(gr,'xyz')
 call mgl_axis_grid(gr,'xyz','B:')
@@ -5156,40 +6104,38 @@ gr.Label("x","x comp.");
 gr.Label("y","y comp.");
 gr.Label("t","t comp.");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Coloring by coordinates sample, Drops sample, Ternary plot sample, Additional features
 @subsection Окрашивание по положению грани
 @cindex Surf3
-
 @float
- at image{png/surf3_rgbd, 7cm}
- at caption{Example of Surf3 colored by coordinates. @tdref{surf3_rgbd}}
+ at image{../png/surf3_rgbd, 7cm}
+ at c @caption{Example of Surf3 colored by coordinates. @tdref{surf3_rgbd}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(60,50,40);
 a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)");
-
 gr->Rotate(40,60);
 gr->Box();
 gr->Surf3(a,"bgrd");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 60 50 40
 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)'
-
 rotate 40 60
 box
 surf3 a 'bgrd'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(60,50,40);
 mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 mgl_rotate(gr,40.,60.,0.);
 mgl_box(gr,1);
 mgl_surf3(gr,a,"bgrd",3);
@@ -5200,7 +6146,6 @@ mgl_delete_data(a);
 integer a, mgl_create_data_size
 a = mgl_create_data_size(60,50,40);
 call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0);
-
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_box(gr,1)
 call mgl_surf3(gr,a,'bgrd',3)
@@ -5213,17 +6158,16 @@ a.Modify("-2*((2*x-1)^2+(2*y-1)^2+(2*z-1)^4-(2*z-1)^2-0.1)");
 gr.Rotate(40,60);       gr.Box();
 gr.Surf3(a,"bgrd");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Drops sample, Molecules drawing sample, Coloring by coordinates sample, Additional features
 @subsection Drops -- пример использования
 @cindex Drop
-
 @float
- at image{png/drops, 7cm}
- at caption{Example of Drop(s). @tdref{drops}}
+ at image{../png/drops, 7cm}
+ at c @caption{Example of Drop(s). @tdref{drops}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 gr->Light(true);
@@ -5242,6 +6186,7 @@ gr->Ball(mglPoint(1,0,1),'k');
 gr->Line(mglPoint(-1,0,1),mglPoint(1,0,1),"b");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 light on
 text -1 1.2 'sh=0'
@@ -5257,12 +6202,12 @@ ball -0.33 0 1 'k'
 ball 0.33 0 1 'k'
 ball 1 0 1 'k'
 line -1 0 1 1 0 1 'b'
-
 new h 100
 modify h '0.25*(1+x)^2'
 plot h 'k|'
 text -1 0.6 'h\sim(1+sh)^2' 'rL'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 mgl_set_light(gr,1);
@@ -5312,22 +6257,20 @@ gr.Ball(-1,0,1,"k");    gr.Ball(-0.33,0,1,"k");
 gr.Ball(0.33,0,1,"k");  gr.Ball(1,0,1,"k");
 gr.Line(-1,0,1,1,0,1,"b");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Molecules drawing sample,, Drops sample, Additional features
 @subsection Рисование молекул
 @cindex Drop
 @cindex Sphere
-
 @float
- at image{png/molecule, 7cm}
- at caption{Example of molecules drawing. @tdref{molecule}}
+ at image{../png/molecule, 7cm}
+ at c @caption{Example of molecules drawing. @tdref{molecule}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 gr->Alpha(true); gr->Light(true);
-
 gr->SubPlot(2,2,0);
 gr->Text(mglPoint(0,1.2),"Methane, CH_4",0,-3); gr->Rotate(60,120);
 gr->Sphere(mglPoint(0,0,0),0.25,"k");
@@ -5339,7 +6282,6 @@ gr->Drop(mglPoint(0,0,0),mglPoint(0.47,0.82,-0.33),0.35,"h",1,2);
 gr->Sphere(mglPoint(0.33,0.57,-0.23),0.25,"g");
 gr->Drop(mglPoint(0,0,0),mglPoint(0.47,-0.82,-0.33),0.35,"h",1,2);
 gr->Sphere(mglPoint(0.33,-0.57,-0.23),0.25,"g");
-
 gr->SubPlot(2,2,1);
 gr->Text(mglPoint(0,1.2),"Water, H{_2}O",0,-3); gr->Rotate(60,100);
 gr->Sphere(mglPoint(0,0,0),0.25,"r");
@@ -5347,14 +6289,12 @@ gr->Drop(mglPoint(0,0,0),mglPoint(0.3,0.5,0),0.3,"m",1,2);
 gr->Sphere(mglPoint(0.3,0.5,0),0.25,"g");
 gr->Drop(mglPoint(0,0,0),mglPoint(0.3,-0.5,0),0.3,"m",1,2);
 gr->Sphere(mglPoint(0.3,-0.5,0),0.25,"g");
-
 gr->SubPlot(2,2,2);
 gr->Text(mglPoint(0,1.2),"Oxygen, O_2",0,-3); gr->Rotate(60,120);
 gr->Drop(mglPoint(0,0.5,0),mglPoint(0,-0.3,0),0.3,"m",1,2);
 gr->Sphere(mglPoint(0,0.5,0),0.25,"r");
 gr->Drop(mglPoint(0,-0.5,0),mglPoint(0,0.3,0),0.3,"m",1,2);
 gr->Sphere(mglPoint(0,-0.5,0),0.25,"r");
-
 gr->SubPlot(2,2,3);
 gr->Text(mglPoint(0,1.2),"Ammonia, NH_3",0,-3); gr->Rotate(60,120);
 gr->Sphere(mglPoint(0,0,0),0.25,"b");
@@ -5366,10 +6306,10 @@ gr->Drop(mglPoint(0,0,0),mglPoint(-0.65,0,0),0.32,"n",1,2);
 gr->Sphere(mglPoint(-0.65,0,0),0.25,"g");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 alpha on
 light on
-
 subplot 2 2 0
 text 0 1.2 'Methane, CH_4' '' -3
 rotate 60 120
@@ -5382,7 +6322,6 @@ drop 0 0 0 0.47 0.82 -0.33 0.35 'h' 1 2
 sphere 0.33 0.57 -0.23 0.25 'g'
 drop 0 0 0 0.47 -0.82 -0.33 0.35 'h' 1 2
 sphere 0.33 -0.57 -0.23 0.25 'g'
-
 subplot 2 2 1
 text 0 1.2 'Water, H{_2}O' '' -3
 rotate 60 100
@@ -5391,7 +6330,6 @@ drop 0 0 0 0.3 0.5 0 0.3 'm' 1 2
 sphere 0.3 0.5 0 0.25 'g'
 drop 0 0 0 0.3 -0.5 0 0.3 'm' 1 2
 sphere 0.3 -0.5 0 0.25 'g'
-
 subplot 2 2 2
 text 0 1.2 'Oxygen, O_2' '' -3
 rotate 60 120
@@ -5399,7 +6337,6 @@ drop 0 0.5 0 0 -0.3 0 0.3 'm' 1 2
 sphere 0 0.5 0 0.25 'r'
 drop 0 -0.5 0 0 0.3 0 0.3 'm' 1 2
 sphere 0 -0.5 0 0.25 'r'
-
 subplot 2 2 3
 text 0 1.2 0 'Ammonia, NH_3' '' -3
 rotate 60 120
@@ -5411,23 +6348,9 @@ sphere 0.33 -0.57 0 0.25 'g'
 drop 0 0 0 -0.65 0 0 0.32 'n' 1 2
 sphere -0.65 0 0 0.25 'g'
 @end verbatim
- at c @strong{C-ый код}
- at c @verbatim
- at c TO BE DONE
- at c @end verbatim
- at c @strong{Fortran}
- at c @verbatim
- at c TO BE DONE
- at c @end verbatim
- at c @strong{Python}
- at c @verbatim
- at c TO BE DONE
- at c @end verbatim
-
 @c ------------------------------------------------------------------
 @node Advanced features,, Additional features, Samples
 @section "Продвинутые" возможности
-
 @c ------------------------------------------------------------------
 @menu
 * Curvelinear coorinates sample::  
@@ -5444,38 +6367,33 @@ sphere -0.65 0 0 0.25 'g'
 * Manual ticks sample::         
 * ColumnPlot sample::           
 * StickPlot sample::            
+* Stereo image sample::         
 @end menu
-
 @node Curvelinear coorinates sample, 2-axes sample,, Advanced features
 @subsection Криволинейные координаты
 @cindex Axis
-
 @float
- at image{png/sample3, 7cm}
- at caption{Example of curvelinear coorinates usage. @tdref{sample3}}
+ at image{../png/sample3, 7cm}
+ at c @caption{Example of curvelinear coorinates usage. @tdref{sample3}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 gr->Org = mglPoint(-1,1,-1);
-
 gr->SubPlot(2,2,0); gr->Rotate(60,40);
 gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100);
 gr->Axis(); gr->Grid();
 gr->Text(mglPoint(0,1.3,1),"Cartesian");
-
 gr->SubPlot(2,2,1); gr->Rotate(60,40);
 gr->SetFunc("y*sin(pi*x)","y*cos(pi*x)");
 gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100);
 gr->Axis(); gr->Grid();
 gr->Text(mglPoint(0,1.3,1),"Cylindrical");
-
 gr->SubPlot(2,2,2); gr->Rotate(60,40);
 gr->SetFunc("2*y*x","y*y - x*x");
 gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100);
 gr->Axis(); gr->Grid();
 gr->Text(mglPoint(0,1.3,1),"Parabolic");
-
 gr->SubPlot(2,2,3); gr->Rotate(60,40);
 gr->SetFunc("y*sin(pi*x)","y*cos(pi*x)","x+z");
 gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100);
@@ -5484,16 +6402,15 @@ gr->Text(mglPoint(0,1.3,1),"Spiral");
 gr->Axis(0,0,0); // set to default Cartesian
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 origin -1 1 -1
-
 subplot 2 2 0
 rotate 60 40
 line -1 0.5 0 1 0.5 0 'r2'
 axis
 grid
 text 0 1.3 1 'Cartesian'
-
 subplot 2 2 1
 rotate 60 40
 axis 'y*sin(pi*x)' 'y*cos(pi*x)' ''
@@ -5501,7 +6418,6 @@ line -1 0.5 0 1 0.5 0 'r2'
 axis
 grid
 text 0 1.3 1 'Cylindrical'
-
 subplot 2 2 2
 rotate 60 40
 axis '2*y*x' 'y*y - x*x' ''
@@ -5509,7 +6425,6 @@ line -1 0.5 0 1 0.5 0 'r2'
 axis
 grid
 text 0 1.3 1 'Parabolic'
-
 subplot 2 2 3
 rotate 60 40
 axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z'
@@ -5519,6 +6434,7 @@ grid
 text 0 1.3 1 'Spiral'
 axis '' '' '' # set to default Cartesian
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 mgl_set_origin(gr,-1,1,-1);
@@ -5526,19 +6442,16 @@ mgl_subplot(gr,2,2,0); mgl_rotate(gr,60,40,0);
 mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100);
 mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B");
 mgl_text(gr,0,1.3,1,"Cartesian");
-
 mgl_subplot(gr,2,2,1); mgl_rotate(gr,60,40,0);
 mgl_set_func(gr,"y*sin(pi*x)","y*cos(pi*x)",0);
 mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100);
 mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B");
 mgl_text(gr,0,1.3,1,"Cylindrical");
-
 mgl_subplot(gr,2,2,2); mgl_rotate(gr,60,40,0);
 mgl_set_func(gr,"2*y*x","y*y - x*x","");
 mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100);
 mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B");
 mgl_text(gr,0,1.3,1,"Parabolic");
-
 mgl_subplot(gr,2,2,3); mgl_rotate(gr,60,40,0);
 mgl_set_func(gr,"y*sin(pi*x)","y*cos(pi*x)","x+z");
 mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100);
@@ -5549,14 +6462,12 @@ mgl_set_func(gr,0,0,0); /* set to default Cartesian */
 @strong{Fortran}
 @verbatim
 call mgl_set_origin(gr,-1.,1.,-1.)
-
 call mgl_subplot(gr,2,2,0)
 call mgl_rotate(gr,60.,40.,0.)
 call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100)
 call mgl_axis(gr,'xyz')
 call mgl_axis_grid(gr,'xyz','B')
 call mgl_text(gr,0.,1.3,1.,'Cartesian')
-
 call mgl_subplot(gr,2,2,1)
 call mgl_rotate(gr,60.,40.,0.)
 call mgl_set_func(gr,'y*sin(pi*x)','y*cos(pi*x)','')
@@ -5564,7 +6475,6 @@ call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100)
 call mgl_axis(gr,'xyz')
 call mgl_axis_grid(gr,'xyz','B')
 call mgl_text(gr,0.,1.3,1.,'Cylindrical')
-
 call mgl_subplot(gr,2,2,2)
 call mgl_rotate(gr,60.,40.,0.)
 call mgl_set_func(gr,'2*y*x','y*y - x*x','')
@@ -5572,7 +6482,6 @@ call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100)
 call mgl_axis(gr,'xyz')
 call mgl_axis_grid(gr,'xyz','B')
 call mgl_text(gr,0.,1.3,1.,"Parabolic")
-
 call mgl_subplot(gr,2,2,3)
 call mgl_rotate(gr,60.,40.,0.)
 call mgl_set_func(gr,'y*sin(pi*x)','y*cos(pi*x)','x+z')
@@ -5585,24 +6494,20 @@ call mgl_set_func(gr,'','','') ! set to default Cartesian
 @strong{Python}
 @verbatim
 gr.SetOrigin(-1,1,-1);
-
 gr.SubPlot(2,2,0);              gr.Rotate(60,40);
 gr.Line(-1,0.5,0,1,0.5,0,"r2",100);
 gr.Axis();              gr.Grid();
 gr.Puts(0,1.3,1,"Gartesian","rC",-1.5);
-
 gr.SubPlot(2,2,1);  gr.Rotate(60,40);
 gr.SetFunc("y*sin(pi*x)","y*cos(pi*x)");
 gr.Line(-1,0.5,0,1,0.5,0,"r2",100);
 gr.Axis();          gr.Grid();
 gr.Puts(0,1.3,1,"Cylindrical","rC",-1.5);
-
 gr.SubPlot(2,2,2);  gr.Rotate(60,40);
 gr.SetFunc("2*y*x","y*y-x*x");
 gr.Line(-1,0.5,0,1,0.5,0,"r2",100);
 gr.Axis();          gr.Grid();
 gr.Puts(0,1.3,1,"Parabolic","rC",-1.5);
-
 gr.SubPlot(2,2,3);  gr.Rotate(60,40);
 gr.SetFunc("y*sin(pi*x)","y*cos(pi*x)","x+z");
 gr.Line(-1,0.5,0,1,0.5,0,"r2",100);
@@ -5610,17 +6515,16 @@ gr.Axis();          gr.Grid();
 gr.Puts(0,1.3,1,"Spiral","rC",-1.5);
 gr.SetFunc("","");   # set to default Gartesian
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node 2-axes sample, Semi-log sample, Curvelinear coorinates sample, Advanced features
 @subsection Несколько осей на одном графике
 @cindex Axis
-
 @float
- at image{png/2_axis, 7cm}
- at caption{Example of 2 axes on the plot. @tdref{2_axis}}
+ at image{../png/2_axis, 7cm}
+ at c @caption{Example of 2 axes on the plot. @tdref{2_axis}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData y1(50), y2(50);
@@ -5633,6 +6537,7 @@ gr->Axis(); gr->Label('y',"axis 2",0);
 gr->Stem(y2,"r");
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new y1 50
 new y2 50
@@ -5649,6 +6554,7 @@ axis
 ylabel 'axis 2' 0
 stem y2 'r'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT y1 = mgl_create_data_size(50,1,1);
@@ -5660,7 +6566,6 @@ mgl_set_origin(gr,-1.,-1.,-1.);
 mgl_axis(gr,"xyz");
 mgl_label_ext(gr,'y',"axis 1",0,-1.4,0.);
 mgl_plot(gr,y1,"b");
-
 mgl_set_axis_2d(gr,0.,0.,1.,1.);
 mgl_set_origin(gr,1.,1.,1.);
 mgl_axis(gr,"xyz");
@@ -5679,7 +6584,6 @@ call mgl_set_origin(gr,-1.,-1.,-1.)
 call mgl_axis(gr,'xyz')
 call mgl_label_ext(gr,'y','axis 1',0,-1.4,0.)
 call mgl_plot(gr,y1,'b')
-
 call mgl_set_axis_2d(gr,0.,0.,1.,1.)
 call mgl_set_origin(gr,1.,1.,1.)
 call mgl_axis(gr,'xyz')
@@ -5693,49 +6597,44 @@ y1.Modify("0.3*sin(2*pi*x)");   y2.Modify("0.5+0.3*cos(2*pi*x)");
 gr.SetRanges(-1,1,-1,1);   gr.SetOrigin(-1,-1);
 gr.Axis();      gr.Label("y","axis 1",0);
 gr.Plot(y1,"b");
-
 gr.SetRanges(0,1,0,1);      gr.SetOrigin(1,1);
 gr.Axis();      gr.Label("y","axis 2",0);
 gr.Stem(y2,"r");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Semi-log sample, Log-log sample, 2-axes sample, Advanced features
 @subsection Semi-log -- пример использования
 @cindex Axis
 @cindex SetTicks
 @cindex Plot
-
 @float
- at image{png/semilog, 7cm}
- at caption{Example of semi-log plot. @tdref{semilog}}
+ at image{../png/semilog, 7cm}
+ at c @caption{Example of semi-log plot. @tdref{semilog}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData x(2000), y(2000);
 x.Modify("0.01/(x+10^(-5))"); y.Modify("sin(1/v)",x);
-
 gr->Axis(mglPoint(0.01,-1),mglPoint(1000,1),mglPoint(0.01,-1));
 gr->SetFunc("lg(x)",0);  gr->SetTicks('x',0);
-
 gr->Box();
 gr->Plot(x,y,"b2");
 gr->Axis(); gr->Grid("xy","g");
 gr->Label('x',"x",0);   gr->Label('y', "y = sin 1/x",0);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new x 2000
 new y 2000
 modify x '0.01/(x+10^(-5))'
 modify y 'sin(1/v)' x
-
 xrange 0.01 1000
 origin 0.01 -1 0
 xtick 0
 axis 'lg(x)' '' ''
-
 plot x y 'b2'
 axis
 grid 'xy' 'g'
@@ -5743,17 +6642,16 @@ xlabel 'x' 0
 ylabel 'y = sin 1/x' 0
 box
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT x = mgl_create_data_size(2000,1,1);
 HMDT y = mgl_create_data_size(2000,1,1);
 mgl_data_modify(x,"0.01/(x+10^(-5))",0);
 mgl_data_modify_vw(y,"sin(1/v)",x,0);
-
 mgl_set_axis(gr,0.01,-1.,0.,1000.,1.,0.,0.01,-1.,0.);
 mgl_set_func(gr,"lg(x)",0,0);
 mgl_set_ticks(gr,0.,-5.,-5.);
-
 mgl_box(gr,1);
 mgl_plot_xy(gr,x,y,"b2");
 mgl_axis(gr,"xy"); mgl_axis_grid(gr,"xy","g");
@@ -5768,11 +6666,9 @@ x = mgl_create_data_size(2000,1,1)
 y = mgl_create_data_size(2000,1,1)
 call mgl_data_modify(x,'0.01/(x+10^(-5))',0)
 call mgl_data_modify_vw(y,'sin(1/v)',x,x)
-
 call mgl_set_axis(gr,0.01,-1.,0.,1000.,1.,0.,0.01,-1.,0.)
 call mgl_set_func(gr,'lg(x)','','')
 call mgl_set_ticks(gr,0.,-5.,-5.)
-
 call mgl_box(gr,1)
 call mgl_plot_xy(gr,x,y,'b2')
 call mgl_axis(gr,'xy')
@@ -5786,45 +6682,41 @@ call mgl_delete_data(y)
 @verbatim
 TO BE DONE
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Log-log sample, Fitting sample, Semi-log sample, Advanced features
 @subsection Log-log -- пример использования
 @cindex Axis
 @cindex SetTicks
 @cindex Plot
-
 @float
- at image{png/loglog, 7cm}
- at caption{Example of log-log plot. @tdref{loglog}}
+ at image{../png/loglog, 7cm}
+ at c @caption{Example of log-log plot. @tdref{loglog}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData x(100), y(100);
 x.Modify("pow(10,6*x-3)"); y.Modify("sqrt(1+v^2)",x);
-
 gr->Axis(mglPoint(0.001,0.1),mglPoint(1000,1000),mglPoint(0.001,0.1));
 gr->SetFunc("lg(x)","lg(y)");
 gr->SetTicks('x',0);    gr->SetTicks('y',0);
-
 gr->Box();
 gr->Plot(x,y,"b2");
 gr->Axis(); gr->Grid("xy","g;");
 gr->Label('x',"x",0); gr->Label('y', "y=\\sqrt{1+x^2}",0);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new x 100
 new y 100
 modify x 'pow(10,6*x-3)'
 modify y 'sqrt(1+v^2)' x
-
 axis 0.001 0.1 1000 1000
 xtick 0
 ytick 0
 axis 'lg(x)' 'lg(y)' ''
-
 plot x y 'b2'
 axis
 grid 'xy' 'g;'
@@ -5832,17 +6724,16 @@ xlabel 'x' 0
 ylabel 'y=\sqrt{1+x^2}' 0
 box
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT x = mgl_create_data_size(100,1,1);
 HMDT y = mgl_create_data_size(100,1,1);
 mgl_data_modify(x,"pow(10,6*x-3)",0);
 mgl_data_modify_vw(y,"sqrt(1+v^2)",x,0);
-
 mgl_set_axis(gr,0.001,0.1,0.,1000.,1000.,0.,0.001,0.1,0.);
 mgl_set_func(gr,"lg(x)","lg(y)",0);
 mgl_set_ticks(gr,0.,0.,-5.);
-
 mgl_box(gr,1);
 mgl_plot_xy(gr,x,y,"b2");
 mgl_axis(gr,"xy"); mgl_axis_grid(gr,"xy","g;");
@@ -5857,11 +6748,9 @@ x = mgl_create_data_size(100,1,1)
 y = mgl_create_data_size(100,1,1)
 call mgl_data_modify(x,'pow(10,6*x-3)',0)
 call mgl_data_modify_vw(y,'sqrt(1+v^2)',x,x)
-
 call mgl_set_axis(gr,0.001,0.1,0.,1000.,1000.,0.,0.001,0.1,0.)
 call mgl_set_func(gr,'lg(x)','lg(y)','')
 call mgl_set_ticks(gr,0.,0.,-5.)
-
 call mgl_box(gr,1)
 call mgl_plot_xy(gr,x,y,'b2')
 call mgl_axis(gr,'xy')
@@ -5882,28 +6771,25 @@ gr.Box();               gr.Plot(x,y,"b2");
 gr.Axis();              gr.Grid("xy","g;");
 gr.Label("x","x",0);    gr.Label("y","y=\\sqrt{1+x^2}",0);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Fitting sample, Envelop sample, Log-log sample, Advanced features
 @subsection Fitting -- пример использования
 @cindex Fit
 @cindex PutsFit
-
 @float
- at image{png/fit, 7cm}
- at caption{Example of nonlinear fitting. @tdref{fit}}
+ at image{../png/fit, 7cm}
+ at c @caption{Example of nonlinear fitting. @tdref{fit}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData rnd(100), in(100), res;
 rnd.Fill("0.4*rnd+0.1+sin(2*pi*x)", gr->Min, gr->Max);
 in.Fill("0.3+sin(2*pi*x)", gr->Min, gr->Max);
-
 gr->Axis(mglPoint(-1,-2), mglPoint(1,2));
 gr->Plot(rnd, ". ");
 gr->Box();
-
 float ini[3] = {1,1,3};
 gr->Fit(res, rnd, "a+b*sin(c*x)", "abc", ini);
 gr->Plot(res, "r");
@@ -5913,16 +6799,15 @@ gr->PutsFit(mglPoint(0, -1.8), "y = ", "C:r", -1);
 gr->Text(mglPoint(0, 2.2), "initial: y = 0.3+sin(2\\pi x)", "C:b", -1);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new rnd 100
 fill rnd '0.4*rnd+0.1+sin(2*pi*x)'
 new in 100
 fill in '0.3+sin(2*pi*x)'
-
 yrange -2 2
 plot rnd '. '
 box
-
 list ini 1 1 3
 fit res rnd 'a+b*sin(c*x)' 'abc' ini
 plot res 'r'
@@ -5931,6 +6816,7 @@ text -1 -1.3 'fitted:' 'L:r' -1
 putsfit 0 -1.8 'y = ' 'C:r'
 text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT rnd,in,res;
@@ -5943,7 +6829,6 @@ mgl_data_modify(in,"0.3+sin(4*pi*x)",0);
 mgl_set_axis_2d(gr,-1.,-2.,1.,2.);
 mgl_plot(gr,rnd,". ");
 mgl_box(gr,1);
-
 mgl_fit_1(gr,res,rnd,"a+b*sin(c*x)","abc",ini);
 mgl_plot(gr,res,"r");   mgl_plot(gr,in,"b");
 mgl_puts_ext(gr,-1.,-1.3,0.,"fitted:","L:r",-1.,'t');
@@ -5963,7 +6848,6 @@ call mgl_data_modify(in,"0.3+sin(4*pi*x)",0);
 call mgl_set_axis_2d(gr,-1.,-2.,1.,2.);
 call mgl_plot(gr,rnd,". ");
 call mgl_box(gr,1);
-
 call mgl_fit_1(gr,res,rnd,"a+b*sin(c*x)","abc",ini);
 call mgl_plot(gr,res,"r");
 call mgl_plot(gr,in,"b");
@@ -5979,7 +6863,6 @@ In.Modify("0.3+sin(4*pi*x)");
 gr.SetRanges(-1,1,-2,2);
 gr.Plot(rnd,". ");
 gr.Box();
-
 ini[0], ini[1], ini[2] = 1, 1, 3;
 gr.Fit(res,rnd,"a+b*sin(c*x)","abc",ini);
 gr.Plot(res,"r");   gr.Plot(In,"b");
@@ -5987,17 +6870,16 @@ gr.Puts(-1,-1.3,0,"fitted:","L:r",-1);
 gr.PutsFit(0,-1.8,0,"y = ","C:r",-1);
 gr.Puts(0,2.2,0,"initial: y = 0.3+sin(2\\pi x)","C:b",-1);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Envelop sample, Sew sample, Fitting sample, Advanced features
 @subsection Envelop -- пример использования
 @cindex Envelop
-
 @float
- at image{png/envelop, 7cm}
- at caption{Example of envelop reconstruction.}@c @tdref{envelop}}
+ at image{../png/envelop, 7cm}
+ at c @caption{Example of envelop reconstruction.}@c @tdref{envelop}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(1000);
@@ -6008,6 +6890,7 @@ gr->Plot(a, "r");
 gr->Axis();
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 1000
 fill a 'exp(-8*x^2)*sin(10*pi*x)'
@@ -6016,6 +6899,7 @@ envelop a
 plot a 'r'
 axis
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(1000,1,1);
@@ -6044,17 +6928,16 @@ a.Envelop("x");
 gr.Plot(a,"r");
 gr.Axis();
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Sew sample, STFA sample, Envelop sample, Advanced features
 @subsection Sew -- пример использования
 @cindex Sew
-
 @float
- at image{png/sew, 7cm}
- at caption{Example of phase ``sewing''.}@c @tdref{sew}}
+ at image{../png/sew, 7cm}
+ at c @caption{Example of phase ``sewing''.}@c @tdref{sew}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(100, 100);
@@ -6068,6 +6951,7 @@ gr->Surf(a, "r");
 gr->Box();
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 100 100
 modify a 'mod((y^2-(1-x)^2)/2,0.1)'
@@ -6079,6 +6963,7 @@ sew a 'xy' 0.1
 surf a 'r'
 box
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(100,100,1);
@@ -6086,7 +6971,6 @@ mgl_data_modify(a, "mod((y^2-(1-x)^2)/2, 0.1)", 0);
 mgl_rotate(gr,40.,60.,0.);
 mgl_set_light(gr,1);
 mgl_set_alpha(gr,1);
-
 mgl_surf(gr,a,"b");
 mgl_data_sew(a,"xy",0.1);
 mgl_surf(gr,a,"r");
@@ -6100,7 +6984,6 @@ call mgl_data_modify(a, 'mod((y^2-(1-x)^2)/2, 0.1)', 0)
 call mgl_rotate(gr,40.,60.,0.)
 call mgl_set_light(gr,1)
 call mgl_set_alpha(gr,1)
-
 call mgl_surf(gr,a,'b')
 call mgl_data_sew(a,'xy',0.1)
 call mgl_surf(gr,a,'r')
@@ -6116,17 +6999,16 @@ a.Sew("xy", 0.1);
 gr.Surf(a, "r");
 gr.Box();
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node STFA sample, PDE sample, Sew sample, Advanced features
 @subsection STFA -- пример использования
 @cindex STFA
-
 @float
- at image{png/stfa, 7cm}
- at caption{Example of Short Time Fourier Analysis.}@c @tdref{stfa}}
+ at image{../png/stfa, 7cm}
+ at c @caption{Example of Short Time Fourier Analysis.}@c @tdref{stfa}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a(2000), b(2000);
@@ -6137,7 +7019,6 @@ gr->SubPlot(1, 2, 0);
 gr->Plot(a);
 gr->Axis();
 gr->Label('x', "\\i t");
-
 gr->SubPlot(1, 2, 1);
 gr->STFA(a, b, 64);
 gr->Axis();
@@ -6145,6 +7026,7 @@ gr->Label('x', "\\i t");
 gr->Label('y', "\\omega", 0);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 new a 2000
 new b 2000
@@ -6160,6 +7042,7 @@ axis
 ylabel '\omega' 0
 xlabel '\i t'
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data_size(2000,1,1);
@@ -6170,7 +7053,6 @@ mgl_subplot(gr,1,2,0);
 mgl_plot(gr,a,"");
 mgl_axis(gr,"xy");
 mgl_label(gr,'x', "\\i t");
-
 mgl_subplot(gr,1,2,1);
 mgl_stfa(gr,a,b,64,"",0.);
 mgl_axis(gr,"xy");
@@ -6188,7 +7070,6 @@ call mgl_subplot(gr,1,2,0)
 call mgl_plot(gr,a,'')
 call mgl_axis(gr,'xy')
 call mgl_label(gr,'x', '\i t')
-
 call mgl_subplot(gr,1,2,1)
 call mgl_stfa(gr,a,b,64,'',0.)
 call mgl_axis(gr,'xy')
@@ -6204,25 +7085,23 @@ gr.SubPlot(1, 2, 0);
 gr.Plot(a);
 gr.Axis();
 gr.Label('x', "\\i t");
-
 gr.SubPlot(1, 2, 1);
 gr.STFA(a, b, 64);
 gr.Axis();
 gr.Label('x', "\\i t");
 gr.Label('y', "\\omega", 0);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node PDE sample, Beam tracing sample, STFA sample, Advanced features
 @subsection PDE -- пример использования
 @cindex mglPDE
 @cindex mglRay
-
 @float
- at image{png/pde, 7cm}
- at caption{Example of Partial Differential Eduation solving.}@c @tdref{pde}}
+ at image{../png/pde, 7cm}
+ at c @caption{Example of Partial Differential Eduation solving.}@c @tdref{pde}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData a,re(128),im(128);
@@ -6241,23 +7120,23 @@ gr->Title("\\r{Equation:} ik_0\\partial_zu + \\Delta u + x\\cdot u + \
 i \\frac{x+z}{2}\\cdot u = 0", "iC", -1.5);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 axis
 xlabel '\i x'
 ylabel '\i z'
-
 new re 128
 new im 128
 fill re 'exp(-48*(x+0.7)^2)'
 pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01 30
 transpose a
-
 crange 0 1
 dens a 'wyrRk'
 fplot '-x' 'k|'
 text 0 0.85 'absorption: (x+z)/2 for x+z>0' '' -1
 title 'Equation: ik_0\partial_zu + \Delta u + x\cdot u + i \frac{x+z}{2}\cdot u = 0' 'iC' -1.5
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 HMDT a = mgl_create_data();
@@ -6266,7 +7145,6 @@ HMDT im = mgl_create_data_size(128,1,1);
 mgl_axis(gr,"xyz");
 mgl_label(gr,'x', "\\i x");
 mgl_label(gr,'y', "\\i z");
-
 mgl_data_fill_eq(gr,re,"exp(-48*(x+0.7)^2)", 0, 0);
 a = mgl_pde_solve(gr, "p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)", re, im, 0.01, 30.);
 mgl_data_transpose(a, "yxz");
@@ -6289,7 +7167,6 @@ im = mgl_create_data_size(128,1,1)
 call mgl_axis(gr,'xyz')
 call mgl_label(gr,'x', '\i x')
 call mgl_label(gr,'y', '\i z')
-
 call mgl_data_fill_eq(gr,re,'exp(-48*(x+0.7)^2)', 0, 0)
 a = mgl_pde_solve(gr, 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)', re, im, 0.01, 30.)
 call mgl_data_transpose(a, 'yxz')
@@ -6320,18 +7197,17 @@ gr.Puts(0, 0.85, 0., "absorption: (x+z)/2 for x+z>0");
 gr.Title("\\r{Equation:} ik_0\\partial_zu + \\Delta u + x\\cdot u + \
 i \\frac{x+z}{2}\\cdot u = 0", "iC", -1.5);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Beam tracing sample, Parser sample, PDE sample, Advanced features
 @subsection Beam tracing -- пример использования
 @cindex mglQO2d
 @cindex mglRay
-
 @float
- at image{png/qo2d, 7cm}
- at caption{Example of ray and beam tracing. Compare with @ref{PDE sample}.}@c @tdref{qo2d}}
+ at image{../png/qo2d, 7cm}
+ at c @caption{Example of ray and beam tracing. Compare with @ref{PDE sample}.}@c @tdref{qo2d}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 mglData r, xx, yy, a, im(128), re(128);
@@ -6350,6 +7226,7 @@ gr->Puts(mglPoint(0.7, -0.05), "central ray");
 gr->Title("Beam and ray tracing", "C", -1.5);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
 ray r $1 -0.7 -1 0 0 0.5 0 0.02 2
@@ -6357,14 +7234,12 @@ plot r(0) r(1) 'k'
 axis
 xlabel '\i x'
 ylabel '\i z'
-
 new re 128
 new im 128
 new xx
 new yy
 fill re 'exp(-48*x^2)'
 qo2d a $1 re im r 1 30 xx yy 
-
 crange 0 1
 dens xx yy a 'wyrRk'
 fplot '-x' 'k|'
@@ -6372,6 +7247,7 @@ text -0.8 0.85 'absorption: (x+y)/2 for x+y>0' 'L' -1
 text 0.5 -0.05 'central ray' 'L' -1
 title 'Beam and ray tracing' 'C' -1.5
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 const char *ham = "p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)";
@@ -6385,7 +7261,6 @@ mgl_plot_xy(gr, xx, yy, "k");
 mgl_axis(gr,"xyz");
 mgl_label(gr,'x',"\\i x");
 mgl_label(gr,'y',"\\i z");
-
 mgl_data_fill_eq(gr,re,"exp(-48*x^2)", 0, 0);
 a = mgl_qo2d_solve(ham, re, im, r, 1, 30, xx, yy);
 mgl_set_caxis(gr,0.,1.);
@@ -6404,7 +7279,6 @@ integer r, xx, yy, a, im, re, mgl_create_data_size
 integer mgl_data_subdata, mgl_ray_trace, mgl_qo2d_solve
 character*64 ham
 ham = 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)'
-
 im = mgl_create_data_size(128,1,1)
 re = mgl_create_data_size(128,1,1)
 r = mgl_ray_trace(ham, -0.7, -1., 0., 0., 0.5, 0., 0.02, 2.)
@@ -6414,7 +7288,6 @@ call mgl_plot_xy(gr, xx, yy, 'k')
 call mgl_axis(gr,'xyz')
 call mgl_label(gr,'x','\i x')
 call mgl_label(gr,'y','\i z')
-
 call mgl_data_fill_eq(gr,re,'exp(-48*x^2)', 0, 0)
 a = mgl_qo2d_solve(ham, re, im, r, 1., 30., xx, yy)
 call mgl_set_caxis(gr,0.,1.)
@@ -6436,10 +7309,8 @@ ham = "p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)";
 r, xx, yy, a = mglData(), mglData(), mglData(), mglData();
 im, re = mglData(128), mglData(128);
 r = mglRay(ham, mglPoint(-0.7, -1), mglPoint(0, 0.5), 0.02, 2);
-
 gr.Plot(r.SubData(0), r.SubData(1), "k");
 gr.Axis();	gr.Label('x', "\\i x");	gr.Label('y', "\\i z");
-
 gr.Fill(re,"exp(-48*x^2)");
 a = mglQO2d(ham, re, im, r, 1, 30, xx, yy);
 gr.SetCRange(0, 1);
@@ -6449,17 +7320,16 @@ gr.Puts(0, 0.85, 0, "absorption: (x+y)/2 for x+y>0");
 gr.Puts(0.7, -0.05, 0, "central ray");
 gr.Title("Beam and ray tracing", "C", -1.5);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Parser sample, Manual ticks sample, Beam tracing sample, Advanced features
 @subsection Parser -- пример использования
 @cindex mglParse
-
+ at ifclear UDAV
 @float
- at image{png/parser, 7cm}
- at caption{Example of MGL parsing.}@c @tdref{parser}}
+ at image{../png/parser, 7cm}
+ at c @caption{Example of MGL parsing.}@c @tdref{parser}}
 @end float
-
 @strong{C++ код}
 @verbatim
 float a[100];   // let a_i = sin(4*pi*x), x=0...1
@@ -6533,17 +7403,16 @@ parser.Execute(gr, "xlabel 'x'\nylabel 'y'");
 # also you may use cycles or conditions in script
 parser.Execute(gr, "for $0 -1 1 0.1\nline 0 0 -1 $0 'r'\nnext");
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node Manual ticks sample, ColumnPlot sample, Parser sample, Advanced features
 @subsection Особые метки по осям
 @cindex SetTicksVal
-
 @float
- at image{png/tval, 7cm}
- at caption{Example of MGL parsing.}@c @tdref{tval}}
+ at image{../png/tval, 7cm}
+ at c @caption{Example of manual tick values.}@c @tdref{tval}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 gr->Axis(mglPoint(-M_PI, 0), mglPoint(M_PI, 2));
@@ -6553,6 +7422,7 @@ gr->Axis();     gr->Grid();
 gr->Plot("2*cos(x^2)^2", "r2", NAN, 300);
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 axis -pi 0 pi 2
 xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' 0.886 'x^*' 1.571 '\pi/2' pi '\pi'
@@ -6560,6 +7430,7 @@ axis
 grid
 fplot '2*cos(x^2)^2' 'r2' nan 300
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 mgl_set_axis_2d(gr, -M_PI, 0, M_PI, 2);
@@ -6583,17 +7454,16 @@ parser.Execute(gr, "xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' "
 gr.Axis();     gr.Grid();
 gr.Plot("2*cos(x^2)^2", "r2", 300);
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node ColumnPlot sample, StickPlot sample, Manual ticks sample, Advanced features
 @subsection ColumnPlot -- пример использования
 @cindex SetTicksVal
-
 @float
- at image{png/column, 7cm}
- at caption{Example of MGL parsing.}@c @tdref{tval}}
+ at image{../png/column, 7cm}
+ at c @caption{Example of ColumnPlot.}@c @tdref{tval}}
 @end float
-
+ at ifclear UDAV
 @strong{C++ код}
 @verbatim
 char str[32];
@@ -6608,6 +7478,7 @@ for(int i=0;i<4;i++)
 }
 @end verbatim
 @strong{MGL скрипт}
+ at end ifclear
 @verbatim
 for $1 0 3
 columnplot 4 $1
@@ -6616,6 +7487,7 @@ text -0.5 0.5 'Plot $1 of 4'
 fplot 'sin(pi*x+pi*$1/2)'
 next
 @end verbatim
+ at ifclear UDAV
 @strong{C-ый код}
 @verbatim
 int i;
@@ -6636,20 +7508,19 @@ NOT AVAILABLE
 @end verbatim
 @strong{Python}
 @verbatim
-
+NOT AVAILABLE
 @end verbatim
-
+ at end ifclear
 @c ------------------------------------------------------------------
 @node StickPlot sample, , ColumnPlot sample, Advanced features
 @subsection StickPlot -- пример использования
 @cindex SetTicksVal
-
 @float
- at image{png/column, 7cm}
- at caption{Example of MGL parsing.}@c @tdref{tval}}
+ at image{../png/stick, 7cm}
+ at c @caption{Example of StickPlot.}@c @tdref{tval}}
 @end float
-
- at strong{C++ code}
+ at ifclear UDAV
+ at strong{C++ код}
 @verbatim
 gr->SetRanges(-1, 1, -1, 1, 0, 1);  gr->Light(true);
 gr->StickPlot(3, 0, 40, 30);        gr->Axis("xyz_");
@@ -6663,7 +7534,8 @@ gr->Surf("exp(-10*y^2/5-6*x^2)/sqrt(5)");
 gr->Text(mglPoint(0.2, 0, 1.2), "z=2", "", -2);
 gr->Label('x',"\\tau", 0);  gr->Label('y', "\\rho");
 @end verbatim
- at strong{MGL code}
+ at strong{MGL скрипт}
+ at end ifclear
 @verbatim
 ranges -1 1 -1 1 0 1:light on
 stickplot 3 0 40 30 : axis 'xyz_'
@@ -6677,7 +7549,8 @@ fsurf 'exp(-10*y^2/5-6*x^2)/sqrt(5)'
 text 0.2 0 1.2 'z=2' '' -2
 xlabel '\tau' 0 : ylabel '\rho'
 @end verbatim
- at strong{Pure C code}
+ at ifclear UDAV
+ at strong{C-ый код}
 @verbatim
 mgl_set_axis_3d(gr, -1, -1, 0, 1, 1, 1);
 mgl_set_light(gr, 1);
@@ -6696,11 +7569,91 @@ mgl_text(gr, 0.2, 0, 1.2, "z=2");
 mgl_label(gr,'x',"\\tau");
 mgl_label(gr,'y', "\\rho");
 @end verbatim
- at strong{Fortran code}
+ at strong{Fortran}
 @verbatim
 NOT AVAILABLE
 @end verbatim
 @strong{Python}
 @verbatim
+NOT AVAILABLE
+ at end verbatim
+ at end ifclear
+ at c ------------------------------------------------------------------
+ at node Stereo image sample, , StickPlot sample, Advanced features
+ at subsection Пример стерео изображения
+ at float
+ at image{../png/stereo, 7cm}
+ at c @caption{Example of stereo image.}@c @tdref{stereo}}
+ at end float
+ at ifclear UDAV
+ at strong{C++ код}
+ at verbatim
+mglData a(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))");
+gr->Light(true);
+gr->SubPlot(2,1,0);
+gr->Rotate(40,60+3);
+gr->Box();   gr->Surf(a);
+gr->SubPlot(2,1,1);
+gr->Rotate(40,60-3);
+gr->Box();   gr->Surf(a);
+ at end verbatim
+ at strong{MGL скрипт}
+ at end ifclear
+ at verbatim
+new a 50 40
+modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))'
+light on
+subplot 2 1 0
+rotate 40 60+3
+box:surf a
+subplot 2 1 1
+rotate 40 60-3
+box:surf a
+ at end verbatim
+ at ifclear UDAV
+ at strong{C-ый код}
+ at verbatim
+HMDT a = mgl_create_data_size(50,40,1);
+mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
+mgl_set_light(gr,1);
+mgl_subplot(gr,2,1,0);
+mgl_rotate(gr,40.,60.+3.,0.);
+mgl_box(gr,1);
+mgl_surf(gr,a,0);
+mgl_subplot(gr,2,1,1);
+mgl_rotate(gr,40.,60.-3.,0.);
+mgl_box(gr,1);
+mgl_surf(gr,a,0);
+mgl_delete_data(a);
 @end verbatim
+ at strong{Fortran}
+ at verbatim
+integer a, mgl_create_data_size
+a = mgl_create_data_size(50,40,1);
+call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0);
+call mgl_set_light(gr,1)
+call mgl_subplot(gr,2,1,0)
+call mgl_rotate(gr,40.,60.+3.,0.)
+call mgl_box(gr,1)
+call mgl_surf(gr,a,'')
+call mgl_subplot(gr,2,1,1)
+call mgl_rotate(gr,40.,60.-3.,0.)
+call mgl_box(gr,1)
+call mgl_surf(gr,a,'')
+call mgl_delete_data(a)
+ at end verbatim
+ at strong{Python}
+ at verbatim
+a = mglData(50,40);
+a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))");
+gr.Light(True);
+gr.SubPlot(2,1,0);
+gr.Rotate(40,60+3);
+gr.Surf(a);  gr.Box();
+gr.SubPlot(2,1,1);
+gr.Rotate(40,60-3);
+gr.Surf(a);  gr.Box();
+ at end verbatim
+ at end ifclear
 
diff --git a/texinfo/widget_en.texi b/texinfo/widget_en.texi
new file mode 100644
index 0000000..eff4705
--- /dev/null
+++ b/texinfo/widget_en.texi
@@ -0,0 +1,289 @@
+
+ at c ------------------------------------------------------------------
+ at chapter Widget classes
+ at cindex mglGraphFLTK
+ at cindex mglGraphQT
+ at cindex mglGraphGLUT
+ at cindex Fl_MathGL
+ at cindex QMathGL
+ at cindex window
+ at cindex widgets
+
+There are set of ``window'' classes for making a window with MathGL graphics: @code{mglGraphFLTK}, @code{mglGraphQT}, @code{mglGraphGLUT}. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGraphGLUT}) also have toolbar and menu for simplifying plot manipulation. Usually these classes (except @code{mglGraphGLUT}) are derived from @code{mglGraphZB} class and have a ``connected'' class for widget in corresponding window library. All window classes have the same set of functions (@pxref{mglGraphAB class}). Below the full list of classes with short comments.
+
+ at deftp {Class} mglGraphFLTK
+Class @code{mglGraphFLTK} adds the possibility to create plotting window with the help of FLTK library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{Fl_MathGL}. Class is defined in @code{#include <mgl/mgl_fltk.h>}.
+ at end deftp
+
+ at deftp {Class} Fl_MathGL
+Class is FLTK widget for displaying the MathGL output. Class is defined in @code{#include <mgl/mgl_fltk.h>}.
+ at end deftp
+
+ at float
+ at image{fltk, 7cm}
+ at caption{Example of FLTK window with MathGL plot.}
+ at end float
+
+ at deftp {Class} mglGraphQT
+Class @code{mglGraphQT} adds the possibility to create plotting window with the help of QT library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{QMathGL}. Class is defined in @code{#include <mgl/mgl_qt.h>}.
+ at end deftp
+
+ at deftp {Class} QMathGL
+Class is Qt widget for dysplaying the MathGL output. Class is defined in @code{#include <mgl/mgl_qt.h>}.
+ at end deftp
+
+ at float
+ at image{qt, 7cm}
+ at caption{Example of Qt window with MathGL plot.}
+ at end float
+
+ at deftp {Class} mglGraphGLUT
+Class @code{mglGraphGLUT} adds the possibility to create plotting window with the help of GLUT library. It allows one to show, rotate, export, and change view of the plot only by keyboard. Class is defined in @code{#include <mgl/mgl_glut.h>}.
+ at end deftp
+
+ at float
+ at image{glut, 7cm}
+ at caption{Example of GLUT window with MathGL plot.}
+ at end float
+
+ at menu
+* Fl_MathGL class::             
+* QMathGL class::               
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Fl_MathGL class, QMathGL class, , Widget classes
+ at section Fl_MathGL class
+ at cindex Fl_MathGL
+ at cindex widgets
+
+Class is FLTK widget which display MathGL graphics (defined in @code{#include <mgl/mgl_fltk.h>}).
+
+ at deftypemethod Fl_MathGL @code{void} set_draw (@code{mglDraw *}dr)
+Sets drawing function from a class inherited from @code{mglDraw}.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} update (@code{mglGraph *}gr=@code{NULL})
+Update (redraw) plot using grapher @var{gr} (built-in by default).
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_angle (@code{float} t, @code{float} p)
+Set angles for additional plot rotation
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_state (@code{int} f)
+Set bitwise flags for general state (1-Alpha, 2-Light)
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_state (@code{bool} z, @code{bool} r)
+Set flags for handling mouse: @var{z}=@code{true} allow zooming, @var{r}=@code{true} allow rotation/shifting/perspective and so on.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_zoom (@code{float} X1, @code{float} Y1, @code{float} X2, @code{float} Y2)
+Set zoom in/out region
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} get_zoom (@code{float *}X1, @code{float *}Y1, @code{float *}X2, @code{float *}Y2)
+Get zoom in/out region
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v)
+Set popup menu pointer
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{mglGraph *} get_graph ()
+Get pointer to grapher
+ at end deftypemethod
+
+ at deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} tet_val
+Pointer to external tet-angle validator.
+ at end deftypecv
+ at deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} phi_val
+Pointer to external phi-angle validator.
+ at end deftypecv
+ at deftypecv {Widget option} Fl_MathGL @code{mglGraphAB *} graph
+Pointer to grapher
+ at end deftypecv
+ at deftypecv {Widget option} Fl_MathGL @code{void *} draw_par
+Parameters for drawing function mglGraph::DrawFunc.
+ at end deftypecv
+ at deftypecv {Widget option} Fl_MathGL @code{int (*} draw_func @code{)(mglGraph *gr, void *par)}
+Drawing function for window procedure. It should return the number of frames.
+ at end deftypecv
+
+ at c ------------------------------------------------------------------
+ at node QMathGL class, , Fl_MathGL class, Widget classes
+ at section QMathGL class
+ at cindex QMathGL
+ at cindex widgets
+
+Class is Qt widget which display MathGL graphics (defined in @code{#include <mgl/mgl_qt.h>}).
+
+ at deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr)
+Sets drawing functions from a class inherited from @code{mglDraw}.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{void *}par=@code{NULL})
+Sets the drawing function @var{draw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}.
+ at end deftypemethod
+
+ at deftypemethod QMathGL @code{void} setGraph (@code{mglGraphAB *}gr)
+Set pointer to external grapher (instead of built-in @code{mglGraphZB}). Note that QMathGL will automatically delete this object at destruction or at new @code{setGraph()} call.
+ at end deftypemethod
+
+ at deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p)
+Set popup menu pointer.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h)
+Set widget/picture sizes
+ at end deftypemethod
+ at deftypemethod QMathGL @code{double} getRatio ()
+Return aspect ratio of the picture.
+ at end deftypemethod
+
+ at deftypemethod QMathGL @code{int} getPer ()
+Get perspective value in percents.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{int} getPhi ()
+Get Phi-angle value in degrees.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{int} getTet ()
+Get Theta-angle value in degrees.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{bool} getAlpha ()
+Get transparency state.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{bool} getLight ()
+Get lightning state.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{bool} getZoom ()
+Get mouse zooming state.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{bool} getRotate ()
+Get mouse rotation state.
+ at end deftypemethod
+
+ at defop Slot QMathGL @code{void} refresh ()
+Redraw saved bitmap without executing drawing function.
+ at end defop
+ at defop Slot QMathGL @code{void} update (@code{mglGraph *}gr=@code{NULL})
+Update picture by executing drawing function.
+ at end defop
+ at defop Slot QMathGL @code{void} copy ()
+Copy graphics to clipboard.
+ at end defop
+ at defop Slot QMathGL @code{void} setPer (@code{int} val)
+Set perspective value.
+ at end defop
+ at defop Slot QMathGL @code{void} setPhi (@code{int} val)
+Set Phi-angle value.
+ at end defop
+ at defop Slot QMathGL @code{void} setTet (@code{int} val)
+Set Theta-angle value.
+ at end defop
+ at defop Slot QMathGL @code{void} setAlpha (@code{bool} val)
+Switch on/off transparency.
+ at end defop
+ at defop Slot QMathGL @code{void} setLight (@code{bool} val)
+Switch on/off lightning.
+ at end defop
+ at defop Slot QMathGL @code{void} setZoom (@code{bool} val)
+Switch on/off mouse zooming.
+ at end defop
+ at defop Slot QMathGL @code{void} setRotate (@code{bool} val)
+Switch on/off mouse rotation.
+ at end defop
+ at defop Slot QMathGL @code{void} zoomIn ()
+Zoom in graphics.
+ at end defop
+ at defop Slot QMathGL @code{void} zoomOut ()
+Zoom out graphics.
+ at end defop
+ at defop Slot QMathGL @code{void} restore ()
+Restore zoom and rotation to default values.
+ at end defop
+ at defop Slot QMathGL @code{void} reload ()
+Reload data and redraw graphics.
+ at end defop
+ at defop Slot QMathGL @code{void} shiftLeft ()
+Shift graphics to left direction.
+ at end defop
+ at defop Slot QMathGL @code{void} shiftRight ()
+Shift graphics to right direction.
+ at end defop
+ at defop Slot QMathGL @code{void}shiftUp  ()
+Shift graphics to up direction.
+ at end defop
+ at defop Slot QMathGL @code{void} shiftDown ()
+Shift graphics to down direction.
+ at end defop
+ at defop Slot QMathGL @code{void} exportPNG (@code{QString} fname=@code{""})
+Export current picture to PNG file.
+ at end defop
+ at defop Slot QMathGL @code{void} exportPNGs (@code{QString} fname=@code{""})
+Export current picture to PNG file (no transparency).
+ at end defop
+ at defop Slot QMathGL @code{void} exportJPG (@code{QString} fname=@code{""})
+Export current picture to JPEG file.
+ at end defop
+ at defop Slot QMathGL @code{void} exportBPS (@code{QString} fname=@code{""})
+Export current picture to bitmap EPS file.
+ at end defop
+ at defop Slot QMathGL @code{void} exportEPS (@code{QString} fname=@code{""})
+Export current picture to vector EPS file.
+ at end defop
+ at defop Slot QMathGL @code{void} exportSVG (@code{QString} fname=@code{""})
+Export current picture to SVG file.
+ at end defop
+ at defop Slot QMathGL @code{void} exportIDTF (@code{QString} fname=@code{""})
+Export current picture to IDTF file.
+ at end defop
+ at defop Slot QMathGL @code{void} setMGLFont (@code{QString} path)
+Restore (@var{path}=@code{""}) or load font for graphics.
+ at end defop
+ at defop Slot QMathGL @code{void} print ()
+Print current picture
+ at end defop
+ at defop Slot QMathGL @code{void} adjust ()
+Adjust plot size to fill entire window. This function is executed only if graph is mglGraphQT instance.
+ at end defop
+ at defop Slot QMathGL @code{void} nextSlide ()
+Show next slide. This function is executed only if graph is mglGraphQT instance.
+ at end defop
+ at defop Slot QMathGL @code{void} prevSlide ()
+Show previous slide. This function is executed only if graph is mglGraphQT instance.
+ at end defop
+ at defop Slot QMathGL @code{void} animation (@code{bool} st=@code{true})
+Start animation. This function is executed only if graph is mglGraphQT instance.
+ at end defop
+ at defop Slot QMathGL @code{void} about ()
+Show about information.
+ at end defop
+ at defop Slot QMathGL @code{void} aboutQt ()
+Show information about Qt version.
+ at end defop
+
+ at defop Signal QMathGL @code{void} phiChanged (@code{int} val)
+Phi angle changed (by mouse or by toolbar).
+ at end defop
+ at defop Signal QMathGL @code{void} tetChanged (@code{int} val)
+Tet angle changed (by mouse or by toolbar).
+ at end defop
+ at defop Signal QMathGL @code{void} perChanged (@code{int} val)
+Perspective changed (by mouse or by toolbar).
+ at end defop
+ at defop Signal QMathGL @code{void} alphaChanged (@code{bool} val)
+Transparency changed (by toolbar).
+ at end defop
+ at defop Signal QMathGL @code{void} lightChanged (@code{bool} val)
+Lighting changed (by toolbar).
+ at end defop
+ at defop Signal QMathGL @code{void} zoomChanged (@code{bool} val)
+Zooming changed (by toolbar).
+ at end defop
+ at defop Signal QMathGL @code{void} rotateChanged (@code{bool} val)
+Rotation changed (by toolbar).
+ at end defop
+
+ at deftypecv {Widget option} QMathGL @code{QString} appName
+Application name for message boxes.
+ at end deftypecv
+ at deftypecv {Widget option} QMathGL @code{bool} autoResize
+Allow auto resizing (default is false).
+ at end deftypecv
+ at deftypecv {Widget option} QMathGL @code{int} animDelay
+Animation delay in ms.
+ at end deftypecv
+
+
diff --git a/texinfo/widget_ru.texi b/texinfo/widget_ru.texi
new file mode 100644
index 0000000..127bcc8
--- /dev/null
+++ b/texinfo/widget_ru.texi
@@ -0,0 +1,290 @@
+
+ at c ------------------------------------------------------------------
+ at chapter ``Оконные'' классы
+ at cindex mglGraphFLTK
+ at cindex mglGraphQT
+ at cindex mglGraphGLUT
+ at cindex Fl_MathGL
+ at cindex QMathGL
+ at cindex window
+ at cindex widgets
+
+Есть целый набор ``оконных'' классов для создания окон с графикой MathGL: @code{mglGraphFLTK}, @code{mglGraphQT}, @code{mglGraphGLUT}. Все эти классы позволяют пользователю просмотривать, вращать, экспортировать рисунок. Большинство из них (кроме @code{mglGraphGLUT}) являются наследниками класса @code{mglGraphZB} и используют ``присоединенный'' класс для центрального виджета окна. Все оконные классы имеют схожий набор функций (@pxref{mglGraphAB class}). Ниже приведен список классов с краткими комментариями.
+
+ at deftp {Class} mglGraphFLTK
+Создает окно используя библиотеку FLTK. Окно имеет панель инструментов и меню  для упрощения действий с графиками. ``Присоединенный'' класс элемента интерфейса -- @code{Fl_MathGL}. Класс определен в @code{#include <mgl/mgl_fltk.h>}.
+ at end deftp
+
+ at deftp {Class} Fl_MathGL
+Класс реализует элемент интерфейса FLTK для отображения графики MathGL. Класс определен в @code{#include <mgl/mgl_fltk.h>}.
+ at end deftp
+
+ at float
+ at image{fltk, 7cm}
+ at caption{Пример окна FLTK с графикой MathGL.}
+ at end float
+
+ at deftp {Class} mglGraphQT
+Создает окно используя библиотеку Qt. Окно имеет панель инструментов и меню  для упрощения действий с графиками. ``Присоединенный'' класс элемента интерфейса -- @code{QMathGL}. Класс определен в @code{#include <mgl/mgl_qt.h>}.
+ at end deftp
+
+ at deftp {Class} QMathGL
+Класс реализует элемент интерфейса Qt для отображения графики MathGL. Класс определен в @code{#include <mgl/mgl_qt.h>}.
+ at end deftp
+
+ at float
+ at image{qt, 7cm}
+ at caption{Пример окна Qt с графикой MathGL.}
+ at end float
+
+ at deftp {Class} mglGraphGLUT
+Создает окно используя библиотеку GLUT. Класс определен в @code{#include <mgl/mgl_glut.h>}.
+ at end deftp
+
+ at float
+ at image{glut, 7cm}
+ at caption{Пример окна GLUT с графикой MathGL.}
+ at end float
+
+ at menu
+* Fl_MathGL class::             
+* QMathGL class::               
+ at end menu
+
+ at c ------------------------------------------------------------------
+ at node Fl_MathGL class, QMathGL class, , Widget classes
+ at section Класс Fl_MathGL
+ at cindex Fl_MathGL
+ at cindex widgets
+
+Класс реализует элемент интерфейса FLTK для отображения графики MathGL (определен в @code{#include <mgl/mgl_fltk.h>}).
+
+ at deftypemethod Fl_MathGL @code{void} set_draw (@code{mglDraw *}dr)
+Задает функцию рисования из класса производного от @code{mglDraw}.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} update (@code{mglGraph *}gr=@code{NULL})
+Обновляет (перерисовывает) график, используя экземпляр класса @var{gr} (по умолчанию встроенный).
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_angle (@code{float} t, @code{float} p)
+Задает углы для дополнительного вращения графика.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_state (@code{int} f)
+Задает битовые флаги для: 1 - прозрачности, 2 - освещения.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_state (@code{bool} z, @code{bool} r)
+Задает флаги обработки движений мыши: @var{z}=@code{true} -- разрешает приближение выделения, @var{r}=@code{true} разрешает вращение/сдвиг/приближение/перспективу.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_zoom (@code{float} X1, @code{float} Y1, @code{float} X2, @code{float} Y2)
+Задает область приближения.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} get_zoom (@code{float *}X1, @code{float *}Y1, @code{float *}X2, @code{float *}Y2)
+Возвращает область приближения.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v)
+Задает указатель на всплывающее меню.
+ at end deftypemethod
+ at deftypemethod Fl_MathGL @code{mglGraph *} get_graph ()
+Возвращает указатель на класс, строящий графики.
+ at end deftypemethod
+
+ at deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} tet_val
+Указатель на внешний элемент управления для изменения угла tet.
+ at end deftypecv
+ at deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} phi_val
+Указатель на внешний элемент управления для изменения угла phi.
+ at end deftypecv
+ at deftypecv {Widget option} Fl_MathGL @code{mglGraphAB *} graph
+Указатель на экземпляр класса для построения графиков.
+ at end deftypecv
+ at deftypecv {Widget option} Fl_MathGL @code{void *} draw_par
+Параметр для функции рисования.
+ at end deftypecv
+ at deftypecv {Widget option} Fl_MathGL @code{int (*} draw_func @code{)(mglGraph *gr, void *par)}
+Указатель на функцию рисования.
+ at end deftypecv
+
+ at c ------------------------------------------------------------------
+ at node QMathGL class, , Fl_MathGL class, Widget classes
+ at section QMathGL class
+ at cindex QMathGL
+ at cindex widgets
+
+Класс реализует элемент интерфейса Qt для отображения графики MathGL (определен в @code{#include <mgl/mgl_qt.h>}).
+
+ at deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr)
+Задает функцию рисования из класса производного от @code{mglDraw}.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{void *}par=@code{NULL})
+Задает функцию рисования @var{draw} и укзатель @var{par} на параметр для нее.
+ at end deftypemethod
+
+ at deftypemethod QMathGL @code{void} setGraph (@code{mglGraphAB *}gr)
+Устанавливает указатель на внешний экземпляр класса для рисования (вместо встроенного @code{mglGraphZB}). Отмечу, что QMathGL автоматически удалит этот объект при удалении элемента интерфейса или при новом вызове @code{setGraph()}.
+ at end deftypemethod
+
+ at deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p)
+Задает указатель на всплывающее меню.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h)
+Задает размеры элемента управления и картинки.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{double} getRatio ()
+Возвращает соотношение сторон рисунка.
+ at end deftypemethod
+
+ at deftypemethod QMathGL @code{int} getPer ()
+Возвращает величину перспективы в процентах.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{int} getPhi ()
+Возвращает величину угла Phi в градусах.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{int} getTet ()
+Возвращает величину угла Theta в градусах.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{bool} getAlpha ()
+Возвращает состояние переключателя прозрачности.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{bool} getLight ()
+Возвращает состояние переключателя освещения.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{bool} getZoom ()
+Возвращает состояние переключателя приближения мышью.
+ at end deftypemethod
+ at deftypemethod QMathGL @code{bool} getRotate ()
+Возвращает состояние переключателя вращения мышью.
+ at end deftypemethod
+
+ at defop Slot QMathGL @code{void} refresh ()
+Перерисовывает (обновляет) элемент управления без вызова функции рисования.
+ at end defop
+ at defop Slot QMathGL @code{void} update (@code{mglGraph *}gr=@code{NULL})
+Обновляет рисунок путем вызова функции рисования.
+ at end defop
+ at defop Slot QMathGL @code{void} copy ()
+Копирует график в буфер обмена.
+ at end defop
+ at defop Slot QMathGL @code{void} setPer (@code{int} val)
+Задает величину перспективы.
+ at end defop
+ at defop Slot QMathGL @code{void} setPhi (@code{int} val)
+Задает величину угла Phi.
+ at end defop
+ at defop Slot QMathGL @code{void} setTet (@code{int} val)
+Задает величину угла Theta.
+ at end defop
+ at defop Slot QMathGL @code{void} setAlpha (@code{bool} val)
+Включает/выключает прозрачность.
+ at end defop
+ at defop Slot QMathGL @code{void} setLight (@code{bool} val)
+Включает/выключает освещение.
+ at end defop
+ at defop Slot QMathGL @code{void} setZoom (@code{bool} val)
+Включает/выключает приближение мышью.
+ at end defop
+ at defop Slot QMathGL @code{void} setRotate (@code{bool} val)
+Включает/выключает вращение мышью.
+ at end defop
+ at defop Slot QMathGL @code{void} zoomIn ()
+Приблиажет график.
+ at end defop
+ at defop Slot QMathGL @code{void} zoomOut ()
+Отдаляет график.
+ at end defop
+ at defop Slot QMathGL @code{void} restore ()
+Восстанавливает приближение и поворот графика в значения по умолчанию.
+ at end defop
+ at defop Slot QMathGL @code{void} reload ()
+Обновляет данные и перерисовывает график.
+ at end defop
+ at defop Slot QMathGL @code{void} shiftLeft ()
+Сдвигает график влево.
+ at end defop
+ at defop Slot QMathGL @code{void} shiftRight ()
+Сдвигает график вправо.
+ at end defop
+ at defop Slot QMathGL @code{void}shiftUp  ()
+Сдвигает график вверх.
+ at end defop
+ at defop Slot QMathGL @code{void} shiftDown ()
+Сдвигает график вниз.
+ at end defop
+ at defop Slot QMathGL @code{void} exportPNG (@code{QString} fname=@code{""})
+Сохраняет текущий рисунок в PNG файл.
+ at end defop
+ at defop Slot QMathGL @code{void} exportPNGs (@code{QString} fname=@code{""})
+Сохраняет текущий рисунок в PNG файл без прозрачности.
+ at end defop
+ at defop Slot QMathGL @code{void} exportJPG (@code{QString} fname=@code{""})
+Сохраняет текущий рисунок в JPEG файл.
+ at end defop
+ at defop Slot QMathGL @code{void} exportBPS (@code{QString} fname=@code{""})
+Сохраняет текущий рисунок в растровый EPS файл.
+Export current picture to bitmap EPS file.
+ at end defop
+ at defop Slot QMathGL @code{void} exportEPS (@code{QString} fname=@code{""})
+Сохраняет текущий рисунок в векторный EPS файл.
+ at end defop
+ at defop Slot QMathGL @code{void} exportSVG (@code{QString} fname=@code{""})
+Сохраняет текущий рисунок в векторный SVG файл.
+ at end defop
+ at defop Slot QMathGL @code{void} exportIDTF (@code{QString} fname=@code{""})
+Сохраняет текущий рисунок в IDTF файл.
+ at end defop
+ at defop Slot QMathGL @code{void} setMGLFont (@code{QString} path)
+Восстанавливает (@var{path}=@code{""}) или загружает файлы шрифтов.
+ at end defop
+ at defop Slot QMathGL @code{void} print ()
+Печатает текущий рисунок.
+ at end defop
+ at defop Slot QMathGL @code{void} adjust ()
+Подгоняет размер картинки под размер окна. Функция выполняется только если graph -- экземпляр класса mglGraphQT.
+ at end defop
+ at defop Slot QMathGL @code{void} nextSlide ()
+Показывает следующий кадр. Функция выполняется только если graph -- экземпляр класса mglGraphQT.
+ at end defop
+ at defop Slot QMathGL @code{void} prevSlide ()
+Показывает предыдущий кадр. Функция выполняется только если graph -- экземпляр класса mglGraphQT.
+ at end defop
+ at defop Slot QMathGL @code{void} animation (@code{bool} st=@code{true})
+Запускает анимацию. Функция выполняется только если graph -- экземпляр класса mglGraphQT.
+ at end defop
+ at defop Slot QMathGL @code{void} about ()
+Показывает информацию о программе.
+ at end defop
+ at defop Slot QMathGL @code{void} aboutQt ()
+Показывает информацию о версии Qt.
+ at end defop
+
+ at defop Signal QMathGL @code{void} phiChanged (@code{int} val)
+Угол Phi изменен.
+ at end defop
+ at defop Signal QMathGL @code{void} tetChanged (@code{int} val)
+Угол Tet изменен.
+ at end defop
+ at defop Signal QMathGL @code{void} perChanged (@code{int} val)
+Перспектива изменена.
+ at end defop
+ at defop Signal QMathGL @code{void} alphaChanged (@code{bool} val)
+Прозрачность изменена.
+ at end defop
+ at defop Signal QMathGL @code{void} lightChanged (@code{bool} val)
+Освещение изменено.
+ at end defop
+ at defop Signal QMathGL @code{void} zoomChanged (@code{bool} val)
+Режим приближения мышью изменен.
+ at end defop
+ at defop Signal QMathGL @code{void} rotateChanged (@code{bool} val)
+Режим вращения мышью изменен.
+ at end defop
+
+ at deftypecv {Widget option} QMathGL @code{QString} appName
+Имя приложения для окон сообщений.
+ at end deftypecv
+ at deftypecv {Widget option} QMathGL @code{bool} autoResize
+Разрешить изменять размер рисунка (по умолчанию false).
+ at end deftypecv
+ at deftypecv {Widget option} QMathGL @code{int} animDelay
+Задержка анимации в мсек.
+ at end deftypecv
+
+
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 00afdcb..94619ce 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -23,7 +23,7 @@ mgl2svg_LDADD = $(top_builddir)/mgl/libmgl.la
 
 if USE_FLTK
 mglview_SOURCES = mglview.cpp
-mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la
+mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la 
 mglview_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 endif
 
diff --git a/utils/Makefile.in b/utils/Makefile.in
index ff4454c..1cf4370 100644
--- a/utils/Makefile.in
+++ b/utils/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -42,7 +42,11 @@ subdir = utils
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -76,7 +80,8 @@ am__mglview_SOURCES_DIST = mglview.cpp
 @USE_FLTK_TRUE at am_mglview_OBJECTS = mglview-mglview.$(OBJEXT)
 mglview_OBJECTS = $(am_mglview_OBJECTS)
 @USE_FLTK_TRUE at mglview_DEPENDENCIES =  \
- at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@	$(top_builddir)/widgets/libmgl-fltk.la \
+ at USE_FLTK_TRUE@	$(top_builddir)/mgl/libmgl.la
 mglview_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
 	--mode=link $(CXXLD) $(mglview_CXXFLAGS) $(CXXFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -143,6 +148,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -163,6 +170,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
@@ -281,7 +289,7 @@ mgl2eps_LDADD = $(top_builddir)/mgl/libmgl.la
 mgl2svg_SOURCES = mgl2svg.cpp
 mgl2svg_LDADD = $(top_builddir)/mgl/libmgl.la
 @USE_FLTK_TRUE at mglview_SOURCES = mglview.cpp
- at USE_FLTK_TRUE@mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la
+ at USE_FLTK_TRUE@mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la 
 @USE_FLTK_TRUE at mglview_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS)
 @USE_GIF_TRUE at mgl2gif_SOURCES = mgl2gif.cpp
 @USE_GIF_TRUE at mgl2gif_LDADD = $(top_builddir)/mgl/libmgl.la
diff --git a/utils/mgl2gif.cpp b/utils/mgl2gif.cpp
index f56a683..dcc0b42 100644
--- a/utils/mgl2gif.cpp
+++ b/utils/mgl2gif.cpp
@@ -70,6 +70,7 @@ int main(int narg, char **arg)
 		printf("\tHere N=0,1...9 is parameter ID and val is its value.\n");
 		printf("\tOption -Lval set locale to val.\n");
 		printf("\tOption -Aval add value of $0 for making animation.\n");
+		printf("\tOption -Cn1:n2 cycle from n1 to n2 for making animation.\n");
 	}
 	else
 	{
@@ -89,6 +90,18 @@ int main(int narg, char **arg)
 				if(cur)	cur = new Str(cur,arg[i]+2);
 				else	head = cur = new Str(0,arg[i]+2);
 			}
+			if(arg[i][0]=='-' && arg[i][1]=='C')
+			{
+				int n,n1,n2;
+				sscanf(arg[i]+2,"%d:%d",&n1,&n2);
+				char str[64];
+				for(n=n1;n<n2;n++)
+				{
+					sprintf(str,"%d",n);
+					if(cur)	cur = new Str(cur,str);
+					else	head = cur = new Str(0,str);
+				}
+			}
 		}
 		if(narg>2 && arg[2][0]!='-')	strcpy(fname,arg[2]);
 		else
@@ -99,13 +112,25 @@ int main(int narg, char **arg)
 		// first read animation parameters from file
 		while(!feof(fp))
 		{
-			fgetws(str,8192,fp);
+			if(!fgetws(str,8192,fp))	break;
 			wcstrim_mgl(str);
 			if(str[0]=='#' && str[1]=='#' && str[2]=='a' && str[3]==' ')
 			{
 				if(cur)	cur = new Str(cur,str+4);
 				else	head = cur = new Str(0,str+4);
 			}
+			if(str[0]=='#' && str[1]=='#' && str[2]=='c' && str[3]==' ')
+			{
+				float v1,v2,dv,v;
+				wscanf(str+4,"%g %g %g",&v1,&v2,&dv);
+				char ss[64];
+				for(v=v1;v<v2;v+=dv)
+				{
+					sprintf(ss,"%g",v);
+					if(cur)	cur = new Str(cur,ss);
+					else	head = cur = new Str(0,ss);
+				}
+			}
 		}
 		// now execute it and save
 		gr.Message = buf;	*buf=0;
diff --git a/widgets/CMakeLists.txt b/widgets/CMakeLists.txt
index 55c56ab..8bd75cb 100644
--- a/widgets/CMakeLists.txt
+++ b/widgets/CMakeLists.txt
@@ -17,7 +17,7 @@ if(use_fltk)
 	target_link_libraries(mgl-fltk ${FLTK_LIBRARIES} mgl)
 	set_target_properties(mgl-fltk PROPERTIES SOVERSION 5.0.0)
 	install(
-		TARGETS mgl-fltk
+		TARGETS mgl-fltk mgl-fltk-static
 		RUNTIME DESTINATION bin
 		ARCHIVE DESTINATION lib
 		LIBRARY DESTINATION lib
@@ -35,7 +35,7 @@ if(use_glut)
 	target_link_libraries(mgl-glut ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES} mgl)
 	set_target_properties(mgl-glut PROPERTIES SOVERSION 5.0.0)
 	install(
-		TARGETS mgl-glut
+		TARGETS mgl-glut mgl-glut-static
 		RUNTIME DESTINATION bin
 		ARCHIVE DESTINATION lib
 		LIBRARY DESTINATION lib
@@ -53,7 +53,7 @@ if(use_wx)
 	target_link_libraries(mgl-wx ${wxWidgets_LIBRARIES} mgl)
 	set_target_properties(mgl-wx PROPERTIES SOVERSION 5.0.0)
 	install(
-		TARGETS mgl-wx
+		TARGETS mgl-wx mgl-wx-static
 		RUNTIME DESTINATION bin
 		ARCHIVE DESTINATION lib
 		LIBRARY DESTINATION lib
@@ -72,7 +72,7 @@ if(use_qt)
 	target_link_libraries(mgl-qt ${QT_LIBRARIES} mgl)
 	set_target_properties(mgl-qt PROPERTIES SOVERSION 5.0.0)
 	install(
-		TARGETS mgl-qt
+		TARGETS mgl-qt mgl-qt-static
 		RUNTIME DESTINATION bin
 		ARCHIVE DESTINATION lib
 		LIBRARY DESTINATION lib
diff --git a/widgets/Makefile.in b/widgets/Makefile.in
index cc98296..31a9c75 100644
--- a/widgets/Makefile.in
+++ b/widgets/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -62,7 +62,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 subdir = widgets
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/config/autotroll.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/config/libtool.m4 \
+	$(top_srcdir)/config/ltoptions.m4 \
+	$(top_srcdir)/config/ltsugar.m4 \
+	$(top_srcdir)/config/ltversion.m4 \
+	$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -208,6 +212,8 @@ GREP = @GREP@
 GSL_FLAGS = @GSL_FLAGS@
 GSL_LIBS = @GSL_LIBS@
 HAVE_SWIG = @HAVE_SWIG@
+HDF4_FLAGS = @HDF4_FLAGS@
+HDF4_LIBS = @HDF4_LIBS@
 HDF5_FLAGS = @HDF5_FLAGS@
 HDF5_LIBS = @HDF5_LIBS@
 INSTALL = @INSTALL@
@@ -228,6 +234,7 @@ LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MGL_AGE = @MGL_AGE@
 MGL_CURRENT = @MGL_CURRENT@
+MGL_RELEASE = @MGL_RELEASE@
 MGL_REVISION = @MGL_REVISION@
 MKDIR_P = @MKDIR_P@
 MOC = @MOC@
diff --git a/widgets/mgl_fltk.cpp b/widgets/mgl_fltk.cpp
index 58dedeb..bd82199 100644
--- a/widgets/mgl_fltk.cpp
+++ b/widgets/mgl_fltk.cpp
@@ -95,28 +95,27 @@ void Fl_MathGL::draw()
 void Fl_MathGL::update(mglGraph *gr)
 {
 	if(gr==0)	gr=graph;
-	if(gr==0 || draw_func==0)	return;
-	if(gr!=graph || graph->ClfOnUpdate)	gr->DefaultPlotParam();
-	gr->Alpha(flag&1);
-	gr->Light(flag&2);
-	gr->View(tet,phi);
-	gr->Zoom(x1,y1,x2,y2);
-	gr->DrawFace = !rotate;
-
-	gr->Message = new char[2048];	gr->Message[0] = 0;
-	draw_func(gr, draw_par);
-	if(gr->Message[0] != 0)			fl_message("%s",gr->Message);
-	delete []gr->Message;			gr->Message = 0;
-
+	if(gr==0)	return;
+	if(draw_func)
+	{
+		if(gr!=graph || graph->ClfOnUpdate)	gr->DefaultPlotParam();
+		gr->Message = new char[2048];	gr->Message[0] = 0;
+		gr->Alpha(flag&1);
+		gr->Light(flag&2);
+		gr->View(tet,phi);
+		gr->Zoom(x1,y1,x2,y2);
+		gr->DrawFace = !rotate;
+		draw_func(gr, draw_par);
+		if(gr->Message[0] != 0)			fl_message("%s",gr->Message);
+		delete []gr->Message;			gr->Message = 0;
+	}
 	if(gr==graph && (graph->GetWidth()!=w() || graph->GetHeight()!=h()))
 		size(graph->GetWidth(), graph->GetHeight());
-	redraw();
+	redraw();	Fl::flush();
 }
 //-----------------------------------------------------------------------------
 void Fl_MathGL::resize(int x, int y, int w, int h)
-{
-	Fl_Widget::resize(x,y,w,h);
-}
+{	Fl_Widget::resize(x,y,w,h);	}
 //-----------------------------------------------------------------------------
 int Fl_MathGL::handle(int code)
 {
@@ -688,7 +687,7 @@ int mglFlRun()	{	return Fl::run();	}
 HMGL mgl_create_graph_fltk_dr(HMDR dr, const char *title)
 {
 	mglGraphFLTK *g = new mglGraphFLTK;
-	g->Window(0,0,dr,title);
+	g->Window(0,0,title,dr);
 	return g;
 }
 //-----------------------------------------------------------------------------
@@ -700,7 +699,7 @@ HMGL mgl_create_graph_fltk(int (*draw)(HMGL gr, void *p), const char *title, voi
 }
 //-----------------------------------------------------------------------------
 void *mgl_fl_tmp(void *)	{	mglFlRun();	return 0;	}
-void mgl_fltk_run()	{	mglFlRun();	}
+void mgl_fltk_run()		{	mglFlRun();	}
 /*void mgl_fltk_thread()
 {
 	static pthread_t tmp;
diff --git a/widgets/mgl_glut.cpp b/widgets/mgl_glut.cpp
index 214d135..70a10a7 100644
--- a/widgets/mgl_glut.cpp
+++ b/widgets/mgl_glut.cpp
@@ -143,8 +143,7 @@ void _mgl_key_up(unsigned char ch,int ,int )
 		_mgl_glwnd->WriteEPS(str, "Math GL");
 	}
 	if(ch==' ')	_mgl_glwnd->Clf();
-	if(ch=='m')
-		_mgl_glwnd->tt = _mgl_glwnd->tt==0 ? 1:0;
+	if(ch=='m')	_mgl_glwnd->tt = 1-_mgl_glwnd->tt;
 	rL = rL<0 ? 0 : (rL>5 ? 5 : rL);
 	_mgl_glwnd->Light(0,mglPoint(rL*cos(pL)*sin(tL), rL*sin(pL)*sin(tL), rL*cos(tL)),false);
 	_mgl_glwnd->Alpha(Alpha);
@@ -211,7 +210,7 @@ void mglGraphGLUT::Window(int argc, char **argv,int (*draw)(mglGraph *gr, void *
 HMGL mgl_create_graph_glut(HMDR dr, const char *title)
 {
 	mglGraphGLUT *g = new mglGraphGLUT;
-	g->Window(0,0,dr,title);
+	g->Window(0,0,title,dr);
 	return g;
 }
 //-----------------------------------------------------------------------------
diff --git a/widgets/mgl_qt.cpp b/widgets/mgl_qt.cpp
index 2079db1..b7c0d0f 100644
--- a/widgets/mgl_qt.cpp
+++ b/widgets/mgl_qt.cpp
@@ -110,7 +110,7 @@ void QMathGL::paintEvent(QPaintEvent *)
 //-----------------------------------------------------------------------------
 void QMathGL::resizeEvent(QResizeEvent *ev)
 {
-	if(autoResize)
+	if(autoResize && ev->size().width()>0 && ev->size().height()>0)
 	{	graph->SetSize(ev->size().width(), ev->size().height());	update();	}
 	else	resize(graph->GetWidth(), graph->GetHeight());
 }
@@ -190,16 +190,18 @@ void QMathGL::zoomOut()
 void QMathGL::update(mglGraph *gr)
 {
 	if(gr==0)	gr = graph;
-	if(gr==0 || draw_func==0)	return;
+	if(gr==0)	return;
+	if(draw_func==0)	{	refresh();	return;	}
 	if(gr!=graph || graph->ClfOnUpdate)	gr->DefaultPlotParam();
+	char *buf=new char[2048];	buf[0]=0;	gr->Message = buf;
+
 	gr->Alpha(alpha);	gr->Light(light);
 	gr->View(tet,phi);	gr->Org = mglPoint(NAN,NAN,NAN);
 	gr->Perspective(per);
 	gr->Zoom(x1,y1,x2,y2);
 	gr->DrawFace = !rotate;
-
-	char *buf=new char[2048];	buf[0]=0;	gr->Message = buf;
-	draw_func(gr, draw_par);
+	draw_func(gr, draw_par);
+
 	if(buf[0] != 0)	QMessageBox::warning(this, appName, buf);
 	gr->Message = 0;		delete []buf;
 	mousePos="";
@@ -430,24 +432,19 @@ void QMathGL::aboutQt()	{	QMessageBox::aboutQt(this, tr("About Qt"));	}
 void QMathGL::print()
 {
 	QPrinter *printer = new QPrinter;
+	printer->setOrientation(getRatio()>1 ? QPrinter::Landscape : QPrinter::Portrait);
 	QPrintDialog printDlg(printer, this);
 	if (printDlg.exec() == QDialog::Accepted)
 	{
-		QPainter p;
-		if(!p.begin(printer))	return;	// paint on printer
-		QRect r = p.viewport();
-		int w = r.width(), h = r.height(), h1;
-		h1 = int(w/getRatio());
-		if(h1<h)	h = h1;	else	w = int(h*getRatio());
-		mglGraphZB gr(w, h);
-		if(w*h > 240000)	gr.BaseLineWidth = sqrt(w*h/2.4e5);
-		update(&gr);
-
-		uchar *grBuf=0;
-		QPixmap pic;
-		convertFromGraph(pic, &gr, &grBuf);
-		p.drawPixmap(0,0,pic);
-		delete []grBuf;
+		QRectF r = printer->pageRect(QPrinter::Inch);
+		int d1 = int(pic.width()/r.width()), d2 = int(pic.height()/r.height());
+		int dpi = printer->resolution();
+		if(dpi<d1)	dpi=d1;		if(dpi<d2)	dpi=d2;
+		printer->setResolution(dpi);
+		
+		QPainter p;
+		if(!p.begin(printer))	return;	// paint on printer
+		p.drawPixmap(0,0,pic);
 	}
 	delete printer;
 }
@@ -579,22 +576,21 @@ void mglGraphQT::Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p
 	Wnd = new QMainWindow;	Wnd->resize(650,480);
 	Wnd->setWindowTitle(title);
 	scroll = new QScrollArea(Wnd);
-	QMGL = new QMathGL(Wnd);
+	QMGL = new QMathGL(Wnd);	makeMenu();
 	QMGL->setPopup(popup);	QMGL->setGraph(this);
 	QMGL->setDraw(draw, par);
-	makeMenu();	qApp->processEvents();
+	qApp->processEvents();
 	scroll->setWidget(QMGL);
 	Wnd->setCentralWidget(scroll);
 	QMGL->update();
-	if(maximize)
-	{	Wnd->showMaximized();	}
-	else	Wnd->show();
+	if(!maximize)	Wnd->show();
+	else	Wnd->showMaximized();
 }
 //-----------------------------------------------------------------------------
 HMGL mgl_create_graph_qt_dr(HMDR dr, const char *title)
 {
 	mglGraphQT *g = new mglGraphQT;
-	g->Window(0,0,dr,title);
+	g->Window(0,0,title,dr);
 	return g;
 }
 //-----------------------------------------------------------------------------
@@ -626,6 +622,7 @@ void *mgl_qt_tmp(void *)	{	mglQtRun();	return 0;	}
 	pthread_detach(tmp);
 }*/
 //-----------------------------------------------------------------------------
+void mgl_qt_run()	{	mglQtRun();	}
 void mgl_qt_run_()	{	mglQtRun();	}
 //-----------------------------------------------------------------------------
 #define TR	QObject::tr
diff --git a/widgets/mgl_wx.cpp b/widgets/mgl_wx.cpp
index 7383c84..313972b 100644
--- a/widgets/mgl_wx.cpp
+++ b/widgets/mgl_wx.cpp
@@ -22,6 +22,8 @@
 #include <wx/msgdlg.h>
 #include <wx/clipbrd.h>
 #include <wx/dataobj.h>
+#include <wx/menu.h>
+
 #include "mgl/mgl_idtf.h"
 #include "mgl/mgl_eps.h"
 #include "mgl/mgl_wx.h"
@@ -91,7 +93,7 @@ void wxMathGL::OnSize(wxSizeEvent& event)
 	wxSize ev = event.GetSize();
 	if(graph->GetWidth()==ev.GetWidth() && graph->GetHeight()==ev.GetHeight())
 		return;
-	if(AutoResize)
+	if(AutoResize && ev.GetWidth()>0 && ev.GetHeight()>0)
 	{	graph->SetSize(ev.GetWidth(), ev.GetHeight());	Update();	}
 	else	SetSize(graph->GetWidth(), graph->GetHeight());
 }
@@ -99,10 +101,7 @@ void wxMathGL::OnSize(wxSizeEvent& event)
 void wxMathGL::OnNextSlide(wxTimerEvent& evt)	{	NextSlide();	}
 //-----------------------------------------------------------------------------
 void wxMathGL::SetPer(int p)
-{
-	if(per!=p && p>=0 && p<100)
-	{	per = 100*p;	Update();	}
-}
+{	if(per!=p && p>=0 && p<100)	{	per = 100*p;	Update();	}	}
 //-----------------------------------------------------------------------------
 void wxMathGL::SetPhi(int p)
 {	if(phi!=p)	{	phi = p;	Update();	}	}
@@ -539,7 +538,7 @@ void mglGraphWX::Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p
 	int n = draw ? draw(this,par) : 0;
 	if(n<NumFig && n>=0)	NumFig = n;
 	DrawFunc = draw;		FuncPar = par;
-	LoadFunc = reload;
+	LoadFunc = reload;		popup = 0;
 	if(Wnd)
 	{
 		Wnd->SetLabel(wxString(title,wxConvLibc));
@@ -552,17 +551,29 @@ void mglGraphWX::Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p
 	if(!wxTheApp)	{	new wxApp;	wxTheApp->SetExitOnFrameDelete(true);	}
 
 	Wnd = new wxWindow;	Wnd->SetSize(650,480);
-	Wnd->SetLabel(wxString(title,wxConvLibc));
+	Wnd->SetLabel(wxString(title,wxConvLibc));
+
 	scroll = new wxScrolledWindow(Wnd);
-	WMGL = new wxMathGL(scroll);
+	WMGL = new wxMathGL(scroll);	MakeMenu();
 	WMGL->SetPopup(popup);	WMGL->SetGraph(this);
 	WMGL->SetDraw(draw, par);
-	MakeMenu();
+
 	WMGL->Update();
 	if(maximize)	Wnd->SetSize(Wnd->GetMaxSize());
 	Wnd->Show();
 }
-//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void mglGraphWX::MakeMenu()
+{
+/*	wxMenuBar *m = new wxMenuBar;
+	wxMenu *o, *oo;
+	
+	o = new wxMenu;	m->Append(o, wxT("&File"));
+	oo= new wxMenu;	o->AppendSubMenu(oo,wxT("&Export as ..."));
+	o->Append(wxID_EXIT, wxT("&Close"));
+	Wnd->Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(wxWindow::Close));
+*/
+}
 /*void mglGraphQT::makeMenu()
 {
 	QAction *a;
@@ -721,7 +732,7 @@ void mglGraphWX::Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p
 HMGL mgl_create_graph_wx_dr(HMDR dr, const char *title)
 {
 	mglGraphWX *g = new mglGraphWX;
-	g->Window(0,0,dr,title);
+	g->Window(0,0,title,dr);
 	return g;
 }
 //-----------------------------------------------------------------------------
@@ -747,5 +758,4 @@ int mglWxRun()		{	return wxTheApp ? wxTheApp->MainLoop():0;	}
 //-----------------------------------------------------------------------------
 void mgl_wx_run_()	{	mglWxRun();	}
 //-----------------------------------------------------------------------------
-#endif
-//-----------------------------------------------------------------------------
+#endif
\ No newline at end of file

-- 
Packaging for mathgl



More information about the debian-science-commits mailing list