Imported Upstream version 2.2.1+svn921
authorDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Sun, 23 Feb 2014 16:48:45 +0000 (18:48 +0200)
committerDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Sun, 23 Feb 2014 16:48:45 +0000 (18:48 +0200)
51 files changed:
AUTHORS
CMakeLists.txt
ChangeLog.txt
README
clean-svn [new file with mode: 0755]
examples/full_test.cpp
include/mgl2/addon.h
include/mgl2/base.h
include/mgl2/canvas_cf.h
include/mgl2/data_cf.h
include/mgl2/datac.h
include/mgl2/datac_cf.h
include/mgl2/define.h
include/mgl2/glut.h
include/mgl2/mgl.h
include/mgl2/plot.h
include/mgl2/prim.h
include/mgl2/type.h
src/addon.cpp
src/base.cpp
src/base_cf.cpp
src/canvas.cpp
src/canvas_cf.cpp
src/complex.cpp
src/complex_io.cpp
src/data.cpp
src/data_io.cpp
src/eval.cpp
src/evalc.cpp
src/exec.cpp
src/export_2d.cpp
src/export_3d.cpp
src/fit.cpp
src/parser.cpp
src/pixel.cpp
src/plot.cpp
src/surf.cpp
src/vect.cpp
src/volume.cpp
texinfo/deflate.min.js [deleted file]
texinfo/gunzip.min.js [deleted file]
texinfo/inflate.min.js [deleted file]
texinfo/overview_en.texi
texinfo/overview_ru.texi
texinfo/version.texi
texinfo/web_en.texi
texinfo/web_fr.texi
texinfo/web_ru.texi
todo.txt
udav/CMakeLists.txt
widgets/glut.cpp

diff --git a/AUTHORS b/AUTHORS
index 90a6e8406b825b2eca350516cb64c68bce1de86b..7c587e58039af31f048711a1fadd56828e0db9ea 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -3,6 +3,7 @@ Author of MathGL:
 Alexey Balakin <balakin@appl.sci-nnov.ru>\r
 \r
 Some extensions was written by:\r
-Dmitriy Kulagin        - autoconf/automake script\r
+Dmitriy Kulagin        - cmake script\r
+Mikhail Vidassov - U3D/PDF/OBJ export\r
 Mikhail Barg   - Pascal/Delphi interface\r
 Sergey Plis    - Forth interface
\ No newline at end of file
index dc5ef404ea9d3e538b39a4bb6182495a0e382d78..261117004f62fde4a85815823034c565b10f6107 100644 (file)
@@ -89,11 +89,11 @@ MGL_DEPENDENT_OPTION(enable-hdf4 "Enable hdf4 support" OFF "NOT enable-lgpl" ON
 MGL_DEPENDENT_OPTION(enable-hdf5 "Enable hdf5 support" OFF "NOT enable-lgpl" ON "NOT enable-all" ON)
 CMAKE_DEPENDENT_OPTION(enable-pdf "Enable pdf support" OFF "NOT enable-all" ON)
 CMAKE_DEPENDENT_OPTION(enable-gif "Enable gif support" OFF "NOT enable-all" ON)
-MGL_DEPENDENT_OPTION(enable-glut "Enable glut support" OFF "NOT enable-lgpl" ON "NOT enable-all-widgets" ON)
-MGL_DEPENDENT_OPTION(enable-fltk "Enable fltk widget" OFF "NOT enable-lgpl" ON "NOT enable-all-widgets" ON)
-CMAKE_DEPENDENT_OPTION(enable-wx "Enable wxWidget widget" OFF "NOT enable-lgpl" OFF)
-MGL_DEPENDENT_OPTION(enable-qt4 "Enable Qt4 widget" OFF "NOT enable-lgpl" ON "NOT enable-all-widgets" ON)
-MGL_DEPENDENT_OPTION(enable-qt5 "Enable Qt5 widget" OFF "NOT enable-lgpl" ON "NOT enable-all-widgets" ON)
+CMAKE_DEPENDENT_OPTION(enable-glut "Enable glut support" OFF "NOT enable-all-widgets" ON)
+CMAKE_DEPENDENT_OPTION(enable-fltk "Enable fltk widget" OFF "NOT enable-all-widgets" ON)
+CMAKE_DEPENDENT_OPTION(enable-wx "Enable wxWidget widget" OFF "NOT enable-all-widgets" ON)
+CMAKE_DEPENDENT_OPTION(enable-qt4 "Enable Qt4 widget" OFF "NOT enable-all-widgets" ON)
+CMAKE_DEPENDENT_OPTION(enable-qt5 "Enable Qt5 widget" OFF "NOT enable-all-widgets" ON)
 CMAKE_DEPENDENT_OPTION(enable-qt5asqt "Set Qt5 as default libmgl-qt" ON "enable-qt5" OFF)
 MGL_DEPENDENT_OPTION(enable-python "Enable python interface" OFF "NOT enable-lgpl" ON "NOT enable-all-swig" ON)
 MGL_DEPENDENT_OPTION(enable-lua "Enable Lua (v.5.1) interface" OFF "NOT enable-lgpl" ON "NOT enable-all-swig" ON)
index 29624cbd0c0f91cd6afd7af337c472daad2feed3..efab471b57199f21a4e0d682d98bc74f97e180fb 100644 (file)
@@ -1,3 +1,13 @@
+2.2.2 Released ?? February 2014
+
+* Add mgl_region_3d() to draw region (or ribbon) between 2 curves. Correspondingly extend mglGraph::Region() function and MGL command 'region'.
+* Add mgl_datac_diffr() for calculation of one step of diffraction by finite-difference method
+* Improve export to TeX
+* Add missing functions to Fortran interface
+* Bugfix for legend with enabled lighting
+* Minor bugfixes and memory leaks
+
+
 2.2.1 Released 22 January 2014
 
 * Add Qt5 support.
diff --git a/README b/README
index d6385c3f48ae1ec3c19d84b9f921d283c82c9928..38176b92401b139853d4d99dbe4288bd81cd1384 100644 (file)
--- a/README
+++ b/README
@@ -1,63 +1,22 @@
 MathGL is a free library of fast C++ routines for the plotting of the data \r
-varied in one or more dimensions. MathGL has more than 40 general types \r
+varied in one or more dimensions. MathGL has more than 50 general types \r
 of graphics for 1d, 2d and 3d data arrays. It can export graphics to bitmap \r
-and vector (EPS or SVG) files. It has OpenGL interface and can be used from \r
+and vector (EPS, SVG etc) files. It has OpenGL interface and can be used from \r
 console programs. It has functions for data handling and script MGL language \r
 for simplification of data plotting. Also it has several types of transparency \r
 and smoothed lightning, vector fonts and TeX-like symbol parsing, arbitrary \r
 curvilinear coordinate system and many over useful things. Finally it is \r
-platform independent and free (under GPL v.2.0 license).\r
-\r
-MathGL can plot a wide range of graphics. It includes:\r
-  * one-dimensional plots (Plot(), Area(), Bars(), Step(), Stem(), Torus(), \r
-    Chart(), Error(), Tube(), Mark(), Text()), \r
-  * two-dimensional plots (Mesh(), Surf(), Dens(), Cont(), ContF(), \r
-    Boxs(), Axial(), Belt()),\r
-  * three-dimensional plots (Dens3(), Cont3(), ContF3(), Surf3(), \r
-    CloudQ(), CloudP()).\r
-  * dual data plots: vector plot Vect() and VectC(), flow chart Flow(), \r
-    mapping chart Map(), surface or isosurface transpared (SurfA(), Surf3A()) \r
-       or colored (SurfC(), Surf3C()) by other data \r
-  * and so on. See class mglGraph for detail.\r
-\r
-In fact, I created functions for drawing of all scientific plots that I know.\r
-The list of plots is enlarging, so if you need some special type of plot then \r
-write me e-mail (balakin@appl.sci-nnov.ru) and it will appear in new version.\r
-\r
-I tried to make plots as well-looking as possible: surface can be transparent \r
-and highlighted by several (up to 10) light sources. Most of drawing functions \r
-have 2 variants: simple one for the fast plotting of data, complex one for \r
-specifying of the exact position of plot (including parametric representation). \r
-Resulting image can be saved in bitmap (with the help of mglGraphZB, mglGraphGL) \r
-PNG, JPEG, TIFF format or in vector EPS or SVG format (with the help of \r
-mglGraphPS).\r
-\r
-All text are drawn by vector font, that allows high scalability and portability. \r
-Text may contain commands for: some of TeX-like symbols, changing index (upper \r
-or lower indexes) and style of font inside text string (see mglFont). Texts of \r
-ticks are rotated with axis rotation. It is possible to create a legend of plot \r
-and put text in arbitrary position of plot.\r
-\r
-Special class mglData is used for data incapsulation. Except safe creation and \r
-deletion of data arrays it includes functions for data processing (smoothing, \r
-differentiating, integrating, interpolating and so on) and reading of data \r
-files with automatic size determination. Class mglData can handle arrays with \r
-up to three dimensions (arrays which depend up to 3 independent indexes \r
-a[i,j,k]). Using an array with higher number of dimensions is not reasonable \r
-because I do not know how it can be plotted. Data filling and modifying may be \r
-fulfilled manually or by textual formulas.\r
-\r
-Class mglFormula allows the fast evaluation of a textual mathematical \r
-expression. It is based on string precompilation to tree-like code at creation \r
-of class instance. At evaluation stage code performs only fast tree-walk and \r
-returns the value of the expression. Except changing data values, textual \r
-formulas are used for drawing in \emph{arbitrary} curvilinear coordinates. \r
-A set of such curvilinear coordinates is limited only by user imagination \r
-but not a fixed list like polar, parabolic, spherical and so on.\r
-\r
+platform independent and free (under GPL v.2.0 or later license).\r
 Installation instructions are provided in the manual (don't worry, it\r
 is straightforward).\r
 \r
+About LGPL and GPL licenses.\r
+Generally, MathGL is GPL library. However, you can use LGPL license for MathGL \r
+core and widget libraries if you don't use SWIG-based interfaces and disable GSL \r
+and HDF features. This can be done by using 'enable-lgpl' option at build time.\r
+However, I ask you to put the information of used MathGL version and link to \r
+MathGL website into "About" section of yours program.\r
+\r
 CONTACTS\r
 --------\r
 MathGL was written by Alexey Balakin. You can contact me at \r
diff --git a/clean-svn b/clean-svn
new file mode 100755 (executable)
index 0000000..f0ba47a
--- /dev/null
+++ b/clean-svn
@@ -0,0 +1,3 @@
+find . -name '.svn' -print0 | xargs -0 rm -rf
+find . -name '*~' -print0 | xargs -0 rm -f
+rm ./clean-svn
index 54aafa048308338026db3de6b83bc9e8633deb88..2032ad7842bf59edf608392abd1952ac42b1dd69 100644 (file)
@@ -71,7 +71,12 @@ void test(mglGraph *gr)
 {\r
        mglParse par;\r
        setlocale(LC_CTYPE, "");\r
-       par.Execute(gr,"box\r\n\r\naxis");\r
+       par.Execute(gr,"new x 50 40 '0.8*sin(pi*x)*sin(pi*(y+1)/2)'\n\\r
+                                       new y 50 40 '0.8*cos(pi*x)*sin(pi*(y+1)/2)'\n\\r
+                                       new z 50 40 '0.8*cos(pi*(y+1)/2)'\nlight on\n\\r
+                                       title 'parametric form':rotate 50 60:box\n\\r
+                                       surf x y z ''\nwrite '1.tex'");\r
+//     par.Execute(gr,"light on:addlegend 'r' 'r':legend");\r
 }\r
 //-----------------------------------------------------------------------------\r
 #if !defined(_MSC_VER) && !defined(__BORLANDC__)\r
index fdab4c392e7bed356b88c2152945f25aa3caf2c3..8423ca0d352158bf2004d6b32ed0ce4719f00ff7 100644 (file)
@@ -24,9 +24,9 @@
 #ifdef __cplusplus
 //-----------------------------------------------------------------------------
 /// Explicit scheme for 1 step of axial diffraction
-int MGL_EXPORT mgl_difr_axial(dual *a, int n, dual q, int Border,dual *b, dual *d, int kk, double di);
+void MGL_EXPORT mgl_difr_axial(dual *a,int n,int step,dual q,int Border,dual *tmp,int kk, double di);
 /// Explicit scheme for 1 step of plane diffraction
-int MGL_EXPORT mgl_difr_grid(dual *a,int n,dual q,int Border,dual *b,dual *d,int kk);
+void MGL_EXPORT mgl_difr_grid(dual *a,int n,int step,dual q,int Border,dual *tmp,int kk);
 //-----------------------------------------------------------------------------
 extern "C" {
 #endif
index 84c24b657aad9ee39ef012709912b2ed4ddc7fea..452e2c8b8dd519c7d0664b25fb79c72ac276b940 100644 (file)
@@ -47,7 +47,7 @@ struct MGL_EXPORT mglMatrix
        mreal b[9];\r
        mreal x,y,z,pf;\r
        bool norot;     // flag to disable pnts rotation\r
-       mglMatrix()     {       clear();        }\r
+       mglMatrix()     {       memset(this,0,sizeof(mglMatrix));       clear();        }\r
        void Rotate(mreal tetz,mreal tetx,mreal tety);\r
        void RotateN(mreal Tet,mreal x,mreal y,mreal z);\r
        inline void clear()     {       x=y=z=pf=0;     memset(b,0,9*sizeof(mreal));    b[0]=b[4]=b[8]=1;       norot=false;    }\r
index 04dd4f0803a2f4181e122625dc4d050e97b934d8..de04e43f2e21d1fe2e3a36974e824c7a92696886 100644 (file)
@@ -93,7 +93,7 @@ void MGL_EXPORT mgl_axis_grid(HMGL gr, const char *dir,const char *pen, const ch
 void MGL_EXPORT mgl_axis_grid_(uintptr_t *gr, const char *dir,const char *pen, const char *opt,int,int,int);\r
 /// Print the label text for axis dir.\r
 void MGL_EXPORT mgl_label(HMGL gr, char dir, const char *text, double pos, const char *opt);\r
-void MGL_EXPORT mgl_label_(uintptr_t *gr, const char *dir, const char *text, const char *opt,int,int,int);\r
+void MGL_EXPORT mgl_label_(uintptr_t *gr, const char *dir, const char *text, mreal *pos, const char *opt,int,int,int);\r
 void MGL_EXPORT mgl_labelw(HMGL gr, char dir, const wchar_t *text, double pos, const char *opt);\r
 \r
 /// Draw colorbar at edge of axis\r
@@ -326,7 +326,7 @@ void MGL_EXPORT mgl_columnplot(HMGL gr, int num, int ind, double d);
 void MGL_EXPORT mgl_columnplot_(uintptr_t *gr, int *num, int *i, mreal *d);\r
 /// Put further plotting in matrix cell of previous subplot/inplot.\r
 void MGL_EXPORT mgl_gridplot(HMGL gr, int nx, int ny, int m, double d);\r
-void MGL_EXPORT mgl_gridplot_(uintptr_t *gr, int *nx, int *ny, int *i, mreal *d);\r
+void MGL_EXPORT mgl_gridplot_(uintptr_t *gr, int *nx, int *ny, int *m, mreal *d);\r
 /// Put further plotting in cell of stick rotated on angles tet, phi.\r
 void MGL_EXPORT mgl_stickplot(HMGL gr, int num, int ind, double tet, double phi);\r
 void MGL_EXPORT mgl_stickplot_(uintptr_t *gr, int *num, int *i, mreal *tet, mreal *phi);\r
index 48a249a63a05f66bb19bb3421c06336e74422bd1..224ef768d34e0fee42d04013ce34f9117bf71132 100644 (file)
@@ -332,7 +332,7 @@ void MGL_EXPORT mgl_data_fill_sample(HMDT dat, const char *how);
 void MGL_EXPORT mgl_data_fill_sample_(uintptr_t *dat, const char *how,int);\r
 /// Find correlation between 2 data arrays\r
 HMDT MGL_EXPORT mgl_data_correl(HCDT dat1, HCDT dat2, const char *dir);\r
-uintptr_t MGL_EXPORT mgl_data_correl_(uintptr_t dat1, uintptr_t dat2, const char *dir,int);\r
+uintptr_t MGL_EXPORT mgl_data_correl_(uintptr_t *dat1, uintptr_t *dat2, const char *dir,int);\r
 \r
 /// Allocate and prepare data for Fourier transform by nthr threads\r
 MGL_EXPORT void *mgl_fft_alloc(long n, void **space, long nthr);\r
@@ -461,12 +461,12 @@ void MGL_EXPORT mgl_delete_expr(HMEX ex);
 void MGL_EXPORT mgl_delete_expr_(uintptr_t *ex);\r
 /// Return value of expression for given x,y,z variables\r
 double MGL_EXPORT mgl_expr_eval(HMEX ex, double x, double y,double z);\r
-double MGL_EXPORT mgl_eval_expr_(uintptr_t *ex, mreal *x, mreal *y, mreal *z);\r
+double MGL_EXPORT mgl_expr_eval_(uintptr_t *ex, mreal *x, mreal *y, mreal *z);\r
 /// Return value of expression for given variables\r
 double MGL_EXPORT mgl_expr_eval_v(HMEX ex, mreal *vars);\r
 /// Return value of expression differentiation over variable dir for given x,y,z variables\r
 double MGL_EXPORT mgl_expr_diff(HMEX ex, char dir, double x, double y,double z);\r
-double MGL_EXPORT mgl_diff_expr_(uintptr_t *ex, const char *dir, mreal *x, mreal *y, mreal *z, int);\r
+double MGL_EXPORT mgl_expr_diff_(uintptr_t *ex, const char *dir, mreal *x, mreal *y, mreal *z, int);\r
 /// Return value of expression differentiation over variable dir for given variables\r
 double MGL_EXPORT mgl_expr_diff_v(HMEX ex, char dir, mreal *vars);\r
 \r
index ad0ee1683a7f92c782f6e559f08fff8b1a32e6c8..c3d94e9d13eef0594844662828807e64a35f88a1 100644 (file)
@@ -293,6 +293,8 @@ public:
        inline void Hankel(const char *dir)     {       mgl_datac_hankel(this,dir);     }\r
        /// Fourier transform\r
        inline void FFT(const char *dir)        {       mgl_datac_fft(this,dir);        }\r
+       /// Calculate one step of diffraction by finite-difference method with parameter q\r
+       inline void Diffraction(const char *how, mreal q)       {       mgl_datac_diffr(this,how,q);    }\r
 \r
        /// Interpolate by cubic spline the data to given point x=[0...nx-1], y=[0...ny-1], z=[0...nz-1]\r
        inline dual Spline(mreal x,mreal y=0,mreal z=0) const\r
index e5557a77a3862a05799885a91a990c645c801aff..b932e4388ec63673f1610f2ef7de3b395d7a9c14 100644 (file)
@@ -44,6 +44,7 @@ void MGL_EXPORT mgl_srnd(long seed);
 double MGL_EXPORT mgl_rnd();\r
 /// Get integer power of x\r
 dual MGL_EXPORT mgl_ipowc(dual x,int n);\r
+dual MGL_EXPORT mgl_ipowc_(dual *x,int *n);\r
 /// Get exp(i*a)\r
 dual MGL_EXPORT mgl_expi(dual a);\r
 \r
@@ -84,9 +85,10 @@ void MGL_EXPORT mgl_datac_set_vector(HADT dat, gsl_vector *v);
 void MGL_EXPORT mgl_datac_set_matrix(HADT dat, gsl_matrix *m);\r
 /// Set value of data element [i,j,k]\r
 void MGL_EXPORT mgl_datac_set_value(HADT dat, dual v, long i, long j, long k);\r
-void MGL_EXPORT mgl_datac_set_value_(uintptr_t *d, mreal *v, int *i, int *j, int *k);\r
+void MGL_EXPORT mgl_datac_set_value_(uintptr_t *d, dual *v, int *i, int *j, int *k);\r
 /// Get value of data element [i,j,k]\r
 dual MGL_EXPORT mgl_datac_get_value(HCDT dat, long i, long j, long k);\r
+dual MGL_EXPORT mgl_datac_get_value_(uintptr_t *d, int *i, int *j, int *k);\r
 /// Allocate memory and scanf the data from the string\r
 void MGL_EXPORT mgl_datac_set_values(HADT dat, const char *val, long nx, long ny, long nz);\r
 void MGL_EXPORT mgl_datac_set_values_(uintptr_t *d, const char *val, int *nx, int *ny, int *nz, int l);\r
@@ -117,7 +119,7 @@ int MGL_EXPORT mgl_datac_read_range(HADT d, const char *templ, double from, doub
 int MGL_EXPORT mgl_datac_read_range_(uintptr_t *d, const char *fname, mreal *from, mreal *to, mreal *step, int *as_slice,int l);\r
 /// Read data from tab-separated text files with auto determining size which filenames are satisfied to template (like "t_*.dat")\r
 int MGL_EXPORT mgl_datac_read_all(HADT dat, const char *templ, int as_slice);\r
-int MGL_EXPORT mgl_data_read_all_(uintptr_t *d, const char *fname, int *as_slice,int l);\r
+int MGL_EXPORT mgl_datac_read_all_(uintptr_t *d, const char *fname, int *as_slice,int l);\r
 /// Save whole data array (for ns=-1) or only ns-th slice to text file\r
 void MGL_EXPORT mgl_datac_save(HCDT dat, const char *fname,long ns);\r
 void MGL_EXPORT mgl_datac_save_(uintptr_t *dat, const char *fname,int *ns,int);\r
@@ -140,7 +142,7 @@ void MGL_EXPORT mgl_datac_set_id(HADT d, const char *id);
 void MGL_EXPORT mgl_datac_set_id_(uintptr_t *dat, const char *id,int l);\r
 /// Equidistantly fill the data to range [x1,x2] in direction dir\r
 void MGL_EXPORT mgl_datac_fill(HADT dat, dual x1,dual x2,char dir);\r
-void MGL_EXPORT mgl_datac_fill_(uintptr_t *dat, mreal *x1,mreal *x2,const char *dir,int);\r
+void MGL_EXPORT mgl_datac_fill_(uintptr_t *dat, dual *x1,dual *x2,const char *dir,int);\r
 /// Modify the data by specified formula assuming x,y,z in range [r1,r2]\r
 void MGL_EXPORT mgl_datac_fill_eq(HMGL gr, HADT dat, const char *eq, HCDT vdat, HCDT wdat,const char *opt);\r
 void MGL_EXPORT mgl_datac_fill_eq_(uintptr_t *gr, uintptr_t *dat, const char *eq, uintptr_t *vdat, uintptr_t *wdat,const char *opt, int, int);\r
@@ -200,7 +202,7 @@ void MGL_EXPORT mgl_datac_mirror(HADT dat, const char *dir);
 void MGL_EXPORT mgl_datac_mirror_(uintptr_t *dat, const char *dir,int);\r
 /// Crop the data\r
 void MGL_EXPORT mgl_datac_crop(HADT dat, long n1, long n2, char dir);\r
-void MGL_EXPORT mgl_data_crop_(uintptr_t *dat, int *n1, int *n2, const char *dir,int);\r
+void MGL_EXPORT mgl_datac_crop_(uintptr_t *dat, int *n1, int *n2, const char *dir,int);\r
 \r
 /// Apply Hankel transform\r
 void MGL_EXPORT mgl_datac_hankel(HADT dat, const char *dir);\r
@@ -210,7 +212,10 @@ void MGL_EXPORT mgl_datac_fft(HADT dat, const char *dir);
 void MGL_EXPORT mgl_datac_fft_(uintptr_t *dat, const char *dir,int);\r
 /// Find correlation between 2 data arrays\r
 HADT MGL_EXPORT mgl_datac_correl(HCDT dat1, HCDT dat2, const char *dir);\r
-uintptr_t MGL_EXPORT mgl_datac_correl_(uintptr_t dat1, uintptr_t dat2, const char *dir,int);\r
+uintptr_t MGL_EXPORT mgl_datac_correl_(uintptr_t *dat1, uintptr_t *dat2, const char *dir,int);\r
+/// Calculate one step of diffraction by finite-difference method with parameter q\r
+void MGL_EXPORT mgl_datac_diffr(HADT dat, const char *how, mreal q);\r
+void MGL_EXPORT mgl_datac_diffr_(uintptr_t *d, const char *how, double q,int l);\r
 \r
 HMDT MGL_EXPORT mgl_datac_real(HCDT dat);\r
 uintptr_t MGL_EXPORT mgl_datac_real_(uintptr_t *dat);\r
@@ -237,10 +242,13 @@ dual MGL_EXPORT mgl_datac_spline_ext_(uintptr_t *dat, mreal *x,mreal *y,mreal *z
 //-----------------------------------------------------------------------------\r
 /// Create HAEX object for expression evaluating\r
 HAEX MGL_EXPORT mgl_create_cexpr(const char *expr);\r
+uintptr_t MGL_EXPORT mgl_create_cexpr_(const char *expr, int);\r
 /// Delete HAEX object\r
 void MGL_EXPORT mgl_delete_cexpr(HAEX ex);\r
+void MGL_EXPORT mgl_delete_cexpr_(uintptr_t *ex);\r
 /// Return value of expression for given x,y,z variables\r
 dual MGL_EXPORT mgl_cexpr_eval(HAEX ex, dual x, dual y,dual z);\r
+dual MGL_EXPORT mgl_cexpr_eval_(uintptr_t *ex, dual *x, dual *y, dual *z);\r
 /// Return value of expression for given variables\r
 dual MGL_EXPORT mgl_cexpr_eval_v(HAEX ex, dual *vars);\r
 \r
index e3b12331df80dc71f3dd1573add8d7cf35ac65fd..3a6d4395a482b48ae0c03482bcceb0feec79409b 100644 (file)
 //-----------------------------------------------------------------------------\r
 #include "mgl2/config.h"\r
 #ifndef SWIG\r
+\r
 #include "mgl2/dllexport.h"\r
+#ifdef MGL_SRC\r
 #if MGL_HAVE_OMP\r
 #include <omp.h>\r
 #endif\r
 #endif\r
 \r
-#define MGL_VER2       2.1     // minor version of MathGL 2.* (like 1.3 for v.2.1.3)\r
+#endif\r
+\r
+#define MGL_VER2       2.2     // minor version of MathGL 2.* (like 1.3 for v.2.1.3)\r
 //-----------------------------------------------------------------------------\r
 #ifdef WIN32 //_MSC_VER needs this before math.h\r
 #define        _USE_MATH_DEFINES\r
@@ -51,7 +55,7 @@
 #endif\r
 #endif\r
 \r
-#if defined(_MSC_VER) || defined(__BORLANDC__)\r
+#if (defined(_MSC_VER) && (_MSC_VER<1600)) || defined(__BORLANDC__)\r
 typedef signed char int8_t;\r
 typedef signed short int16_t;\r
 typedef signed long int32_t;\r
@@ -241,6 +245,8 @@ typedef float _Complex dual;
 #endif\r
 #endif\r
 /// Find length of wchar_t string (bypass standard wcslen bug)\r
+double MGL_EXPORT mgl_hypot(double x, double y);\r
+/// Find length of wchar_t string (bypass standard wcslen bug)\r
 size_t MGL_EXPORT mgl_wcslen(const wchar_t *str);\r
 /// Get RGB values for given color id or fill by -1 if no one found\r
 void MGL_EXPORT mgl_chrrgb(char id, float rgb[3]);\r
@@ -250,8 +256,9 @@ long MGL_EXPORT mgl_have_color(const char *stl);
 const char *mglchr(const char *str, char ch);\r
 /// Find any symbol from chr in string excluding {} and return its position or NULL\r
 const char *mglchrs(const char *str, const char *chr);\r
-/// Set number of thread for plotting and data handling\r
+/// Set number of thread for plotting and data handling (for pthread version only)\r
 void MGL_EXPORT mgl_set_num_thr(int n);\r
+void MGL_EXPORT mgl_set_num_thr_(int *n);\r
 void MGL_EXPORT mgl_test_txt(const char *str, ...);\r
 void MGL_EXPORT mgl_set_test_mode(int enable);\r
 /// Remove spaces at begining and at the end of the string\r
index 1bd8227ad6498b6b5b4dfc5f7b63e1fdc50958ae..6e360d500c7b702f02ad80e5b10997b891c378ac 100644 (file)
@@ -27,6 +27,25 @@ extern "C" {
 #endif\r
 void _mgl_key_up(unsigned char ch,int ,int );\r
 HMGL MGL_EXPORT mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p));\r
+\r
+\r
+/// Switch on/off transparency (do not overwrite user settings)\r
+void MGL_EXPORT mgl_glut_toggle_alpha(HMGL gr);\r
+/// Switch on/off lighting (do not overwrite user settings)\r
+void MGL_EXPORT mgl_glut_toggle_light(HMGL gr);\r
+/// Switch off all zooming and rotation\r
+void MGL_EXPORT mgl_glut_toggle_no(HMGL gr);\r
+/// Update picture by calling user drawing function\r
+void MGL_EXPORT mgl_glut_update(HMGL gr);\r
+/// Reload user data and update picture\r
+void MGL_EXPORT mgl_glut_reload(HMGL gr);\r
+/// Show next frame (if one)\r
+void MGL_EXPORT mgl_glut_next_frame(HMGL gr);\r
+/// Show previous frame (if one)\r
+void MGL_EXPORT mgl_glut_prev_frame(HMGL gr);\r
+/// Run slideshow (animation) of frames\r
+void MGL_EXPORT mgl_glut_animation(HMGL gr);\r
+\r
 #ifdef __cplusplus\r
 }\r
 //-----------------------------------------------------------------------------\r
@@ -39,6 +58,23 @@ public:
        {       gr = mgl_create_graph_glut(draw?mgl_draw_graph:0,title,(void*)draw,0);  }\r
        mglGLUT(mglDraw *draw=0, const char *title="MathGL") : mglGraph(-1)\r
        {       gr = mgl_create_graph_glut(draw?mgl_draw_class:0,title,draw,mgl_reload_class);  }\r
+\r
+       inline void ToggleAlpha()       ///< Switch on/off transparency (do not overwrite user settings)\r
+       {       mgl_glut_toggle_alpha(gr);      }\r
+       inline void ToggleLight()       ///< Switch on/off lighting (do not overwrite user settings)\r
+       {       mgl_glut_toggle_light(gr);      }\r
+       inline void ToggleNo()          ///< Switch off all zooming and rotation\r
+       {       mgl_glut_toggle_no(gr); }\r
+       inline void Update()            ///< Update picture by calling user drawing function\r
+       {       mgl_glut_update(gr);    }\r
+       inline void ReLoad()            ///< Reload user data and update picture\r
+       {       mgl_glut_reload(gr);    }\r
+       inline void NextFrame()         ///< Show next frame (if one)\r
+       {       mgl_glut_next_frame(gr);        }\r
+       inline void PrevFrame()         ///< Show previous frame (if one)\r
+       {       mgl_glut_prev_frame(gr);        }\r
+       inline void Animation()         ///< Run slideshow (animation) of frames\r
+       {       mgl_glut_animation(gr); }\r
 };\r
 //-----------------------------------------------------------------------------\r
 #endif\r
index 672e6fe55bea6671ce36a56dfe811d3a98404119..8266c966e60cd7ce90268cf513e8b6d06e77b992 100644 (file)
@@ -626,6 +626,11 @@ public:
        {       mgl_region(gr, &y1, &y2, pen, opt);     }\r
        inline void Region(const mglDataA &x, const mglDataA &y1, const mglDataA &y2, const char *pen="", const char *opt="")\r
        {       mgl_region_xy(gr, &x, &y1, &y2, pen, opt);      }\r
+       /// Fill area (draw ribbon) between curves {x1,y1,z1} and {x2,y2,z2}\r
+       inline void Region(const mglDataA &x1, const mglDataA &y1, const mglDataA &z1, const mglDataA &x2, const mglDataA &y2, const mglDataA &z2, const char *pen="", const char *opt="")\r
+       {       mgl_region_3d(gr, &x1, &y1, &z1, &x2, &y2, &z2, pen, opt);      }\r
+       inline void Region(const mglDataA &x1, const mglDataA &y1, const mglDataA &x2, const mglDataA &y2, const char *pen="", const char *opt="")\r
+       {       mgl_region_3d(gr, &x1, &y1, NULL, &x2, &y2, NULL, pen, opt);    }\r
        /// Draw vertical lines from points {x,y,z} to axis plane\r
        inline void Stem(const mglDataA &x, const mglDataA &y, const mglDataA &z, const char *pen="", const char *opt="")\r
        {       mgl_stem_xyz(gr, &x, &y, &z, pen, opt); }\r
index b2d59ecc1a1ac457962f5ed5313a1ee09bf0d9d5..2494ae2fc3847dd30bcf8d261bdd37947671d054 100644 (file)
@@ -83,6 +83,9 @@ void MGL_EXPORT mgl_area_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const
 void MGL_EXPORT mgl_area(HMGL graph, HCDT y, const char *pen, const char *opt);\r
 void MGL_EXPORT mgl_area_(uintptr_t *graph, uintptr_t *y, const char *pen, const char *opt,int,int);\r
 \r
+/// Fill area (draw ribbon) between curves {x1,y1,z1} and {x2,y2,z2}\r
+void MGL_EXPORT mgl_region_3d(HMGL graph, HCDT x1, HCDT y1, HCDT z1, HCDT x2, HCDT y2, HCDT z2, const char *pen, const char *opt);\r
+void MGL_EXPORT mgl_region_3d_(uintptr_t *graph, uintptr_t *x1, uintptr_t *y1, uintptr_t *z1, uintptr_t *x2, uintptr_t *y2, uintptr_t *z2, const char *pen, const char *opt,int,int);\r
 /// Fill area between curves {x,y1} and {x,y2}\r
 void MGL_EXPORT mgl_region_xy(HMGL graph, HCDT x, HCDT y1, HCDT y2, const char *pen, const char *opt);\r
 void MGL_EXPORT mgl_region_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y1, uintptr_t *y2, const char *pen, const char *opt,int, int);\r
index 1cc88cb5c3341799a063b9b2c65fe4ffd6f6aa4f..404f1cec146f5996b4401c4da948e218185ffcf6 100644 (file)
@@ -77,7 +77,7 @@ void MGL_EXPORT mgl_cones_xyz(HMGL graph, HCDT x, HCDT y, HCDT z, const char *pe
 void MGL_EXPORT mgl_cones_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen, const char *opt,int,int);\r
 /// Draw cones from points {x,z} to axis plane\r
 void MGL_EXPORT mgl_cones_xz(HMGL graph, HCDT x, HCDT z, const char *pen, const char *opt);\r
-void MGL_EXPORT mgl_coners_xz_(uintptr_t *graph, uintptr_t *x, uintptr_t *z, const char *pen, const char *opt,int,int);\r
+void MGL_EXPORT mgl_cones_xz_(uintptr_t *graph, uintptr_t *x, uintptr_t *z, const char *pen, const char *opt,int,int);\r
 /// Draw cones from points {x,z} with x in x-axis range to axis plane\r
 void MGL_EXPORT mgl_cones(HMGL graph, HCDT z,  const char *pen, const char *opt);\r
 void MGL_EXPORT mgl_cones_(uintptr_t *graph, uintptr_t *z,     const char *pen, const char *opt,int,int);\r
index 85eaa8c77278c876ea323228b627437a7d8abf3f..6fa165c5e1aab717155e3b678d99648d923dd952 100644 (file)
@@ -72,7 +72,7 @@ inline mglPoint operator|(const mglPoint &a, const mglPoint &b)
 inline mglPoint operator^(const mglPoint &a, const mglPoint &b)
 {      return mglPoint(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x);     }
 inline mglPoint operator!(const mglPoint &a)
-{      mreal f=hypot(a.x,a.y); return f==0?mglPoint(0.,1.,0.):mglPoint(-a.y/f, a.x/f, 0);      }
+{      mreal f=mgl_hypot(a.x,a.y);     return f==0?mglPoint(0.,1.,0.):mglPoint(-a.y/f, a.x/f, 0);      }
 inline bool operator==(const mglPoint &a, const mglPoint &b)
 {      return !memcmp(&a, &b, sizeof(mglPoint));       }
 inline bool operator!=(const mglPoint &a, const mglPoint &b)
index 00d8f0a581587913081991224642bebf7ce8764f..c30ccb46f95ce12b9d6cc5c08d6b5bba4d820aac 100644 (file)
@@ -28,8 +28,6 @@
 #include "mgl2/addon.h"
 #include "mgl2/data.h"
 //-----------------------------------------------------------------------------
-dual MGL_EXPORT mgl_expi(dual a)       {       return exp(dual(0,1)*a);        }
-//-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_strcls(char *str)
 {
        size_t len = strlen(str),i,n;
@@ -166,17 +164,17 @@ MGL_EXPORT FILE *mgl_next_data(const char *fname,int p)
        return fp;
 }
 //-----------------------------------------------------------------------------
-int MGL_EXPORT mgl_difr_grid(dual *a,int n,dual q,int Border,dual *b,dual *d,int kk)
+void MGL_EXPORT mgl_difr_grid(dual *a,int n,int step,dual q,int Border,dual *tmp,int kk)
 {
-       //      if(n<=0 || q>=0.5)      return false;
-       dual adt = dual(0.,1.)*q;
-
-       memcpy(b,a,n*sizeof(dual));
+       const dual adt = dual(0.,1.)*q;
+       dual *b = tmp, *d = tmp+n;
+       if(step==1)     memcpy(b,a,n*sizeof(dual));
+       else    for(long i=0;i<n;i++)   b[i] = a[i*step];
        for(long k=kk;k>0;k--)  // 3 iterations
        {
-#pragma omp parallel for
+//#pragma omp parallel for
                for(long i=1;i<n-1;i++)
-                       d[i] = a[i] + adt*(b[i-1]+b[i+1]-mreal(2)*b[i])/mreal(k);
+                       d[i] = a[i*step] + adt*(b[i-1]+b[i+1]-mreal(2)*b[i])/mreal(k);
                memcpy(b,d,n*sizeof(dual));
                switch(Border)
                {
@@ -193,36 +191,39 @@ int MGL_EXPORT mgl_difr_grid(dual *a,int n,dual q,int Border,dual *b,dual *d,int
                                b[n-1] = b[n-4]+mreal(3)*(b[n-2]-b[n-3]);
                                break;
                        case -1:                // exponent at border
+                       case 4:
                                b[0] = norm(b[2])<norm(b[1]) ? b[1] : b[1]*b[1]/b[2];
                                b[n-1] = norm(b[n-3])<norm(b[n-2]) ? b[n-2] : b[n-2]*b[n-2]/b[n-3];
                                break;
                        case -2:                // gaussian at border
+                       case 5:
                                b[0] = norm(b[2])<norm(b[1]) ? b[3] : pow(b[1]/b[2],3)*b[3];
                                b[n-1] = norm(b[n-3])<norm(b[n-2]) ? b[n-4] : pow(b[n-2]/b[n-3],3)*b[n-4];
                                break;
                }
        }
-       memcpy(a,b,n*sizeof(dual));
-       return true;
+       if(step==1)     memcpy(a,b,n*sizeof(dual));
+       else    for(long i=0;i<n;i++)   a[i*step] = b[i];
 }
 //-----------------------------------------------------------------------------
-int MGL_EXPORT mgl_difr_axial(dual *a, int n, dual q, int Border,dual *b, dual *d, int kk, double di)
+void MGL_EXPORT mgl_difr_axial(dual *a,int n,int step,dual q,int Border,dual *tmp,int kk, double di)
 {
        int ii = di<0 ? -int(floor(di)) : 0;
-       dual adt = dual(0.,1.)*q;
        register mreal ff= di==floor(di) ? 4. : 2.;
-
-       memcpy(b,a,n*sizeof(dual));
+       const dual adt = dual(0.,1.)*q;
+       dual *b = tmp, *d = tmp+n;
+       if(step==1)     memcpy(b,a,n*sizeof(dual));
+       else    for(long i=0;i<n;i++)   b[i] = a[i*step];
        for(long k=kk;k>0;k--)  // kk iterations
        {
                d[ii] = a[ii] + adt*(b[ii+1]-b[ii])*(ff/k);
-#pragma omp parallel for
+//#pragma omp parallel for
                for(long i=ii+1;i<n-1;i++)
                {
                        register mreal dd = i+di;
                        dd = 1./(sqrt(dd*dd+1.)+dd);    // corrections for "axiality"
                        register mreal gg = 1+dd*dd;
-                       d[i] = a[i] + adt*( b[i-1]*((gg-dd)/k) -
+                       d[i] = a[i*step] + adt*( b[i-1]*((gg-dd)/k) -
                        b[i]*(2*gg/k) + b[i+1]*((gg+dd)/k) );
                }
                memcpy(b,d,n*sizeof(dual));
@@ -246,8 +247,8 @@ int MGL_EXPORT mgl_difr_axial(dual *a, int n, dual q, int Border,dual *b, dual *
                                break;
                }
        }
-       memcpy(a,b,n*sizeof(dual));
-       return true;
+       if(step==1)     memcpy(a,b,n*sizeof(dual));
+       else    for(long i=0;i<n;i++)   a[i*step] = b[i];
 }
 //-----------------------------------------------------------------------------
 double MGL_EXPORT mgl_gauss_rnd()
index 6ce08bb9cd785588c81e7341d79a573fa944118f..df7c74b593439491b1a5f8e58654033fd59cba99 100644 (file)
@@ -223,7 +223,7 @@ long mglBase::AddGlyph(int s, long j)
        // if no one then let add it\r
        long k;\r
 #pragma omp critical(glf)\r
-       {MGL_PUSH(Glf,g,mutexGlf);      k=Glf.size()-1;}        return k;\r
+       {k=Glf.size();  MGL_PUSH(Glf,g,mutexGlf);}      return k;\r
 }\r
 //-----------------------------------------------------------------------------\r
 //             Add points to the buffer\r
@@ -236,7 +236,7 @@ long mglBase::AddPnt(const mglMatrix *mat, mglPoint p, mreal c, mglPoint n, mrea
        // scl&4 -- ???\r
        // scl&8 -- bypass palette for enabling alpha\r
        if(mgl_isnan(c) || mgl_isnan(a))        return -1;\r
-       bool norefr = mgl_isnan(n.x) && mgl_isnan(n.y);\r
+       bool norefr = mgl_isnan(n.x) && mgl_isnan(n.y) && !mgl_isnan(n.z);\r
        if(scl>0)       ScalePoint(mat,p,n,!(scl&2));\r
        if(mgl_isnan(p.x))      return -1;\r
        a = (a>=0 && a<=1) ? a : AlphaDef;\r
@@ -274,7 +274,7 @@ long mglBase::AddPnt(const mglMatrix *mat, mglPoint p, mreal c, mglPoint n, mrea
        if(mat->norot)  q.sub=-1;       // NOTE: temporary -- later should be mglInPlot here\r
        long k;\r
 #pragma omp critical(pnt)\r
-       {MGL_PUSH(Pnt,q,mutexPnt);      k=Pnt.size()-1;}        return k;\r
+       {k=Pnt.size();  MGL_PUSH(Pnt,q,mutexPnt);}      return k;\r
 }\r
 //-----------------------------------------------------------------------------\r
 long mglBase::CopyNtoC(long from, mreal c)\r
@@ -284,7 +284,7 @@ long mglBase::CopyNtoC(long from, mreal c)
        if(mgl_isnum(c))        {       p.c=c;  p.t=0;  Txt[long(c)].GetC(c,0,p);       }\r
        long k;\r
 #pragma omp critical(pnt)\r
-       {MGL_PUSH(Pnt,p,mutexPnt);      k=Pnt.size()-1;}        return k;\r
+       {k=Pnt.size();  MGL_PUSH(Pnt,p,mutexPnt);}      return k;\r
 }\r
 //-----------------------------------------------------------------------------\r
 long mglBase::CopyProj(long from, mglPoint p, mglPoint n)\r
@@ -295,7 +295,7 @@ long mglBase::CopyProj(long from, mglPoint p, mglPoint n)
        q.u = n.x;              q.v = n.y;              q.w = n.z;\r
        long k;\r
 #pragma omp critical(pnt)\r
-       {MGL_PUSH(Pnt,q,mutexPnt);      k=Pnt.size()-1;}        return k;\r
+       {k=Pnt.size();  MGL_PUSH(Pnt,q,mutexPnt);}      return k;\r
 }\r
 //-----------------------------------------------------------------------------\r
 void mglBase::Reserve(long n)\r
@@ -303,10 +303,12 @@ void mglBase::Reserve(long n)
        if(TernAxis&4)  n*=4;\r
 #pragma omp critical(pnt)\r
        Pnt.reserve(n);\r
+#pragma omp critical(prm)\r
+       Prm.reserve(n);\r
 }\r
 //-----------------------------------------------------------------------------\r
 //             Boundaries and scaling\r
-//---------------------------------------------------------------------------\r
+//-----------------------------------------------------------------------------\r
 bool mglBase::RecalcCRange()\r
 {\r
        bool wrong=false;\r
@@ -861,7 +863,7 @@ void mglTexture::Set(const char *s, int smooth, mreal alpha)
        // fill texture itself\r
        mreal v=sm?(n-1)/255.:n/256.;\r
        if(!sm)\r
-#pragma omp parallel for\r
+//#pragma omp parallel for     // remove parallel here due to possible race conditions for v<1\r
                for(long i=0;i<256;i++)\r
                {\r
                        register long j = 2*long(v*i);  //u-=j;\r
@@ -920,7 +922,7 @@ long mglBase::AddTexture(const char *cols, int smooth)
        // create new one\r
        long k;\r
 #pragma omp critical(txt)\r
-       {MGL_PUSH(Txt,t,mutexTxt);      k=Txt.size()-1;}        return k;\r
+       {k=Txt.size();  MGL_PUSH(Txt,t,mutexTxt);}      return k;\r
 }\r
 //-----------------------------------------------------------------------------\r
 mreal mglBase::AddTexture(mglColor c)\r
@@ -936,7 +938,7 @@ mreal mglBase::AddTexture(mglColor c)
        for(long i=0;i<MGL_TEXTURE_COLOURS;i++) t.col[i]=c;\r
        long k;\r
 #pragma omp critical(txt)\r
-       {MGL_PUSH(Txt,t,mutexTxt);      k=Txt.size()-1;}        return k;\r
+       {k=Txt.size();  MGL_PUSH(Txt,t,mutexTxt);}      return k;\r
 }\r
 //-----------------------------------------------------------------------------\r
 //             Coloring and palette\r
index 9d591e37eebaac2a172d0fce549d7cede2fe01ab..a453de251958d9c4872c210516d98e89b8d4540f 100644 (file)
@@ -182,7 +182,7 @@ void MGL_EXPORT mgl_set_rotated_text_(uintptr_t *gr, int *rotated)  {       _GR_->SetRo
 void MGL_EXPORT mgl_set_mark_size_(uintptr_t *gr, mreal *size)         {       _GR_->SetMarkSize(*size);       }\r
 void MGL_EXPORT mgl_set_arrow_size_(uintptr_t *gr, mreal *size)        {       _GR_->SetArrowSize(*size);      }\r
 void MGL_EXPORT mgl_set_font_size_(uintptr_t *gr, mreal *size)         {       _GR_->SetFontSize(*size);       }\r
-void MGL_EXPORT mgl_set_font_def_(uintptr_t *gr, char *name, int l)\r
+void MGL_EXPORT mgl_set_font_def_(uintptr_t *gr, const char *name, int l)\r
 {      char *s=new char[l+1];          memcpy(s,name,l);       s[l]=0;\r
        _GR_->SetFontDef(s);    delete []s;     }\r
 void MGL_EXPORT mgl_load_font_(uintptr_t *gr, char *name, char *path, int l,int n)\r
index b58e2b7a936fbd35b5f1c86b652d4cec6349a2bf..bbe7fb2c5bd9c8e67d20cf91ffd79b39905a0467 100644 (file)
@@ -436,7 +436,7 @@ pthread_mutex_lock(&mutexPtx);
                        mglPrim a(6);   a.n1 = p;\r
                        a.n2 = int(255*mc.r) + 256*(int(255*mc.g) + 256*int(255*mc.b));\r
                        mglText txt(text,font);\r
-                       Ptx.push_back(txt);     a.n3 = Ptx.size()-1;\r
+                       a.n3 = Ptx.size();      Ptx.push_back(txt);\r
                        a.s = size;     a.w = shift;    a.p=ftet;\r
                        add_prim(a);\r
                }\r
@@ -457,19 +457,19 @@ pthread_mutex_lock(&mutexPtx);
                        pt = q; pp = mglPoint(d,-h*0.4);                PostScale(&Bt,pp);\r
                        pt.x=pt.xx=pp.x;        pt.y=pt.yy=pp.y;\r
 #pragma omp critical(pnt)\r
-                       {MGL_PUSH(Pnt,pt,mutexPnt);     k1=Pnt.size()-1;}\r
+                       {k1=Pnt.size(); MGL_PUSH(Pnt,pt,mutexPnt);}\r
                        pt = q; pp = mglPoint(w+d,-h*0.4);              PostScale(&Bt,pp);\r
                        pt.x=pt.xx=pp.x;        pt.y=pt.yy=pp.y;\r
 #pragma omp critical(pnt)\r
-                       {MGL_PUSH(Pnt,pt,mutexPnt);     k2=Pnt.size()-1;}\r
+                       {k2=Pnt.size(); MGL_PUSH(Pnt,pt,mutexPnt);}\r
                        pt = q; pp = mglPoint(d,h*1.2);                 PostScale(&Bt,pp);\r
                        pt.x=pt.xx=pp.x;        pt.y=pt.yy=pp.y;\r
 #pragma omp critical(pnt)\r
-                       {MGL_PUSH(Pnt,pt,mutexPnt);     k3=Pnt.size()-1;}\r
+                       {k3=Pnt.size(); MGL_PUSH(Pnt,pt,mutexPnt);}\r
                        pt = q; pp = mglPoint(w+d,h*1.2);               PostScale(&Bt,pp);\r
                        pt.x=pt.xx=pp.x;        pt.y=pt.yy=pp.y;\r
 #pragma omp critical(pnt)\r
-                       {MGL_PUSH(Pnt,pt,mutexPnt);     k4=Pnt.size()-1;}\r
+                       {k4=Pnt.size(); MGL_PUSH(Pnt,pt,mutexPnt);}\r
                        line_plot(k1,k2);       line_plot(k1,k3);\r
                        line_plot(k4,k2);       line_plot(k4,k3);\r
                        mreal bl = AddTexture('w');\r
@@ -786,7 +786,7 @@ void mglCanvas::Legend(const std::vector<mglText> &leg, mreal x, mreal y, const
        x += B.x-iw/2+dx;       y += B.y-ih/2+dy;\r
        // draw it\r
        long k1=0,k2=0,k3=0,k4=0;\r
-       mglPoint p,q=mglPoint(NAN);\r
+       mglPoint p,q=mglPoint(NAN,NAN,NAN);\r
 \r
        for(i=0;ff[i] && ff[i]!=':';i++)        if(strchr(MGL_COLORS,ff[i]))\r
        {\r
@@ -937,7 +937,7 @@ void mglCanvas::Title(const wchar_t *title,const char *stl,mreal size)
        char col = mglGetStyle(stl,0,&align);   align = align&3;\r
        if(col==0)      col = 'k';\r
        mreal y=inY+inH-h;\r
-       mglPoint p(inX + inW*align/2.,y,3*Depth),q(NAN);\r
+       mglPoint p(inX + inW*align/2.,y,3*Depth),q(NAN,NAN,NAN);\r
        mglMatrix M=B;  M.norot=true;\r
        if(title)       text_plot(AddPnt(&M,p,-1,q,-1,0),title,stl,size);\r
        if(box) //      draw boungind box\r
index 4255a3121a590b07a7e1caffd0f12d5c0dd7d305..7cc3a29b8cc74b93e4f54e4ebc2e6d67b99c9f57 100644 (file)
@@ -149,6 +149,8 @@ void MGL_EXPORT mgl_gridplot(HMGL gr, int nx, int ny, int i, double dd)
        mglCanvas *g = dynamic_cast<mglCanvas *>(gr);\r
        if(g)   g->InPlot(ix*wx,wx*(ix+1-dd),1-wy*(iy+1-dd),1-iy*wy,true);\r
 }\r
+void MGL_EXPORT mgl_gridplot_(uintptr_t *gr, int *nx, int *ny, int *m, mreal *d)\r
+{      mgl_gridplot(_GR_,*nx,*ny,*m,*d);       }\r
 //-----------------------------------------------------------------------------\r
 void MGL_EXPORT mgl_stickplot(HMGL gr, int num, int i, double tet, double phi)\r
 {      mglCanvas *g = dynamic_cast<mglCanvas *>(gr);   if(g)   g->StickPlot(num, i, tet, phi); }\r
@@ -371,7 +373,7 @@ void MGL_EXPORT mgl_axis_grid_(uintptr_t *gr, const char *dir,const char *pen, c
        char *p=new char[n+1];  memcpy(p,pen,n);        p[n]=0;\r
        char *o=new char[m+1];  memcpy(o,opt,m);        o[m]=0;\r
        _GR_->Grid(s,p,o);      delete []s;     delete []p;     delete []o;     }\r
-       void MGL_EXPORT mgl_label_(uintptr_t *gr, const char *dir, const char *text, mreal *pos, const char *opt,int,int l,int m)\r
+void MGL_EXPORT mgl_label_(uintptr_t *gr, const char *dir, const char *text, mreal *pos, const char *opt,int,int l,int m)\r
 {      char *s=new char[l+1];  memcpy(s,text,l);       s[l]=0;\r
        char *o=new char[m+1];  memcpy(o,opt,m);        o[m]=0;\r
        _GR_->Label(*dir, s, *pos, o);  delete []s;     delete []o;     }\r
index 3049be1db1dd82b1081addf630f80e0546f9398b..bc8631942f8f067a9b83d5d292fbaaa323296b96 100644 (file)
@@ -85,6 +85,8 @@ void MGL_EXPORT mglStartThreadV(void *(*func)(void *), long n, dual *a, const vo
        }\r
 }\r
 //-----------------------------------------------------------------------------\r
+dual MGL_EXPORT mgl_expi(dual a)       {       return exp(dual(0,1)*a);        }\r
+//-----------------------------------------------------------------------------\r
 MGL_NO_EXPORT void *mgl_csmth_x(void *par)\r
 {\r
        mglThreadC *t=(mglThreadC *)par;\r
@@ -1064,3 +1066,60 @@ void MGL_EXPORT mgl_datac_put_val_(uintptr_t *d, dual *val, int *i, int *j, int
 void MGL_EXPORT mgl_datac_put_dat_(uintptr_t *d, uintptr_t *val, int *i, int *j, int *k)\r
 {      mgl_datac_put_dat(_DC_,_DA_(val), *i,*j,*k);    }\r
 //-----------------------------------------------------------------------------\r
+void MGL_EXPORT mgl_difr_grid(dual *a,int n,int step,dual q,int Border,dual *tmp,int kk);\r
+void MGL_EXPORT mgl_difr_axial(dual *a,int n,int step,dual q,int Border,dual *tmp,int kk, double di);\r
+//-----------------------------------------------------------------------------\r
+MGL_NO_EXPORT void *mgl_difr(void *par)\r
+{\r
+       mglThreadC *t=(mglThreadC *)par;\r
+       long n=t->p[0], st=t->p[1], bord=t->p[3], nn=t->n;\r
+       dual *b=t->a, q = *(t->b);\r
+#if !MGL_HAVE_PTHREAD\r
+#pragma omp parallel\r
+#endif\r
+       {\r
+               dual *tmp = new dual[2*n];\r
+               if(t->p[2])\r
+#if !MGL_HAVE_PTHREAD\r
+#pragma omp for\r
+#endif\r
+                       for(long i=t->id;i<nn;i+=mglNumThr)\r
+                               mgl_difr_axial(b + ((i%st)+n*(i/st)), n,st, q, bord,tmp,3,0);\r
+               else\r
+#if !MGL_HAVE_PTHREAD\r
+#pragma omp for\r
+#endif\r
+                       for(long i=t->id;i<nn;i+=mglNumThr)\r
+                               mgl_difr_grid(b + ((i%st)+n*(i/st)), n,st, q, bord,tmp,3);\r
+               delete []tmp;\r
+       }\r
+       return 0;\r
+}\r
+void MGL_EXPORT mgl_datac_diffr(HADT d, const char *how, mreal q)\r
+{\r
+       if(!how || *how==0)     return;\r
+       long nx=d->nx,ny=d->ny,nz=d->nz,nn=nx*ny*nz,ll=strlen(how);\r
+       long p[4]={0,0,(mglchr(how,'a')||mglchr(how,'r'))?1:0,0};\r
+       dual qq=q;\r
+       for(long i=0;i<ll;i++)  if(how[i]>='0' && how[i]<='9')  p[3] = how[i]-'0';\r
+       if(mglchr(how,'z') && nz>1)\r
+       {\r
+               p[0]=nz;        p[1]=nx*ny;\r
+               mglStartThreadC(mgl_difr,0,nx*ny,0,&qq,0,p);\r
+       }\r
+       if(mglchr(how,'y') && ny>1)\r
+       {\r
+               p[0]=ny;        p[1]=nx;\r
+               mglStartThreadC(mgl_difr,0,nx*nz,0,&qq,0,p);\r
+       }\r
+       if((mglchr(how,'x')||mglchr(how,'r')) && nx>1)\r
+       {\r
+               p[0]=nx;        p[1]=1;\r
+               mglStartThreadC(mgl_difr,0,ny*nz,0,&qq,0,p);\r
+       }\r
+}\r
+//-----------------------------------------------------------------------------\r
+void MGL_EXPORT mgl_datac_diffr_(uintptr_t *d, const char *how, double q,int l)\r
+{      char *s=new char[l+1];  memcpy(s,how,l);        s[l]=0;\r
+       mgl_datac_diffr(_DC_,s,q);      delete []s;     }\r
+//-----------------------------------------------------------------------------\r
index 0922d2f873ef65d7bb542d62ba316c89d8341ba1..6591c36aaee2f26fdb37deaed51fe90caaf1bd58 100644 (file)
@@ -56,6 +56,7 @@ void mglFromStr(HADT d,char *buf,long NX,long NY,long NZ)     // TODO: add multithre
        mgl_datac_create(d, NX,NY,NZ);\r
        long nb = strlen(buf);\r
        register long i=0, j=0;\r
+       setlocale(LC_NUMERIC, "C");\r
        while(j<nb)\r
        {\r
                while(buf[j]<=' ' && j<nb)      j++;\r
@@ -86,6 +87,7 @@ void mglFromStr(HADT d,char *buf,long NX,long NY,long NZ)     // TODO: add multithre
                d->a[i] = dual(re,im);\r
                i++;    if(i>=NX*NY*NZ) break;\r
        }\r
+       setlocale(LC_NUMERIC, "");\r
 }\r
 //-----------------------------------------------------------------------------\r
 void MGL_EXPORT mgl_datac_set(HADT d, HCDT a)\r
@@ -188,10 +190,11 @@ void MGL_EXPORT mgl_datac_save(HCDT d, const char *fname,long ns)
 {\r
        const mglDataC *dd = dynamic_cast<const mglDataC*>(d);\r
        if(!dd) {       mgl_data_save(d,fname,ns);      return; }\r
-       FILE *fp;\r
-       fp = fopen(fname,"w");\r
+       FILE *fp = fopen(fname,"w");\r
+       if(!fp) return;\r
        register long i,j,k;\r
        long nx=dd->nx, ny=dd->ny, nz=dd->nz;\r
+       setlocale(LC_NUMERIC, "C");\r
        if(ns<0 || (ns>=nz && nz>1))    for(k=0;k<nz;k++)\r
        {       // save whole data\r
                for(i=0;i<ny;i++)\r
@@ -211,6 +214,7 @@ void MGL_EXPORT mgl_datac_save(HCDT d, const char *fname,long ns)
                else if(ns<ny)  for(j=0;j<nx;j++)\r
                        fprintf(fp,"%g+i%g\t", real(dd->a[j+nx*ns]), imag(dd->a[j+nx*ns]));\r
        }\r
+       setlocale(LC_NUMERIC, "");\r
        fclose(fp);\r
 }\r
 void MGL_EXPORT mgl_datac_save_(uintptr_t *d, const char *fname,int *ns,int l)\r
@@ -677,14 +681,13 @@ int MGL_EXPORT mgl_datac_read_all(HADT dat, const char *templ, int as_slice)
        size_t i;\r
        dual *b;\r
        long kx,ky,kz;\r
-       char *fname = new char[256];\r
        glob (templ, GLOB_TILDE, NULL, &res);\r
 \r
        //read first file\r
        for(i=0;i<res.gl_pathc;i++)\r
                if(mgl_datac_read(&d,res.gl_pathv[i]))  break;\r
 \r
-       if(i>=res.gl_pathc)     {       delete []fname; return false;   }\r
+       if(i>=res.gl_pathc)     {       globfree (&res);        return false;   }\r
        kx = d.nx;      ky = d.ny;      kz = d.nz;\r
        b = (dual *)malloc(kx*ky*kz*sizeof(dual));\r
        memcpy(b,d.a,kx*ky*kz*sizeof(dual));\r
@@ -693,12 +696,11 @@ int MGL_EXPORT mgl_datac_read_all(HADT dat, const char *templ, int as_slice)
        {\r
                if(mgl_datac_read(&d,res.gl_pathv[i]))\r
                        if(!mgl_add_file(kx,ky,kz,b,&d,as_slice))\r
-                       {       delete []fname; free(b);        return false;   }\r
+                       {       globfree (&res);        free(b);        return false;   }\r
        }\r
        dat->Set(b,kx,ky,kz);\r
 \r
-       globfree (&res);\r
-       delete []fname; free(b);\r
+       globfree (&res);        free(b);\r
        return true;\r
 #else\r
        return false;\r
index f960ee3f2133cd848a3546e53f19afd3e2a1b7e3..3481a07821a0e7e0c1f9f8ce939f789d2be29ab3 100644 (file)
@@ -52,6 +52,7 @@ void MGL_EXPORT mgl_set_num_thr(int n)
 #else\r
 void MGL_EXPORT mgl_set_num_thr(int)   {       mglNumThr = 1;  }\r
 #endif\r
+void MGL_EXPORT mgl_set_num_thr_(int *n)       {       mgl_set_num_thr(*n);    }\r
 //-----------------------------------------------------------------------------\r
 void MGL_EXPORT mglStartThread(void *(*func)(void *), void (*post)(mglThreadD *,mreal *), long n,\r
                                        mreal *a, const mreal *b, const mreal *c, const long *p,\r
@@ -1408,7 +1409,7 @@ void MGL_EXPORT mgl_data_insert(HMDT d, char dir, long at, long num)
                if(at<nz)       memcpy(b.a+nx*ny*(at+num), d->a+nx*ny*at,(nz-at)*nx*ny*sizeof(mreal));\r
 #pragma omp parallel for\r
                for(long i=0;i<num;i++) memcpy(b.a+nx*ny*(at+i),d->a+nx*ny*at,nx*ny*sizeof(mreal));\r
-               d->Set(b);      nz+=num;\r
+               d->Set(b);\r
        }\r
 }\r
 //-----------------------------------------------------------------------------\r
@@ -1447,7 +1448,7 @@ void MGL_EXPORT mgl_data_delete(HMDT d, char dir, long at, long num)
                b.Create(nx,ny,nz-num);\r
                if(at>0)        memcpy(b.a, d->a,at*nx*ny*sizeof(mreal));\r
                memcpy(b.a+nx*ny*at, d->a+nx*ny*(at+num),(nz-at-num)*nx*ny*sizeof(mreal));\r
-               d->Set(b);      nz-=num;\r
+               d->Set(b);\r
        }\r
 }\r
 //-----------------------------------------------------------------------------\r
index 49805a4226e0577bf2c497bad0c5ec48214e45d9..215c924149dbc3ed97abf8ec6c5f762f30317caa 100644 (file)
@@ -63,6 +63,7 @@ void mglFromStr(HMDT d,char *buf,long NX,long NY,long NZ)     // TODO: add multithre
        mgl_data_create(d, NX,NY,NZ);\r
        long nb = strlen(buf);\r
        register long i=0, j=0;\r
+       setlocale(LC_NUMERIC, "C");\r
        while(j<nb)\r
        {\r
                while(buf[j]<=' ' && j<nb)      j++;\r
@@ -87,6 +88,7 @@ void mglFromStr(HMDT d,char *buf,long NX,long NY,long NZ)     // TODO: add multithre
                d->a[i] = strstr(s,"NAN")?NAN:atof(s);\r
                i++;    if(i>=NX*NY*NZ) break;\r
        }\r
+       setlocale(LC_NUMERIC, "");\r
 }\r
 //-----------------------------------------------------------------------------\r
 void MGL_EXPORT mgl_data_set(HMDT d, HCDT a)\r
@@ -253,10 +255,11 @@ void MGL_EXPORT mgl_data_set_id_(uintptr_t *d, const char *eq,int l)
 //-----------------------------------------------------------------------------\r
 void MGL_EXPORT mgl_data_save(HCDT d, const char *fname,long ns)\r
 {\r
-       FILE *fp;\r
-       fp = fopen(fname,"w");\r
+       FILE *fp = fopen(fname,"w");\r
+       if(!fp) return;\r
        register long i,j,k;\r
        long nx=d->GetNx(), ny=d->GetNy(), nz=d->GetNz();\r
+       setlocale(LC_NUMERIC, "C");\r
        if(ns<0 || (ns>=nz && nz>1))    for(k=0;k<nz;k++)\r
        {       // save whole data\r
                const mglData *dr = dynamic_cast<const mglData *>(d);\r
@@ -280,6 +283,7 @@ void MGL_EXPORT mgl_data_save(HCDT d, const char *fname,long ns)
                else if(ns<ny)  for(j=0;j<nx;j++)\r
                        fprintf(fp,"%g\t",d->v(j,ns));\r
        }\r
+       setlocale(LC_NUMERIC, "");\r
        fclose(fp);\r
 }\r
 void MGL_EXPORT mgl_data_save_(uintptr_t *d, const char *fname,int *ns,int l)\r
@@ -1137,14 +1141,14 @@ int MGL_EXPORT mgl_data_read_all(HMDT dat, const char *templ, int as_slice)
        size_t i;\r
        mreal *b;\r
        long kx,ky,kz;\r
-       char *fname = new char[256];\r
        glob (templ, GLOB_TILDE, NULL, &res);\r
 \r
        //read first file\r
        for(i=0;i<res.gl_pathc;i++)\r
                if(mgl_data_read(&d,res.gl_pathv[i]))   break;\r
 \r
-       if(i>=res.gl_pathc)     {       delete []fname; return false;   }\r
+       if(i>=res.gl_pathc)\r
+       {       globfree (&res);        return false;   }\r
        kx = d.nx;      ky = d.ny;      kz = d.nz;\r
        b = (mreal *)malloc(kx*ky*kz*sizeof(mreal));\r
        memcpy(b,d.a,kx*ky*kz*sizeof(mreal));\r
@@ -1153,12 +1157,11 @@ int MGL_EXPORT mgl_data_read_all(HMDT dat, const char *templ, int as_slice)
        {\r
                if(mgl_data_read(&d,res.gl_pathv[i]))\r
                        if(!mgl_add_file(kx,ky,kz,b,&d,as_slice))\r
-                       {       delete []fname; free(b);        return false;   }\r
+                       {       globfree (&res);        free(b);        return false;   }\r
        }\r
        dat->Set(b,kx,ky,kz);\r
 \r
-       globfree (&res);\r
-       delete []fname; free(b);\r
+       globfree (&res);        free(b);\r
        return true;\r
 #else\r
        return false;\r
index 1b0085bac728426a8aec3f7f94399c983b587be1..944b5b607a1484c079b0ed1f9a685d3a09c3d8cc 100644 (file)
@@ -148,6 +148,8 @@ void MGL_EXPORT mgl_srnd(long seed)
 }\r
 void MGL_EXPORT mgl_srnd_(int *seed)   {       mgl_srnd(*seed);        }\r
 //-----------------------------------------------------------------------------\r
+double MGL_EXPORT mgl_hypot(double x, double y)        {       return hypot(x,y);      }\r
+//-----------------------------------------------------------------------------\r
 #if MGL_HAVE_PTHREAD\r
 pthread_mutex_t mutexRnd;\r
 #endif\r
@@ -729,8 +731,8 @@ uintptr_t MGL_EXPORT mgl_create_expr_(const char *expr, int l)
        uintptr_t res = uintptr_t(mgl_create_expr(s));\r
        delete []s;     return res;     }\r
 void MGL_EXPORT mgl_delete_expr_(uintptr_t *ex)        {       mgl_delete_expr((HMEX)ex);      }\r
-double MGL_EXPORT mgl_eval_expr_(uintptr_t *ex, mreal *x, mreal *y, mreal *z)\r
+double MGL_EXPORT mgl_expr_eval_(uintptr_t *ex, mreal *x, mreal *y, mreal *z)\r
 {      return mgl_expr_eval((HMEX) ex, *x,*y,*z);              }\r
-double MGL_EXPORT mgl_diff_expr_(uintptr_t *ex, const char *dir, mreal *x, mreal *y, mreal *z, int)\r
+double MGL_EXPORT mgl_expr_diff_(uintptr_t *ex, const char *dir, mreal *x, mreal *y, mreal *z, int)\r
 {      return mgl_expr_diff((HMEX) ex, *dir,*x,*y,*z); }\r
 //-----------------------------------------------------------------------------\r
index ed49840daaba4d40a915fab82fcd01ce7ba971af..8834f3ab7d76b69493999334f82096f3759b18e0 100644 (file)
@@ -272,11 +272,19 @@ dual MGL_EXPORT mgl_ipowc(dual x,int n)
        if(n%2==1)      t *= x;\r
        return t;\r
 }\r
+dual MGL_EXPORT mgl_ipowc_(dual *x,int *n)     {       return mgl_ipowc(*x,*n);        }\r
 //-----------------------------------------------------------------------------\r
 HAEX MGL_EXPORT mgl_create_cexpr(const char *expr)     {       return new mglFormulaC(expr);   }\r
+uintptr_t MGL_EXPORT mgl_create_cexpr_(const char *expr, int l)\r
+{      char *s=new char[l+1];  memcpy(s,expr,l);       s[l]=0;\r
+       uintptr_t res = uintptr_t(mgl_create_cexpr(s));\r
+       delete []s;     return res;     }\r
 void MGL_EXPORT mgl_delete_cexpr(HAEX ex)      {       delete ex;      }\r
+void MGL_EXPORT mgl_delete_cexpr_(uintptr_t *ex)       {       mgl_delete_cexpr((HAEX)ex);     }\r
 dual MGL_EXPORT mgl_cexpr_eval(HAEX ex, dual x, dual y,dual z)\r
 {      return ex->Calc(x,y,z); }\r
+dual MGL_EXPORT mgl_cexpr_eval_(uintptr_t *ex, dual *x, dual *y, dual *z)\r
+{      return mgl_cexpr_eval((HAEX) ex, *x,*y,*z);             }\r
 dual MGL_EXPORT mgl_cexpr_eval_v(HAEX ex, dual *var)\r
 {      return ex->Calc(var);   }\r
 //-----------------------------------------------------------------------------\r
index d4076480778189632b68ad964379ac517e2d2553..18f6355e8ad9c31111192399186eeb3205d326bf 100644 (file)
@@ -2289,6 +2289,10 @@ int MGL_NO_EXPORT mgls_region(mglGraph *gr, long , mglArg *a, const char *k, con
        else if(!strcmp(k,"dds"))       gr->Region(*(a[0].d),*(a[1].d),a[2].s.c_str(),opt);
        else if(!strcmp(k,"ddd"))       gr->Region(*(a[0].d),*(a[1].d),*(a[2].d),"",opt);
        else if(!strcmp(k,"ddds"))      gr->Region(*(a[0].d),*(a[1].d),*(a[2].d),a[3].s.c_str(),opt);
+       else if(!strcmp(k,"dddd"))      gr->Region(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),"",opt);
+       else if(!strcmp(k,"dddds"))     gr->Region(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),a[4].s.c_str(),opt);
+       else if(!strcmp(k,"dddddd"))    gr->Region(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),"",opt);
+       else if(!strcmp(k,"dddddds"))   gr->Region(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),a[6].s.c_str(),opt);
        else res = 1;   return res;
 }
 //-----------------------------------------------------------------------------
@@ -2812,7 +2816,7 @@ mglCommand mgls_base_cmd[] = {
        {"rearrange","Rearrange data dimensions","rearrange Dat mx [my mz]", mgls_rearrange ,3},
        {"rect","Draw rectangle","rect x1 y1 x2 y2 ['fmt']|x1 y1 z1 x2 y2 z2 ['fmt']", mgls_rect ,13},
        {"refill","Fill data by interpolation of Vdat","refill Dat Xdat Vdat [sl] | Dat Xdat Ydat Vdat [sl] | Dat Xdat Ydat Zdat Vdat", mgls_refill ,3},
-       {"region","Draw filled region between 2 curves","region Ydat1 Ydat2 ['fmt' inside]|Xdat Ydat1 Ydat2 ['fmt' inside]", mgls_region ,7},
+       {"region","Draw filled region (ribbon) between 2 curves","region Ydat1 Ydat2 ['fmt']|Xdat Ydat1 Ydat2 ['fmt']||Xdat1 Ydat1 Xdat2 Ydat2 ['fmt']|Xdat1 Ydat1 Zdat1 Xdat2 Ydat2 Zdat2 ['fmt']", mgls_region ,7},
        {"resize","Resize data","resize Res Dat mx [my mz]", mgls_resize ,4},
        {"return","Return from function","return", 0, 6},
        {"rhomb","Draw rhombus","rhomb x1 y1 x2 y2 r ['fmt']|x1 y1 z1 x2 y2 z2 r ['fmt']", mgls_rhomb ,13},
index 82fca1f29e0a5a566c6aca7f131b2abc94e50dbc..5ac2eecd1dc3f3c7b1fe8e19c390a0972da71cea 100644 (file)
@@ -181,6 +181,7 @@ void MGL_EXPORT mgl_write_eps(HMGL gr, const char *fname,const char *descr)
        if(!strcmp(fname,"-"))  fp = stdout;            // allow to write in stdout
        else            fp = gz ? (void*)gzopen(fname,"wt") : (void*)fopen(fname,"wt");
        if(!fp)         {       gr->SetWarn(mglWarnOpen,fname); return; }
+       setlocale(LC_NUMERIC, "C");
        mgl_printf(fp, gz, "%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n", _Gr_->GetWidth(), _Gr_->GetHeight());
        mgl_printf(fp, gz, "%%%%Created by MathGL library\n%%%%Title: %s\n",descr ? descr : fname);
        mgl_printf(fp, gz, "%%%%CreationDate: %s\n",ctime(&now));
@@ -340,6 +341,7 @@ void MGL_EXPORT mgl_write_eps(HMGL gr, const char *fname,const char *descr)
        }
        mgl_printf(fp, gz, "\nshowpage\n%%%%EOF\n");
        if(strcmp(fname,"-"))   {       if(gz)  gzclose((gzFile)fp);    else    fclose((FILE *)fp);     }
+       setlocale(LC_NUMERIC, "");
 }
 void MGL_EXPORT mgl_write_eps_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)
 {      char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;
@@ -359,6 +361,7 @@ void MGL_EXPORT mgl_write_svg(HMGL gr, const char *fname,const char *descr)
        if(!strcmp(fname,"-"))  fp = stdout;            // allow to write in stdout
        else            fp = gz ? (void*)gzopen(fname,"wt") : (void*)fopen(fname,"wt");
        if(!fp)         {       gr->SetWarn(mglWarnOpen,fname); return; }
+       setlocale(LC_NUMERIC, "C");
        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", _Gr_->GetWidth(), hh);
@@ -498,106 +501,13 @@ void MGL_EXPORT mgl_write_svg(HMGL gr, const char *fname,const char *descr)
        {       mglPrim &q=gr->GetPrm(i);       if(q.type==-1)  q.type = 1;     }
        mgl_printf(fp, gz, "</g></svg>");
        if(strcmp(fname,"-"))   {       if(gz)  gzclose((gzFile)fp);    else    fclose((FILE *)fp);     }
+       setlocale(LC_NUMERIC, "");
 }
 void MGL_EXPORT mgl_write_svg_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)
 {      char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;
        char *d=new char[n+1];  memcpy(d,descr,n);      d[n]=0;
        mgl_write_svg(_GR_,s,d);        delete []s;             delete []d;     }
 //-----------------------------------------------------------------------------
-/// Color names easely parsed by LaTeX
-struct mglSVGName      {       const char *name;       mreal r,g,b;    };
-MGL_NO_EXPORT mglSVGName mgl_names[]={{"AliceBlue",.94,.972,1},
-{"Apricot", 0.984, 0.725, 0.51},
-{"Aquamarine", 0, 0.71, 0.745},
-{"Bittersweet", 0.753, 0.31, 0.0902},
-{"Black", 0.133, 0.118, 0.122},
-{"Blue", 0.176, 0.184, 0.573},
-{"BlueGreen", 0, 0.702, 0.722},
-{"BlueViolet", 0.278, 0.224, 0.573},
-{"BrickRed", 0.714, 0.196, 0.11},
-{"Brown", 0.475, 0.145, 0},
-{"BurntOrange", 0.969, 0.573, 0.114},
-{"CadetBlue", 0.455, 0.447, 0.604},
-{"CarnationPink", 0.949, 0.51, 0.706},
-{"Cerulean", 0, 0.635, 0.89},
-{"CornflowerBlue", 0.255, 0.69, 0.894},
-{"Cyan", 0, 0.682, 0.937},
-{"Dandelion", 0.992, 0.737, 0.259},
-{"DarkOrchid", 0.643, 0.325, 0.541},
-{"Emerald", 0, 0.663, 0.616},
-{"ForestGreen", 0, 0.608, 0.333},
-{"Fuchsia", 0.549, 0.212, 0.549},
-{"Goldenrod", 1, 0.875, 0.259},
-{"Gray", 0.58, 0.588, 0.596},
-{"Green", 0, 0.651, 0.31},
-{"GreenYellow", 0.875, 0.902, 0.455},
-{"JungleGreen", 0, 0.663, 0.604},
-{"Lavender", 0.957, 0.62, 0.769},
-{"LimeGreen", 0.553, 0.78, 0.243},
-{"Magenta", 0.925, 0, 0.549},
-{"Mahogany", 0.663, 0.204, 0.122},
-{"Maroon", 0.686, 0.196, 0.208},
-{"Melon", 0.973, 0.62, 0.482},
-{"MidnightBlue", 0, 0.404, 0.584},
-{"Mulberry", 0.663, 0.235, 0.576},
-{"NavyBlue", 0, 0.431, 0.722},
-{"OliveGreen", 0.235, 0.502, 0.192},
-{"Orange", 0.961, 0.506, 0.216},
-{"OrangeRed", 0.929, 0.0745, 0.353},
-{"Orchid", 0.686, 0.447, 0.69},
-{"Peach", 0.969, 0.588, 0.353},
-{"Periwinkle", 0.475, 0.467, 0.722},
-{"PineGreen", 0, 0.545, 0.447},
-{"Plum", 0.573, 0.149, 0.561},
-{"ProcessBlue", 0, 0.69, 0.941},
-{"Purple", 0.6, 0.278, 0.608},
-{"RawSienna", 0.592, 0.251, 0.0235},
-{"Red", 0.929, 0.106, 0.137},
-{"RedOrange", 0.949, 0.376, 0.208},
-{"RedViolet", 0.631, 0.141, 0.42},
-{"Rhodamine", 0.937, 0.333, 0.624},
-{"RoyalBlue", 0, 0.443, 0.737},
-{"RoyalPurple", 0.38, 0.247, 0.6},
-{"RubineRed", 0.929, 0.00392, 0.49},
-{"Salmon", 0.965, 0.573, 0.537},
-{"SeaGreen", 0.247, 0.737, 0.616},
-{"Sepia", 0.404, 0.0941, 0},
-{"SkyBlue", 0.275, 0.773, 0.867},
-{"SpringGreen", 0.776, 0.863, 0.404},
-{"Tan", 0.855, 0.616, 0.463},
-{"TealBlue", 0, 0.682, 0.702},
-{"Thistle", 0.847, 0.514, 0.718},
-{"Turquoise", 0, 0.706, 0.808},
-{"Violet", 0.345, 0.259, 0.608},
-{"VioletRed", 0.937, 0.345, 0.627},
-{"White", 0.6, 0.6, 0.6},
-{"WildStrawberry", 0.933, 0.161, 0.404},
-{"Yellow", 1, 0.949, 0},
-{"YellowGreen", 0.596, 0.8, 0.439},
-{"YellowOrange", 0.98, 0.635, 0.102},
-{"white", 1,1,1},
-{"black", 0,0,0},
-{"red", 1,0,0},
-{"green", 0,1,0},
-{"blue", 0,0,1},
-{"cyan", 0,1,1},
-{"magenta", 1,0,1},
-{"yellow", 1,1,0},
-{"",-1,-1,-1}};
-//-----------------------------------------------------------------------------
-MGL_NO_EXPORT const char *mglColorName(mglColor c)     // return closest SVG color
-{
-       register long i;
-       register mreal d, dm=10;
-       const char *name="";
-       for(i=0;mgl_names[i].name[0];i++)
-       {
-               d = fabs(c.r-mgl_names[i].r)+fabs(c.g-mgl_names[i].g)+fabs(c.b-mgl_names[i].b);
-               if(d<dm)        {       dm=d;   name=mgl_names[i].name; }
-       }
-       return name;
-}
-//-----------------------------------------------------------------------------
 void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
 {
        if(gr->GetPrmNum()<1)   return;
@@ -605,28 +515,44 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
 
        FILE *fp = fopen(fname,"wt");
        if(!fp)         {       gr->SetWarn(mglWarnOpen,fname); return; }
+       setlocale(LC_NUMERIC, "C");
        fprintf(fp, "%% Created by MathGL library\n%% Title: %s\n\n",descr?descr:fname);
+       mreal ms=0.4*gr->mark_size()/100;       // provide marks
+       fprintf(fp, "\\providecommand{\\mglp}[4]{\\draw[#3] (#1-#4, #2) -- (#1+#4,#2) (#1,#2-#4) -- (#1,#2+#4);}\n");
+       fprintf(fp, "\\providecommand{\\mglx}[4]{\\draw[#3] (#1-#4, #2-#4) -- (#1+#4,#2+#4) (#1+#4,#2-#4) -- (#1-#4,#2+#4);}\n");
+       fprintf(fp, "\\providecommand{\\mgls}[4]{\\draw[#3] (#1-#4, #2-#4) -- (#1+#4,#2-#4) -- (#1+#4,#2+#4) -- (#1-#4,#2+#4) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglS}[4]{\\fill[#3] (#1-#4, #2-#4) -- (#1+#4,#2-#4) -- (#1+#4,#2+#4) -- (#1-#4,#2+#4) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mgld}[4]{\\draw[#3] (#1, #2-#4) -- (#1+#4,#2) -- (#1,#2+#4) -- (#1-#4,#2) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglD}[4]{\\fill[#3] (#1, #2-#4) -- (#1+#4,#2) -- (#1,#2+#4) -- (#1-#4,#2) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglv}[4]{\\draw[#3] (#1-#4, #2+#4/2) -- (#1+#4,#2+#4/2) -- (#1,#2-#4) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglV}[4]{\\fill[#3] (#1-#4, #2+#4/2) -- (#1+#4,#2+#4/2) -- (#1,#2-#4) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglt}[4]{\\draw[#3] (#1-#4, #2-#4/2) -- (#1+#4,#2-#4/2) -- (#1,#2+#4) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglT}[4]{\\fill[#3] (#1-#4, #2-#4/2) -- (#1+#4,#2-#4/2) -- (#1,#2+#4) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mgll}[4]{\\draw[#3] (#1+#4/2, #2-#4) -- (#1+#4/2,#2+#4) -- (#1-#4,#2) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglL}[4]{\\fill[#3] (#1+#4/2, #2-#4) -- (#1+#4/2,#2+#4) -- (#1-#4,#2) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglr}[4]{\\draw[#3] (#1-#4/2, #2-#4) -- (#1-#4/2,#2+#4) -- (#1+#4,#2) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglR}[4]{\\fill[#3] (#1-#4/2, #2-#4) -- (#1-#4/2,#2+#4) -- (#1+#4,#2) -- cycle;}\n");
+       fprintf(fp, "\\providecommand{\\mglR}[4]{\\draw[#3] (#1, #2-#4) -- (#1,#2) -- (#1-#4,#2+#4) (#1,#2) -- (#1+#4,#2+#4);}\n");
+       fprintf(fp, "\\providecommand{\\mgla}[4]{\\draw[#3] (#1-#4, #2) -- (#1+#4,#2) (#1-0.6*#4,#2-0.8*#4) -- (#1+0.6*#4,#2+0.8*#4) (#1-0.6*#4,#2+0.8*#4) -- (#1+0.6*#4,#2-0.8*#4);}\n");
+       fprintf(fp, "\\providecommand{\\mglY}[4]{\\draw[#3] (#1, #2-#4) -- (#1,#2) (#1-#4,#2+#4) -- (#1,#2) (#1+#4,#2+#4) -- (#1,#2);}\n");
+       fprintf(fp, "\\providecommand{\\mglo}[4]{\\draw[#3] (#1, #2) circle (#4);}\n");
+       fprintf(fp, "\\providecommand{\\mglO}[4]{\\fill[#3] (#1, #2) circle (#4);}\n");
+       fprintf(fp, "\\providecommand{\\mglc}[3]{\\draw[#3] (#1, #2) circle (%g);}\n\n", 0.1*ms);
        fprintf(fp, "\\begin{tikzpicture}\n");
 
        // write primitives first
        mreal wp=-1;
-       register long i;
-       register int ii,jj,kk;
        int st=0;
        mglRGBA cp;
-       char cname[16];
+       char cname[128];
 
-       for(i=0;i<gr->GetPrmNum();i++)
+       for(long i=0;i<gr->GetPrmNum();i++)
        {
                const mglPrim &q = gr->GetPrm(i);
                if(q.type<0)    continue;       // q.n1>=0 always
                cp.c = _Gr_->GetPrmCol(i);
+               snprintf(cname,128,"color={rgb,255:red,%d;green,%d;blue,%d}",cp.r[0],cp.r[1],cp.r[2]);
 
-               ii = (cp.r[0]+25L)/51;
-               jj = (cp.r[1]+25L)/51;
-               kk = (cp.r[2]+25L)/51;
-               snprintf(cname,16,"mgl_%d",ii+6*(jj+6*kk));
-//             cname = mglColorName(cp);
                const mglPnt p1=gr->GetPnt(q.n1);
                mreal x=p1.x/100,y=p1.y/100,s=q.s/100;
                if(q.type==0)
@@ -636,41 +562,48 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
                        switch(q.n4)    // NOTE: no thickness for marks in TeX
                        {
                                case 'P':
-                                       fprintf(fp, "\\mglp{%g}{%g}{%s}{%g} \\mgls{%g}{%g}{%s}{%g}\n", x,y,cname,s,x,y,cname,s);        break;
+                                       fprintf(fp, "\\mglp{%.4g}{%.4g}{%s}{%.4g} \\mgls{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s,x,y,cname,s);    break;
                                case 'X':
-                                       fprintf(fp, "\\mglx{%g}{%g}{%s}{%g} \\mgls{%g}{%g}{%s}{%g}\n", x,y,cname,s,x,y,cname,s);        break;
+                                       fprintf(fp, "\\mglx{%.4g}{%.4g}{%s}{%.4g} \\mgls{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s,x,y,cname,s);    break;
                                case 'C':
-                                       fprintf(fp, "\\mglc{%g}{%g}{%s}{%g} \\mglo{%g}{%g}{%s}{%g}\n", x,y,cname,s,x,y,cname,s);        break;
-                               case '+':       fprintf(fp, "\\mglp{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'x':       fprintf(fp, "\\mglx{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 's':       fprintf(fp, "\\mgls{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'S':       fprintf(fp, "\\mglS{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'd':       fprintf(fp, "\\mgld{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'D':       fprintf(fp, "\\mglD{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case '^':       fprintf(fp, "\\mglt{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'T':       fprintf(fp, "\\mglT{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'v':       fprintf(fp, "\\mglv{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'V':       fprintf(fp, "\\mglV{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case '<':       fprintf(fp, "\\mgll{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'L':       fprintf(fp, "\\mglL{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case '>':       fprintf(fp, "\\mglr{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'R':       fprintf(fp, "\\mglR{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'Y':       fprintf(fp, "\\mglY{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'o':       fprintf(fp, "\\mglo{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case 'O':       fprintf(fp, "\\mglO{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               case '*':       fprintf(fp, "\\mgla{%g}{%g}{%s}{%g}\n", x,y,cname,s);   break;
-                               default:        fprintf(fp, "\\mglc{%g}{%g}{%s}\n", x,y,cname); break;
+                                       fprintf(fp, "\\mglc{%.4g}{%.4g}{%s}{%.4g} \\mglo{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s,x,y,cname,s);    break;
+                               case '+':       fprintf(fp, "\\mglp{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'x':       fprintf(fp, "\\mglx{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 's':       fprintf(fp, "\\mgls{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'S':       fprintf(fp, "\\mglS{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'd':       fprintf(fp, "\\mgld{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'D':       fprintf(fp, "\\mglD{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case '^':       fprintf(fp, "\\mglt{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'T':       fprintf(fp, "\\mglT{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'v':       fprintf(fp, "\\mglv{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'V':       fprintf(fp, "\\mglV{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case '<':       fprintf(fp, "\\mgll{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'L':       fprintf(fp, "\\mglL{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case '>':       fprintf(fp, "\\mglr{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'R':       fprintf(fp, "\\mglR{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'Y':       fprintf(fp, "\\mglY{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'o':       fprintf(fp, "\\mglo{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case 'O':       fprintf(fp, "\\mglO{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               case '*':       fprintf(fp, "\\mgla{%.4g}{%.4g}{%s}{%.4g}\n", x,y,cname,s);     break;
+                               default:        fprintf(fp, "\\mglc{%.4g}{%.4g}{%s}\n", x,y,cname);     break;
                        }
                }
                else if(q.type==2 && cp.r[3])
                {
                        const mglPnt p2=gr->GetPnt(q.n2), p3=gr->GetPnt(q.n3);
-                       fprintf(fp, "\\fill[%s, fill opacity=%g] (%g,%g) -- (%g,%g) -- (%g,%g) -- cycle;\n", cname,cp.r[3]/255., x,y, p2.x/100,p2.y/100, p3.x/100,p3.y/100);
+                       if(cp.r[3]<255)
+                               fprintf(fp, "\\fill[%s, fill opacity=%.4g] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname,cp.r[3]/255., x,y, p2.x/100,p2.y/100, p3.x/100,p3.y/100);
+                       else
+                               fprintf(fp, "\\fill[%s, fill] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname, x,y, p2.x/100,p2.y/100, p3.x/100,p3.y/100);
                }
                else if(q.type==3 && cp.r[3])
                {
                        const mglPnt p2=gr->GetPnt(q.n2), p3=gr->GetPnt(q.n3), p4=gr->GetPnt(q.n4);
-                       fprintf(fp, "\\fill[%s, fill opacity=%g] (%g,%g) -- (%g,%g) -- (%g,%g) -- (%g,%g) -- cycle;\n", cname,cp.r[3]/255., x,y, p2.x/100,p2.y/100, p4.x/100,p4.y/100, p3.x/100,p3.y/100);
+                       if(cp.r[3]<255)
+                               fprintf(fp, "\\fill[%s, fill opacity=%.4g] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname,cp.r[3]/255., x,y, p2.x/100,p2.y/100, p4.x/100,p4.y/100, p3.x/100,p3.y/100);
+                       else
+                               fprintf(fp, "\\fill[%s, fill] (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- (%.4g,%.4g) -- cycle;\n", cname, x,y, p2.x/100,p2.y/100, p4.x/100,p4.y/100, p3.x/100,p3.y/100);
+
                }
                else if(q.type==1)      // lines
                {
@@ -681,7 +614,7 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
                        else            fprintf(fp,"\\draw[%s,%s] ",cname,w[iw]);
                        // TODO: add line dashing
                        wp = q.w>1  ? q.w:1;    st = q.n3;
-                       put_line(gr,fp,false,i,wp,cp.c,st, "(%g,%g)", " -- (%g,%g)", false, 0.01);
+                       put_line(gr,fp,false,i,wp,cp.c,st, "(%.4g,%.4g)", " -- (%.4g,%.4g)", false, 0.01);
                        fprintf(fp, ";\n");
                }
                else if(q.type==6 && mgl_isnum(q.p))    // text
@@ -693,52 +626,32 @@ void MGL_EXPORT mgl_write_tex(HMGL gr, const char *fname,const char *descr)
                        if((a&3)==0)    ss.append(",anchor=base west");
                        if((a&3)==1)    ss.append(",anchor=base");
                        if((a&3)==2)    ss.append(",anchor=base east");
-                       if(f&MGL_FONT_ITAL)     ss.append(",font=\\itshape");
-                       if(f&MGL_FONT_BOLD)     ss.append(",font=\\bfshape");
+//                     if(f&MGL_FONT_ITAL)     ss.append(",font=\\itshape");
+//                     if(f&MGL_FONT_BOLD)     ss.append(",font=\\bfshape");
                        if(t.text.find('\\')!=std::string::npos || t.text.find('{')!=std::string::npos || t.text.find('_')!=std::string::npos || t.text.find('^')!=std::string::npos)
-                               fprintf(fp,"\\draw[%s] (%g,%g) node[rotate=%.2g]{$%ls$};\n", ss.c_str(),x-dx,y-dy, -q.p, t.text.c_str());
+                               fprintf(fp,"\\draw[%s] (%.4g,%.4g) node[rotate=%.2g]{$%ls$};\n", ss.c_str(),x-dx,y-dy, -q.p, t.text.c_str());
                        else
-                               fprintf(fp,"\\draw[%s] (%g,%g) node[rotate=%.2g]{%ls};\n", ss.c_str(),x-dx,y-dy, -q.p, t.text.c_str());
+                               fprintf(fp,"\\draw[%s] (%.4g,%.4g) node[rotate=%.2g]{%ls};\n", ss.c_str(),x-dx,y-dy, -q.p, t.text.c_str());
                }
        }
        fprintf(fp, "\\end{tikzpicture}\n");
-       for(i=0;i<gr->GetPrmNum();i++)
+       for(long i=0;i<gr->GetPrmNum();i++)
        {       mglPrim &q=gr->GetPrm(i);       if(q.type==-1)  q.type = 1;     }
        fclose(fp);
-
-       // provide colors used by figure
-       fp=fopen("mglcolors.tex","wt");
-       for(ii=0;ii<6;ii++)     for(jj=0;jj<6;jj++)     for(kk=0;kk<6;kk++)
-               fprintf(fp,"\\definecolor{mgl_%d}{RGB}{%d,%d,%d}\n",ii+6*(jj+6*kk),51*ii,51*jj,51*kk);
-       mreal ms=0.4*gr->mark_size()/100;       // also provide marks
-       fprintf(fp, "\\providecommand{\\mglp}[4]{\\draw[#3] (#1-#4, #2) -- (#1+#4,#2) (#1,#2-#4) -- (#1,#2+#4);}\n");
-       fprintf(fp, "\\providecommand{\\mglx}[4]{\\draw[#3] (#1-#4, #2-#4) -- (#1+#4,#2+#4) (#1+#4,#2-#4) -- (#1-#4,#2+#4);}\n");
-       fprintf(fp, "\\providecommand{\\mgls}[4]{\\draw[#3] (#1-#4, #2-#4) -- (#1+#4,#2-#4) -- (#1+#4,#2+#4) -- (#1-#4,#2+#4) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglS}[4]{\\fill[#3] (#1-#4, #2-#4) -- (#1+#4,#2-#4) -- (#1+#4,#2+#4) -- (#1-#4,#2+#4) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mgld}[4]{\\draw[#3] (#1, #2-#4) -- (#1+#4,#2) -- (#1,#2+#4) -- (#1-#4,#2) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglD}[4]{\\fill[#3] (#1, #2-#4) -- (#1+#4,#2) -- (#1,#2+#4) -- (#1-#4,#2) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglv}[4]{\\draw[#3] (#1-#4, #2+#4/2) -- (#1+#4,#2+#4/2) -- (#1,#2-#4) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglV}[4]{\\fill[#3] (#1-#4, #2+#4/2) -- (#1+#4,#2+#4/2) -- (#1,#2-#4) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglt}[4]{\\draw[#3] (#1-#4, #2-#4/2) -- (#1+#4,#2-#4/2) -- (#1,#2+#4) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglT}[4]{\\fill[#3] (#1-#4, #2-#4/2) -- (#1+#4,#2-#4/2) -- (#1,#2+#4) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mgll}[4]{\\draw[#3] (#1+#4/2, #2-#4) -- (#1+#4/2,#2+#4) -- (#1-#4,#2) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglL}[4]{\\fill[#3] (#1+#4/2, #2-#4) -- (#1+#4/2,#2+#4) -- (#1-#4,#2) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglr}[4]{\\draw[#3] (#1-#4/2, #2-#4) -- (#1-#4/2,#2+#4) -- (#1+#4,#2) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglR}[4]{\\fill[#3] (#1-#4/2, #2-#4) -- (#1-#4/2,#2+#4) -- (#1+#4,#2) -- cycle;}\n");
-       fprintf(fp, "\\providecommand{\\mglR}[4]{\\draw[#3] (#1, #2-#4) -- (#1,#2) -- (#1-#4,#2+#4) (#1,#2) -- (#1+#4,#2+#4);}\n");
-       fprintf(fp, "\\providecommand{\\mgla}[4]{\\draw[#3] (#1-#4, #2) -- (#1+#4,#2) (#1-0.6*#4,#2-0.8*#4) -- (#1+0.6*#4,#2+0.8*#4) (#1-0.6*#4,#2+0.8*#4) -- (#1+0.6*#4,#2-0.8*#4);}\n");
-       fprintf(fp, "\\providecommand{\\mglY}[4]{\\draw[#3] (#1, #2-#4) -- (#1,#2) (#1-#4,#2+#4) -- (#1,#2) (#1+#4,#2+#4) -- (#1,#2);}\n");
-       fprintf(fp, "\\providecommand{\\mglo}[4]{\\draw[#3] (#1, #2) circle (#4);}\n");
-       fprintf(fp, "\\providecommand{\\mglO}[4]{\\fill[#3] (#1, #2) circle (#4);}\n");
-       fprintf(fp, "\\providecommand{\\mglc}[3]{\\draw[#3] (#1, #2) circle (%g);}\n\n", 0.1*ms);
-       fclose(fp);
+       setlocale(LC_NUMERIC, "");
 
        // provide main file for viewing figure
        fp=fopen("mglmain.tex","wt");
-       fprintf(fp, "\\documentclass{article}\n\n");
-       fprintf(fp, "%% following lines should be placed before \\begin{document}\n");
-       fprintf(fp,"\\usepackage{tikz}\n\\input{mglcolors.tex}\n");
-       fprintf(fp, "\\begin{document}\n%% start figure itself\n\\input{%s}\\end{document}\n",fname);
-       fclose(fp);
+       if(fp)
+       {
+               fprintf(fp, "%% this file just show figure\n");
+               fprintf(fp, "\\documentclass{article}\n\\usepackage{tikz}\n");
+               fprintf(fp, "\\begin{document}\n\\input{%s}\n\\end{document}\n",fname);
+               fclose(fp);
+       }
 }
+void MGL_EXPORT mgl_write_tex_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)
+{      char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;
+       char *d=new char[n+1];  memcpy(d,descr,n);      d[n]=0;
+       mgl_write_tex(_GR_,s,d);        delete []s;             delete []d;     }
 //-----------------------------------------------------------------------------
index 2006616fa06e7dfc99f3b11c756198ea69c75224..4d0ac831bc337c2316b89890b233c136868458c7 100644 (file)
@@ -301,9 +301,10 @@ void MGL_EXPORT mgl_write_obj_old(HMGL gr, const char *fname,const char *descr,
        delete []ng;\r
 \r
        size_t len=strlen(fname),ntxt=gr->GetTxtNum();\r
-       char *tname = new char[len+5];  strcpy(tname,fname);\r
        FILE *fp=fopen(fname,"wt");\r
+       if(!fp)         {       gr->SetWarn(mglWarnOpen,fname); return; }\r
        // vertices definition\r
+       setlocale(LC_NUMERIC, "C");\r
        fprintf(fp,"# Created by MathGL library\n# Title: %s\n",(descr && *descr) ? descr : fname);\r
        for(long i=0;i<gr->GetPntNum();i++)\r
        {\r
@@ -314,6 +315,7 @@ void MGL_EXPORT mgl_write_obj_old(HMGL gr, const char *fname,const char *descr,
 //             else fprintf(fp,"vn %g %g %g\n",pp.u,pp.v,pp.w);\r
        }\r
        // primitive definition in groups\r
+       char *tname = new char[len+5];  strcpy(tname,fname);\r
        tname[len-4]=0; fprintf(fp,"# Primitives Definitions\nmtllib %s.mtl\nusemtl %s\n",tname,tname);\r
        for(size_t i=0;i<gr->Grp.size();i++)\r
        {\r
@@ -351,6 +353,7 @@ void MGL_EXPORT mgl_write_obj_old(HMGL gr, const char *fname,const char *descr,
        if(use_png)     mgl_pnga_save(tname,256,256*j,pbuf);\r
        else            mgl_tga_save(tname,256,256*j,pbuf);\r
        free(pbuf);     delete []buf;   delete []tname;\r
+       setlocale(LC_NUMERIC, "");\r
 }\r
 void MGL_EXPORT mgl_write_obj_old_(uintptr_t *gr, const char *fname,const char *descr, int *use_png,int l,int n)\r
 {      char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;\r
@@ -361,6 +364,8 @@ void MGL_EXPORT mgl_write_stl(HMGL gr, const char *fname,const char *descr)
 {\r
        if(gr->GetPrmNum()==0)  return; // nothing to do\r
        FILE *fp = fopen(fname,"wt");\r
+       if(!fp)         {       gr->SetWarn(mglWarnOpen,fname); return; }\r
+       setlocale(LC_NUMERIC, "C");\r
        fprintf(fp,"solid %s\n",(descr && *descr)?descr:"mathgl");\r
        register long i;\r
        mglPnt pp;\r
@@ -401,6 +406,7 @@ void MGL_EXPORT mgl_write_stl(HMGL gr, const char *fname,const char *descr)
        }\r
        fprintf(fp,"endsolid %s",(descr && *descr)?descr:"mathgl");\r
        fclose(fp);\r
+       setlocale(LC_NUMERIC, "");\r
 }\r
 void MGL_EXPORT mgl_write_stl_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)\r
 {      char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;\r
@@ -413,6 +419,8 @@ void MGL_EXPORT mgl_write_xyz(HMGL gr, const char *fname,const char *descr)
 \r
        register long i;\r
        FILE *fp=fopen(fname,"wt"), *ff;        // vertices definition\r
+       if(!fp)         {       gr->SetWarn(mglWarnOpen,fname); return; }\r
+       setlocale(LC_NUMERIC, "C");\r
        fprintf(fp,"# Created by MathGL library\n# Title: %s\n",(descr && *descr) ? descr : fname);\r
        fprintf(fp,"# List of Vertices, with (x,y,z) coordinates.\n");\r
        for(i=0;i<gr->GetPntNum();i++)\r
@@ -439,6 +447,7 @@ void MGL_EXPORT mgl_write_xyz(HMGL gr, const char *fname,const char *descr)
                if(q.type==3)   fprintf(ff,"%ld %ld %ld\n%ld %ld %ld\n",q.n1+1,q.n2+1,q.n3+1,q.n4+1,q.n2+1,q.n3+1);\r
        }\r
        fclose(fp);     fclose(ff);     delete []tname;\r
+       setlocale(LC_NUMERIC, "");\r
 }\r
 void MGL_EXPORT mgl_write_xyz_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)\r
 {      char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;\r
@@ -456,6 +465,8 @@ void MGL_EXPORT mgl_write_off(HMGL gr, const char *fname,const char *descr, int
        if(nf<=0)       return; // nothing to do\r
 \r
        FILE *fp=fopen(fname,"wt");\r
+       if(!fp)         {       gr->SetWarn(mglWarnOpen,fname); return; }\r
+       setlocale(LC_NUMERIC, "C");\r
        // vertices definition\r
        if(colored)\r
                fprintf(fp,"COFF\n# Created by MathGL library\n# Title: %s\n",(descr && *descr) ? descr : fname);\r
@@ -500,6 +511,7 @@ void MGL_EXPORT mgl_write_off(HMGL gr, const char *fname,const char *descr, int
                }\r
        }\r
        fclose(fp);\r
+       setlocale(LC_NUMERIC, "");\r
 }\r
 void MGL_EXPORT mgl_write_off_(uintptr_t *gr, const char *fname,const char *descr,int *colored,int l,int n)\r
 {      char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;\r
@@ -533,6 +545,7 @@ std::string mglCanvas::GetJSON()
        std::string res, buf;\r
        long i,ll=0,l=(long)Pnt.size();\r
        long factor = Width>1?10:10000;\r
+       setlocale(LC_NUMERIC, "C");\r
        res = res + mgl_sprintf("{\n\"width\":%d,\t\"height\":%d,\t\"depth\":%d,\t\"plotid\":\"%s\",\t\"npnts\":%ld,\t\"pnts\":[\n",\r
                        factor*Width, factor*Height, factor*Depth, PlotId.c_str(), l);\r
        std::string *tmp=new std::string[l];\r
@@ -568,7 +581,7 @@ std::string mglCanvas::GetJSON()
                {\r
                        const mglPnt &q = Pnt[p.n1];\r
 #pragma omp critical\r
-                       {xy.push_back(mglPoint(q.u,q.v,p.n2));  n2 = xy.size()-1;}\r
+                       {n2 = xy.size();        xy.push_back(mglPoint(q.u,q.v,p.n2));}\r
                        n3 = p.n3;      n4 = p.n4;\r
                }\r
                if(p.type==1 && n1>n2)  {       n1=p.n2;        n2=p.n1;        }\r
@@ -608,6 +621,7 @@ std::string mglCanvas::GetJSON()
                res = res + mgl_sprintf("]\n]%c\n", i+1<l?',':' ');\r
        }\r
        res = res + mgl_sprintf("]\n}\n");\r
+       setlocale(LC_NUMERIC, "");\r
        return res;\r
 }\r
 //-----------------------------------------------------------------------------\r
@@ -630,6 +644,7 @@ bool mglCanvas::ExportMGLD(const char *fname, const char *descr)
        if(Pnt.size()<1 || Prm.size()<1)        return true;\r
        FILE *fp=fopen(fname,"wt");\r
        if(!fp) return true;\r
+       setlocale(LC_NUMERIC, "C");\r
        // NOTE: I'll save Ptx. So prim type=6 is useless,and no LaTeX\r
        fprintf(fp,"MGLD %lu %lu %lu %lu %d %d\n# %s\n", (unsigned long)Pnt.size(), (unsigned long)Prm.size(), (unsigned long)Txt.size(), (unsigned long)Glf.size(), Width, Height, (descr && *descr) ? descr : fname);\r
        fprintf(fp,"# Vertexes: x y z c t ta u v w r g b a\n");\r
@@ -667,6 +682,7 @@ bool mglCanvas::ExportMGLD(const char *fname, const char *descr)
                }\r
        }\r
        fclose(fp);\r
+       setlocale(LC_NUMERIC, "");\r
        return false;\r
 }\r
 //-----------------------------------------------------------------------------\r
@@ -689,7 +705,8 @@ bool mglCanvas::ImportMGLD(const char *fname, bool add)
        sscanf(buf+5,"%lu%lu%lu%lu%d%d",&n,&m,&l,&k,&w,&h);\r
        if(w<=0 || h<=0)        {       w=Width;        h=Height;       }\r
        d = long(sqrt(double(w*h)));\r
-       if(n<=0 || m<=0 || l<=0)        {       delete []buf;   fclose(fp);     return true;    }\r
+       if(n==0 || m==0 || l==0)        {       delete []buf;   fclose(fp);     return true;    }\r
+       setlocale(LC_NUMERIC, "C");\r
        if(!add)        {       Clf();  Txt.clear();    }\r
        else    {       ClfZB();        npnt=Pnt.size();        nglf=Glf.size();        }\r
 #if MGL_HAVE_PTHREAD\r
@@ -757,6 +774,7 @@ bool mglCanvas::ImportMGLD(const char *fname, bool add)
        pthread_mutex_unlock(&mutexPrm);\r
        pthread_mutex_unlock(&mutexTxt);\r
 #endif\r
+       setlocale(LC_NUMERIC, "");\r
        delete []buf;   fclose(fp);     return false;\r
 }\r
 //-----------------------------------------------------------------------------\r
@@ -1146,6 +1164,7 @@ void MGL_EXPORT mgl_write_x3d(HMGL gr, const char *fname,const char *descr)
        bool gz = fname[strlen(fname)-1]=='z';\r
        void *fp = gz ? (void*)gzopen(fname,"wt") : (void*)fopen(fname,"wt");\r
        if(!fp)         {       gr->SetWarn(mglWarnOpen,fname); return; }\r
+       setlocale(LC_NUMERIC, "C");\r
        mgl_printf(fp, gz, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");\r
        mgl_printf(fp, gz, "<!DOCTYPE X3D PUBLIC \"ISO//Web3D//DTD X3D 3.0//EN\" \"http://www.web3d.org/specifications/x3d-3.0.dtd\">\n");\r
        mgl_printf(fp, gz, "<X3D profile='Immersive'>\n<head>\n<meta name='filename' content='%s'/>\n",fname);\r
@@ -1299,6 +1318,8 @@ void MGL_EXPORT mgl_write_x3d(HMGL gr, const char *fname,const char *descr)
        }\r
        mgl_printf(fp, gz, "</Scene>\n");\r
        if(gz)  gzclose((gzFile)fp);    else    fclose((FILE *)fp);\r
+       setlocale(LC_NUMERIC, "");\r
+       delete []pnt;\r
 }\r
 void MGL_EXPORT mgl_write_x3d_(uintptr_t *gr, const char *fname,const char *descr,int l,int n)\r
 {      char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;\r
index bce38a31a75fd2d1684b5c828580afafb5a11c34..e5f4f8268bd648fefce26a47834e54b7548d72b9 100644 (file)
@@ -112,13 +112,13 @@ int MGL_NO_EXPORT mgl_fit__fdf (const gsl_vector * x, void *data, gsl_vector * f
 #endif\r
 //-----------------------------------------------------------------------------\r
 /// GSL based fitting procedure for formula/arguments specified by string\r
-mreal MGL_NO_EXPORT mgl_fit_base(mglFitData *fd, mreal *ini)\r
+mreal MGL_NO_EXPORT mgl_fit_base(mglFitData &fd, mreal *ini)\r
 {\r
 #if MGL_HAVE_GSL\r
-       register long i,m=fd->m,n=fd->n,iter=0;\r
-       if(n<1 || fd==0 || ini==0)      return -1;\r
+       register long i,m=fd.m,n=fd.n,iter=0;\r
+       if(n<1 || ini==0)       return -1;\r
        // setup data\r
-       double *x_init = new double[fd->m];\r
+       double *x_init = new double[fd.m];\r
        for(i=0;i<m;i++)        x_init[i] = ini[i];\r
        // setup fitting\r
        gsl_matrix *covar = gsl_matrix_alloc(m, m);\r
@@ -128,7 +128,7 @@ mreal MGL_NO_EXPORT mgl_fit_base(mglFitData *fd, mreal *ini)
        gsl_multifit_function_fdf f;\r
        f.f = mgl_fit__f;               f.df = mgl_fit__df;\r
        f.fdf = mgl_fit__fdf;   f.n = n;        f.p = m;\r
-       f.params = fd;\r
+       f.params = &fd;\r
        gsl_multifit_fdfsolver_set(s, &f, &vx.vector);\r
        int status;     // start fitting\r
        do\r
@@ -280,7 +280,7 @@ HMDT MGL_EXPORT mgl_fit_xys(HMGL gr, HCDT xx, HCDT yy, HCDT ss, const char *eq,
                else in.Fill(0.,0);\r
                fd.a = y.a+i*m;         fd.x = x.a+(i%x.ny)*m;\r
                fd.s = s.a+i*m;\r
-               res = mgl_fit_base(&fd,in.a);\r
+               res = mgl_fit_base(fd,in.a);\r
                mgl_fill_fit(gr,*fit,in,fd,var,nn,1,1,i);\r
                if(ini && ini->nx>=fd.m)        memcpy(ini->a,in.a,fd.m*sizeof(mreal));\r
        }\r
@@ -323,7 +323,7 @@ HMDT MGL_EXPORT mgl_fit_xyzs(HMGL gr, HCDT xx, HCDT yy, HCDT zz, HCDT ss, const
                if(ini && ini->nx>=fd.m)        in.Set(ini->a,fd.m);\r
                else in.Fill(0.,0);\r
                fd.a = z.a+i*m*n;               fd.s = s.a+i*m*n;\r
-               res = mgl_fit_base(&fd,in.a);\r
+               res = mgl_fit_base(fd,in.a);\r
                mgl_fill_fit(gr,*fit,in,fd,var,nn,nn,1,i);\r
                if(ini && ini->nx>=fd.m)        memcpy(ini->a,in.a,fd.m*sizeof(mreal));\r
        }\r
@@ -365,7 +365,7 @@ HMDT MGL_EXPORT mgl_fit_xyzas(HMGL gr, HCDT xx, HCDT yy, HCDT zz, HCDT aa, HCDT
 \r
        if(ini && ini->nx>=fd.m)        in.Set(ini->a,fd.m);\r
        else in.Fill(0.,0);\r
-       res = mgl_fit_base(&fd,in.a);\r
+       res = mgl_fit_base(fd,in.a);\r
        mgl_fill_fit(gr,*fit,in,fd,var,nn,nn,nn,0);\r
        if(ini && ini->nx>=fd.m)        memcpy(ini->a,in.a,fd.m*sizeof(mreal));\r
 \r
index 8d471264480324517e2bb2a59b3a1e1e30ab047d..2b61cda2cbaa491e8cbcd2eff36bbc0f2d279178 100644 (file)
@@ -648,7 +648,7 @@ int mglParser::Parse(mglGraph *gr, std::wstring str, long pos)
                        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(arg[1][1]==0 && (r>=0 && r<40))      // TODO: check this
                        {
                                if(a[1].type==0)
                                {
@@ -978,7 +978,7 @@ uintptr_t MGL_EXPORT mgl_parser_add_var_(uintptr_t* p, const char *name, int l)
 uintptr_t MGL_EXPORT mgl_parser_find_var_(uintptr_t* p, const char *name, int l)
 {      char *s=new char[l+1];          memcpy(s,name,l);       s[l]=0;
        mglVar *v=_PR_->FindVar(s);     delete []s;     return uintptr_t(v);    }
-void MGL_EXPORT mgl_del_var_(uintptr_t* p, const char *name, int l)
+void MGL_EXPORT mgl_parser_del_var_(uintptr_t* p, const char *name, int l)
 {      char *s=new char[l+1];          memcpy(s,name,l);       s[l]=0;
        _PR_->DeleteVar(s);     delete []s;     }
 int MGL_EXPORT mgl_parse_line_(uintptr_t* gr, uintptr_t* p, const char *str, int *pos, int l)
index e5f96ae10e196a4356af0366170e4d5e304f1d7c..f300239f5ac80914320479ecc97d95f0e5066b6d 100644 (file)
@@ -171,6 +171,7 @@ mglPoint mglCanvas::RestorePnt(mglPoint ps, bool norm) const
 //-----------------------------------------------------------------------------\r
 mglPoint mglCanvas::CalcXYZ(int xs, int ys, bool real) const\r
 {\r
+       if(xs<0 || ys<0 || xs>=Width || ys>=Height)     return mglPoint(NAN,NAN,NAN);\r
        mglPoint p, ps(xs,Height-ys,NAN);\r
        float zz = Z[3*(xs+Width*(Height-1-ys))];\r
        if(zz>-1e20f)   {       ps.z = zz;      real=false;     }\r
@@ -664,8 +665,8 @@ unsigned char* mglCanvas::col2int(const mglPnt &p,unsigned char *r, int obj_id)
                        }\r
                }\r
                b0 += (ar>1 ? 1:ar)*p.r;        // diffuse light\r
-               b1 += (ar>1 ? 1:ar)*p.g;\r
-               b2 += (ar>1 ? 1:ar)*p.b;\r
+               b1 += (ag>1 ? 1:ag)*p.g;\r
+               b2 += (ab>1 ? 1:ab)*p.b;\r
                b0 = b0<1 ? b0 : 1;                     // normalize components\r
                b1 = b1<1 ? b1 : 1;\r
                b2 = b2<1 ? b2 : 1;\r
@@ -714,12 +715,13 @@ void mglCanvas::combine(unsigned char *c1, const unsigned char *c2)
 //-----------------------------------------------------------------------------\r
 unsigned char **mglCanvas::GetRGBLines(long &w, long &h, unsigned char *&f, bool alpha)\r
 {\r
-       long d = alpha ? 4:3;\r
        unsigned char **p;\r
        Finish();\r
        p = (unsigned char **)malloc(Height * sizeof(unsigned char *));\r
+       long d = (alpha ? 4:3)*Width;\r
+       unsigned char *gg = (alpha?G4:G);\r
 #pragma omp parallel for\r
-       for(long i=0;i<Height;i++)      p[i] = (alpha?G4:G)+d*Width*i;\r
+       for(long i=0;i<Height;i++)      p[i] = gg + d*i;\r
        w = Width;      h = Height;             f = 0;\r
        return p;\r
 }\r
@@ -1837,7 +1839,7 @@ long mglCanvas::setPp(mglPnt &q, const mglPoint &p)
        q.xx=q.x=p.x;   q.yy=q.y=p.y;   q.zz=q.z=p.z;\r
        long k;\r
 #pragma omp critical(pnt)\r
-       {MGL_PUSH(Pnt,q,mutexPnt);      k=Pnt.size()-1;}\r
+       {k=Pnt.size();  MGL_PUSH(Pnt,q,mutexPnt);}\r
        return k;\r
 }\r
 //-----------------------------------------------------------------------------\r
index 387a0a9d97b62271f72137d75dfd40a1bfa0a4aa..c9ee24a69b4c1c437e13da661479ed630e165cad 100644 (file)
@@ -602,6 +602,53 @@ void MGL_EXPORT mgl_area_(uintptr_t *gr, uintptr_t *y, const char *pen, const ch
 //     Region series\r
 //\r
 //-----------------------------------------------------------------------------\r
+void MGL_EXPORT mgl_region_3d(HMGL gr, HCDT x1, HCDT y1, HCDT z1, HCDT x2, HCDT y2, HCDT z2, const char *pen, const char *opt)\r
+{\r
+       long i,j, n=y1->GetNx(), m, mx, my, mz, pal;\r
+       if(mgl_check_dim1(gr,x1,y1,z1,0,"Region"))      return;\r
+       if(mgl_check_dim1(gr,x1,x2,y2,z2,"Region"))     return;\r
+       m = x1->GetNy() > y1->GetNy() ? x1->GetNy() : y1->GetNy();      m = z1->GetNy() > m ? z1->GetNy() : m;\r
+       bool zhave = z1 && z2;\r
+       if(x1->GetNy()!=x2->GetNy() || y1->GetNy()!=y2->GetNy())\r
+       {       gr->SetWarn(mglWarnDim,"Region");       return; }\r
+       if(zhave && z1->GetNy()!=z2->GetNy())\r
+       {       gr->SetWarn(mglWarnDim,"Region");       return; }\r
+\r
+       gr->SaveState(opt);\r
+       static int cgid=1;      gr->StartGroup("Region",cgid++);\r
+       mreal c1,c2;\r
+       mglPoint nn=mglPoint(0,0,1);\r
+       long n1,n2,n3,n4;\r
+       mreal zm = gr->AdjustZMin();\r
+//     bool inside = (mglchr(pen,'i'));        // NOTE: check if 'i' is free (used here for inside flag)\r
+       bool sh = mglchr(pen,'!');\r
+\r
+       gr->SetPenPal(pen,&pal);        gr->Reserve(2*n*m);\r
+//     long s=gr->AddTexture(pen,1);\r
+       for(j=0;j<m;j++)\r
+       {\r
+               c2=c1=gr->NextColor(pal);\r
+               if(gr->GetNumPal(pal)==2*m && !sh)      c2=gr->NextColor(pal);\r
+               mx = j<x1->GetNy() ? j:0;\r
+               my = j<y1->GetNy() ? j:0;\r
+               mz = (zhave && j<z1->GetNy()) ? j:0;\r
+               mreal z0 = zm + (m-1-j)*(gr->Max.z-zm)/m;\r
+\r
+               n1 = gr->AddPnt(mglPoint(x1->v(0,mx),y1->v(0,my),zhave?z1->v(0,mz):z0),c1,nn,-1,11);\r
+               n2 = gr->AddPnt(mglPoint(x2->v(0,mx),y2->v(0,my),zhave?z2->v(0,mz):z0),c2,nn,-1,11);\r
+               for(i=1;i<n;i++)\r
+               {\r
+                       if(gr->Stop)    return;\r
+                       n3=n1;  n4=n2;\r
+                       if(sh)  c2=c1=gr->NextColor(pal,i);\r
+                       n1 = gr->AddPnt(mglPoint(x1->v(i,mx),y1->v(i,my),zhave?z1->v(i,mz):z0),c1,nn,-1,11);\r
+                       n2 = gr->AddPnt(mglPoint(x2->v(i,mx),y2->v(i,my),zhave?z2->v(i,mz):z0),c2,nn,-1,11);\r
+                       gr->quad_plot(n1,n2,n3,n4);\r
+               }\r
+       }\r
+       gr->EndGroup();\r
+}\r
+//-----------------------------------------------------------------------------\r
 void MGL_EXPORT mgl_region_xy(HMGL gr, HCDT x, HCDT y1, HCDT y2, const char *pen, const char *opt)\r
 {\r
        long i,j, n=y1->GetNx(), m=y1->GetNy(), mx, pal;\r
@@ -652,6 +699,11 @@ void MGL_EXPORT mgl_region(HMGL gr, HCDT y1, HCDT y2, const char *pen, const cha
        mgl_region_xy(gr,&x,y1,y2,pen,0);\r
 }\r
 //-----------------------------------------------------------------------------\r
+void MGL_EXPORT mgl_region_3d_(uintptr_t *gr, uintptr_t *x1, uintptr_t *y1, uintptr_t *z1, uintptr_t *x2, uintptr_t *y2, uintptr_t *z2, const char *pen, const char *opt, int l, int lo)\r
+{      char *s=new char[l+1];  memcpy(s,pen,l);        s[l]=0;\r
+       char *o=new char[lo+1]; memcpy(o,opt,lo);       o[lo]=0;\r
+       mgl_region_3d(_GR_, _DA_(x1),_DA_(y1),_DA_(z1),_DA_(x2),_DA_(y2),_DA_(z2),s,o); delete []o;     delete []s;     }\r
+//-----------------------------------------------------------------------------\r
 void MGL_EXPORT mgl_region_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y1, uintptr_t *y2, const char *pen, const char *opt, int l, int lo)\r
 {      char *s=new char[l+1];  memcpy(s,pen,l);        s[l]=0;\r
        char *o=new char[lo+1]; memcpy(o,opt,lo);       o[lo]=0;\r
@@ -880,7 +932,7 @@ void MGL_EXPORT mgl_bars_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, const char *pen, c
        memset(dd,0,n*sizeof(mreal));\r
 \r
        gr->SetPenPal(pen,&pal);\r
-       if(wire)        gr->Reserve(4*n*m);     else    gr->Reserve(4*n*m);\r
+       gr->Reserve(4*n*m);\r
        for(long j=0;j<m;j++)\r
        {\r
                c2=c1=gr->NextColor(pal);\r
@@ -948,7 +1000,7 @@ void MGL_EXPORT mgl_bars_xy(HMGL gr, HCDT x, HCDT y, const char *pen, const char
        memset(dd,0,n*sizeof(mreal));\r
 \r
        gr->SetPenPal(pen,&pal);\r
-       if(wire)        gr->Reserve(4*n*m);     else    gr->Reserve(4*n*m);\r
+       gr->Reserve(4*n*m);\r
        for(long j=0;j<m;j++)\r
        {\r
                c2=c1=gr->NextColor(pal);\r
@@ -1037,7 +1089,7 @@ void MGL_EXPORT mgl_barh_yx(HMGL gr, HCDT y, HCDT v, const char *pen, const char
        memset(dd,0,n*sizeof(mreal));\r
 \r
        gr->SetPenPal(pen,&pal);\r
-       if(wire)        gr->Reserve(4*n*m);     else    gr->Reserve(4*n*m);\r
+       gr->Reserve(4*n*m);\r
        for(long j=0;j<m;j++)\r
        {\r
                c2=c1=gr->NextColor(pal);\r
@@ -1153,7 +1205,7 @@ void MGL_EXPORT mgl_ohlc(HMGL gr, HCDT open, HCDT high, HCDT low, HCDT close, co
        mgl_ohlc_x(gr,&x,open,high,low,close,pen,0);\r
 }\r
 //-----------------------------------------------------------------------------\r
-void MGL_EXPORT mgl_ohlc_y_(uintptr_t *gr, uintptr_t *x, uintptr_t *open, uintptr_t *high, uintptr_t *low, uintptr_t *close, const char *pen, const char *opt,int l,int lo)\r
+void MGL_EXPORT mgl_ohlc_x_(uintptr_t *gr, uintptr_t *x, uintptr_t *open, uintptr_t *high, uintptr_t *low, uintptr_t *close, const char *pen, const char *opt,int l,int lo)\r
 {      char *s=new char[l+1];  memcpy(s,pen,l);        s[l]=0;\r
        char *o=new char[lo+1]; memcpy(o,opt,lo);       o[lo]=0;\r
        mgl_ohlc_x(_GR_,_DA_(x),_DA_(open),_DA_(high),_DA_(low),_DA_(close),s,o);       delete []o;     delete []s;     }\r
index edbd4b4e4a3631eb59b4fca6b3ff7d5ecf1ba65b..f84765748a832645a67e712ed443f7b87eb1cf4a 100644 (file)
@@ -291,7 +291,7 @@ void MGL_EXPORT mgl_surf_xy(HMGL gr, HCDT x, HCDT y, HCDT z, const char *sch, co
        long ss = gr->AddTexture(sch);\r
        long *pos = new long[n*m];\r
        bool wire = (mglchr(sch,'#'));\r
-       gr->Reserve(n*m*z->GetNz()*(wire?2:1));\r
+       gr->Reserve((n+1)*(m+1)*z->GetNz()*(wire?2:1));\r
 \r
        mglPoint p,q,s,xx,yy;\r
        for(long k=0;k<z->GetNz();k++)\r
@@ -432,7 +432,8 @@ void MGL_EXPORT mgl_dens_xy(HMGL gr, HCDT x, HCDT y, HCDT z, const char *sch, co
 \r
        long ss = gr->AddTexture(sch);\r
        long *pos = new long[n*m];\r
-       gr->Reserve(n*m*z->GetNz());\r
+       bool wire = (mglchr(sch,'#'));\r
+       gr->Reserve((n+1)*(m+1)*z->GetNz()*(wire?2:1));\r
 \r
        mglPoint p,s=mglPoint(0,0,1);\r
        mreal zz, c;\r
@@ -453,9 +454,9 @@ void MGL_EXPORT mgl_dens_xy(HMGL gr, HCDT x, HCDT y, HCDT z, const char *sch, co
 #pragma omp parallel for\r
                        for(long i=0;i<n*m;i++) gr->mark_plot(pos[i],'.');\r
                else    mgl_surf_plot(gr,pos,n,m);\r
-               if(mglchr(sch,'#') && !gr->Stop)\r
+               if(wire && !gr->Stop)\r
                {\r
-                       gr->Reserve(n*m);       gr->SetPenPal("k-");\r
+                       gr->SetPenPal("k-");\r
 #pragma omp parallel for\r
                        for(long i=0;i<n*m;i++) pos[i] = gr->CopyNtoC(pos[i],gr->CDef);\r
                        mgl_mesh_plot(gr,pos,n,m,3);\r
@@ -516,7 +517,8 @@ void MGL_EXPORT mgl_surfc_xy(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT c, const char
        static int cgid=1;      gr->StartGroup("SurfC",cgid++);\r
        long ss = gr->AddTexture(sch);\r
        long *pos = new long[n*m];\r
-       gr->Reserve(n*m*z->GetNz());\r
+       bool wire = (mglchr(sch,'#'));\r
+       gr->Reserve((n+1)*(m+1)*z->GetNz()*(wire?2:1));\r
 \r
        mglPoint p,q,s,xx,yy;\r
        for(long k=0;k<z->GetNz();k++)\r
@@ -535,9 +537,9 @@ void MGL_EXPORT mgl_surfc_xy(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT c, const char
 #pragma omp parallel for\r
                        for(long i=0;i<n*m;i++) gr->mark_plot(pos[i],'.');\r
                else    mgl_surf_plot(gr,pos,n,m);\r
-               if(mglchr(sch,'#') && !gr->Stop)\r
+               if(wire && !gr->Stop)\r
                {\r
-                       gr->Reserve(n*m);       gr->SetPenPal("k-");\r
+                       gr->SetPenPal("k-");\r
 #pragma omp parallel for\r
                        for(long i=0;i<n*m;i++) pos[i] = gr->CopyNtoC(pos[i],gr->CDef);\r
                        mgl_mesh_plot(gr,pos,n,m,3);\r
@@ -578,7 +580,8 @@ void MGL_EXPORT mgl_surfa_xy(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT c, const char
        static int cgid=1;      gr->StartGroup("SurfA",cgid++);\r
        long ss = gr->AddTexture(sch);\r
        long *pos = new long[n*m];\r
-       gr->Reserve(n*m*z->GetNz());\r
+       bool wire = (mglchr(sch,'#'));\r
+       gr->Reserve((n+1)*(m+1)*z->GetNz()*(wire?2:1));\r
 \r
        mglPoint p,q,s,xx,yy;\r
        for(k=0;k<z->GetNz();k++)\r
@@ -597,9 +600,9 @@ void MGL_EXPORT mgl_surfa_xy(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT c, const char
 #pragma omp parallel for\r
                        for(long i=0;i<n*m;i++) gr->mark_plot(pos[i],'.');\r
                else    mgl_surf_plot(gr,pos,n,m);\r
-               if(mglchr(sch,'#'))\r
+               if(wire && !gr->Stop)\r
                {\r
-                       gr->Reserve(n*m);       gr->SetPenPal("k-");\r
+                       gr->SetPenPal("k-");\r
 #pragma omp parallel for\r
                        for(long i=0;i<n*m;i++) pos[i] = gr->CopyNtoC(pos[i],gr->CDef);\r
                        mgl_mesh_plot(gr,pos,n,m,3);\r
index 89ad9fe0bc34877217bc3c284db883cbe117737d..464456215f818b2da454bef2c78fa607d2ac7757 100644 (file)
@@ -1021,7 +1021,7 @@ void MGL_EXPORT mgl_grad_xyz(HMGL gr, HCDT x, HCDT y, HCDT z, HCDT phi, const ch
        mglData ax(phi), ay,az,xx,yy,zz;\r
        ay.Set(ax);     az.Set(ax);     xx.Set(ax);     yy.Set(ax);     zz.Set(ax);\r
        long n=xx.nx, m=xx.ny, l=xx.nz, nn = n*m*l;\r
-       if(x->GetNx()*x->GetNy()*x->GetNz()==nn && y->GetNx()*y->GetNy()*y->GetNz()==nn && x->GetNx()*x->GetNy()*x->GetNz()==nn)\r
+       if(x->GetNx()*x->GetNy()*x->GetNz()==nn && y->GetNx()*y->GetNy()*y->GetNz()==nn && z->GetNx()*z->GetNy()*z->GetNz()==nn)\r
        {       xx.Set(x);      yy.Set(y);      zz.Set(z);      }       // nothing to do\r
        else if(x->GetNx()==n && y->GetNx()==m && z->GetNx()==l)\r
 #pragma omp parallel for collapse(3)\r
index 910eb3e15630d25cc4f6ce9782708b2f49377d3c..2a8303132e269551e43fa4fa26b5b676d07c22c9 100644 (file)
@@ -285,7 +285,7 @@ void MGL_EXPORT mgl_surf3_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z, H
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q);        u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        kx2[i1] = kk.size()-1;\r
+                                       kx2[i1] = kk.size();    kk.push_back(u);\r
                                }\r
                        }\r
                        if(j<m-1)\r
@@ -301,7 +301,7 @@ void MGL_EXPORT mgl_surf3_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z, H
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q);        u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        ky2[i1] = kk.size()-1;\r
+                                       ky2[i1] = kk.size();    kk.push_back(u);\r
                                }\r
                        }\r
                        if(k>0)\r
@@ -317,7 +317,7 @@ void MGL_EXPORT mgl_surf3_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z, H
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q);        u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        kz[i1] = kk.size()-1;\r
+                                       kz[i1] = kk.size();     kk.push_back(u);\r
                                }\r
                        }\r
                }\r
@@ -436,7 +436,7 @@ void MGL_EXPORT mgl_surf3a_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z,
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q,aa);     u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        kx2[i1] = kk.size()-1;\r
+                                       kx2[i1] = kk.size();    kk.push_back(u);\r
                                }\r
                        }\r
                        if(j<m-1)\r
@@ -453,7 +453,7 @@ void MGL_EXPORT mgl_surf3a_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z,
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q,aa);     u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        ky2[i1] = kk.size()-1;\r
+                                       ky2[i1] = kk.size();    kk.push_back(u);\r
                                }\r
                        }\r
                        if(k>0)\r
@@ -470,7 +470,7 @@ void MGL_EXPORT mgl_surf3a_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z,
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q,aa);     u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        kz[i1] = kk.size()-1;\r
+                                       kz[i1] = kk.size();     kk.push_back(u);\r
                                }\r
                        }\r
                }\r
@@ -603,7 +603,7 @@ void MGL_EXPORT mgl_surf3c_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z,
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q);        u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        kx2[i1] = kk.size()-1;\r
+                                       kx2[i1] = kk.size();    kk.push_back(u);\r
                                }\r
                        }\r
                        if(j<m-1)\r
@@ -620,7 +620,7 @@ void MGL_EXPORT mgl_surf3c_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z,
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q);        u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        ky2[i1] = kk.size()-1;\r
+                                       ky2[i1] = kk.size();    kk.push_back(u);\r
                                }\r
                        }\r
                        if(k>0)\r
@@ -637,7 +637,7 @@ void MGL_EXPORT mgl_surf3c_xyz_val(HMGL gr, double val, HCDT x, HCDT y, HCDT z,
                                        q = mgl_find_norm(both, x,y,z,a, u, inv,n,m,l);\r
                                        pos = gr->AddPnt(p,c,q);        u.c=pos;\r
                                        if(pos<0)       continue;\r
-                                       kk.push_back(u);        kz[i1] = kk.size()-1;\r
+                                       kz[i1] = kk.size();     kk.push_back(u);\r
                                }\r
                        }\r
                }\r
diff --git a/texinfo/deflate.min.js b/texinfo/deflate.min.js
deleted file mode 100644 (file)
index a6e4153..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */
-(function() {'use strict';var j=void 0,z=!0,da=this;function ea(a,c){var b=a.split("."),g=da;!(b[0]in g)&&g.execScript&&g.execScript("var "+b[0]);for(var d;b.length&&(d=b.shift());)!b.length&&c!==j?g[d]=c:g=g[d]?g[d]:g[d]={}};var F="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array;function G(a,c){this.index="number"===typeof c?c:0;this.e=0;this.buffer=a instanceof(F?Uint8Array:Array)?a:new (F?Uint8Array:Array)(32768);if(2*this.buffer.length<=this.index)throw Error("invalid index");this.buffer.length<=this.index&&fa(this)}function fa(a){var c=a.buffer,b,g=c.length,d=new (F?Uint8Array:Array)(g<<1);if(F)d.set(c);else for(b=0;b<g;++b)d[b]=c[b];return a.buffer=d}
-G.prototype.b=function(a,c,b){var g=this.buffer,d=this.index,e=this.e,f=g[d],l;b&&1<c&&(a=8<c?(O[a&255]<<24|O[a>>>8&255]<<16|O[a>>>16&255]<<8|O[a>>>24&255])>>32-c:O[a]>>8-c);if(8>c+e)f=f<<c|a,e+=c;else for(l=0;l<c;++l)f=f<<1|a>>c-l-1&1,8===++e&&(e=0,g[d++]=O[f],f=0,d===g.length&&(g=fa(this)));g[d]=f;this.buffer=g;this.e=e;this.index=d};G.prototype.finish=function(){var a=this.buffer,c=this.index,b;0<this.e&&(a[c]<<=8-this.e,a[c]=O[a[c]],c++);F?b=a.subarray(0,c):(a.length=c,b=a);return b};
-var ga=new (F?Uint8Array:Array)(256),P;for(P=0;256>P;++P){for(var R=P,S=R,ha=7,R=R>>>1;R;R>>>=1)S<<=1,S|=R&1,--ha;ga[P]=(S<<ha&255)>>>0}var O=ga;var ia=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,
-2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,
-2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,
-2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,
-3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,
-936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];F&&new Uint32Array(ia);function ja(a){this.buffer=new (F?Uint16Array:Array)(2*a);this.length=0}ja.prototype.getParent=function(a){return 2*((a-2)/4|0)};ja.prototype.push=function(a,c){var b,g,d=this.buffer,e;b=this.length;d[this.length++]=c;for(d[this.length++]=a;0<b;)if(g=this.getParent(b),d[b]>d[g])e=d[b],d[b]=d[g],d[g]=e,e=d[b+1],d[b+1]=d[g+1],d[g+1]=e,b=g;else break;return this.length};
-ja.prototype.pop=function(){var a,c,b=this.buffer,g,d,e;c=b[0];a=b[1];this.length-=2;b[0]=b[this.length];b[1]=b[this.length+1];for(e=0;;){d=2*e+2;if(d>=this.length)break;d+2<this.length&&b[d+2]>b[d]&&(d+=2);if(b[d]>b[e])g=b[e],b[e]=b[d],b[d]=g,g=b[e+1],b[e+1]=b[d+1],b[d+1]=g;else break;e=d}return{index:a,value:c,length:this.length}};function ma(a){var c=a.length,b=0,g=Number.POSITIVE_INFINITY,d,e,f,l,s,k,r,m,h;for(m=0;m<c;++m)a[m]>b&&(b=a[m]),a[m]<g&&(g=a[m]);d=1<<b;e=new (F?Uint32Array:Array)(d);f=1;l=0;for(s=2;f<=b;){for(m=0;m<c;++m)if(a[m]===f){k=0;r=l;for(h=0;h<f;++h)k=k<<1|r&1,r>>=1;for(h=k;h<d;h+=s)e[h]=f<<16|m;++l}++f;l<<=1;s<<=1}};function na(a,c){this.d=oa;this.i=0;this.input=a;this.c=0;c&&(c.lazy&&(this.i=c.lazy),"number"===typeof c.compressionType&&(this.d=c.compressionType),c.outputBuffer&&(this.a=F&&c.outputBuffer instanceof Array?new Uint8Array(c.outputBuffer):c.outputBuffer),"number"===typeof c.outputIndex&&(this.c=c.outputIndex));this.a||(this.a=new (F?Uint8Array:Array)(32768))}var oa=2,pa={NONE:0,h:1,g:oa,n:3},T=[],V;
-for(V=0;288>V;V++)switch(z){case 143>=V:T.push([V+48,8]);break;case 255>=V:T.push([V-144+400,9]);break;case 279>=V:T.push([V-256+0,7]);break;case 287>=V:T.push([V-280+192,8]);break;default:throw"invalid literal: "+V;}
-na.prototype.f=function(){var a,c,b,g,d=this.input;switch(this.d){case 0:b=0;for(g=d.length;b<g;){c=F?d.subarray(b,b+65535):d.slice(b,b+65535);b+=c.length;var e=c,f=b===g,l=j,s=j,k=j,r=j,m=j,h=this.a,n=this.c;if(F){for(h=new Uint8Array(this.a.buffer);h.length<=n+e.length+5;)h=new Uint8Array(h.length<<1);h.set(this.a)}l=f?1:0;h[n++]=l|0;s=e.length;k=~s+65536&65535;h[n++]=s&255;h[n++]=s>>>8&255;h[n++]=k&255;h[n++]=k>>>8&255;if(F)h.set(e,n),n+=e.length,h=h.subarray(0,n);else{r=0;for(m=e.length;r<m;++r)h[n++]=
-e[r];h.length=n}this.c=n;this.a=h}break;case 1:var w=new G(new Uint8Array(this.a.buffer),this.c);w.b(1,1,z);w.b(1,2,z);var q=ra(this,d),u,I,y;u=0;for(I=q.length;u<I;u++)if(y=q[u],G.prototype.b.apply(w,T[y]),256<y)w.b(q[++u],q[++u],z),w.b(q[++u],5),w.b(q[++u],q[++u],z);else if(256===y)break;this.a=w.finish();this.c=this.a.length;break;case oa:var x=new G(new Uint8Array(this.a),this.c),A,i,p,C,B,$=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Q,Ga,aa,Ha,ka,qa=Array(19),Ia,U,la,D,Ja;A=oa;x.b(1,1,
-z);x.b(A,2,z);i=ra(this,d);Q=sa(this.m,15);Ga=ua(Q);aa=sa(this.l,7);Ha=ua(aa);for(p=286;257<p&&0===Q[p-1];p--);for(C=30;1<C&&0===aa[C-1];C--);var Ka=p,La=C,K=new (F?Uint32Array:Array)(Ka+La),t,L,v,ba,J=new (F?Uint32Array:Array)(316),H,E,M=new (F?Uint8Array:Array)(19);for(t=L=0;t<Ka;t++)K[L++]=Q[t];for(t=0;t<La;t++)K[L++]=aa[t];if(!F){t=0;for(ba=M.length;t<ba;++t)M[t]=0}t=H=0;for(ba=K.length;t<ba;t+=L){for(L=1;t+L<ba&&K[t+L]===K[t];++L);v=L;if(0===K[t])if(3>v)for(;0<v--;)J[H++]=0,M[0]++;else for(;0<
-v;)E=138>v?v:138,E>v-3&&E<v&&(E=v-3),10>=E?(J[H++]=17,J[H++]=E-3,M[17]++):(J[H++]=18,J[H++]=E-11,M[18]++),v-=E;else if(J[H++]=K[t],M[K[t]]++,v--,3>v)for(;0<v--;)J[H++]=K[t],M[K[t]]++;else for(;0<v;)E=6>v?v:6,E>v-3&&E<v&&(E=v-3),J[H++]=16,J[H++]=E-3,M[16]++,v-=E}a=F?J.subarray(0,H):J.slice(0,H);ka=sa(M,7);for(D=0;19>D;D++)qa[D]=ka[$[D]];for(B=19;4<B&&0===qa[B-1];B--);Ia=ua(ka);x.b(p-257,5,z);x.b(C-1,5,z);x.b(B-4,4,z);for(D=0;D<B;D++)x.b(qa[D],3,z);D=0;for(Ja=a.length;D<Ja;D++)if(U=a[D],x.b(Ia[U],ka[U],
-z),16<=U){D++;switch(U){case 16:la=2;break;case 17:la=3;break;case 18:la=7;break;default:throw"invalid code: "+U;}x.b(a[D],la,z)}var Ma=[Ga,Q],Na=[Ha,aa],N,Oa,ca,ta,Pa,Qa,Ra,Sa;Pa=Ma[0];Qa=Ma[1];Ra=Na[0];Sa=Na[1];N=0;for(Oa=i.length;N<Oa;++N)if(ca=i[N],x.b(Pa[ca],Qa[ca],z),256<ca)x.b(i[++N],i[++N],z),ta=i[++N],x.b(Ra[ta],Sa[ta],z),x.b(i[++N],i[++N],z);else if(256===ca)break;this.a=x.finish();this.c=this.a.length;break;default:throw"invalid compression type";}return this.a};
-function va(a,c){this.length=a;this.k=c}
-function wa(){var a=xa;switch(z){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-
-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:throw"invalid length: "+a;}}var ya=[],xa,za;
-for(xa=3;258>=xa;xa++)za=wa(),ya[xa]=za[2]<<24|za[1]<<16|za[0];var Aa=F?new Uint32Array(ya):ya;
-function ra(a,c){function b(a,c){var b=a.k,d=[],e=0,g;g=Aa[a.length];d[e++]=g&65535;d[e++]=g>>16&255;d[e++]=g>>24;var f;switch(z){case 1===b:f=[0,b-1,0];break;case 2===b:f=[1,b-2,0];break;case 3===b:f=[2,b-3,0];break;case 4===b:f=[3,b-4,0];break;case 6>=b:f=[4,b-5,1];break;case 8>=b:f=[5,b-7,1];break;case 12>=b:f=[6,b-9,2];break;case 16>=b:f=[7,b-13,2];break;case 24>=b:f=[8,b-17,3];break;case 32>=b:f=[9,b-25,3];break;case 48>=b:f=[10,b-33,4];break;case 64>=b:f=[11,b-49,4];break;case 96>=b:f=[12,b-
-65,5];break;case 128>=b:f=[13,b-97,5];break;case 192>=b:f=[14,b-129,6];break;case 256>=b:f=[15,b-193,6];break;case 384>=b:f=[16,b-257,7];break;case 512>=b:f=[17,b-385,7];break;case 768>=b:f=[18,b-513,8];break;case 1024>=b:f=[19,b-769,8];break;case 1536>=b:f=[20,b-1025,9];break;case 2048>=b:f=[21,b-1537,9];break;case 3072>=b:f=[22,b-2049,10];break;case 4096>=b:f=[23,b-3073,10];break;case 6144>=b:f=[24,b-4097,11];break;case 8192>=b:f=[25,b-6145,11];break;case 12288>=b:f=[26,b-8193,12];break;case 16384>=
-b:f=[27,b-12289,12];break;case 24576>=b:f=[28,b-16385,13];break;case 32768>=b:f=[29,b-24577,13];break;default:throw"invalid distance";}g=f;d[e++]=g[0];d[e++]=g[1];d[e++]=g[2];var i,k;i=0;for(k=d.length;i<k;++i)h[n++]=d[i];q[d[0]]++;u[d[3]]++;w=a.length+c-1;m=null}var g,d,e,f,l,s={},k,r,m,h=F?new Uint16Array(2*c.length):[],n=0,w=0,q=new (F?Uint32Array:Array)(286),u=new (F?Uint32Array:Array)(30),I=a.i,y;if(!F){for(e=0;285>=e;)q[e++]=0;for(e=0;29>=e;)u[e++]=0}q[256]=1;g=0;for(d=c.length;g<d;++g){e=l=
-0;for(f=3;e<f&&g+e!==d;++e)l=l<<8|c[g+e];s[l]===j&&(s[l]=[]);k=s[l];if(!(0<w--)){for(;0<k.length&&32768<g-k[0];)k.shift();if(g+3>=d){m&&b(m,-1);e=0;for(f=d-g;e<f;++e)y=c[g+e],h[n++]=y,++q[y];break}if(0<k.length){var x=j,A=j,i=0,p=j,C=j,B=j,$=j,Q=c.length,C=0,$=k.length;a:for(;C<$;C++){x=k[$-C-1];p=3;if(3<i){for(B=i;3<B;B--)if(c[x+B-1]!==c[g+B-1])continue a;p=i}for(;258>p&&g+p<Q&&c[x+p]===c[g+p];)++p;p>i&&(A=x,i=p);if(258===p)break}r=new va(i,g-A);m?m.length<r.length?(y=c[g-1],h[n++]=y,++q[y],b(r,
-0)):b(m,-1):r.length<I?m=r:b(r,0)}else m?b(m,-1):(y=c[g],h[n++]=y,++q[y])}k.push(g)}h[n++]=256;q[256]++;a.m=q;a.l=u;return F?h.subarray(0,n):h}
-function sa(a,c){function b(a){var c=u[a][I[a]];c===m?(b(a+1),b(a+1)):--w[c];++I[a]}var g=a.length,d=new ja(572),e=new (F?Uint8Array:Array)(g),f,l,s,k,r;if(!F)for(k=0;k<g;k++)e[k]=0;for(k=0;k<g;++k)0<a[k]&&d.push(k,a[k]);f=Array(d.length/2);l=new (F?Uint32Array:Array)(d.length/2);if(1===f.length)return e[d.pop().index]=1,e;k=0;for(r=d.length/2;k<r;++k)f[k]=d.pop(),l[k]=f[k].value;var m=l.length,h=new (F?Uint16Array:Array)(c),n=new (F?Uint8Array:Array)(c),w=new (F?Uint8Array:Array)(m),q=Array(c),u=
-Array(c),I=Array(c),y=(1<<c)-m,x=1<<c-1,A,i,p,C,B;h[c-1]=m;for(i=0;i<c;++i)y<x?n[i]=0:(n[i]=1,y-=x),y<<=1,h[c-2-i]=(h[c-1-i]/2|0)+m;h[0]=n[0];q[0]=Array(h[0]);u[0]=Array(h[0]);for(i=1;i<c;++i)h[i]>2*h[i-1]+n[i]&&(h[i]=2*h[i-1]+n[i]),q[i]=Array(h[i]),u[i]=Array(h[i]);for(A=0;A<m;++A)w[A]=c;for(p=0;p<h[c-1];++p)q[c-1][p]=l[p],u[c-1][p]=p;for(A=0;A<c;++A)I[A]=0;1===n[c-1]&&(--w[0],++I[c-1]);for(i=c-2;0<=i;--i){C=A=0;B=I[i+1];for(p=0;p<h[i];p++)C=q[i+1][B]+q[i+1][B+1],C>l[A]?(q[i][p]=C,u[i][p]=m,B+=2):
-(q[i][p]=l[A],u[i][p]=A,++A);I[i]=0;1===n[i]&&b(i)}s=w;k=0;for(r=f.length;k<r;++k)e[f[k].index]=s[k];return e}function ua(a){var c=new (F?Uint16Array:Array)(a.length),b=[],g=[],d=0,e,f,l,s;e=0;for(f=a.length;e<f;e++)b[a[e]]=(b[a[e]]|0)+1;e=1;for(f=16;e<=f;e++)g[e]=d,d+=b[e]|0,d<<=1;e=0;for(f=a.length;e<f;e++){d=g[a[e]];g[a[e]]+=1;l=c[e]=0;for(s=a[e];l<s;l++)c[e]=c[e]<<1|d&1,d>>>=1}return c};var Ba=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];F&&new Uint16Array(Ba);var Ca=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258];F&&new Uint16Array(Ca);var Da=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0];F&&new Uint8Array(Da);var Ea=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577];F&&new Uint16Array(Ea);
-var Fa=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];F&&new Uint8Array(Fa);var Ta=new (F?Uint8Array:Array)(288),W,Ua;W=0;for(Ua=Ta.length;W<Ua;++W)Ta[W]=143>=W?8:255>=W?9:279>=W?7:8;ma(Ta);var Va=new (F?Uint8Array:Array)(30),Wa,Xa;Wa=0;for(Xa=Va.length;Wa<Xa;++Wa)Va[Wa]=5;ma(Va);var Ya=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];F&&new Uint16Array(Ya);var Za=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258];F&&new Uint16Array(Za);var $a=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0];F&&new Uint8Array($a);var ab=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577];F&&new Uint16Array(ab);
-var bb=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];F&&new Uint8Array(bb);var cb=new (F?Uint8Array:Array)(288),X,db;X=0;for(db=cb.length;X<db;++X)cb[X]=143>=X?8:255>=X?9:279>=X?7:8;ma(cb);var eb=new (F?Uint8Array:Array)(30),fb,gb;fb=0;for(gb=eb.length;fb<gb;++fb)eb[fb]=5;ma(eb);function hb(a,c){this.input=a;this.a=new (F?Uint8Array:Array)(32768);this.d=Y.g;var b={},g;if((c||!(c={}))&&"number"===typeof c.compressionType)this.d=c.compressionType;for(g in c)b[g]=c[g];b.outputBuffer=this.a;this.j=new na(this.input,b)}var Y=pa;
-hb.prototype.f=function(){var a,c,b,g,d,e,f,l=0;f=this.a;a=ib;switch(a){case ib:c=Math.LOG2E*Math.log(32768)-8;break;default:throw Error("invalid compression method");}b=c<<4|a;f[l++]=b;switch(a){case ib:switch(this.d){case Y.NONE:d=0;break;case Y.h:d=1;break;case Y.g:d=2;break;default:throw Error("unsupported compression type");}break;default:throw Error("invalid compression method");}g=d<<6|0;f[l++]=g|31-(256*b+g)%31;var s=this.input;if("string"===typeof s){var k=s.split(""),r,m;r=0;for(m=k.length;r<
-m;r++)k[r]=(k[r].charCodeAt(0)&255)>>>0;s=k}for(var h=1,n=0,w=s.length,q,u=0;0<w;){q=1024<w?1024:w;w-=q;do h+=s[u++],n+=h;while(--q);h%=65521;n%=65521}e=(n<<16|h)>>>0;this.j.c=l;f=this.j.f();l=f.length;F&&(f=new Uint8Array(f.buffer),f.length<=l+4&&(this.a=new Uint8Array(f.length+4),this.a.set(f),f=this.a),f=f.subarray(0,l+4));f[l++]=e>>24&255;f[l++]=e>>16&255;f[l++]=e>>8&255;f[l++]=e&255;return f};ea("Zlib.Deflate",hb);ea("Zlib.Deflate.compress",function(a,c){return(new hb(a,c)).f()});ea("Zlib.Deflate.prototype.compress",hb.prototype.f);var jb={NONE:Y.NONE,FIXED:Y.h,DYNAMIC:Y.g},kb,lb,Z,mb;if(Object.keys)kb=Object.keys(jb);else for(lb in kb=[],Z=0,jb)kb[Z++]=lb;Z=0;for(mb=kb.length;Z<mb;++Z)lb=kb[Z],ea("Zlib.Deflate.CompressionType."+lb,jb[lb]);var ib=8;}).call(this);
diff --git a/texinfo/gunzip.min.js b/texinfo/gunzip.min.js
deleted file mode 100644 (file)
index 9842bc4..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */
-(function() {'use strict';function k(a){throw a;}var m=void 0,aa=this;function p(a,c){var d=a.split("."),b=aa;!(d[0]in b)&&b.execScript&&b.execScript("var "+d[0]);for(var e;d.length&&(e=d.shift());)!d.length&&c!==m?b[e]=c:b=b[e]?b[e]:b[e]={}};var s="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array;new (s?Uint8Array:Array)(256);var t;for(t=0;256>t;++t)for(var u=t,ba=7,u=u>>>1;u;u>>>=1)--ba;function v(a,c,d){var b,e="number"===typeof c?c:c=0,f="number"===typeof d?d:a.length;b=-1;for(e=f&7;e--;++c)b=b>>>8^w[(b^a[c])&255];for(e=f>>3;e--;c+=8)b=b>>>8^w[(b^a[c])&255],b=b>>>8^w[(b^a[c+1])&255],b=b>>>8^w[(b^a[c+2])&255],b=b>>>8^w[(b^a[c+3])&255],b=b>>>8^w[(b^a[c+4])&255],b=b>>>8^w[(b^a[c+5])&255],b=b>>>8^w[(b^a[c+6])&255],b=b>>>8^w[(b^a[c+7])&255];return(b^4294967295)>>>0}
-var w,x=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,
-2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,
-2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,
-2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,
-3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,
-936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];w=s?new Uint32Array(x):x;function y(){}y.prototype.getName=function(){return this.name};y.prototype.getData=function(){return this.data};y.prototype.G=function(){return this.H};p("Zlib.GunzipMember",y);p("Zlib.GunzipMember.prototype.getName",y.prototype.getName);p("Zlib.GunzipMember.prototype.getData",y.prototype.getData);p("Zlib.GunzipMember.prototype.getMtime",y.prototype.G);function z(a){var c=a.length,d=0,b=Number.POSITIVE_INFINITY,e,f,g,i,l,n,r,h,j;for(h=0;h<c;++h)a[h]>d&&(d=a[h]),a[h]<b&&(b=a[h]);e=1<<d;f=new (s?Uint32Array:Array)(e);g=1;i=0;for(l=2;g<=d;){for(h=0;h<c;++h)if(a[h]===g){n=0;r=i;for(j=0;j<g;++j)n=n<<1|r&1,r>>=1;for(j=n;j<e;j+=l)f[j]=g<<16|h;++i}++g;i<<=1;l<<=1}return[f,d,b]};var B=[],C;for(C=0;288>C;C++)switch(!0){case 143>=C:B.push([C+48,8]);break;case 255>=C:B.push([C-144+400,9]);break;case 279>=C:B.push([C-256+0,7]);break;case 287>=C:B.push([C-280+192,8]);break;default:k("invalid literal: "+C)}
-function ca(){var a=D;switch(!0){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-
-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:k("invalid length: "+a)}}var E=[],D,G;
-for(D=3;258>=D;D++)G=ca(),E[D]=G[2]<<24|G[1]<<16|G[0];s&&new Uint32Array(E);function H(a,c){this.i=[];this.j=32768;this.d=this.f=this.c=this.n=0;this.input=s?new Uint8Array(a):a;this.o=!1;this.k=I;this.w=!1;if(c||!(c={}))c.index&&(this.c=c.index),c.bufferSize&&(this.j=c.bufferSize),c.bufferType&&(this.k=c.bufferType),c.resize&&(this.w=c.resize);switch(this.k){case J:this.a=32768;this.b=new (s?Uint8Array:Array)(32768+this.j+258);break;case I:this.a=0;this.b=new (s?Uint8Array:Array)(this.j);this.e=this.D;this.q=this.A;this.l=this.C;break;default:k(Error("invalid inflate mode"))}}
-var J=0,I=1;
-H.prototype.g=function(){for(;!this.o;){var a=K(this,3);a&1&&(this.o=!0);a>>>=1;switch(a){case 0:var c=this.input,d=this.c,b=this.b,e=this.a,f=m,g=m,i=m,l=b.length,n=m;this.d=this.f=0;f=c[d++];f===m&&k(Error("invalid uncompressed block header: LEN (first byte)"));g=f;f=c[d++];f===m&&k(Error("invalid uncompressed block header: LEN (second byte)"));g|=f<<8;f=c[d++];f===m&&k(Error("invalid uncompressed block header: NLEN (first byte)"));i=f;f=c[d++];f===m&&k(Error("invalid uncompressed block header: NLEN (second byte)"));i|=
-f<<8;g===~i&&k(Error("invalid uncompressed block header: length verify"));d+g>c.length&&k(Error("input buffer is broken"));switch(this.k){case J:for(;e+g>b.length;){n=l-e;g-=n;if(s)b.set(c.subarray(d,d+n),e),e+=n,d+=n;else for(;n--;)b[e++]=c[d++];this.a=e;b=this.e();e=this.a}break;case I:for(;e+g>b.length;)b=this.e({t:2});break;default:k(Error("invalid inflate mode"))}if(s)b.set(c.subarray(d,d+g),e),e+=g,d+=g;else for(;g--;)b[e++]=c[d++];this.c=d;this.a=e;this.b=b;break;case 1:this.l(da,ea);break;
-case 2:fa(this);break;default:k(Error("unknown BTYPE: "+a))}}return this.q()};
-var L=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ga=s?new Uint16Array(L):L,ha=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],ia=s?new Uint16Array(ha):ha,ja=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],M=s?new Uint8Array(ja):ja,ka=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],la=s?new Uint16Array(ka):ka,ma=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,
-11,12,12,13,13],O=s?new Uint8Array(ma):ma,P=new (s?Uint8Array:Array)(288),Q,na;Q=0;for(na=P.length;Q<na;++Q)P[Q]=143>=Q?8:255>=Q?9:279>=Q?7:8;var da=z(P),R=new (s?Uint8Array:Array)(30),S,oa;S=0;for(oa=R.length;S<oa;++S)R[S]=5;var ea=z(R);function K(a,c){for(var d=a.f,b=a.d,e=a.input,f=a.c,g;b<c;)g=e[f++],g===m&&k(Error("input buffer is broken")),d|=g<<b,b+=8;g=d&(1<<c)-1;a.f=d>>>c;a.d=b-c;a.c=f;return g}
-function V(a,c){for(var d=a.f,b=a.d,e=a.input,f=a.c,g=c[0],i=c[1],l,n,r;b<i;)l=e[f++],l===m&&k(Error("input buffer is broken")),d|=l<<b,b+=8;n=g[d&(1<<i)-1];r=n>>>16;a.f=d>>r;a.d=b-r;a.c=f;return n&65535}
-function fa(a){function c(a,c,b){var d,e,f,g;for(g=0;g<a;)switch(d=V(this,c),d){case 16:for(f=3+K(this,2);f--;)b[g++]=e;break;case 17:for(f=3+K(this,3);f--;)b[g++]=0;e=0;break;case 18:for(f=11+K(this,7);f--;)b[g++]=0;e=0;break;default:e=b[g++]=d}return b}var d=K(a,5)+257,b=K(a,5)+1,e=K(a,4)+4,f=new (s?Uint8Array:Array)(ga.length),g,i,l,n;for(n=0;n<e;++n)f[ga[n]]=K(a,3);g=z(f);i=new (s?Uint8Array:Array)(d);l=new (s?Uint8Array:Array)(b);a.l(z(c.call(a,d,g,i)),z(c.call(a,b,g,l)))}
-H.prototype.l=function(a,c){var d=this.b,b=this.a;this.r=a;for(var e=d.length-258,f,g,i,l;256!==(f=V(this,a));)if(256>f)b>=e&&(this.a=b,d=this.e(),b=this.a),d[b++]=f;else{g=f-257;l=ia[g];0<M[g]&&(l+=K(this,M[g]));f=V(this,c);i=la[f];0<O[f]&&(i+=K(this,O[f]));b>=e&&(this.a=b,d=this.e(),b=this.a);for(;l--;)d[b]=d[b++-i]}for(;8<=this.d;)this.d-=8,this.c--;this.a=b};
-H.prototype.C=function(a,c){var d=this.b,b=this.a;this.r=a;for(var e=d.length,f,g,i,l;256!==(f=V(this,a));)if(256>f)b>=e&&(d=this.e(),e=d.length),d[b++]=f;else{g=f-257;l=ia[g];0<M[g]&&(l+=K(this,M[g]));f=V(this,c);i=la[f];0<O[f]&&(i+=K(this,O[f]));b+l>e&&(d=this.e(),e=d.length);for(;l--;)d[b]=d[b++-i]}for(;8<=this.d;)this.d-=8,this.c--;this.a=b};
-H.prototype.e=function(){var a=new (s?Uint8Array:Array)(this.a-32768),c=this.a-32768,d,b,e=this.b;if(s)a.set(e.subarray(32768,a.length));else{d=0;for(b=a.length;d<b;++d)a[d]=e[d+32768]}this.i.push(a);this.n+=a.length;if(s)e.set(e.subarray(c,c+32768));else for(d=0;32768>d;++d)e[d]=e[c+d];this.a=32768;return e};
-H.prototype.D=function(a){var c,d=this.input.length/this.c+1|0,b,e,f,g=this.input,i=this.b;a&&("number"===typeof a.t&&(d=a.t),"number"===typeof a.z&&(d+=a.z));2>d?(b=(g.length-this.c)/this.r[2],f=258*(b/2)|0,e=f<i.length?i.length+f:i.length<<1):e=i.length*d;s?(c=new Uint8Array(e),c.set(i)):c=i;return this.b=c};
-H.prototype.q=function(){var a=0,c=this.b,d=this.i,b,e=new (s?Uint8Array:Array)(this.n+(this.a-32768)),f,g,i,l;if(0===d.length)return s?this.b.subarray(32768,this.a):this.b.slice(32768,this.a);f=0;for(g=d.length;f<g;++f){b=d[f];i=0;for(l=b.length;i<l;++i)e[a++]=b[i]}f=32768;for(g=this.a;f<g;++f)e[a++]=c[f];this.i=[];return this.buffer=e};
-H.prototype.A=function(){var a,c=this.a;s?this.w?(a=new Uint8Array(c),a.set(this.b.subarray(0,c))):a=this.b.subarray(0,c):(this.b.length>c&&(this.b.length=c),a=this.b);return this.buffer=a};function W(a){this.input=a;this.c=0;this.m=[];this.s=!1}W.prototype.F=function(){this.s||this.g();return this.m.slice()};
-W.prototype.g=function(){for(var a=this.input.length;this.c<a;){var c=new y,d=m,b=m,e=m,f=m,g=m,i=m,l=m,n=m,r=m,h=this.input,j=this.c;c.u=h[j++];c.v=h[j++];(31!==c.u||139!==c.v)&&k(Error("invalid file signature:"+c.u+","+c.v));c.p=h[j++];switch(c.p){case 8:break;default:k(Error("unknown compression method: "+c.p))}c.h=h[j++];n=h[j++]|h[j++]<<8|h[j++]<<16|h[j++]<<24;c.H=new Date(1E3*n);c.N=h[j++];c.M=h[j++];0<(c.h&4)&&(c.I=h[j++]|h[j++]<<8,j+=c.I);if(0<(c.h&8)){l=[];for(i=0;0<(g=h[j++]);)l[i++]=String.fromCharCode(g);
-c.name=l.join("")}if(0<(c.h&16)){l=[];for(i=0;0<(g=h[j++]);)l[i++]=String.fromCharCode(g);c.J=l.join("")}0<(c.h&2)&&(c.B=v(h,0,j)&65535,c.B!==(h[j++]|h[j++]<<8)&&k(Error("invalid header crc16")));d=h[h.length-4]|h[h.length-3]<<8|h[h.length-2]<<16|h[h.length-1]<<24;h.length-j-4-4<512*d&&(f=d);b=new H(h,{index:j,bufferSize:f});c.data=e=b.g();j=b.c;c.K=r=(h[j++]|h[j++]<<8|h[j++]<<16|h[j++]<<24)>>>0;v(e,m,m)!==r&&k(Error("invalid CRC-32 checksum: 0x"+v(e,m,m).toString(16)+" / 0x"+r.toString(16)));c.L=
-d=(h[j++]|h[j++]<<8|h[j++]<<16|h[j++]<<24)>>>0;(e.length&4294967295)!==d&&k(Error("invalid input size: "+(e.length&4294967295)+" / "+d));this.m.push(c);this.c=j}this.s=!0;var F=this.m,q,N,T=0,U=0,A;q=0;for(N=F.length;q<N;++q)U+=F[q].data.length;if(s){A=new Uint8Array(U);for(q=0;q<N;++q)A.set(F[q].data,T),T+=F[q].data.length}else{A=[];for(q=0;q<N;++q)A[q]=F[q].data;A=Array.prototype.concat.apply([],A)}return A};p("Zlib.Gunzip",W);p("Zlib.Gunzip.prototype.decompress",W.prototype.g);p("Zlib.Gunzip.prototype.getMembers",W.prototype.F);var pa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];s&&new Uint16Array(pa);var qa=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258];s&&new Uint16Array(qa);var ra=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0];s&&new Uint8Array(ra);var sa=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577];s&&new Uint16Array(sa);
-var ta=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];s&&new Uint8Array(ta);var X=new (s?Uint8Array:Array)(288),Y,ua;Y=0;for(ua=X.length;Y<ua;++Y)X[Y]=143>=Y?8:255>=Y?9:279>=Y?7:8;z(X);var Z=new (s?Uint8Array:Array)(30),$,va;$=0;for(va=Z.length;$<va;++$)Z[$]=5;z(Z);}).call(this);
diff --git a/texinfo/inflate.min.js b/texinfo/inflate.min.js
deleted file mode 100644 (file)
index a5dee75..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */
-(function() {'use strict';function i(a){throw a;}var l=void 0,aa=this;function p(a,d){var b=a.split("."),c=aa;!(b[0]in c)&&c.execScript&&c.execScript("var "+b[0]);for(var f;b.length&&(f=b.shift());)!b.length&&d!==l?c[f]=d:c=c[f]?c[f]:c[f]={}};var q="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array;new (q?Uint8Array:Array)(256);var r;for(r=0;256>r;++r)for(var t=r,ba=7,t=t>>>1;t;t>>>=1)--ba;var ca=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,
-2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,
-2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,
-2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,
-3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,
-936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];q&&new Uint32Array(ca);function u(a){var d=a.length,b=0,c=Number.POSITIVE_INFINITY,f,e,g,h,j,k,n,m,s;for(m=0;m<d;++m)a[m]>b&&(b=a[m]),a[m]<c&&(c=a[m]);f=1<<b;e=new (q?Uint32Array:Array)(f);g=1;h=0;for(j=2;g<=b;){for(m=0;m<d;++m)if(a[m]===g){k=0;n=h;for(s=0;s<g;++s)k=k<<1|n&1,n>>=1;for(s=k;s<f;s+=j)e[s]=g<<16|m;++h}++g;h<<=1;j<<=1}return[e,b,c]};var v=[],w;for(w=0;288>w;w++)switch(!0){case 143>=w:v.push([w+48,8]);break;case 255>=w:v.push([w-144+400,9]);break;case 279>=w:v.push([w-256+0,7]);break;case 287>=w:v.push([w-280+192,8]);break;default:i("invalid literal: "+w)}
-function da(){var a=x;switch(!0){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-
-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:i("invalid length: "+a)}}var y=[],x,z;
-for(x=3;258>=x;x++)z=da(),y[x]=z[2]<<24|z[1]<<16|z[0];q&&new Uint32Array(y);function A(a,d){this.g=[];this.h=32768;this.d=this.f=this.a=this.l=0;this.input=q?new Uint8Array(a):a;this.m=!1;this.i=B;this.r=!1;if(d||!(d={}))d.index&&(this.a=d.index),d.bufferSize&&(this.h=d.bufferSize),d.bufferType&&(this.i=d.bufferType),d.resize&&(this.r=d.resize);switch(this.i){case C:this.b=32768;this.c=new (q?Uint8Array:Array)(32768+this.h+258);break;case B:this.b=0;this.c=new (q?Uint8Array:Array)(this.h);this.e=this.z;this.n=this.v;this.j=this.w;break;default:i(Error("invalid inflate mode"))}}
-var C=0,B=1,D={t:C,s:B};
-A.prototype.k=function(){for(;!this.m;){var a=E(this,3);a&1&&(this.m=!0);a>>>=1;switch(a){case 0:var d=this.input,b=this.a,c=this.c,f=this.b,e=l,g=l,h=l,j=c.length,k=l;this.d=this.f=0;e=d[b++];e===l&&i(Error("invalid uncompressed block header: LEN (first byte)"));g=e;e=d[b++];e===l&&i(Error("invalid uncompressed block header: LEN (second byte)"));g|=e<<8;e=d[b++];e===l&&i(Error("invalid uncompressed block header: NLEN (first byte)"));h=e;e=d[b++];e===l&&i(Error("invalid uncompressed block header: NLEN (second byte)"));h|=
-e<<8;g===~h&&i(Error("invalid uncompressed block header: length verify"));b+g>d.length&&i(Error("input buffer is broken"));switch(this.i){case C:for(;f+g>c.length;){k=j-f;g-=k;if(q)c.set(d.subarray(b,b+k),f),f+=k,b+=k;else for(;k--;)c[f++]=d[b++];this.b=f;c=this.e();f=this.b}break;case B:for(;f+g>c.length;)c=this.e({p:2});break;default:i(Error("invalid inflate mode"))}if(q)c.set(d.subarray(b,b+g),f),f+=g,b+=g;else for(;g--;)c[f++]=d[b++];this.a=b;this.b=f;this.c=c;break;case 1:this.j(ea,fa);break;
-case 2:ga(this);break;default:i(Error("unknown BTYPE: "+a))}}return this.n()};
-var F=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],G=q?new Uint16Array(F):F,H=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],I=q?new Uint16Array(H):H,J=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],K=q?new Uint8Array(J):J,L=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],ha=q?new Uint16Array(L):L,ia=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,
-13,13],M=q?new Uint8Array(ia):ia,N=new (q?Uint8Array:Array)(288),O,ja;O=0;for(ja=N.length;O<ja;++O)N[O]=143>=O?8:255>=O?9:279>=O?7:8;var ea=u(N),P=new (q?Uint8Array:Array)(30),Q,ka;Q=0;for(ka=P.length;Q<ka;++Q)P[Q]=5;var fa=u(P);function E(a,d){for(var b=a.f,c=a.d,f=a.input,e=a.a,g;c<d;)g=f[e++],g===l&&i(Error("input buffer is broken")),b|=g<<c,c+=8;g=b&(1<<d)-1;a.f=b>>>d;a.d=c-d;a.a=e;return g}
-function R(a,d){for(var b=a.f,c=a.d,f=a.input,e=a.a,g=d[0],h=d[1],j,k,n;c<h;)j=f[e++],j===l&&i(Error("input buffer is broken")),b|=j<<c,c+=8;k=g[b&(1<<h)-1];n=k>>>16;a.f=b>>n;a.d=c-n;a.a=e;return k&65535}
-function ga(a){function d(a,b,c){var d,e,f,g;for(g=0;g<a;)switch(d=R(this,b),d){case 16:for(f=3+E(this,2);f--;)c[g++]=e;break;case 17:for(f=3+E(this,3);f--;)c[g++]=0;e=0;break;case 18:for(f=11+E(this,7);f--;)c[g++]=0;e=0;break;default:e=c[g++]=d}return c}var b=E(a,5)+257,c=E(a,5)+1,f=E(a,4)+4,e=new (q?Uint8Array:Array)(G.length),g,h,j,k;for(k=0;k<f;++k)e[G[k]]=E(a,3);g=u(e);h=new (q?Uint8Array:Array)(b);j=new (q?Uint8Array:Array)(c);a.j(u(d.call(a,b,g,h)),u(d.call(a,c,g,j)))}
-A.prototype.j=function(a,d){var b=this.c,c=this.b;this.o=a;for(var f=b.length-258,e,g,h,j;256!==(e=R(this,a));)if(256>e)c>=f&&(this.b=c,b=this.e(),c=this.b),b[c++]=e;else{g=e-257;j=I[g];0<K[g]&&(j+=E(this,K[g]));e=R(this,d);h=ha[e];0<M[e]&&(h+=E(this,M[e]));c>=f&&(this.b=c,b=this.e(),c=this.b);for(;j--;)b[c]=b[c++-h]}for(;8<=this.d;)this.d-=8,this.a--;this.b=c};
-A.prototype.w=function(a,d){var b=this.c,c=this.b;this.o=a;for(var f=b.length,e,g,h,j;256!==(e=R(this,a));)if(256>e)c>=f&&(b=this.e(),f=b.length),b[c++]=e;else{g=e-257;j=I[g];0<K[g]&&(j+=E(this,K[g]));e=R(this,d);h=ha[e];0<M[e]&&(h+=E(this,M[e]));c+j>f&&(b=this.e(),f=b.length);for(;j--;)b[c]=b[c++-h]}for(;8<=this.d;)this.d-=8,this.a--;this.b=c};
-A.prototype.e=function(){var a=new (q?Uint8Array:Array)(this.b-32768),d=this.b-32768,b,c,f=this.c;if(q)a.set(f.subarray(32768,a.length));else{b=0;for(c=a.length;b<c;++b)a[b]=f[b+32768]}this.g.push(a);this.l+=a.length;if(q)f.set(f.subarray(d,d+32768));else for(b=0;32768>b;++b)f[b]=f[d+b];this.b=32768;return f};
-A.prototype.z=function(a){var d,b=this.input.length/this.a+1|0,c,f,e,g=this.input,h=this.c;a&&("number"===typeof a.p&&(b=a.p),"number"===typeof a.u&&(b+=a.u));2>b?(c=(g.length-this.a)/this.o[2],e=258*(c/2)|0,f=e<h.length?h.length+e:h.length<<1):f=h.length*b;q?(d=new Uint8Array(f),d.set(h)):d=h;return this.c=d};
-A.prototype.n=function(){var a=0,d=this.c,b=this.g,c,f=new (q?Uint8Array:Array)(this.l+(this.b-32768)),e,g,h,j;if(0===b.length)return q?this.c.subarray(32768,this.b):this.c.slice(32768,this.b);e=0;for(g=b.length;e<g;++e){c=b[e];h=0;for(j=c.length;h<j;++h)f[a++]=c[h]}e=32768;for(g=this.b;e<g;++e)f[a++]=d[e];this.g=[];return this.buffer=f};
-A.prototype.v=function(){var a,d=this.b;q?this.r?(a=new Uint8Array(d),a.set(this.c.subarray(0,d))):a=this.c.subarray(0,d):(this.c.length>d&&(this.c.length=d),a=this.c);return this.buffer=a};var la=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];q&&new Uint16Array(la);var ma=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258];q&&new Uint16Array(ma);var na=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0];q&&new Uint8Array(na);var oa=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577];q&&new Uint16Array(oa);
-var pa=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];q&&new Uint8Array(pa);var S=new (q?Uint8Array:Array)(288),T,qa;T=0;for(qa=S.length;T<qa;++T)S[T]=143>=T?8:255>=T?9:279>=T?7:8;u(S);var U=new (q?Uint8Array:Array)(30),V,ra;V=0;for(ra=U.length;V<ra;++V)U[V]=5;u(U);function W(a,d){var b,c;this.input=a;this.a=0;if(d||!(d={}))d.index&&(this.a=d.index),d.verify&&(this.A=d.verify);b=a[this.a++];c=a[this.a++];switch(b&15){case sa:this.method=sa;break;default:i(Error("unsupported compression method"))}0!==((b<<8)+c)%31&&i(Error("invalid fcheck flag:"+((b<<8)+c)%31));c&32&&i(Error("fdict flag is not supported"));this.q=new A(a,{index:this.a,bufferSize:d.bufferSize,bufferType:d.bufferType,resize:d.resize})}
-W.prototype.k=function(){var a=this.input,d,b;d=this.q.k();this.a=this.q.a;if(this.A){b=(a[this.a++]<<24|a[this.a++]<<16|a[this.a++]<<8|a[this.a++])>>>0;var c=d;if("string"===typeof c){var f=c.split(""),e,g;e=0;for(g=f.length;e<g;e++)f[e]=(f[e].charCodeAt(0)&255)>>>0;c=f}for(var h=1,j=0,k=c.length,n,m=0;0<k;){n=1024<k?1024:k;k-=n;do h+=c[m++],j+=h;while(--n);h%=65521;j%=65521}b!==(j<<16|h)>>>0&&i(Error("invalid adler-32 checksum"))}return d};p("Zlib.Inflate",W);p("Zlib.Inflate.prototype.decompress",W.prototype.k);var X={ADAPTIVE:D.s,BLOCK:D.t},Y,Z,$,ta;if(Object.keys)Y=Object.keys(X);else for(Z in Y=[],$=0,X)Y[$++]=Z;$=0;for(ta=Y.length;$<ta;++$)Z=Y[$],p("Zlib.Inflate.BufferType."+Z,X[Z]);var sa=8;}).call(this);
index ac5d43b1875d368d8214614a2974029f4f196eac..ca0e512ca61398727c6a9d08d65c5971b41b509a 100644 (file)
@@ -224,9 +224,9 @@ I'm thankful to D. Eftaxiopoulos, V. Lipatov and S.M. Plis for making binary pac
 @item
 I'm thankful to S. Skobelev, C. Mikhailenko, M. Veysman, A. Prokhorov, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, N. Troickiy and V. Lipatov for fruitful comments.
 @item
-I'm thankful to sponsors M. Veysman (@uref{http://jiht.ru/en/about/structure.php?set_filter_structure=Y&structure_UF_DEPARTMENT=241&filter=Y&set_filter=Y, IHED RAS}) and A. Prokhorov (@url{www.datadvance.net, $DATADVANCE}).
+I'm thankful to sponsors M. Veysman (@uref{http://jiht.ru/en/about/structure.php?set_filter_structure=Y&structure_UF_DEPARTMENT=241&filter=Y&set_filter=Y, IHED RAS}) and A. Prokhorov (@url{www.datadvance.net, DATADVANCE}).
 @end itemize
 
-Javascript interface was developed with support of @url{www.datadvance.net, $DATADVANCE} company.
+Javascript interface was developed with support of @url{www.datadvance.net, DATADVANCE} company.
 
 @external{}
index 795aa9a2104aa8695ab8bb404b0a060a363481ec..8d86cbae8f330f68b20b86609c9722387119b37e 100644 (file)
@@ -227,10 +227,10 @@ MathGL also provide another simple tool @code{mgl.cgi} which parse MGL script fr
 @item
 Я благодарен С. Скобелеву, К. Михайленко, М. Вейсману, A. Прохорову, A. Короткевичу, В. Онучину, С. Плису, Р. Киселеву, A. Иванову, Н. Троицкому and В. Липатову за продуктивные предложения и обсуждения.
 @item
-Я благодарен спонсорам М. Вейсману (@url{http://www.jiht.ru/about/structure.php?set_filter_structure=Y&structure_UF_DEPARTMENT=241&filter=Y&set_filter=Y, ОИВТ РАН}) и A. Прохорову (@url{www.datadvance.net, $DATADVANCE}).
+Я благодарен спонсорам М. Вейсману (@url{http://www.jiht.ru/about/structure.php?set_filter_structure=Y&structure_UF_DEPARTMENT=241&filter=Y&set_filter=Y, ОИВТ РАН}) и A. Прохорову (@url{www.datadvance.net, DATADVANCE}).
 @end itemize
 
-Javascript интерфейс был разработан при поддержке компании @url{www.datadvance.net, $DATADVANCE}.
+Javascript интерфейс был разработан при поддержке компании @url{www.datadvance.net, DATADVANCE}.
 
 
 @external{}
index 467aa27f94e0aaccf54e378897942378247ed0a6..a53255eed95a4ad7eff368a50e692671bd5db480 100644 (file)
@@ -1,3 +1,3 @@
 @set VERSION 2.2
 @set MINVER .1
-@set MINVER 
+@c @set MINVER 
index c4619ff00b8ab5d234fc06c1a88a055f120fc2ef..51f5b64927dba7aa7aad332ac3d4660211ca9aa8 100644 (file)
@@ -48,7 +48,7 @@ Email: <input type=text name=email> <input type=submit name="sub" value="Subscri
 @end ifhtml
 
 @strong{About LGPL and GPL licenses.}
-Generally MathGL is GPL library. However, you can use LGPL license for MathGL core if you don't use wrapper widget classes, SWIG-based interfaces and disable GSL features. This can be done by using @code{lgpl} option at build time. According this, I've added the LGPL win32 binaries into @ref{Download} page.
+Generally, MathGL is GPL library. However, you can use LGPL license for MathGL core and widgets if you don't use SWIG-based interfaces and disable GSL features. This can be done by using @code{lgpl} option at build time. According this, I've added the LGPL win32 binaries into @ref{Download} page.
 
 @strong{Latest news}
 @itemize
@@ -62,10 +62,10 @@ There is detailed @ref{News, news list}. Sourceforge project page @uref{http://s
 
 @ifhtml
 @html
-<a href="http://www.datadvance.net"><img border="0" align="right" hspace="10" alt="$DATADVANCE" src="../datadvance.png"></a>
+<a href="http://www.datadvance.net"><img border="0" align="right" hspace="10" alt="DATADVANCE" src="../datadvance.png"></a>
 @end html
 @end ifhtml
-Javascript interface was developed with support of @url{http://www.datadvance.net, $DATADVANCE} company.
+Javascript interface was developed with support of @url{http://www.datadvance.net, DATADVANCE} company.
 
 @external{}
 
@@ -516,15 +516,15 @@ You may download current version of MathGL for following configurations:
 @item
 @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.tar.gz,source} file with cmake build system.
 @item
-@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}-mingw.i686.7z,Win32 GPL} binaries for MinGW (build for i686)
+@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}-mingw.i686.7z,Win32 GPL} binaries for MinGW (build for i686)
 @item
-@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.LGPL-mingw.i686.7z,Win32 LGPL} binaries for MinGW (build for i686, no GSL and HDF5 support)
+@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.LGPL-mingw.i686.7z,Win32 LGPL} binaries for MinGW (build for i686, no GSL and HDF5 support)
 @c @item
-@c @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.LGPL-win64.7z,Win64 LGPL} binaries for MSVS 2010 (no GSL and HDF5 support)
+@c @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.LGPL-win64.7z,Win64 LGPL} binaries for MSVS 2010 (no GSL and HDF5 support)
 @item
-@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.eng.pdf,PDF} documentation in English
+@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.eng.pdf,PDF} documentation in English
 @item
-@uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.7z, UDAV and utilities} with all required DLL files (build for i686)
+@uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}@value{MINVER}.7z, UDAV and utilities} with all required DLL files (build for i686)
 @c HTML documentation in English
 @c HTML documentation in Russian
 @c @item
index bcf7f7e69029539e95e7c09d2b5c3a7a5415a4a9..a0829e7a8f9c348a4ecd8c1cba5d6146bef38be2 100644 (file)
@@ -123,7 +123,7 @@ Email: <input type=text name=email> <input type=submit name="sub" value="Subscri
 @end ifhtml
 
 @strong{About LGPL and GPL licenses.}
-Generally MathGL is GPL library. However, you can use LGPL license for MathGL core if you don't use wrapper widget classes, SWIG-based interfaces and disable GSL features. This can be done by using @code{lgpl} option at build time. According this, I've added the LGPL win32 binaries into @ref{Download} page.
+Generally, MathGL is GPL library. However, you can use LGPL license for MathGL core and widgets if you don't use SWIG-based interfaces and disable GSL features. This can be done by using @code{lgpl} option at build time. According this, I've added the LGPL win32 binaries into @ref{Download} page.
 
 @strong{Latest news}
 @itemize
@@ -136,10 +136,10 @@ There is detailed @ref{News, news list}. Sourceforge project page @uref{http://s
 
 @ifhtml
 @html
-<a href="http://www.datadvance.net"><img border="0" align="right" hspace="10" alt="$DATADVANCE" src="../datadvance.png"></a>
+<a href="http://www.datadvance.net"><img border="0" align="right" hspace="10" alt="DATADVANCE" src="../datadvance.png"></a>
 @end html
 @end ifhtml
-Javascript interface was developed with support of @url{http://www.datadvance.net, $DATADVANCE} company.
+Javascript interface was developed with support of @url{http://www.datadvance.net, DATADVANCE} company.
 
 @external{}
 
index c4619ff00b8ab5d234fc06c1a88a055f120fc2ef..51f5b64927dba7aa7aad332ac3d4660211ca9aa8 100644 (file)
@@ -48,7 +48,7 @@ Email: <input type=text name=email> <input type=submit name="sub" value="Subscri
 @end ifhtml
 
 @strong{About LGPL and GPL licenses.}
-Generally MathGL is GPL library. However, you can use LGPL license for MathGL core if you don't use wrapper widget classes, SWIG-based interfaces and disable GSL features. This can be done by using @code{lgpl} option at build time. According this, I've added the LGPL win32 binaries into @ref{Download} page.
+Generally, MathGL is GPL library. However, you can use LGPL license for MathGL core and widgets if you don't use SWIG-based interfaces and disable GSL features. This can be done by using @code{lgpl} option at build time. According this, I've added the LGPL win32 binaries into @ref{Download} page.
 
 @strong{Latest news}
 @itemize
@@ -62,10 +62,10 @@ There is detailed @ref{News, news list}. Sourceforge project page @uref{http://s
 
 @ifhtml
 @html
-<a href="http://www.datadvance.net"><img border="0" align="right" hspace="10" alt="$DATADVANCE" src="../datadvance.png"></a>
+<a href="http://www.datadvance.net"><img border="0" align="right" hspace="10" alt="DATADVANCE" src="../datadvance.png"></a>
 @end html
 @end ifhtml
-Javascript interface was developed with support of @url{http://www.datadvance.net, $DATADVANCE} company.
+Javascript interface was developed with support of @url{http://www.datadvance.net, DATADVANCE} company.
 
 @external{}
 
@@ -516,15 +516,15 @@ You may download current version of MathGL for following configurations:
 @item
 @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.tar.gz,source} file with cmake build system.
 @item
-@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}-mingw.i686.7z,Win32 GPL} binaries for MinGW (build for i686)
+@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}-mingw.i686.7z,Win32 GPL} binaries for MinGW (build for i686)
 @item
-@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.LGPL-mingw.i686.7z,Win32 LGPL} binaries for MinGW (build for i686, no GSL and HDF5 support)
+@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.LGPL-mingw.i686.7z,Win32 LGPL} binaries for MinGW (build for i686, no GSL and HDF5 support)
 @c @item
-@c @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.LGPL-win64.7z,Win64 LGPL} binaries for MSVS 2010 (no GSL and HDF5 support)
+@c @uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.LGPL-win64.7z,Win64 LGPL} binaries for MSVS 2010 (no GSL and HDF5 support)
 @item
-@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}.eng.pdf,PDF} documentation in English
+@uref{http://downloads.sourceforge.net/mathgl/mathgl-@value{VERSION}@value{MINVER}.eng.pdf,PDF} documentation in English
 @item
-@uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}.7z, UDAV and utilities} with all required DLL files (build for i686)
+@uref{http://downloads.sourceforge.net/mathgl/mgl_scripts-@value{VERSION}@value{MINVER}.7z, UDAV and utilities} with all required DLL files (build for i686)
 @c HTML documentation in English
 @c HTML documentation in Russian
 @c @item
index 2f52f0b41e19f7180f0b9d974d344d30398c7d79..d3da54c2e357a99a9a95c6ecca8b6c51cd5df66c 100644 (file)
--- a/todo.txt
+++ b/todo.txt
 17. 'perspective' command in UDAV
 18. Check octave 3.8
 21. Use mglFormulaCalc() for data transformation/filling (much faster but require more memory) + the same for complex
+22. Test mglDataC::Diffraction() + write sample + add rational function???
 
+24. Use mglStack<T> instead of std::vector<T> due to multi-threading
+25. Get true coordinates in CalcXYZ for curved equations too
+27. Add mglDataVar, mglDataCol, mglDataFunc for handling special (temporary) data + add real(), imag(), conj() + accurate types in MGL + add 'expr'/'complex' in MGL
+
+28. Check if Fortran versions possible for: mgl_data_info, mgl_datas_hdf, mgl_get_fit, mgl_get_mess, mgl_get_plotid
 
 ============= DOCUMENTATION =============
 
@@ -36,6 +42,9 @@ C. Translate to Russian everything
 2. Extend Refill sample (add 2d)
 3. Docs about JS interface
 
+4. Extend docs about region
+5. Docs about mgl_datac_diffr
+
 ============= UDAV =============
 
 01. Show plot at creation stage (if option is enabled -- can be long process!!!) + auto axis range or [-1,1] by default
index c151103a3021ece284cdf0c21ef6f7847c1b59ab..67e89209d155d65c2d096f35def0e50a2a1ddfa7 100644 (file)
@@ -16,6 +16,11 @@ if(WIN32)
        set(udav_src ${udav_src} udav.rc)
 endif(WIN32)
 
+if(MGL_HAVE_HDF5)
+#      target_link_libraries(mgl ${HDF5_LIBRARIES})
+       include_directories(${HDF5_INCLUDE_DIR})
+endif(MGL_HAVE_HDF5)
+
 if(MGL_HAVE_GSL)
 #      target_link_libraries(mgl ${GSL_LIB} ${GSL_CBLAS_LIB} )
        include_directories(${GSL_INCLUDE_DIR})
index 56d285d8ad54c7caed3a73e4b963e42e28033bf1..2e1807566e300eccc31f305a915376860601a75c 100644 (file)
@@ -65,7 +65,7 @@ public:
        void ToggleLight()      {       _mgl_key_up('f',0,0);   }\r
        void ToggleNo()         {       _mgl_key_up('n',0,0);   }       ///< Switch off all zooming and rotation\r
        void Update()           {       _mgl_key_up(' ',0,0);   }       ///< Update picture by calling user drawing function\r
-       void ReLoad(bool o)     {       _mgl_key_up(o?']':'[',0,0);     }       ///< Reload user data and update picture\r
+       void ReLoad()           {       _mgl_key_up('[',0,0);   }       ///< Reload user data and update picture\r
        void NextFrame()        {       _mgl_key_up('.',0,0);   }       ///< Show next frame (if one)\r
        void PrevFrame()        {       _mgl_key_up(',',0,0);   }       ///< Show previous frame (if one)\r
        void Animation()        {       _mgl_key_up('m',0,0);   }       ///< Run slideshow (animation) of frames\r
@@ -243,3 +243,28 @@ HMGL MGL_EXPORT mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char
 //-----------------------------------------------------------------------------\r
 mglCanvasGLUT::mglCanvasGLUT() : mglCanvasGL() {}\r
 //-----------------------------------------------------------------------------\r
+void MGL_EXPORT mgl_glut_toggle_alpha(HMGL gr)\r
+{      mglCanvasGLUT *g = dynamic_cast<mglCanvasGLUT*>(gr);\r
+       if(g)   g->ToggleAlpha();       }\r
+void MGL_EXPORT mgl_glut_toggle_light(HMGL gr)\r
+{      mglCanvasGLUT *g = dynamic_cast<mglCanvasGLUT*>(gr);\r
+       if(g)   g->ToggleLight();       }\r
+void MGL_EXPORT mgl_glut_toggle_no(HMGL gr)\r
+{      mglCanvasGLUT *g = dynamic_cast<mglCanvasGLUT*>(gr);\r
+       if(g)   g->ToggleNo();  }\r
+void MGL_EXPORT mgl_glut_update(HMGL gr)\r
+{      mglCanvasGLUT *g = dynamic_cast<mglCanvasGLUT*>(gr);\r
+       if(g)   g->Update();    }\r
+void MGL_EXPORT mgl_glut_reload(HMGL gr)\r
+{      mglCanvasGLUT *g = dynamic_cast<mglCanvasGLUT*>(gr);\r
+       if(g)   g->ReLoad();    }\r
+void MGL_EXPORT mgl_glut_next_frame(HMGL gr)\r
+{      mglCanvasGLUT *g = dynamic_cast<mglCanvasGLUT*>(gr);\r
+       if(g)   g->NextFrame(); }\r
+void MGL_EXPORT mgl_glut_prev_frame(HMGL gr)\r
+{      mglCanvasGLUT *g = dynamic_cast<mglCanvasGLUT*>(gr);\r
+       if(g)   g->PrevFrame(); }\r
+void MGL_EXPORT mgl_glut_animation(HMGL gr)\r
+{      mglCanvasGLUT *g = dynamic_cast<mglCanvasGLUT*>(gr);\r
+       if(g)   g->Animation(); }\r
+//-----------------------------------------------------------------------------\r